如何在Linux中添加新的系統調用
centos啟動服務命令。2010-01-29
eNet&Ciweek
centos7如何生成新的啟動文件,#define __NR_mycall 191
系統調用號為191,之所以系統調用號是191,是因為Linux-2.2內核自身的系統調用號碼已經用到190。
第二個要修改的文件是:
/usr/src/linux/arch/i386/kernel/entry.S
該文件中有類似如下的清單:
.long SYMBOL_NAME()
該清單用來對sys_call_table[]數組進行初始化。該數組包含指向內核中每個系統調用的指針。這樣就在數組中增加了新的內核函數的指針。我們在清單最后添加一行:
.long SYMBOL_NAME(sys_mycall)
(3) 重建新的Linux內核
為使新的系統調用生效,需要重建Linux的內核。這需要以超級用戶身份登錄。
#pwd
/usr/src/linux
#
超級用戶在當前工作目錄(/usr/src/linux)下,才可以重建內核。
#make config
#make dep
#make clearn
#make bzImage
編譯完畢后,系統生成一可用于安裝的、壓縮的內核映象文件:
/usr/src/linux/arch/i386/boot/bzImage
(4) 用新的內核啟動系統
要使用新的系統調用,需要用重建的新內核重新引導系統。為此,需要修改/etc/lilo.conf文件,在我們的系統中,該文件內容如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.5-15
label=linux
root=/dev/hdb1
read-only
other=/dev/hda1
label=dos
table=/dev/had
首先編輯該文件,添加新的引導內核:
image=/boot/bzImage-new
label=linux-new
root=/dev/hdb1
read-only
添加完畢,該文件內容如下所示:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/bzImage-new
label=linux-new
root=/dev/hdb1
read-only
image=/boot/vmlinuz-2.2.5-15
label=linux
root=/dev/hdb1
read-only
other=/dev/hda1
label=dos
table=/dev/hda
這樣,新的內核映象bzImage-new成為缺省的引導內核。
為了使用新的lilo.conf配置文件,還應執行下面的命令:
#cp /usr/src/linux/arch/i386/boot/zImage /boot/bzImage-new
其次配置lilo:
# /sbin/lilo
現在,當重新引導系統時,在boot:提示符后面有三種選擇:linux-new 、linux、dos,新內核成為缺省的引導內核。
至此,新的Linux內核已經建立,新添加的系統調用已成為操作系統的一部分,重新啟動Linux,用戶就可以在應用程序中使用該系統調用了。
(5)使用新的系統調用
在應用程序中使用新添加的系統調用mycall。同樣為實驗目的,我們寫了一個簡單的例子xtdy.c。
#include
_syscall1(int,mycall,int,ret)
main()
{
printf("%d n",mycall(100));
}
編譯該程序:
# cc -o xtdy xtdy.c
執行:
# xtdy
結果:
# 100
注意,由于使用了系統調用,編譯和執行程序時,用戶都應該是超級用戶身份。
您對本文或本站有任何意見,請在下方提交,謝謝!
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态