這篇文章簡單的介紹了如何為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
編譯好運行。
:) -----全文玩