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

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

    -

准备

下载Ubuntu系统安装包和Linux内核
Ubuntu下载地址:https://www.ubuntu.com/download
(百度网盘:https://pan.baidu.com/s/1Q3YoFm7FV-rLiv0UKw_vgw 密码:4pho)
Linux内核下载地址:https://www.kernel.org/
(百度网盘:链接:https://pan.baidu.com/s/14-mkqxPB_YqP75ztOBxopw 密码:o24z)

安装Ubuntu虚拟机

使用VMware Workstation安装Ubuntu虚拟机。(为了方便就直接用典型安装)。
Linux编译内核及添加系统调用_第1张图片
Linux编译内核及添加系统调用_第2张图片
选择前面下载的Ubuntu安装包文件
Linux编译内核及添加系统调用_第3张图片
Linux编译内核及添加系统调用_第4张图片
Linux编译内核及添加系统调用_第5张图片
Linux编译内核及添加系统调用_第6张图片
Linux编译内核及添加系统调用_第7张图片
Linux编译内核及添加系统调用_第8张图片
Linux编译内核及添加系统调用_第9张图片
之后就开始安装Ubuntu,安装过程中要断网,不然就会在安装过程中更新,安装速度很慢
Linux编译内核及添加系统调用_第10张图片
安装完成后登陆即可

安装VMware Tools

安装VMware Tools的目的就是为了方便的在Windows和Ubuntu虚拟机之间共享文件。安装的步骤参考https://www.linuxidc.com/Linux/2017-09/147167.htm
如果当中有例如[/usr/ect]这样路径的提示,就把这个路径作为指令输入。
安装完后将内核放入到共享文件夹

添加系统调用

1、 将linux内核复制到/usr/src文件夹下,解压(用root用户)

cd /mnt/hgfs/share
sudo cp linux-4.4.132.tar.xz /usr/src
sudo cd /usr/src
sudo tar -xvf linux-4.4.132.tar.xz

2、 添加系统调用函数
修改/usr/src/linux-4.4.132 /kernel/sys.c文件(因为是root用户才能修改的文件,所以可以先将该文件复制到桌面,修改完后再复制替换)加入linkage.h的头文件在文件末尾加入要加入的系统调用函数(一个排序函数)。
Linux编译内核及添加系统调用_第11张图片
Linux编译内核及添加系统调用_第12张图片
3、 加入系统调用函数声明
linux-4.4.132/arch/x86/include/asm/syscalls.h中加入asmlinkage void sys_quicksort(int [],int,int);(也是和前面一样复制再替换)
Linux编译内核及添加系统调用_第13张图片
4、 加入系统调用号。
linux-4.4.132/arch/x86/entry/syscalls/syscall_64.tbl
Linux编译内核及添加系统调用_第14张图片
修改完这三个文件之后将这三个文件替换回原来各自的文件夹
例如替换第一个sys.c的命令:

cd /home/user/Desktop
sudo cp sys.c /usr/src/linux-4.4.132 /kernel/

最好在这个地方建一个快照,以便以后有什么问题可以恢复到这一步。建快照的方式是:在VMware工具条上 虚拟机/快照/拍摄快照
5、编译及安装内核
在Ubuntu连接网络的情况下:

sudo apt-get update
sudo apt-get install libncurses5-dev
sudo apt-get install libssl-dev
sudo make mrproper
sudo make clean
sudo make menuconfig

打开menuconfig配置对话框后配置:
Linux编译内核及添加系统调用_第15张图片
Linux编译内核及添加系统调用_第16张图片
Linux编译内核及添加系统调用_第17张图片
Linux编译内核及添加系统调用_第18张图片
保存退出。

编译内核

apt-get install libssl-dev
sudo make -j4

(编译好后也可以建一个快照)

安装内核

sudo make modules_install
sudo make install

重启Ubuntu

重新启动系统,如果是虚拟机的话记得重启进入BIOS界面之前一定要点击鼠标进入虚拟机的界面实现键盘捕获。在重启开机界面按住shift键不放手,选择高级选项,进入内核选择加载界面,选择自己编译的内核的正常模式
Linux编译内核及添加系统调用_第19张图片
选择Ubuntu GNU/Linux,Linux 4.4.132
系统进去之后,打开终端,输入uname –a可以看到内核版本号已经变为4.4.132了。
编写程序验证系统调用
在桌面新建文件test.c,编辑内容为
Linux编译内核及添加系统调用_第20张图片

编译C 程序

cd /home/user/Desktop
gcc -o test test.c
./test

得到排序结果:
Linux编译内核及添加系统调用_第21张图片

你可能感兴趣的:(Linux)