1.安装相关依赖
sudo apt-get install gcc make libncurses5-dev openssl libssl-dev
sudo apt-get install build-essential
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
2.下载Linux内核
在Linux官网下载Linux内核后解压。(建议下载版本为4的内核,兼容问题更少)
解压命令: tar -zxvf 压缩文件名.tar.gz
3.增加系统调用
在syscall_64.tbl内核文件内设置系统调用
333 64 kfc1 sys_kfc1
文件位置在:解压内核文件/arch/x86/entry/syscalls
4.声明函数
在syscalls.h内核文件内声明我们自己定义的函数
asmalinkage long sys_kfc1(void);
文件位置在:解压内核文件/include/linux
5.函数编写
在sys.c 的内核文件内,找一个空闲区域编写我们自己定义的函数
asmlinkage long sys_kfc1(void)
{
printk(“I’m xxx”);
return 1;
}
6.内核编译,安装
使用命令如下
make menuconfig //内核配置
正确进入文本选择界面
均保持默认配置,按exit退出配置界面
make all –j4
内核编译,j后面为CPU核数,数字越大编译越快。
我使用j4编译完成需四五十分钟
cp arch/x86_64/boot/bzImage /boot/vmlinuz-5.8.14
cp /usr/src/linux-5.8.14/System.map System.map-5.8.14
cp .config /boot/config-5.8.14
文件重定向
make modules_install
模块安装
7.系统重启并选择新内核
使用uname -a,查看内核是否安装成功
8.测试系统调用
编写使用我们自己加入系统调用的函数
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
long int a=syscall(332);
.......
printf(“%ld\n%ld\n%ld”,a,b,c);
return 0;
}
编译所写函数
gcc a.c
9.查看调用是否成功
使用命令:dmesg,查看是否调用成功
总结
本文对Linux增加新系统调用并安装新内核过程进行了简单介绍。
有任何问题都可以在评论区和我交流~~