给linux添加系统调用
实验编号 |
1 |
题目 |
系统调用 |
|
实验目的 |
加深对系统函数库、操作系统提供的系统调用的共同点和差异的认识,通过认识、了解Linux系统调用的实现方式,强化操作系统为用户提供接口方式的理性认识。 |
|||
实验内容 |
为Linux内核增加一个系统调用,并编写用户进程的程序来测试。 要求该系统调用能够完成以下功能: 1. 该系统调用有1个整型参数。 2. 若参数大于0,则返回自己学号的最后一位。如您的学号为248,则返回8。 3. 若参数小于或等于0,则返回自己的学号。如您的学号为248,则返回248。 |
|||
报告内容要求 |
(1) 程序实现方法和思路 (2) 测试及结果 |
|||
报告正文 |
||||
一、实现思路: 给linux添加一个系统调用,也就是为linux增加一个api函数。这样需要修改linux的内核,然后通过编译就会形成一个新内核,在新内核里即可调用自己添加的api函数。 二、实验步骤: (1)cd/usr/src/linux/kernel (2)vi sys.c 并添加如下一个函数: asmlinkage int sys_mycall(int num) { if(num > 0) { return 2; } else { return 13061032; } } (3)cd /usr/src/linux/arch/i386/kernel (4)vi entry.S并添加如下代码 .long SYMBOL_NAME(sys_mycall) (5)在头文件中增加申明: cd /usr/include/asmvi unistd.h 添加:#define__NR_mycall191 (6)编译内核: #make mrproper/* clean old config info */ #make clean/* clean old object file */ #make menuconfig /* do nothing,just exit and save config,alluse default */ #make dep/* binding the configuration info */ #make bzImage/* it should work. */ (7)编译完成后,将新内核文件和新的系统符号表拷贝到/boot目录,如下: #cp arch/i386/boot/bzimage/boot/bzimage_00 #mkinitrd /boot/bzImage_00.img 2.2.14-15mdk (8)修改系统配置文件(/etc/lilo.conf): 在lilo.conf文件末尾添加如下代码: image = /boot/bzImage_00 label = linux-oyz root = /dev/sda5 initrd = /boot/bzImage_00.img append = “” read-only (9)使用超级用户运行:/sbin/lilo,然后重新启动:reboot (10)在启动的boot页面,Tab选择linux-oyz启动。 (11)测试执行,编写如下测试函数: 三、测试结果: 略。 【给linux添加系统调用】 |
推荐阅读
- 喂,你结婚我给你随了个红包
- 成交的种子咖啡冥想
- 一百二十三夜,请嫁给我
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 历史教学书籍
- Linux下面如何查看tomcat已经使用多少线程
- 写给陈羡
- Beego打包部署到Linux
- 给予孩子心理平衡的机会
- 请给时间一点时间