You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核6.3.1添加系统调用:Makefile修改与安装失败解决

问题描述

我正在完成一项作业,给Linux内核添加一个系统调用,功能是将输入的数字乘以10。参考的指南针对Linux 5.8.1内核,但我使用的是6.3.1版本。除了指南里修改主Makefile的步骤外,其他流程都正常。

指南要求修改主Makefile第1073行,在core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/这一行添加系统调用路径,但我的6.3.1内核Makefile里找不到这一行,搜索core-y仅在第741行看到core-y :=。我把系统调用路径加到这一行后,sudo make和sudo make modules_install都执行成功,但运行sudo make install时出现错误:

amir@99312201:~/linux-6.3.2$ sudo make install
  INSTALL /boot

 *** Missing file: arch/x86/boot/bzImage
 *** You need to run "make" before "make install".

make: *** [arch/x86/Makefile:292: install] Error 1

请问应如何修改Makefile以关联我的系统调用?还需要执行哪些额外步骤?


解决方案

一、正确修改Makefile关联系统调用

Linux 6.x内核的主Makefile中core-y的组织方式和5.x不同,不要直接修改core-y :=那一行,正确操作如下:

  1. 在主Makefile中搜索core-y +=,找到类似这样的行:
    core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
    
    如果没找到,就在core-y :=这一行的下方新增一行,把你的系统调用代码所在目录加进去,比如你的代码放在kernel/mymultiply/下,就写:
    core-y += kernel/mymultiply/
    
  2. 确保你的自定义目录下有独立的Makefile,内容至少包含:
    obj-y += mymultiply.o
    
    其中mymultiply.o是你的系统调用实现文件对应的目标文件。

二、解决make install的错误

你遇到的bzImage缺失问题,看似矛盾(已执行make),实际原因及解决步骤:

  1. 先清理旧编译产物,避免残留问题:
    sudo make clean
    sudo make mrproper
    
  2. 重新配置内核(复用当前系统的配置即可):
    cp /boot/config-$(uname -r) .config
    make menuconfig  # 直接保存退出,无需额外修改
    
  3. 重新编译内核,明确指定生成bzImage:
    sudo make -j$(nproc) bzImage
    sudo make -j$(nproc) modules
    
  4. 再次执行安装流程:
    sudo make modules_install
    sudo make install
    
  5. 如果仍找不到bzImage,手动检查arch/x86/boot/bzImage是否存在,若不存在,查看编译日志是否有报错,或尝试用make vmlinux替代make bzImage(部分内核配置下生成的是vmlinux而非压缩后的bzImage)。

三、额外必做步骤

  • 注册系统调用号:Linux 6.x的x86架构中,64位系统调用号定义在arch/x86/entry/syscalls/syscall_64.tbl,32位在syscall_32.tbl,需添加你的系统调用号、名称和对应函数。
  • 声明函数原型:在include/linux/syscalls.h中添加系统调用的函数声明,比如:
    asmlinkage long sys_mymultiply(int num);
    
  • 验证功能:安装完成后重启系统,用uname -r确认内核版本,编写测试程序调用你的系统调用验证乘法功能。

内容的提问来源于stack exchange,提问作者Amirreza A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 12:52:26