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
如图所示,将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位的自己对号修改)
在文件的结尾输入自己的系统调用
2.在/usr/src/linux-3.8.3/include/linux中找到syscalls.h添加系统调用的函数声明
3.回到/usr/src/linux-3.8.3的目录下建立你自己的系统调用的文件目录
mkdir hello
写入自己的系统调用
vi hello.c
随后写一个吧,词不达意的系统调用,就是返回输入值的一个调用。
下面写编译文件:vi Makefile
文件中写入:
obj-y:=hello.o
4.此时我们修改linux-3.8.3目录下的Makefile文件,让系统内核编译的时候能够编译这个命令
在core这行加入hello/
5.此时已经完成了,重新编译内核,过程回到本文的开头,reboot之后我们就可以测试我们的系统调用了。
6.测试用,大家不要和我一样偷懒写这么简单的,例如建立一个test.c的文件,写入如下代码
进行编译
gcc -o test test.c
完成了之后用:./test进行测试
结果正确,系统调用已加入,任务完成。