zoukankan      html  css  js  c++  java
  • [linux内核]ARM-Linux系统调用

    1,系统调用的概念:

    是用户空间访问内核的唯一手段,系统调用依靠软件中断实现,每个系统调用被赋予一个系统调用号,用来指明要执行哪个系统调用。


    2,系统调用的实现:
    系统调用是通过软中端(SWI)实现的,
    SWI指令
    SWI指令的格式为:
    SWI{条件} 24位的立即数
    SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用 户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中24位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器R0的内容决定,同 时,参数通过其他通用寄存器传递。
    指令示例:
    SWI   0x02                ;该指令调用操作系统编号位02的系统例程
    linux 2.6.16以后使用的方式:
    指令中的24位立即数被忽略,用户请求的服务类型由寄存器R7的值决定,参数通过其他的通用寄存器传递。例如:
    MOV R7, #12
    SWI 0


    每个系统调用都具有唯一的一个系统调用功能号  alpskernelarcharmincludeasmUnistd.h
    系统调用列表,执行系统调用时,内核根据系统调用号来索引系统调用列表,找到入口函数并运行之。对应的文件是alpskernelarcharmkernel entry-common.S
    和alpskernelarcharmkernelcalls.S
    接口设计相关宏  alpskernelincludelinuxSyscalls.h
    在arm linux系统中搜索某个函数在内核中系统调用的具体实现~一般搜索sys_name 或者SYSCALL_DEFINEn(name_.....


    3,android上Bionic C库系统调用的实现
    过程:ioniclibcSYSCALLS.TXT----》ioniclibc oolsgensyscalls.py-----》ioniclibc oolsarch-armsyscall*.s----》SWI软中端


    4,如何添加系统调用
    (1)ioniclibcSYSCALLS.TXT 中添加个接口syscall_for_test ARM_syscall_for_test
    (2)运行bioniclibc oolsgensyscalls.py:
    (3)添加kernelarcharmkernelsys_syscall_for_test.c文件,加入syscall_for_test的处理:
    (4)kernelarcharmkernelcalls.S中添加syscall_for_test
    (5)修改kernelarcharmkernelMakefile
    (6)在kernelarcharmkernel Traps.c的arm_syscall中添加ARM_syscall_for_test的处理:
    (7)添加bioniclibcincludesyscall_for_test.h文件

  • 相关阅读:
    java异常处理 it
    java文件操作 it
    ArrayLike it
    javaProreties it
    javaset,Collections,map it
    003 Longest Substring Without Repeating Characters it
    react Video event it
    查看git地址
    Itext 生成PDF
    jar包配置文件到单独文件夹
  • 原文地址:https://www.cnblogs.com/zhiliao112/p/4232136.html
Copyright © 2011-2022 走看看