Lab3 更新内核与添加系统调用
操作环境:Ubuntu12.04
学号:SA12226340
一、更新内核
1、 更新内核
进入shell,用命令uanme –a 查看Ubuntu的内核版本
# uname –a
下面手动更新内核到最新的文档版本
2、 获取内核源代码
版本一直在更新,我更新用的是3.9.4
下载好之后解压到/usr/src文件下
$ sudo tar –xvf linux-3.9.4.tar.xz–C /usr/src
3、 准备工作
进入linux-3.9.4目录,清除残留的.config和.o文件
cd ./usr/src/linux-3.9.4
输入命令:
make mrproper
4、 内核配置
将原来的配置文件拷贝过来(注明一下:我第一遍的时候是自己配置的,编译后无线网络和鼠标不能用,不知道是什么原因)(在linux-3.9.4目录下)
cp /usr/src/linux-header-3.2.0-generic/.config./
然后进行一下配置,执行命令:
make menuconfig
报错:
*** Unable to find the ncurses libraries orthe
*** required header files.
报错原因:缺少ncurses库(一个管理应用程序在字符终端显示的函数库)
用下面命令安装所需函数库:
sudo apt-get install ncurses-dev
现在回到内核文件夹下/usr/src/linux-3.9.4重新执行命令:
make menuconfig
在出现的画面中先选择load,然后ok,然后选择save,ok,再exit。(我是在安装之后写的这篇文章,当时没有记录图片,下面用同学的图片说明,版权可是别人的哈。)
5、 编译和安装
终端执行:
make bzImage #编译内核
make modules #编译模块
make modules_install #先安装模块
make install #安装内核
6、 make install 之后,grub已经自动更新,不需要再手动设置引导。(省去了很多的麻烦事)
重新启动电脑
reboot
更新后的第一次加载会有些慢。
启动后进入Ubuntu,再次查看内核版本,终端运行
uname -a
二、添加系统调用
1、系统调用的原理如下:
系统调用涉及的内核源代码有三个文件按:
/kernel/sys.c //定义系统调用
/arch/x86/syscalls/syscall_32.tbl //设置系统调用号
/include/linux/syscalls.h //系统调用的头文件
2、下面来实现简单的系统调用。
1)系统调用函数的实现
原来/kernel/sys.c的最后几行代码为:
在/kernel/sys.c的最后添加下面的代码:
asmlinkage int sys_calljaspersong(int num)
{
printk(“Hi,myname is jaspersong, My student No is SA*****340!\n”);
return1;
}
2)设置系统调用号
编辑/arch/x86/syscalls/syscall_32.tbl,可以看出已经由350个定义好的系统调用,最后几行代码为:
在最后添加自己的系统调用,如下面的代码:
351 i386 calljaspersong sys_calljaspersong
注意这里添加的系统调用要与之前定义的函数对应。
3)添加系统调用的声明到头文件
在/include/linux/syscalls.h的原来最后几行的代码为:
现在在最后添加函数的声明:
asmlinkage int sys_calljaspersong(int num);
4)重新编译内核并安装
过程完全按照第一部分更新内核的步骤。
然后重新启动电脑:
reboot
5)系统调用测试
创建一个main.c
vim main.c
#include <unistd.h>
#include <stdio.h>
int main()
{
syscall(351,1);
return1;
}
然后编译运行
gcc -o main main.c
./main
sudo dmesg -c
参考:
内核更新1:http://blog.csdn.net/qp120291570/article/details/8991905
内核更新2:http://blog.csdn.net/zs634134578/article/details/9003815#comments
添加系统调用:http://blog.csdn.net/yming0221/article/details/6559767
内核更新与系统调用:http://blog.csdn.net/dslovemz/article/details/8744352
向linux内核添加系统调用新老内核比较:http://www.cnblogs.com/albert1017/archive/2013/05/27/3101760.html