操作系统 实验1——Linux内核编译及添加系统调用

Linux内核编译及添加系统调用步骤

笔者使用的是ubuntu18.04,编译安装内核linux-5.3.17版本

1 查看旧内核版本

后面的安装完后 与新内核版本进行比对

uname -a

2 下源码

https://www.kernel.org/
将源码下载到ubuntu任意文件夹

3 进入root权限

防止因权限不足导致的错误

su

4 解压源码,并放置到特定文件夹

-J 使用 xz算法来压缩和解压文件
-x 解压
-f 必添加的参数
-C 指定解压到的文件夹

tar -Jxf linux-5.3.17.tar.xz  -C /usr/src/

5 添加系统调用

共3步,添加的内容自行设置

1、分配系统调用号,修改系统调用表

gedit ./arch/x86/entry/syscalls/syscall_64.tbl

2、声明系统调用服务例程

gedit ./include/linux/syscalls.h

3、实现系统调用服务例程

扫描二维码关注公众号,回复: 10675838 查看本文章
gedit ./kernel/sys.c

6 安装各个必备软件包

编译和安装内核时,需要一些软件包,提前安装上,防止后面报错

apt install libncurses5-dev make openssl libssl-dev bison flex

7 清楚残余的 .config .o 文件

清除因上一次编译错误而残留的.config .o文件,如果是第一次编译可以跳过(当然运行命令也不会出现什么问题)

cd /usr/src/linux-5.3.17
make mrproper

8 配置内核

对内核选项进行配置,全部默认即可 exit exit

make menuconfig

9 编译内核

-j6 用6个CPU核进行编译,并将输出的错误重定向到error.log文件中,方便查看
当然如果只有两个核的话,就改成-j2
这个阶段是最费时的,大约需要1、2个小时。笔者i7 9代,6核编译了40分钟,作为参考

// make -j6 2> error.log
make -j2 2> error.log

10 编译模块

大约10分钟左右

make modules

11 安装内核与模块

先装模块 再装内核
大约10分钟左右

// 安装模块
make modules_install
// 安装内核
make install

12 配置grub引导程序

update-grub

13 清理中间文件

清楚中间文件 .o 文件,这些文件占用了大量的空间,而且对后面的实验没有任何意义

make clean

14 重启

reboot

15 查看内核版本

uname -a

16 删除旧内核

su
// 查询并删除旧内核
dpkg --get-selections|grep linux
apt purge ....

17 测试自己添加的系统调用

编写一个c语言程序,通过系统调用号,来请求操作系统的服务例程

发布了9 篇原创文章 · 获赞 2 · 访问量 559

猜你喜欢

转载自blog.csdn.net/qq_40939814/article/details/103945878