solution for ubuntu安装实时内核(real time kernel)出现debian/rules:6: recipe for target ‘build‘ failed错误

1.报错情况(make -j$(nproc) deb-pkg | tee log)后查看日志报下面错误
debian/rules:6: recipe for target ‘build’ failed
scripts/Makefile.package:73: recipe for target ‘deb-pkg’ failed
Makefile:1430: recipe for target ‘deb-pkg’ failed

2.查了一圈我的理解:因为下载的实时内核和自己本身内核不一样,但是中间为了方便设置新内核的.config文件,是采用了cp -v /boot/config-$(uname -r) .config这个命令直接将本来的内核配置复制过去,但是有可能因为两个内核之间的配置项是不一致的,所以出现编译问题~(如果不对欢迎友友评价或留言批评指出)

3.我的整个安装过程严格参考
https://frankaemika.github.io/docs/installation_linux.html
然后我是在ubuntu18.04上面安装,所以我是装的5.4.*内核,具体*号取哪个版本,我是看的
https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.4/older/ 这里有什么版本和我相进就取哪个,因为我装了好几个版本,发现都是同样上面1的错误,同时看到有博客是说只要和自己内核前两位这个一样(eg:我的5.4.0-126,那可以选5.4.*都可以)应该都没问题,不用纠结。

4.上面报错解决方案:
https://askubuntu.com/questions/1327749
底下有一堆解决方案,我试过的方案:
(not work)

cd /path/to/your/kernel/source/file
sudo gedit .config

然后修改

SYSTEM_BLACKLIST_KEYRING = y

to

SYSTEM_BLACKLIST_KEYRING = N  

(work)

cd /path/to/your/kernel/source/file
sudo gedit .config

修改下面语句(work)

 CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem
# CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"  
CONFIG_SYSTEM_TRUSTED_KEYS=""

5.补充warning的解决方案
problem:
warning: the frame size of 1040 bytes is larger than 1024 bytes。
Solution:
https://blog.youkuaiyun.com/ztguang/article/details/52924331

cd /path/to/your/kernel/source/file
sudo gedit .config

修改下面语句

CONFIG_FRAME_WARN=1024   
#CONFIG_FRAME_WARN=1024            // alter this line
CONFIG_FRAME_WARN=4096
<think>我们正在处理的是在编译实时内核时出现的错误。根据用户提供的错误信息,主要错误是: ``` make[1]: Leaving directory ‘/home/hh/XenomaiIgh/linux-5.4.105’ debian/ruleset/targets/common.mk:295: recipe for targetdebian/stamp/build/kernelfailed make: *** [debian/stamp/build/kernel] Error 2 ``` 以及 ``` dpkg-buildpackage: 错误: debian/rules build subprocess returned exit status 2 make[1]: *** [scripts/Makefile.package:77:deb-pkg] 错误 2 make: *** [Makefile:1469:deb-pkg] 错误 2 ``` 同时,用户还提供了两个参考引用,其中引用[2]提到了一个关于证书文件的错误,并给出了解决方法。虽然错误信息不完全相同,但我们可以借鉴其思路。 ### 问题分析 1. 错误发生在`debian/ruleset/targets/common.mk`的第295行,导致`debian/stamp/build/kernel`目标失败。 2. 错误信息中提到了`dpkg-buildpackage`失败,说明是在构建Debian包时出现问题。 3. 用户可能是在尝试为Ubuntu系统编译一个带有实时补丁(如Xenomai)的内核。 ### 可能的原因 - **缺少依赖**:编译内核需要一些特定的工具和库,如果缺少会导致失败。 - **配置问题**:内核配置(.config)不正确,特别是与证书相关的配置(参考引用[2])。 - **补丁问题**:如果应用了实时补丁(如Xenomai),可能补丁与内核版本不兼容,或者打补丁时出错。 - **环境问题**:编译环境设置不正确,比如没有正确设置架构或交叉编译工具链。 ### 解决方案步骤 #### 步骤1:安装必要的依赖 确保系统已安装所有必要的编译工具和库: ```bash sudo apt update sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev ``` #### 步骤2:清理编译环境 进入内核源码目录,执行清理操作: ```bash make clean # 清理之前编译的中间文件 make mrproper # 恢复到源码的原始状态(会删除.config等配置文件,注意备份) ``` #### 步骤3:检查内核配置(.config) 1. 如果之前有保存的.config文件,可以复制到源码目录下,然后运行: ```bash make oldconfig # 基于旧配置生成新配置 ``` 或者使用菜单界面调整配置: ```bash make menuconfig ``` 2. **重点检查证书配置**:参考引用[2],如果错误与证书文件有关,需要修改.config文件: - 打开.config文件(可能是隐藏文件,使用`ls -a`查看) - 搜索`CONFIG_SYSTEM_TRUSTED_KEYS`和`CONFIG_SYSTEM_REVOCATION_KEYS`,将它们的值设置为空字符串: ``` CONFIG_SYSTEM_TRUSTED_KEYS="" CONFIG_SYSTEM_REVOCATION_KEYS="" ``` #### 步骤4:检查实时补丁 如果使用了Xenomai等实时补丁: 1. 确保补丁版本与内核版本兼容。 2. 重新应用补丁(按照补丁提供的说明步骤): ```bash ./scripts/prepare-kernel.sh --linux=linux-5.4.105 --adeos=adeos-ipipe-5.4.105-x86-XX.patch --arch=x86 ``` 注意:请根据实际补丁文件名和架构调整命令。 #### 步骤5:尝试重新编译 使用以下命令重新编译内核(以生成deb包为例): ```bash make -j$(nproc) deb-pkg # 使用多核编译并生成deb包 ``` 如果出现同样的错误,请查看详细的错误日志(通常在终端输出的前几行错误信息中会有更具体的提示)。 #### 步骤6:处理特定错误 如果错误信息明确指向某个文件(如引用[2]中的证书文件缺失),则按照以下方法处理: - 错误示例:`make[1]: *** 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list”` 解决方案:在.config文件中将证书相关的配置置空(如上所述)。 #### 步骤7:查看详细日志 如果以上步骤无法解决,请记录完整的编译日志: ```bash make -j$(nproc) deb-pkg 2>&1 | tee build.log ``` 然后分析`build.log`文件,查找错误发生的位置和原因。 ### 常见问题及解决 - **错误:fatal error: openssl/opensslv.h: No such file or directory** 解决方案:安装OpenSSL开发包 ```bash sudo apt install libssl-dev ``` - **错误:gcc: error: invalid constraint in ‘asm’** 解决方案:可能是gcc版本过高,尝试降低gcc版本(如使用gcc-8): ```bash sudo apt install gcc-8 g++-8 export CC=gcc-8 export CXX=g++-8 ``` ### 注意事项 - 编译内核需要较长时间,请确保系统有足够的内存和交换空间。 - 如果是在虚拟机中编译,建议分配足够的CPU核心和内存。 ### 相关问题 1. 如何为Ubuntu内核实时补丁(如Xenomai)? 2. 编译内核时如何解决依赖问题? 3. 如何调整内核配置以支持特定的硬件或功能? 4. 如何解决内核编译中的证书错误?</think>### 解决实时内核编译错误指南 您遇到的错误 `make[2]: *** [debian/rules:6build] 错误 2` 通常与内核编译配置和证书设置相关。以下是系统化的解决方案: #### 步骤1:修复证书配置问题(关键步骤) 1. 进入内核源码目录: ```bash cd /home/hh/XenomaiIgh/linux-5.4.105 ``` 2. 修改内核配置文件: ```bash nano .config # 使用Ctrl+W搜索配置项 ``` 3. 定位并修改以下配置项: ```config # 删除引号内的内容(保持空字符串) CONFIG_SYSTEM_TRUSTED_KEYS="" CONFIG_SYSTEM_REVOCATION_KEYS="" ``` > 此操作解决证书文件缺失问题[^2] 4. 保存文件后更新配置: ```bash make olddefconfig ``` #### 步骤2:清理编译环境 ```bash make clean # 清理中间文件 make mrproper # 完全重置编译环境 ``` #### 步骤3:修复debian规则文件 1. 检查规则文件权限: ```bash chmod +x debian/rules ``` 2. 手动创建缺失目录: ```bash mkdir -p debian/stamps touch debian/stamps/build-kernel ``` #### 步骤4:安装编译依赖项 ```bash sudo apt update sudo apt install build-essential libncurses-dev bison flex libssl-dev \ libelf-dev dwarves zstd debhelper ``` #### 步骤5:重新编译内核(使用安全参数) ```bash # 避免使用高并行度,先测试单线程编译 make -j1 deb-pkg # 确认成功后使用多核编译 make -j$(nproc) deb-pkg ``` #### 步骤6:处理Xenomai补丁问题 如果是Xenomai实时补丁导致: ```bash # 检查补丁兼容性 ./scripts/checkpatch.pl xenomai-patch.diff # 重新应用补丁 patch -p1 --dry-run < xenomai-patch.diff patch -p1 < xenomai-patch.diff ``` #### 错误诊断表 | 错误现象 | 解决方案 | |---------|---------| | `debian/canonical-certs.pem` 缺失 | 执行步骤1清除证书配置 | | `debian/stamps` 目录缺失 | 执行步骤3手动创建目录 | | 权限拒绝错误 | `sudo chown -R $USER .` | | 头文件缺失 | 安装对应开发包:`sudo apt install linux-headers-$(uname -r)` | #### 验证成功安装 ```bash # 安装生成的deb包 sudo dpkg -i ../linux-*.deb # 检查新内核 sudo reboot uname -r # 应显示5.4.105版本 ``` > **重要提示**:实时内核编译需要完整工具链,建议预留20GB磁盘空间和至少8GB内存。若遇内存不足,可添加交换空间: > ```bash > sudo fallocate -l 4G /swapfile > sudo mkswap /swapfile > sudo swapon /swapfile > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值