下载内核和解压就略过了
作者下载的内核是5.10.0的,系统是ubuntu20.04
修改内核
修改syscall_64.tbl
1.打开终端
2.在终端里输入
sudo nautilus
3.然后进入linux内核文件夹,然后进入arch/x86/entry/syscalls
4.找到syscall_64.tbl,打开
5.在第334号调用下边加入以下内容
335 common hello sys_hello
6.保存并关闭该文件
修改syscalls.h
1.接上步关闭syscall-64.tbl文件后,进入目录include/linux文件夹
2.找到syscalls.h,打开
3.在文件的最后面(即#endif上一行)加入以下内容
asmlinkage long hello(void);
4.关闭并保存
修改sys.c
1.打开kernel文件夹
2.找到sys.c,打开
3.在文件的末尾,加入以下内容
SYSCALL_DEFINE0(){
printk("hello world");
return 0;
}
4.关闭文件
5.关闭文件浏览器
编译内核
1.在终端运行以下命令
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
2.在linux内核文件夹打开终端,运行以下命令
make menuconfig
3.在菜单界面保存后退出
4.运行以下命令
sudo nautilus
5.在linux内核文件夹打开.config文件
6.找到CONFIG_SYSTEM_TRUSTED_KEYS,将等号后边的字符串清空(即CONFIG_SYSTEM_TRUSTED_KEYS=“”)
7.找到CONFIG_DEBUG_INFO_BTF,将等号后边的值修改为n
8.运行以下命令
make bzImage -j[虚拟机的内核数]
9.运行以下命令
make modules -j[虚拟机的内核数]
10.运行以下命令
make modules_install
11.运行以下命令
make install
测试
1.重启虚拟机
2.等到虚拟机关机,然后出现VMware字样,下边有进度条时,按shift
3.选择刚安装好的内核
4.进入系统后,创建一个测试文件如下
test.c
#include<stdio.h>
#include<unistd.h>
#include<sys/syscalls.h>
int main(void){
int a = hello();
printf("%d\n", a);
return 0;
}
5.打开终端,运行以下命令
gcc test.c -o test
6.运行以下命令
./test
7.运行以下命令
DMESG
8.结果如下