温馨提示:必须保证硬盘(SCSI)在33G以上,不然后面重新编译内核会内存不够导致前功尽弃。

实验环境:Ubuntu18.04 64位,linux4.19。

实验步骤:

1.在www.kernel.org/中下载内核。在下载中打开terminal使用命令解压缩。

2.sudo mv linux-4.19 /usr/src移动文件夹到/usr/src 

 

3.在/arch/x86/entry/syscalls/arch/x86/entry/syscalls/syscall_64.tbl(32位系统为syscall_32.tbl)
文件中添加系统调用号, 取一个与源文件中不重复的调用号,这里是548
添加的调用函数为 548      64          hello              sys_hello

2.
在linux-4.19/include/linux/syscalls.h文件中添加系统调用函数声明:
asmlinkage long sys_hello(void);

3.在linux-4.19/kernel/sys.c文件中添加函数定义:

asmlinkage long sys_hello(void)

{

   printk(“Hello, world!”);

   return 606;

}

4.

编写调用系统调用函数的源程序:(在桌面上)

hello.c

#include<stdio.h>

#include<sys/syscall.h>

#include<linux/kernel.h>

#include<unistd.h>

int main()

{

       long use = syscall(548);

       printf(“System call sys_hello: %ld\n”,use);

       return 0;

}

7.编译安装内核

  1. 安装依赖库

make, gcc, kernel-package, bison, flex, libncurses-dev, ncurses-devel, libssl-dev

在ubuntu中打开控制台

输入命令安装: sudo apt install make

sudo apt install gcc

sudo apt install kernel-package

sudo apt install bison

sudo apt install flex

sudo apt install libncurses-dev

sudo apt install nucurses-devel

sudo apt install libssl-dev

  1. 配置内核:

在linux源文件目录中打开控制台(如/linux-4.19)

输入命令: sudo make menuconfig

会弹出配置菜单:

Save->ok->exit->exit(用方向键和enter控制)

2.开始编译内核

(如果执行这些命令期间遇到错误,根据错误提示安装相应的库sudo apt install xxx)

在控制台中输入命令开始编译:sudo make

编译执行时间很久, 期间不要关闭控制台

编译完成后在控制台中输入命令开始安装模块:sudo make modules_install

模块安装完成后在控制台中输入命令安装内核:sudo make install

安装结束后基本结束重启即可:reboot

查看内核版本:uname -r

开机时一直按shift 选第二个高级选项后选第三个recovery mode

关于用gcc编译c程序可以自行百度

编译hello.c

打开控制台cd到源文件所在目录:cd Desktop

用gcc编译写好的hello.c 输入命令:gcc -o hello hello.c

如果没有错误输入命令执行程序:./hello

可以看到我们的系统调用返回了606这个值,说明系统调用成功了

由于添加的系统调用的输出语句为printk写的,它将消息送到系统日志中,所以控制台没有输出,输入命令查看日志:dmesg

可以多调用几遍函数 再查看

出现了helloworld  成功了!!!

 

Logo

更多推荐