Linux系统调用过程
? CALL(sys_eventfd2)? CALL(sys_epoll_create1)? CALL(sys_dup3)? CALL(sys_pipe2)/* 360 */?CALL(sys_inotify_init1)? CALL(sys_preadv)? CALL(sys_pwritev)? CALL(sys_rt_tgsigqueueinfo)? CALL(sys_perf_event_open) ?了解了一个系统调用的执行过程就可以试着添加一个自己的系统调用了: 内核: 1. 在内核代码实现一个系统调用函数即 sys_xxx()函数,如我在 kernel/printk.c 中添加了 void pk() { printk(KERN_WARNING"this is?my first sys call?!n"); } 2. 添加系统调用号添加? #define __NR_pk? ? (__NR_SYSCALL_BASE+365) 3.?添加调用函数指针列表添加 CALL(sys_pk) 4.?声明自己的系统调用函数添加asmlinkage long?sys_pk() 用户空间: ? ? ? void pk() { __asm__( "ldr? r7? =365 n" "swi n" : : : ); } int main() { ? ?pk(); ? retrun 0; } 完成上面的编写以后就可以编译内核和应用程序了。 将生成的文件在arm开发板上运行可以打印出:?This is my first sys call! 说明我添加的系统调用可以使用。 至此,描述系统调用的实现机制和添加一个新的系统调用就完成了。 3
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |