ubuntu编译内核并添加系统调用(3.12版本)

本文是ubuntu13.10 32位环境下面添加系统调用并编译内核的过程。只针对3.12内核版本,对于其他版本的内核可能修改方式不同。

环境是virtualbox下面的ubuntu13.10 32bit ,雅乐网发现硬盘文件vdi分配20G有点不够,建议大家多分配一点硬盘空间。

一、下载内核

登陆下载,得到文件linux-3.12.38.tar.xz,解压

xz -d linux-3.12.38.tar.xz
tar -xvf linux-3.12.38.tar

解压完后得到文件夹linux-3.12.38 进入这个文件夹进行下面的操作。

二、添加一个系统调用

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

在这个文件里添加一个函数.

asmlinkage int sys_yalewoo(int num)
{
	printk("yalewoo");
	return num;
}

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

在最下面添加一行。注意第一列的调用号不能和已经有的冲突。

351	i386	yalewoo			sys_yalewoo

 3. 添加系统调用声明到头文件:修改 include/asm-generic/syscalls.h

在最后一行上面添加如下内容

#ifndef sys_yalewoo
asmlinkage int sys_yalewoo(int num);
#endif

scrn20150306170434

三、编译新内核

1. 安装必要的环境

在执行apt-get install之前,如果之前没有执行update就要先update一次

sudo apt-get update

安装gcc等开发工具

sudo apt-get install build-essential

安装ncurses库。这个在配置makeconfig的时候用到了。

sudo apt-get install libncurses5-dev

 2. 编译内核 使用root用户身份

依次运行下列命令。可以加上-j选项指定多线程加快速度,例如 make -j4 bzImage 。

make mrproper    //清除旧的编译内容

make menuconfig    //编译新内核的配置文件,会出现内核配置文件修改窗口,选择save,然后exit,使用原先的配置,并不做修改。

make bzImage    //生成新的内核镜像 我的虚拟机里大概需要1小时

make modules    //编译模块。我的虚拟机里大概需要3小时。可以直接输入 make 同时执行以上两步 

make modules_install    //安装模块

make install    //安装内核

update-grub    //更新引导文件

reboot    //重新启动

 四、测试系统调用

创建一个.c文件来测试

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

int main(void)
{
	printf("%ld\n", syscall(351, 233));
	return 0;
}

还可以使用dmesg -c来查看系统调用函数中printk输出的内容

sudo dmesg -c

修改sys.c后 重新编译内核

只需要执行

make bzImage    //生成新的内核镜像
make install    //安装内核

就可以了。第二次编译会很快。

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
https://www.yalewoo.com/ubuntu_compile_kernel.html

上一篇:

下一篇:

我要评论

验证码*: 8 + 3 =