1. 首先在 “/usr/src/linux-x.x/kernel/”目录下建议一个文件名为”mysyscall.c”
具体代码如下:
![](https://img-my.csdn.net/uploads/201206/11/1339395480_8088.jpg)
2.
用vi打开”Makefile”文件并在其”obj-y”后加入”mysyscall.o”如下图所示:
3. 在”/usr/src/linux-x.x/include/asm-i386/”目录下,用vi打开”unistd.h”并在”#define”的最后增加如下代码
#define__NR_mysyscall 259
如下图示:
4. 在”/usr/src/linux-x.x/arch/i386/kernel/”目录下,用vi打开”entry.S”并在”.long”开始后的第259行处增加如下代码
.longSYMBOL_NAME(sys_mysyscall)
如下图所示:
5. 在”/usr/src/linux-x.x/”目录下,输入”make bzImage”进行编译
6. 拷贝”/usr/src/linux-x.x/arch/i386/boot下”的”bzImage”文件到”/boot”目录下
cpbzImage /boot/mybzImage
7. 编辑”menu.list”或者”grub.cfg”文件添加mybzImage的引导后重启系统
Systemcall test:
1. 首先建立一个文件,我们把它命名为”test.c”,里面的代码如下:
2. 用“gcc –I/usr/src/linux-x.x/include/ -o test test.c “命令进行编译
3. “./test”运行后显示如下
![](https://img-my.csdn.net/uploads/201206/11/1339395503_9219.jpg)
4. 发现在运行编译好的文件后printk的内容并没有正常显示在控制台上
5. 经调查发现是”/proc/sys/kernel/printk”的设置问题,使得printk默认显示在虚拟控制台上。
6. 用管理员权限运行”cat /var/log/message”命令后如下图所示