增加系统调用

1.下载linux内核

2.安装一些用于编译内核的依赖包

sudo apt-get update

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

sudo apt-get install dwarves

sudo apt-get install zstd

3. 解压缩新内核

tar -xavf linux-6.9.3.tar.xz  -C  /usr/src

cd  /usr/src/linux-6.9.3

(上文步骤同编译内核的前期准备,下文处起为修改三处函数)

4. 进入新内核开始增加系统调用

·进入新内核目录

cd /usr/src/linux-6.9.3

·编辑系统调用入口表

sudo gedit /usr/src/linux-6.9.3/arch/x86/entry/syscalls/syscall_64.tbl

系统调用入口表分为两段,第一段的系统调用号在300-400以内,第二段从512开始,我们找到第一段的末尾在它后面添加系统调用号和名字

系统调用名为mysyscall

·添加系统调用函数声明

sudo gedit include/linux/syscalls.h

·添加系统调用的函数定义

sudo gedit kernel/sys.c

·编译代码:

printk(“02,邓长辉*202131106030038\n”);

return 0;

###5. 编译内核

cd /usr/src/linux-6.9.3

make mrproper //得到源代码,将其净化

1)将旧内核的配置信息拷贝到当前目录下 并命名为 .config。

cp /boot/'uname -r'-generic ./.config

2)对内核选项进行配置

make menuconfig

选择load->(.config)OK->SAVE->(.config)OK->EXIT

gedit .config

CONFIG_MODULE_SIG_KEY=”cert/signing_key.pen”这个不修改,下面三个全置空。

3)删除配置时留下的一些不用的文件

make clean

4)编译内核

make bzImage -j8

5)编译模块

make modules -j8

6)安装模块

make INSTALL_MOD_STRIPE=1 modules_install

mkinitramfs /lib/modules/6.2.16 -o /boot/initrd.img-6.2.16-generic

7)把内核映像和System.map拷贝到 /boot 下

cp /usr/src/linux-6.9.3/arch/x86 /boot/bzImage /boot/vmlinuz-6.9.3-generic

cp /usr/src/linux-6.9.3/System.map/boot/System.map-6.9.3/boot/grub/grub.cfg

update-grub2

6.重新启动机器后,先查看自己的新内核,然后用一个C文件测试

uname -r

sudo gedit test.c

源代码如下:

#include <linux/kernel.h>

#include <sys/syscall.h>

#include <unistd.h>

#include <stdio.h>

int main(int argc,char **argv)

{

//462:long sys_mysyscall()

printf("System call sys_mysyscall return %ld\n",syscall(462));

return 0;

}

说明:返回 0 说明执行成功,但是现在没有看到打印信息因为打印信息打在了日志文件中

6.dmesg查看日志文件

dmesg

常见错误

1.make[1]: *** [Makefile:146:sub-make] 错误 2 make: *** [Makefile:24:__sub -make] 错误 2

此处为make menuconfig命令时,控制台窗口过小引起的,当全屏展开后便迎刃而解.

(下同)

如果在终端执行 make menuconfig ,显示错误:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
make[1]: *** [menuconfig] Error 1
make: *** [menuconfig] Error 2
表示终端窗口太小。解决办法可以是把终端窗口适当的调大(或是直接最大化)就行了。

2.常见缺少GTK包

如果我们要在Ubuntu系统下使用基于GTK+3开发的App,那么我们无需安装任何东西,直接双击该App即可使用。

如果我们要安装GTK+3.0进行开发,可使用以下命令:

sudo apt-get install libgtk-3-dev

下载安装完毕之后,我们可以使用以下命令来校验安装是否成功,并且查看GTK+3.0所包含的所有头文件以及库的路径:

pkg-config --cflags --libs gtk+-3.0

3.常见编译好内核重启时,新内核显示内存溢出

我下去查看同学的步骤以及所编译处来的文件大小也有不少和我相同然后到达600M大小的,他们与我的步骤也是相同的,在检查前我也尝试了删除内核再次编译

https://blog.csdn.net/Q1302182594/article/details/51979476

包括我上一次实验编译出来的6.8.7,以及第二次重新编译的6.9.3,唯一出现在我前两次错误尝试的相同点是两次删除内核,后再次修改三处函数时,三个文件都保留了我之前的修改,而非恢复默认状态,我感觉是我两次在进行删除内核的操作时未将引导项删除完全,因为我在使用ls -l -/boot命令时发现系统中还存留着我之前本应删除的6.8.7的几个引导项,因此类比可能是此问题导致的核紊乱,让我进入grub时出现调用内核错误导致内核溢出

此次操作,在删除原先编译的核后,我特别留意使用ls -l /boot命令后系统中是否任留有残留文件,确保无误后再次重新编译,便出现了正确结果


  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值