Linux 操作系统内核升级及系统调用的添加
------------------------------
SA6196/yanzl
------------------------------
1.内核升级
用命令 # uname -a 查看本系统的内核版本,该版本可能不是最新的linux的内核版本,我们将升级为最新的内核版本。
1.1 从官网www.kernel.org下载最新的内核代码
1.2将下载下来的内核代码解压到 /usr/src 文件夹下
sudo tar -xvf linux-3.9.5.tar.xz -C /usr/src/
1.3解压后生成文件夹linux-3.9.5,进入该文件夹清楚残余的 .config 和 .o文件
用命令:make mrporper
1.4进行配置 之前要安装ncurses库(一个管理应用程序在字符终端显示的函数库)
命令:sudo apt-get install ncurses-dev
然后进行配置:
命令:make menucofig
根据菜单提示,选择编译配置选项,并保存为配置文件.config
注:这一步最好把以前的.config文件拷过来加载一下,因为配置文件更改很麻烦而且容易出错,以前的文件也在/usr/src路径下的某个linux-header文件夹下
命令:cp /usr/src/linux-headers-2.6.32-27-generic/.config .config
1.5编译和安装内核
命令:
make bzImage #编译kernel
make modules #编译模块
make modules_install #先安装模块
make install #安装内核
编译的时间由机器性能决定。---反正要很长时间 慢慢等死吧!!!!!!!!
make install之后,grub已经自动更新,不用再手动设置引导。
重启,进入ubuntu,更新后的第一次加载会有些慢。
再次查看内核版本。
2.添加系统调用
整个系统调用的过程可以总结如下:
1. 执行用户程序;
2. 根据glibc中的函数实现,取得系统调用号并执行int $0x80产生中断。
3. 进行地址空间的转换和堆栈的切换,执行SAVE_ALL。(进行内核模式)
4. 进行中断处理,根据系统调用表调用内核函数。
5. 执行内核函数。
6. 执行RESTORE_ALL并返回用户模式
解了系统调用的实现及调用过程,我们可以根据自己的需要来对内核的系统调用作修改或添加。
系统调用原理如下:
源码目录下涉及内核的三个文件有:
/kernel/sys.c //定义系统调用
/arch/x86/syscalls/syscall_32.tbl //设置系统调用号
/include/linux/syscalls.h //系统调用的头文件