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. 如果重新编译固件,但是想要引用之前的软件仓库(注意这种方法仅在内核配置和版本不变的情况下使用)
- make -j17 target/linux/{clean,compile} V=s LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8
- make V=s LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8 ./package/kernel/linux/{clean,compile}
- 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. 将差异化备份文件应用到编译配置
- cp diff.conf .config
- make defconfig