linux向内核中添加系统调用2

操作系统项目:向Linux内核添加一个系统调用, 打印进程树

实验环境:

VMware workstation 16

ubuntu 20.04.1

系统内核:linux 5.4.0

修改的内核:linux 5.4.5

一,配置环境

一股脑装就完了,也不知道到底哪个有用23333,不懂不懂

apt-get install libncurses5-dev libssl-dev build-essential openssl zlibc minizip libidn11-dev libidn11 flex bison

二,下载内核源码

我是在下面这个地方下载的:

http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

三,添加一个sys_printProcessTree函数

1 添加声明 .../linux-5.4.5/arch/x86/include/asm/syscalls.h

/***LiCoreAdd****/
asmlinkage void sys_printProcessTree(void);
/***LiCoreAddEnd*/

2 添加函数 .../linux-5.4.5/kernel/sys.c

static void printchildren(struct task_struct* task, int n)
{
    struct list_head *pos;
    struct task_struct* p;
    int i;
    for(i=n;i>0;i--)
    {
        printk(KERN_CONT "      ");
    }

    printk(KERN_CONT "|------");
    printk(KERN_CONT "%s(%d)\n", task->comm, task->pid);

    list_for_each(pos, &task->children)
    {
        p=list_entry(pos, struct task_struct, sibling);
        if(p != NULL)
        {
            n++;
            printchildren(p, n);
            n--;
        }
    }
}

asmlinkage void sys_printProcessTree(void)
{
    printk("=============Process Tree Start=============\n");
    printchildren(&init_task, 0);
    printk("=============Process Tree End=============\n");
}

3 添加调用号 .../linux-5.4.5/arch/x86/entry/syscalls/syscall_64.tbl

336 64  printProcessTree    sys_printProcessTree

四,编译修改好的内核源码

1 删除无用文件

sudo make mrproper
sudo make clean

2 生成配置文件.config

此处进去直接save,然后exit,生成一个默认的.config即可

sudo make menuconfig

3 编译

j4是指用4核编译,查的说是可以加快编译速度,不过我也没有具体对比验证

sudo make -j4

4 安装

sudo make modules_install
sudo make install

五,重启使用新内核

reboot

然后直接按住shift不放,就会进入grub(手速不够的请再来一遍...)

六,测试新的系统调用

随便找个地方写个main.cpp

#include<stdio.h>
#include<unistd.h>
#include<sys/syscall.h>
#include<sys/types.h>

int main()
{
    syscall(336);
    return 0;
}
gcc main.cpp -o main.o

运行main.o后你会发现什么也没有输出到屏幕,因为系统调用的printk输出到了syslog中了。

位置在/var/log/syslog

可以直接

gedit /var/log/syslog

然后ctrl+f,找Process Tree Start

这里其实是希望打印出来的:

要调一下printk优先级?

http://blog.sina.com.cn/s/blog_61486da60102wams.html

文章目录