Ubuntu18.04(x86_64) 添加系统调用 编译内核(2019-5-10 内核版本:5.1)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40184885/article/details/90056211

准备工作

  • 安装编译内核所需的工具,不安装或少安装可能导致编译内核过程出错,得不偿失。
sudo apt-get install libncurses5-dev   openssl libssl- dev 
sudo apt-get install build-essential openssl
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
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
  • 下载最新版Linux内核,并解压到 /usr/src目录

Linux内核下载地址:https://www.kernel.org/,下载完成内核后,将linux-xxx.tar.xz拷贝或移动到 /usr/src目录下,不喜欢使用命令行的同学可以直接使用图形化界面复制粘贴。如图,右击内核压缩包,复制,粘贴到 /usr/src目录即可,/usr/src目录可直接在“文件”-“其他位置”-“计算机”打开 。

        

右击linux-5.1.tar.xz,点击“提取到此处”,可生成linux-5.1文件夹,进入该文件夹,准备工作结束。

添加调用 

添加调用供需修改三处:

  • /arch/x86/entry/syscalls/syscall_64.tbl       //设置系统调用号,如果是32位就用syscall_32.tbl
  • /include/linux/syscalls.h                             //系统调用的头文件
  • /kernel/sys.c                                              //定义系统调用

1.设置系统调用号

打开下图所示文件,添加系统调用号。

找一个没有使用的系统调用号,并对齐以此输入“64”、“hello”、“sys_hello”,其中“hello”可以自定义。

2.声明调用

在syscalls.h中加入声明:

asmlinkage long sys_hello(void);

3.定义系统调用

在sys.c文件中添加系统调用(函数),如下所示。

asmlinkage long sys_hello(void)

{

   printk("Hello, I'm xxx.\n");

   return 666;

}

编译内核

在 /usr/src/linux-5.1下打开终端,执行以下步骤:

make mrproper          得到源代码后,将其净化
cp /boot/config-xxxx(根据自己boot目录下的config文件决定)  ./.config
make menuconfig        对内核选项进行配置
(出现弹窗后,选择load→OK→Save→OK→EXIT→EXIT)
make bzImage           编译内核
make modules           编译模块
make modules_install   安装模块
make install           由系统自动完善
update-grub2           更新grub

测试调用

在电脑任意区域新建.c文件,键入以下代码:

#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>


int main()
{
    long int a = syscall(335);
    printf("System call Success, and it returns %ld\n",a);	
    return 0;
}

在终端输入 gcc -o hello hello.c,完成编译。

输入 ./hello,若成功打印,则调用成功,可输入 dmesg查看系统日志文件观察输出。

成功打印,系统调用实验完毕。

展开阅读全文

没有更多推荐了,返回首页