本次实验以Linux 2.6.35版本的unbutu系统为基础,在内核上增加一个helloworld程序的系统调用。
一、重新安装配置内核
Linux增加系统调用
本次实验以Linux 2.6.35版本的unbutu系统为基础,在内核上增加一个helloworld程序的系统调用。
一、重新安装配置内核
1)安装所需的工具和包:#yum install -y gcc ncurses-devel make wget(ncurses能提供底层终端功能的封装,提供一个相当稳固的工作框架用以产生漂亮的界面)
若是centos系统,命令则不同:#apt-get install -y gcc libncursesdev make wget wget。
2)查看所用系统的内核版本,下载所需版本的Linux内核(本实验需要另外的Linux内核,若在本机内核上操作可能导致严重的问题该实验用2.6.35版本),并解压:
uname -r
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.tar.gz
tar xvzf linux-2.6.35.tar.gz
也可以到www.kernel.org下载相关内核
3)进入linux-2.6.3,安装配置启动菜单menuconfig:
make menuconfig
在启动菜单里选择如下:
编译内核:#make
make modules
4)安装内核(需要用$su命令取得权限):
make modules_install
make install
(unbutu用户需要先执行:#sudo update-initramfs -c -k 2.6.35 手动生成ini)
5)修改配置文件
vim /boot/grub/menu.lst
修改文件中的内容:default=0,timeout=25
(unbutu用户则#sudo vim /etc/default/grub 并修改:GRUB_DEFAULT=2,GRUB_TIMEOUT=25,最后更新grub:#sudo update-grub)
6)重启系统并观察版本号:
reboot
uname -r
二、增加新的系统调用
1)编写调用程序:
cd linux-2.6.35
mkdir my_source
touch my_soucer/sys_hellowoeld.c
vim my_soucer/sys_hellowoeld.c
文件内程序如下:
include<linux/kernel.h>
include<linux/sched.h>
Asmlinkage int sys_helloworld(void)
{
Printk(KERN_EMENG “Hello World! \n”);
Return 1;
}
2)增加配置文件:
touch my_source/Makefile
vim my_source/Makefile
文件内容为:
Makefile of the new system call
Obj-y :-sys_helloworld.o
3)修改原有配置文件
在linux2.6.35目录下打开原有配置文件:#vim Makefile
在下行末尾加上my_source:
Core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ my_source/
4)增加系统调用号
vim arch/x86/kernel/sys_table_32.S
在系统调用表末尾增加一个未使用的调用号,最好接上上一个,我用的是339:
.long sys_helloworld /* 339 */
vim /arch/x86/include/asm/unistd_32.h
增加一行:#define __NR_helloworld 339
将总调用数增加1,变成339:#define NR_syscalls 339
vim /arch/x86/include/asm/syscall.h
增加一行:asmlinkage int sys_helloworld(void);
5)返回第一步编译安装内核并重启
6)编写测试程序代码test_syscall.c,程序内容如下:
include<linux/unistd.h>
include<sys/syscall.h>
include<sys/types.h>
include<stdio.h>
define __NR_helloworld 339
Int main(int argc,char *argv||)
{
syscall(__NR_helloworld);
Return 0;
}
7)编译执行测试程序
gcc test_syscall.c -o test_syscall
./test_syscall
261

被折叠的 条评论
为什么被折叠?



