吐槽:
一个小东西弄了好几次不成功,x64就是要special judge 啊。。。sad
download
老师给的地址有点儿慢, 推荐给力 的 https://www.kernel.org/ 这个地址 。 下载最新的稳定 3.8.4 版本
复制kernel到/usr/src中
sudo cp linux-3.8.4.tar.xz /usr/src
然后在图形界面check一下确实有这个文件,解压缩
sudo xz -d linux-3.8.4.tar.xz
sudo tar -xvf linux-3.8.4.tar
第一次弄的时候需要编辑器:
sudo apt-get install libncurses-dev kernel-package bzip2 make ncurses-dev fake
下面就开始始修改内核源码了
1、/linux-3.8.4/kernel/sys.c 文件
sudo gedit sys.c
文件末尾添加新的系统调用函数
asmlinkage int sys_#Name#(#参数#){
printk("#输出#");
return #返回值#;
}
2、arch/x86/syscalls/syscall_64.tbl
sudo gedit syscall_64.tbl
在 313 号调用下加入 314 号调用
314 common dscall sys_dscall
下面开始编译
/linux-3.8.4
sudo make mrproper //清除之前记录
sudo make menuconfig // exit
sudo make -j4 // 要跑一个小时。。。。
无 error 后安装内核
sudo make modules_install
sudo make install
重启内核
sudo reboot
Test:
#include<stdio.h>
int main(){
int res = syscall(314 , 100);
printf("100 * 100 = %d\n" , res);
return 0;
}
运行
gcc test.c -o test -g // 生成可执行文件
./test //执行
sudo dmesg -c //查看系统调用log
结果——
输出 100 * 100 = 10000
系统调用中显示——DS CALL Succeed