免费注册 查看新帖 |

Chinaunix

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

向内核添加系统调用,在编译时出了点问题[问题已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-12 23:16 |只看该作者 |倒序浏览
用了静态添加系统调用的方法到编译时出了点问题

我编译内核的步骤是
make clean
make oldconfig
make dep
make
make boot
但是最后一步时
...
system is 777kb
system is too big.
try using bzImage or modules
make[1]:*** [zImage] Error 1
make[1]:leving directory 'usr/src/linux-2.4.7-10/arch/i386/boot'
make: *** [boot] Error2\

这是什么原因
我用的是虚拟机


make boot改成make bzImage就可以了

[ 本帖最后由 jjj346 于 2007-1-15 18:56 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-13 12:57 |只看该作者
系统调用可以用C实现,但要用很简单的汇编向内核进行注册
不建议添加系统调用,这样会影响系统的兼容性

论坛徽章:
0
3 [报告]
发表于 2007-01-13 15:42 |只看该作者
在内核中加个系统调用不是什么复杂的事情。
1. 在内核中加入你的系统调用函数,比如sys_foo() ,要把这个函数编入内核,具体放什么位置你自己决定。
2. 修改 sys_call_table ,加入你的系统调用,这个一般在entry.S中。
3. 修改 unistd.h ,加入你的系统调用号,比如 #define __NR_foo xxx  (xxx为系统调用号)这个号和你在第二步修改的entry.S要对应,并且相应修改NR_syscalls 这个宏的值(如果你改变了系统调用的总数的话)。
4. 修改include/linux/syscalls.h 加入你的系统调用声明。
我是凭记忆写的,应该就这几步。

评分

参与人数 1可用积分 +6 收起 理由
langue + 6

查看全部评分

论坛徽章:
0
4 [报告]
发表于 2007-01-13 19:39 |只看该作者
今天找了一本书,跟xpl说的差不多

论坛徽章:
0
5 [报告]
发表于 2007-01-13 23:26 |只看该作者
Linux添加系统调用需要重新编译内核,而solaris内核不需要重新编译内核就可以以模块的形式添加系统调用.对应linux中sys_call_table的是sysent

论坛徽章:
0
6 [报告]
发表于 2007-01-13 23:30 |只看该作者
问下lz添加系统调用的目的是什么呢?如果是要运行在ring0,推荐使用内核模块

论坛徽章:
0
7 [报告]
发表于 2007-01-13 23:40 |只看该作者
原帖由 朱熹之 于 2007-1-13 23:30 发表
问下lz添加系统调用的目的是什么呢?如果是要运行在ring0,推荐使用内核模块

论坛徽章:
0
8 [报告]
发表于 2007-01-14 09:26 |只看该作者
不好意思~~~只是老师布置的一个作业

论坛徽章:
0
9 [报告]
发表于 2007-01-14 10:20 |只看该作者
原帖由 jjj346 于 2007-1-14 09:26 发表
不好意思~~~只是老师布置的一个作业


上课认真听讲,做好笔记,课后认真复习,然后独立完成作业……

论坛徽章:
0
10 [报告]
发表于 2007-01-14 11:27 |只看该作者
原帖由 langue 于 2007-1-14 10:20 发表


上课认真听讲,做好笔记,课后认真复习,然后独立完成作业……


悄悄的BS大版一下
别报复我啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP