Linux添加系统调用【傻瓜版】

感谢原作者:http://zakir.is-programmer.com/posts/22294.html

刚回来就听说操作系统要上机,内容是给linux系统添加一个系统调用,依据参数是否大于0返回两个数。表示毫无思路,Google了一下,发现网上的教程很多(难道各学校的作业都一样么?),但是写的都比较烦而且用的内核都比较旧,有些步骤在新内核的编译是没必要的。按照他们写的来做把我纠结死了,所以搞成了以后打算写一个简易的新的教程,希望让后人能少走些弯路。

环境:Ubuntu 10.04

准备工作:Linux内核(在这里可以下载,我用的是2.6.36)。

具体步骤:

Step 1:使用root权限,没有设置root的可以执行以下命令来设置密码

1
sudopasswdroot
输入su和密码获取root权限。

Step 2:把内核压缩包移至/usr/src,并解压

1
2
mvlinux-2.6.36.tar.bz2/usr/src
tar-jxvf linux-2.6.36.tar.bz2 
Step 3: 修改内核,共需修改3个文件。就如同小区里新搬进一家住户,首先去物业那里注册一下,获得门牌号(这号是连续的,在定义编号的时候杯具了一回).

1
gedit/usr/src/linux-2.6.36/arch/x86/kernel/syscall_table_32.S
打开以后,在最后添加

1
.long sys_mysyscall

你的新调用的编号就是上一行的编号+1,记住这个编号,后面要用。

接下来写函数的实现,就相当于把家具搬进去。

1
gedit/usr/src/linux-2.6.36/kernel/sys.c
在最后添加

1
2
3
4
5
asmlinkagelongsys_mysyscall(intnumber)
{
    if(number>0)return123456
    elsereturn654321;
}

最后,为了方便访客,还需要到传达室的王大爷那儿登记一下,这样以后访客只要报上你的名字就可以知道你家的门牌号了。

1
gedit/usr/src/linux-2.6.36/arch/x86/include/asm/unistd_32.h
最后添加

1
#define __NR_mysyscall 341       //这341是之前记下的那个编号

Step 4:利用root权限进入/usr/src,清除以前编译的内核,第一次编译的话可以跳过

1
makemrproper
Step 5:定制内核

1
makemenuconfig
刚装的系统可能会缺少ncurse库而导致这一步失败(没有跳出一个蓝色的窗口),从网上下一个ncurse.tar.gz,解压后进入解压出来的文件夹,依次执行

1
2
3
./configure
make
makeinstall
Step 6:编译内核!!!利用root权限在/usr/src/linux-2.6.36/下

1
make
漫长的等待(在虚拟机耗了一个多小时)

Step 7:生成文件并安装内核

1
2
make modules_install
make install
Step 8:生成引导文件

1
mkinitramfs -o initrd.img-2.6.36 2.6.36(本人按,这里后面的2.6.36不可以丢丢了就会开机后会出现:Could not load /lib/modules/.../modules.dep的错误)
完成以后将生成的initrd.img -2.6.36复制到/boot

1
mvinitrd.img-2.6.36/boot

Step 9:更新引导列表

1
update-grub
Step 10:重新启动

启动完以后在终端执行

1
uname-a
看看你的版本号是否已经变成2.6.36 。成了的话就恭喜了!

Step 11:测试

编一个测试程序:

1
2
3
4
5
6
7
8
#include<stdio.h>
#inlcude<unistd.h>
 
intmain()
{
    printf(“%d\n%d\n”,syscall(341,1),syscall(341,0));//这里的341是之前的编号,请自行更改
    return0;
}

编译执行一下,看结果对不?

终于写完了,貌似我也写得有些繁琐了,毕竟是修改内核嘛。随着版本号和RP函数的波动,以上步骤不能保证一定能出结果,但大体原理是相同的,如果有童鞋杯具了。。。多Google多试几次。。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值