增加系統調用(包括編譯內核)

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

第一次linux作業
增加系統調用,其實很簡單。網上到處都是。我這裡簡單說一下:
1.
include/linux/unistd.h,在裡面添加一個新的系統調用號。
#define __NR_mysyscall 320
2.
arch/i386/kernel/table.s,在裡面添加相應的表項
.long SYSMBOL_NAME(sys_mysyscall)
註:好多地方都說在arch/i386/kernel/entry.S裡面添加。應該是內核版本問題。我用
的內核版本是2.60.
3.
在kernel/sys.c裡面添加該系統調用實現的功能。
asmlinkage int sys_mysyscall(void)
{
return 0:
}
用gedit打開sys.c文件居然是亂碼,只能用vim,用得不爽。

這就增加了一個系統調用。其實也很簡單

下面就是編譯內核。
1.
進入內核文件下
cd linux
make mrproper
2.
make config
make menuconfig
make xconfig
make oldconfig
這四種選一種進行內核配置就可以了。具體區別,我這就不多講了。
我開始用的時候,只能用第一個,就是make config,其他都會報錯。很是奇怪
後來發現需要下載相關的東東。
直接從源里安裝,ubuntu就這點方面。
sudo apt-get install build-essential kernel-package libncurses5-dev
內核配置還是比較麻煩的,自己又不是太懂,就用了一種偷懶的方法:
直接從/boot/config********/考到/usr/src/linux/下面
我安裝的時候用的是make menuconfig,到時直接選擇Load an Alternate Configuration File
這樣就是在原來配置的基礎下進行修改。
3.
A、運行命令 sudo make-kpkg clean ,清一下東西。
B、最終編譯命令:sudo make-kpkg ?initrd ?append-to-version mylinux1 kernel_image
kernel_headers 其中?initrd必須要,append-to-version 生成多重鏡像,也就是在啟動菜單里會看
到選項,接著的參數是鏡像的名字,你自己設置,必須要以數字結尾。最後是生成鏡像包和頭文件
包。你也可以用 binary代替,它融合了image.headers.doc.source,是最完整的包。
然後就是無休止的編譯過程了。
4.
然後就簡單了,在linux這層目錄中會生成兩個deb的安裝包.只要sudo dpkg -i 安裝這兩個包,重新啟動就搞定了.不需要自己手動設grub,不錯.

最後要寫個系統調用的測試程序,差點暈死.
我用了以前內核2.4的調用版本_syscall0(int,syscallname)這種形式,居然現在不支持.考.
現在需要用syscall(syscallnumber,參數)這種形式調用.

感嘆一下,linux更新太快,好多書都跟不上了.




[火星人 ] 增加系統調用(包括編譯內核)已經有179次圍觀

http://coctec.com/docs/linux/show-post-187166.html