openwrt内核模块怎样解决哈希依赖问题

openwrt内核模块怎样解决哈希依赖问题 

来源 https://forum.gl-inet.cn/forum.php?mod=viewthread&tid=1032&extra=page%3D1

参考 https://forum.gl-inet.cn/forum.php?mod=forumdisplay&fid=46&page=1

 

openwrt为了确保在安装内核模块时出现符号表丢失等情况,对于内核软件包都需要做哈希校验,软件包编译环境的内核哈希与当前固件的内核哈希一致才可以安装,否则会出现类似下面的错误提示。

很多情况下,用户需要安装自己编译的kmod就无法安装,下面教大家怎样处理这种情况。
在使用之前,请确保你要安装的内核包一定可用,否则可能出现内核崩溃,设备成砖的情况

1. 获取当前固件的内核哈希值
执行以下命令

opkg info  kernel

返回结果的红框部分即为当前的内核哈希

 

2. 使用获取到的HASH值编译需要的软件包(软件包路径请自己根据实际情况替换)

make V=s LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8 ./package/kernel/linux/{clean,compile}

3. 找到编译好的ipk文件,导入到固件安装即可
4. 如果重新编译固件,但是想要引用之前的软件仓库(注意这种方法仅在内核配置和版本不变的情况下使用)

  1. make -j17 target/linux/{clean,compile} V=s LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8
  2. make V=s LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8 ./package/kernel/linux/{clean,compile}
  3. make -j$(expr $(nproc) + 1) LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8

 

编译openwrt固件时,遇到一点问题就要重新编译,效率非常低

1. 仅编译单个软件包(以编译opkg为例)

make package/opkg/compile

2. 仅编译软件包需要的主机工具(以编译opkg需要的主机工具为例)

make package/opkg/host/compile

3. 可选软件包出错时不阻塞编译

make IGNORE_ERRORS=m

4. 必选软件包出错时不阻塞编译

make IGNORE_ERRORS=y

5. 使用n个线程同时编译(一般CPU核心数+1效率最高,我这里是16核的)

make -j17

6. 只编译内核

make target/linux/install

7. 仅打包固件而不编译软件包(前置条件是需要的软件包之前已经编译通过)

make target/install

8. 将当前配置做差异化备份并保存成文件

./scripts/diffconfig.sh >diff.conf

9. 将差异化备份文件应用到编译配置

  1. cp diff.conf .config
  2. make defconfig
 
================= End
 
 

 

 
posted @ 2023-01-31 09:10  lsgxeva  阅读(753)  评论(0编辑  收藏  举报