1.下載內核
在http://www.kernel.org/下載linux-2.6.38,
你可以選擇穩定版或者新的測試版,但一定要下載Full source版。
2、解壓內核
cd /usr/src
tar -jxvf linux-source-2.6.38.tar.bz2
將內核解壓到/usr/src
3、修改文件
a)/usr/src/linux-source-2.6.38/kernel/sys.c
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-2.6.38/kernel/sys.c
在文件最後添加
asmlinkage int sys_mycall(int number)
{
printk("This is my first system call!!!hahahaha!!");
return number;
}
b)/usr/src/linux-source-2.6.38/arch/x86/kernel/syscall_table_32.S
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-2.6.38/arch/x86/kernel/syscall_table_32.S
然後在一列 .long sys_XXXX的下一行添加
.long sys_mycall
並記住他們分別是第幾個.long sys_XXXX
c)/usr/src/linux-source-2.6.38/arch/x86/include/asm/unistd_32.h
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-2.6.38/arch/x86/include/asm/unistd_32.h
在一列#define __NR_XXXX NNN後添加幾行
#define __NR_mycall 341
注意後面那個數字是接著上面那幾行下來的
4、編譯內核
關於內核編譯,我在上一篇文章裡面已經講了,自己照上面的做就是了,下面是文章的鏈接:《Ubuntu 10.10下成功編譯Linux-2.6.38內核》 http://www.linuxidc.com/Linux/2011-04/34080.htm
5、重啟
重啟Ubuntu,如果能進入系統,證明基本上沒問題了。
打開終端輸入
uname -r
查看版本號,如果是2.6.38就可以安心了
6、檢查系統調用
隨便寫個函數試試看吧
在main函數中使用syscall(函數號,參數)測試系統調用
比如
#include <linux/unistd.h>
#include <stdio.h>
main(){
printf("The number is %d\n",syscall(341,100));
}
出現如下輸出:The number is 100
編譯運行,然後打開終端輸入
sudo dmesg -c
查看最後一行是否有添加系統調用成功信息:
如果有 "This is my first system call!!!hahahaha!!"
說明系統調用添加成功了!!