• 已删除用户

菜单

Machine
发布于 2024-03-11 / 43 阅读
1

Linux添加系统调用

下载内核和解压就略过了

作者下载的内核是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.结果如下