免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 850 | 回复: 0
打印 上一主题 下一主题

linux 添加系统调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-03 14:45 |只看该作者 |倒序浏览
一.源码修改
1下载一个与所用系统内核版本接近的内核,放在/usr/src下,解压,作个链接ln -s linux-2.6.18.1 linux
2修改:修改三个地方
1)/usr/src/linux/kerner/sys.c中添加,

asmlinkage int sys_mysyscall(int a)
{
           return a;
}
2)定义系统调用号,/usr/src/linux/include/asm-i386/unistd.h
#define _NR_sysmycall 318 //不能与前面已有的重复
#define _NR_syscalls  319//修改系统中所用系统调用数目
3)在系统调用向量表里添加自定义的系统调用函数入口位置,
/usr/src/linux/arch/i386/kernel/syscall_table.S,以前老版本是entry.s
.long sys_mysyscall
二、内核编译
1.在/boot下复制配置文件,到/usr/src/linux下,改名位config,make menuconfig,可以不用修改,直接退出
2.make clean 清空以前的编译痕迹
3.make,编译出来的是bzImage
4.make modules,make modules-install//编译、安装config里配置的模块
如不执行次步骤,对于有的系统,制作不了initrd文件。系统就启动不了
5.如果直接make install,系统会自动制作initrd文件,并复制initrd和bzimage文件到/boot下,修改grub.conf文件,重启系统,选择进入新内核
6.不使用make install命令。复制bzImage到/boot下,改名位vmlinuz-2.6.18.1,手工制作initrd文件,/mkinitrd initrd-2.6.18.1.img 2.6.18.1,initrd文件名位initrd-2.6.18.1
7.修改grub.conf文件,复制原来已有的启动设置,把title和kernel和initrd改名为新制作的即可
三、编写代码测试
int main(void)
{
   int a=syscall(318,100);//318是系统调用号,100是参数
   printf("%d\n",a);
   return 0;
}
syscall是内核提供为用户程序的一个函数,
如果不使用syscall函数,也可以使用宏定义,但是在2.6.20以后的版本里,没有宏定义,需要自己从其他版本里复制过来添加。





本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/62213/showart_488383.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP