为linux添加系统调用
来源:互联网 发布:袁卫统计学第四版数据 编辑:程序博客网 时间:2024/04/27 15:15
也就是为linux增加一个api函数。
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 并添加如下代码
在形如:ENTRY(sys_call_table)下添加如下:
.long SYMBOL_NAME(sys_mycall)
5. 在头文件中增加申明:
cd /usr/include/asm
vi unistd.h
在形如:#define __NR_restart_syscall 0 下添加如下:
添加: #define __NR_mycall 222
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
编译好运行。
说明:虽然添加一个系统调用并不是太复杂,但我们并不提倡这样做,因为还有更好的方法来代替系统调用 。
1、创建一个设备节点,通过read()、write()来访问,通过ioctl()来控制。
2、一些接口如信号量,可以用文件描述符来操作。
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 并添加如下代码
在形如:ENTRY(sys_call_table)下添加如下:
.long SYMBOL_NAME(sys_mycall)
5. 在头文件中增加申明:
cd /usr/include/asm
vi unistd.h
在形如:#define __NR_restart_syscall 0 下添加如下:
添加: #define __NR_mycall 222
---------------------------------------
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
编译好运行。
说明:虽然添加一个系统调用并不是太复杂,但我们并不提倡这样做,因为还有更好的方法来代替系统调用 。
1、创建一个设备节点,通过read()、write()来访问,通过ioctl()来控制。
2、一些接口如信号量,可以用文件描述符来操作。
3、把增加的信息作为一个文件放在sysfs的合适位置。
- 为linux添加系统调用
- 为linux添加系统调用
- Linux操作系统实验三:为系统添加系统调用
- 为arm linux内核添加新的系统调用
- 添加Linux系统调用
- Linux添加系统调用
- 添加Linux系统调用
- Linux添加系统调用
- Linux添加系统调用
- Linux添加系统调用
- 给linux添加系统调用
- 添加自定义Linux系统调用
- 如何添加linux系统调用
- Linux系统调用的添加
- Linux添加自定义系统调用
- Linux添加自定义系统调用
- linux内核添加系统调用
- Linux内核添加系统调用
- 取得函数调用栈 - __builtin_frame_address
- 共享中断
- web网页开发
- 网页中无法使用摄像头的解决办法
- sas中的随机数发生器
- 为linux添加系统调用
- 通过VC学习反汇编——函数调用
- Linux内核中task_struct的中文介绍(2.4内核的)
- 关于虚函数的两道读程序题
- 第一次面试经历
- (菜鸟交流)简单注册系统实现
- 64位Windows系统安装64位Eclipse遇到的问题
- 使用vim 开发C++
- 用户抢占发生的几种情况