如何在Linux系统中添加新的系统调用
有类似如下的清单:
QUOTE:
.long SYMBOL_NAME()
该清单用来对sys_call_table[]数组进行初始化。该数组包含指向内核中每个系统调用的指针。这样就在数组中增加了新的内核函数的指针。我们在清单最后添加一行:
QUOTE:
.long SYMBOL_NAME(sys_mycall)
(3) 重建新的Linux内核
为使新的系统调用生效,需要重建Linux的内核。这需要以超级用户身份登录。
QUOTE:
#pwd
/usr/src/linux
#
超级用户在当前工作目录(/usr/src/linux)下,才可以重建内核。
QUOTE:
#make config
#make dep
#make clearn
#make bzImage
编译完毕后,系统生成一可用于安装的、压缩的内核映象文件:
QUOTE:
/usr/src/linux/arch/i386/boot/bzImage
(4) 用新的内核启动系统
要使用新的系统调用,需要用重建的新内核重新引导系统。为此,需要修改/etc/lilo.conf文件,在我们的系统中,该文件内容如下:
QUOTE:
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
首先编辑该文件,添加新的引导内核:
QUOTE:
image=/boot/bzImage-new
label=linux-new
root=/dev/hdb1
read-only
添加完毕,该文件内容如下所示:
QUOTE:
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配置文件,还应执行下面的命令:
QUOTE:
#cp /usr/src/linux/arch/i386/boot/zImage /boot/bzImage-new
其次配置lilo:
QUOTE:
# /sbin/lilo
现在,当重新引导系统时,在boot:提示符后面有三种选择:linux-new 、linux、dos,新内核成为缺省的引导内核。
至此,新的Linux内核已经建立,新添加的系统调用已成为操作系统的一部分,重新启动Linux,用户就可以在应用程序中使用该系统调用了。
(5)使用新的系统调用
在应用程序中使用新添加的系统调用mycall。同样为实验目的,我们写了一个简单的例子xtdy.c。
QUOTE:
/* xtdy.c */
#include
_syscall1(int,mycall,int,ret)
main()
{
printf(%d \n
- 嵌入式linux应用开发之:初识Qt(03-04)
- 检测Linux系统是否被黑的技巧(05-05)
- Linux系统计算机死机的故障原因(05-08)
- Linux系统下MTD/CFI驱动介绍(05-23)
- 修改Linux系统下22端口的两种方法(07-08)
- 无需安装即可运行或演示Linux系统的方法(06-06)