Linux增加系统调用
2015-12-14 19:04
543 查看
本次实验以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版本),并解压:
也可以到www.kernel.org下载相关内核
3)进入linux-2.6.3,安装配置启动菜单menuconfig:
在启动菜单里选择如下:
编译内核:#make
4)安装内核(需要用$su命令取得权限):
(unbutu用户需要先执行:#sudo update-initramfs -c -k 2.6.35 手动生成ini)
5)修改配置文件
修改文件中的内容:default=0,timeout=25
(unbutu用户则#sudo vim /etc/default/grub 并修改:GRUB_DEFAULT=2,GRUB_TIMEOUT=25,最后更新grub:#sudo update-grub)
6)重启系统并观察版本号:
二、增加新的系统调用
1)编写调用程序:
文件内程序如下:
2)增加配置文件:
文件内容为:
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:
增加一行:#define __NR_helloworld 339
将总调用数增加1,变成339:#define NR_syscalls 339
增加一行:asmlinkage int sys_helloworld(void);
5)返回第一步编译安装内核并重启
6)编写测试程序代码test_syscall.c,程序内容如下:
7)编译执行测试程序
一、重新安装配置内核
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
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝