主机:Ubuntu 11.04
现在内核版本:2.6.38.9
编译的目标内核版本:2.6.39
编译成功后修改内核,添加个系统调用,并重新编译内核,编写C程序,调用自己添加的系统调用
首先编译内核
1、从下载Linux内核版本2.6.39
2、解压内核到任意目录(这里不用必须解压到/usr/src/下,Linus也说不必那样做,况且自己也试验成功)
3、进入内核目录
4、首先配置make menuconfig配置裁剪内核(如果没有什么必要可以复制/boot/config-***,这是现在的内核配置)
cp /boot/config-*** ./.config
5、开始编译,可以执行make all,当然也可以分步完成
make dep
make clean
make bzImahe
make modules
6、安装内核驱动
make modules_install
7、安装内核
make install
8、生成引导镜像文件,并将其复制到/boot目录下
mkinitramfs -o initrd.img-2.6.39 2.6.39
cp initrd.img-2.6.39
9、最后更新grub
update-grub2
启动新的内核,成功。
下面是添加系统调用。
1、首先打开文件./arch/x86/include/asm/unistd_32.h
在最后添加系统调用号,如下:
#define __NR_name_to_handle_at 341
#define __NR_open_by_handle_at 342
#define __NR_clock_adjtime 343
#define __NR_syncfs 344
#define __NR_my_call 345 /*This is added by yan,this is a test for system call*/
2、打开./arch/x86/kernel/syscall_table_32.S
末尾添加系统调用的函数地址项,如下:
.long sys_prlimit64 /* 340 */
.long sys_name_to_handle_at
.long sys_open_by_handle_at
.long sys_clock_adjtime
.long sys_syncfs
.long sys_my_call
3、打开./include/linux/syscalls.h添加系统调用函数的声明
asmlinkage long sys_my_call(int num); /*This is added by yan*/
注意添加位置,因为其中有选择编译#ifdef和#ifndef
4、打开./kernel/sys.c文件添加
这函数是宏定义,在./include/linux/syscalls.h里。
5、重新编译内核,这次只需编译内核,驱动部分没有改变不用再编译一遍,以节省时间。
执行make bzImage,然后参考上面的内核编译步骤即可。
测试代码:
编译执行
结果如下:
分享到:
相关推荐
题目内容:添加一个系统调用,实现对指定进程的nice值得修改或读取功能,并返回进程最新的nice值及优先级prio。 考察的知识点:在系统中根据需要添加新的系统调用。 问题的关键点:添加的系统调用实现对指定进程的...
实验2 Linux内核编译及系统调用添加.doc
介绍了通过添加新文件、或修改源文件的方法添加一个新的系统调用。 本文有添加及编译的详细步骤截图与分析,可作为操作系统课程设计。
Linux内核编译及添加系统调用
为了在内核态下运行,本实验针对Linux的内核进行修改,增加自定义系统调用函数实现用户态程序对任意进程的nice值进行修改或者读取来进行测试。详细介绍参考:...
提供了linux-2.26-32内核版本的编译及添加系统调用方法
使用Ubuntu9.04编译内核linux-2.6.34,并添加系统调用的实验报告 实验报告是用英语写的,英语不怎么好,请见谅
操作系统实验: 通过实验,熟悉Linux 操作系统的使用,掌握构建与...1.向Linux 内核增加新的系统调用,系统调用名称和功能自行定义 2.Linux 新内核的编译、安装和配置 3.编写应用程序以测试新的系统调用并输出测试结果
2.在系统调表中添加系统调号 3.申明系统调服务例程原型 4.实现系统调服务例程 5.重新编译内核 6.编写态程序来测试新添加的系统调
在Linux中添加新的系统调用,涉及到Linux内核,以及添加系统调用后的重新编译内核,最后对新的系统调用的测试,本人课程设计亲自实现了!
操作系统实验:使用脚本编译重装Linux内核,并增加一个打印缺页数的系统调用.zip 操作系统实验:使用脚本编译重装Linux内核,并增加一个打印缺页数的系统调用.zip 操作系统实验:使用脚本编译重装Linux内核,并增加...
在linux内核中添加一个简单的系统调用,并编译实现!
内核编译每个详细步骤 Linux内核编译 系统环境:Red Hat Enterprise Linux 6.1 内核版本:linux-3.1.1 新增功能:新增两个系统调用函数
编译Linux2.6内核并添加一个系统调用.pdf
3.1内核编译法添加系统调用 (1)通过su root 输入密码后进入根目录 (2)使用cd /usr/src/linux-5.4.1/kernel进入kernel目录并打开sys.c文件加入打印”hello world”的函数 (3)使用命令gedit syscalls.h中添加...
审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计 Enable system-call auditing support 支持对系统调用的审计 Kernel .config support 把内核的配置信息编译进内核中,以后可以...
该文档从源码分析上入手分析了linux 内核收发数据包流程,内核路由查询流程。很清楚的分析了一个数据包如何通过查询路由进入内核ipsec协议栈的处理、Linux 内核ipsec协议栈详细的加解密流程以及加解密完后如何将...
Linux内核编译法添加简单自定义系统调用
很好Linux内核休息书籍 第一层次修炼的内容包括了前三章, 目的是希望您能够对 Linux 以及内核有个全面的认 识和了解,掌握分析 Linux 内核源代码的分析方法。 第 1 章主要介绍了 Linux 的 18 年成长史, 或许您会...