CentOS添加系统调用及内核编译

一、下载并解压内核源码

从“ http://www.kernel.org/pub/linux/kernel/ ” 下载最新内核源码

~# wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.2.tar.bz2

解压到 /usr/src 目录

~# mv linux-*.tar.bz2 /usr/src
~# tar -jxvf linux-*.tar.bz2

解压后得到内核源码目录“ /usr/src/linux-*/ ”

二、添加新的系统调用

(1)添加源代码

在“ linux-*/kernel/sys.c ” 文件中添加如下源代码

asmlinkage int sys_mycall(int number)
{
    return number;
}

(2)连接新的系统调用

a、修改“ linux-*/arch/x86/include/asm/unistd_32.h ” 这个文件。

在 “ #define ” 语句定义的系统调用清单的最后添加新的系统调用名称

#define __NR_name NNN //NNN代替新系统调用号,注意NR前为双下划线

b、修改“ linux-*/arch/x86/kernel/syscall_table_32.s ” 这个文件。

在文件中的清单后添加

.long sys_mycall

(3)编译新内核

执行以下命令

~# make mrproper  //清理以前的编译痕迹
~# make clean
~# cp /boot/config-`uname -r` .config  //设置内核编译选项
~# make menuconfig  //执行该命令需要ncurses库,如果执行出错则执行如下命令安装ncurses:
~# yum install ncurses-devel
~# make bzImage  //b编辑内核压缩镜像
~# make modules  //编辑内核模块
~# make modules_install  //安装内核模块
~# make install  //安装内核

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注