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

平台:VMware 9.0 pro

系统:Ubuntu 13.10 i386

新内核版本:Linux-3.17.7 32位

(全过程使用root账户)

一、下载新的内核

从 Kernel.org 上下载最新的内核。下载之后得到文件“ linux-3.13.7.tar.xz ”

cp文件到“ /usr/src ”目录,用以下命令解压

~$ xz -d linux-3.17.7.tar.xz
~$ tar -xvf linux-3.17.7.tar

解压完后得到目录” /usr/src/linux-3.17.7 ”

二、添加系统调用

进入新内核的文件目录

~$ cd /usr/src/linux-3.17.7

下面添加新的系统调用

a)、系统调用函数实现:修改kernel/sys.c文件

~$ vi kernel/sys.c

在文件的最后添加新的系统调用函数

SYSCALL_DEFINE1(mycall, int, number){ 
    printk("11061135 Henry Zivers\n");    
    return number;
} //DEFINEn中的n表示参数个数. 此函数目的为返回输入值

b)、设置系统调用号:修改arch/x86/syscalls/syscall_32.tbl

~$ vi arch/x86/syscalls/syscall_32.tbl

在文件最后添加一行

351    i386    mycall            sys_mycall  //351即为新的系统调用号

c)、添加系统调用声明到头文件

~$ vi include/asm-generic/syscalls.h

在文件倒数第二行,即 “ #endif /* __ASM_GENERIC_SYSCALLS_H */ ” 这行的上面一行添加如下内容

#ifndef sys_mycall
asmlinkage long sys_mycall(long number);
#endif

三、编译新的内核

首先安装ncurses库,这个库会在之后的编译中用到

~$ apt-get install libncurses5-dev

为了方便,将编译需要执行的所有内容写成批处理文件执行,写好的文件放在“ /usr/src/linux-3.17.7 ”目录下

~$ vi mycall.sh

批处理内容如下

#!/bin/bash

make mrproper    //清除旧的编译内容
make menuconfig    //编译新内核的配置文件
make bzImage    //生成新的内核镜像
make modules    //编译模块
make modules_install    //安装模块
make install    //安装内核

update-grub    //更新引导文件

reboot    //重新启动

编辑完成后保存,并赋给批处理文件最高的读写权限

~$ chmod 777 mycall.sh

执行编译

~$ ./mycall.h

(提示:编译过程中,将出现内核配置文件修改窗口,选择<save>,之后<exit>即可。即使用原先的配置,并不做修改。)

暂无评论

发表评论

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