分享

linux内核编译与系统调用(2.6.8以后的版本适用)

 mediatv 2013-08-03

Linux版本:linux mint 14 

旧版内核:3.5.0

要升级的版本内核:3.8.3

过程:

1.  首先去linux kernel的官网下载linux的内核,目前的最新版本是3.8.4和3.9rc,原理一样.

解压压缩包到/usr/src

2.首先对新内核进行内核的配置

make localmodconfig

置于选什么完全看大家的喜好了,个人比较懒,一路回车下来了,继承了默认的系统的设置,有的同学在这个位置上出现了错误,大部分的原因是因为你以前编译过内核,此时需要清理原来内核所造成的痕迹,需要使用make clean 先进行清除在进行配置。

3.配置完成之后,有的大人们说要进行make menuconfig,不过这个因人而异,图形化配置的东西,看看就过去了,有的童鞋也有可能在这个位置出错,不过不影响,此步跳过。

4.然后就是模块的编译阶段,输入命令

make modules

5.然后进行内核编译阶段,输入命令

make

6.编译完成了之后,进行模块的安装

make modules_install

7.然后进行内核的安装

make install

8.到了此处,我们已经将内核编译安装完毕了,但是还没有完成,因为如果我们这样就reboot了,那么在grub中我们实际上是选择了后加入的3.8.3的系统而不能选择旧版本的内核,最后我们要干的就是修改grub,这步来张图吧,先进入grub的所在目录

cd /etc/default

vi grub

linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

如图所示,将grub的选择菜单隐藏去掉就可以了,之后大家就可以看到熟悉的类似双系统选择的界面了。


下 面是关于系统调用的部分,系统调用的部分和老版本的linux略有不同,在linux2.6.8之后linux的系统调用部分出现了一些变化,因此网上的 教程大多数都是针对2.6等经典版本的,本文针对3.8.3版本,理论上2.6.8之后的版本都行。测试原理,非编程。

步骤如下:

1.首先你要知道你自己的系统是多少位的,我的是mint 32位的,那么在下面进行的部分中,大家要仔细对号入座,以我为例,首先进入系统的syscalls目录

 

cd /usr/src/linux-3.8.3/arch/x86/syscalls

 

vi syscall_32.tbl(64位的自己对号修改)


在文件的结尾输入自己的系统调用

 linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

2.在/usr/src/linux-3.8.3/include/linux中找到syscalls.h添加系统调用的函数声明

linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

3.回到/usr/src/linux-3.8.3的目录下建立你自己的系统调用的文件目录

mkdir hello

写入自己的系统调用

vi hello.c

linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

随后写一个吧,词不达意的系统调用,就是返回输入值的一个调用。

下面写编译文件:vi Makefile

文件中写入:

obj-y:=hello.o

4.此时我们修改linux-3.8.3目录下的Makefile文件,让系统内核编译的时候能够编译这个命令

在core这行加入hello/

linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

5.此时已经完成了,重新编译内核,过程回到本文的开头,reboot之后我们就可以测试我们的系统调用了。

6.测试用,大家不要和我一样偷懒写这么简单的,例如建立一个test.c的文件,写入如下代码

linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

进行编译

gcc -o test test.c

完成了之后用:./test进行测试

linux内核编译与系统调用(2.6.8以后的版本适用)--for someone

结果正确,系统调用已加入,任务完成。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多