【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用

1 Ubuntu12.04内核升级

1 准备条件:

  • 安装有Unbuntu12.04的机器或者虚拟机
  • 下载最新的稳定版Linux内核源码:下载地址是http://www.kernel.org/,现在最新的稳定版本是3.9.4
  • root权限
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第1张图片

2 解压文件到/usr/src文件夹中

因为我是从本地系统直接复制到虚拟机里的这个文件夹中,所以会出现权限问题。要先拷贝到别的权限较低的文件夹中然后在终端进入root权限进行移动。
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第2张图片

移动文件到指定文件夹
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第3张图片

解压文件:
解压命令:
xz -d  linux-3.9.4.tar.xz
tar -xvf  linux-3.9.4.tar
第一条命令大概执行40秒到一分钟
第二条命令的执行过程:
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第4张图片

解压之后:

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第5张图片

解压完成,下面开始配置 编译和安装

3 进入linux-3.9.4目录,清除残留的.config和.o文件

输入命令:
make mrproper
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第6张图片


配置编译选项

安装ncurses
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第7张图片

进入ncurses-5.9目录,依次执行下面的命令:
cd ncurses-5.9
./configure 
make 
su root 
make install

按照你的系统环境制作安装配置文件

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第8张图片



安装ncurses完成后
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第9张图片

现在回到内核文件夹下/usr/src/linux-3.9.4执行命令
 make menuconfig
根据菜单提示,选择编译配置选项,并保存为配置文件.config

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第10张图片

看到这个界面不敢乱选,把以前的.config文件拷过来加载一下吧,以前的文件也在/usr/src路径下的某个linux-header文件夹下

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第11张图片

在前面的配置界面选择加载
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第12张图片


【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第13张图片

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第14张图片



【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第15张图片


5 确定依赖性

命令:
make dep
提示没有必要,可能是加载以前配置文件的原因
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第16张图片


6 清理编译中间文件

命令:
make clean

7 生成新内核

命令:
make bzImage
时间:13:02 - 13:26
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第17张图片

8 生成modules

make modules
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第18张图片

9 安装modules

make modules_install

10 建立要载入ramdisk的映像文件

如果你的系统是跑在虚拟机里,那么这一步一定需要。
mkinittramfs -o /boot/initrd-linux3.9.4.img 3.9.4

11 安装内核

make install
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第19张图片

12 配置grub引导程序

 grub引导程序自动生成
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第20张图片

13 重启。

重启系统,从grub菜单中选中新内核引导linux。

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第21张图片



2 添加自定义系统调用

1 添加系统调用函数,修改文件:/kernel/sys.c

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第22张图片

2 添加系统调用号,修改文件 /arch/x86/systemcalls/syscall_32.tbl

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第23张图片

3 添加声明到头文件,修改文件,/include/linux/syscalls.h

【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第24张图片

4 重新编译内核

见第一部分

5 测试

测试代码
#include <unistd.h>
#include <stdio.h>
int main()
{
	syscall(351,1);
	return 1;
}
查看运行结果命令

sudo dmesg -c


测试结果
【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用_第25张图片


你可能感兴趣的:(【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用)