Linux 操作系统内核升级及系统调用的添加

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                       //系统调用的头文件



添加系统调用步骤:

2.1自定义一个系统调用的函数
在sys.c的最底部依照其上面的调用函数添加一个自己的调用函数,我们的函数可以如下

asmlinkage int sys_callyanzl(int num)   {   
     printk("My name is yanzl. My student No. is SA*******196!"); 
     return 1; 

2.2设置系统调用号
打开arch/x86/syscalls/syscall_32.tbl 文件,按照其上面的格式设置第351个自己的调用
351 i386   yanzl      sys_callyanzl
此时应注意要和上面的函数名相同

2.3 添加系统调用的声明到头文件
打开 /include/linux/syscalls.h ,倒数第二行添加
asmlinkage int sys_callyanzl(int num);  


2.4重新编译安装内核(见上面第一部分)
重启!


3.测试安装的系统调用

编写测试代码  test_sys_callyanzl.c

#include<unistd.h>
#include<stdio.h>

int main(){
       syscall(351,1);
       return 1;
}

编译执行后用 sudo dmesg -c 查看调用

----------------------------------------done--------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值