操作系统实验一——向Linux 内核增加一个系统调用

向Linux 内核增加一个系统调用

实验环境: VMware虚拟机软件、Ubuntu14.04、GCC

原内核版本: 4.40-142

新编译内核版本: 2.3.36.2


一、编译、安装

1. 拷贝内核源码文件到Linux系统。
在这里插入图片描述
2.解压源码包到指定位置。
在这里插入图片描述在这里插入图片描述
3.修改源程序,增加系统调用实现。
在这里插入图片描述
在这里插入图片描述
4.修改头文件,增加系统调用声明。
在这里插入图片描述
在这里插入图片描述
5.修改系统调用表,注册系统调用。
在这里插入图片描述
在这里插入图片描述
6.编译安装内核
a、make mrproper清除内核中不稳定的目标文件,附属文件及内核配置文件

在这里插入图片描述
b.make clean清除以前生成的目标文件和其他文件
在这里插入图片描述
c.make menuconfig配置内核,采用默认的内核配置即可。
在这里插入图片描述
在这里插入图片描述
d.make
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
e.make modules_install
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
f.make install
在这里插入图片描述
在这里插入图片描述

二、测试

7.进入编译后的内核系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.在程序中调用自己添加的系统调用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、遇到的问题及解决如下:

错误1:
在这里插入图片描述
解决:安装ncurses依赖

错误2:conflicting types for ‘syscall_trace_enter’
asmregparm long syscall_trace_enter(struct pt_regs * regs)

解决:修改相关配置文件
在这里插入图片描述
错误3:gcc: 错误: elf_i386:没有那个文件或目录
make[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] 错误 1
make[1]: *** [arch/x86/vdso] 错误 2
make: *** [sub-make] 错误 2

解决:1、在内核目录arch/x86/vdso/Makefile中,大约在28,29行,把"-m elf_x86_64" 替换为 "-m64"
在这里插入图片描述
2、然后再继续找,大约在72行左右,找到VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1中的 “-m elf_i386” 替换为 "-m32"
在这里插入图片描述

错误4:drivers/net/igbvf/igbvf.h: At top level:
drivers/net/igbvf/igbvf.h:129:15: error: duplicate member ‘page’
make[3]: *** [drivers/net/igbvf/ethtool.o] 错误 1

解决:修改drivers/net/igbvf/igbvf.h中的128行内容如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值