bionic syscall 添加函数

android: 4.0.4

硬件: nexus

内核: 3.0.8


kernel:

--------------------------------------------------------------------------------------------------------------------
kernel_src/fs/open.c 添加:
SYSCALL_DEFINE 2(mymul,int, x,int,y)     2是参数个数。  宏替换完,函数名为 sys_mymul
{
    int z;
    printk("here is add a log in sys_mymul\n");
    z=x*y;
    return z;
}
--------------------------------------------------------------------------------------------------------------------
kernel_src/arch/arm/kernel/calls.S
 /*376 */    CALL(sys_mymul)                 函数table:跳转的偏移地址在376
--------------------------------------------------------------------------------------------------------------------
kernel_src/arch/arm/include/asm/unistd.h
#define __NR_mymul          (__NR_SYSCALL_BASE+376)       
__NR_mymul 在android的bionic内有个文件需要跳转到这个label.
--------------------------------------------------------------------------------------------------------------------


bionic:
--------------------------------------------------------------------------------------------------------------------
bionic/libc/include/sys/linux-syscalls.h  声明__NR_mymul在table的偏移。
#define __NR_mymul                          (__NR_SYSCALL_BASE + 376)
--------------------------------------------------------------------------------------------------------------------
bionic/libc/arch-arm/syscalls/mymul.S: 实现跳转
ENTRY(mymul)
    .save   {r4, r7}
    stmfd   sp!, {r4, r7}
    ldr     r7, = __NR_mymul
    swi     #0
    ldmfd   sp!, {r4, r7}
    movs    r0, r0
    bxpl    lr
    b       __set_syscall_errno
END(mymul)
--------------------------------------------------------------------------------------------------------------------
bionic/libc/arch-arm/syscalls.mk   把跳转文件添加到会被编译的文件列表呢
syscall_src += arch-arm/syscalls/mymul.S   
--------------------------------------------------------------------------------------------------------------------
bionic/libc/unistd/open.c 添加如下:
extern int mymul(int,int); //jjd
int Mymul(int x,int y){
printf("bionic.mymul");
    return mymul(x,y);
}
--------------------------------------------------------------------------------------------------------------------
bionic/libc/include/fcntl.h 添加:
extern int  Mymul(int,int);
--------------------------------------------------------------------------------------------------------------------
在系统里如果使用到Mymul函数,添加fcntl.h头文件即可。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值