Linux增加系统调用

本次实验以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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值