这篇文章简单的介绍了如何为linux添加一个系统调用。也就是为linux增加一个api函数。通过这篇文章,应该学会如何 简单的修改linux源代码、编译内核。 首先:1: cd /usr/src/linux/kernel 2: vi sys.c 并添加如下一个函数: asmlinkage int sys_mycall(int num) { return num;} 3. cd /usr/src/linux/arch/i386/kernel 4: vi entry.S 并添加如下代码 .long SYMBOL_NAME(sys_mycall) 5. 在头文件中增加申明: cd /usr/include/asm vi unistd.h 添加: #define __NR_mycall 222 --------------------------------------- OK , 以下开始编译内核。 make mrproper make menuconfig make dep make bzImage make modules make modules_install 编译完成后,将新内核文件和新的系统符号表拷贝到/boot目录,如下: cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage-new cp /usr/src/linux/System.map /boot/System.map-new 然后将System.map-new,软链接到/boot/System.map,如下: ln -sf /bbot/System.map-new /boot/System.map 下面开始配置lilo(/etc 目录下): 新lilo.conf文件如下: default = linux-new image = /boot/bzImage-2.4.7 label=linux-new ..........(略) 然后使用超级用户运行 /sbin/lilo 好,重新启动 。 reboot 重新启动机器后,我们来编写一个测试程序来调用我们刚才添加的api。如下test.c: #include <linux/unistd.h> ///-----看见这里了吧 _syscall1(int,mycall,int,ret) //// 申明系统调用 main() { printf("%d \n",mycall(100)); } 存盘编译。 gcc -o test test.c 编译好运行。 :) -----全文玩
|