黑群晖引导文件编译避坑


想在群晖上搞个软路由,买了绿联的USB 网卡,但是不被直接支持,为了解决网卡驱动问题, 有两种方式,一种是在装好系统后使用脚本把编译好的驱动加载使用,第二种是同引导文件 一同打包。两种方式都可以,但是网上资源各式各样,没有找对的情况下可能出现各种问题。 下面一一记录备忘。

1 关于编译环境和工具

只需要ds.apollolake-7.0.dev.txz 这个包,它已经包含交叉编译驱动所需要的一切,包括 内核头文件和交叉编译工具等。不用下载 ds.apollolake-7.0.env.txz 和 base-env.txz等 其他文件。在编译的时候根据说明设置 PATH 或者 LINUX_SRC 等参数指向相应的路径即可。

windows 系统下可以使用 DG 分区和 rufus 写盘,linux 系统可以使用 partx 和 dd, mount,不用另外安装或者找专业版的破解软件。

# 将镜像写入U盘,conv 参数保证多个分区组成的镜像的正确写入,否则只会写入第一个分区
# 写之前要检查 U 盘是不是挂在 /dev/sdb 下,根据实际修改
sudo dd if=imagefile.img  of=/dev/sdb bs=2M conv=sync,noerror

# 将镜像文件挂载为 loop 设备 ,再使用 mount 将设备挂载到目录上进行读写
partx -a imagefile.img
partx -d /dev/loopX

mount /dev/loopXpY /mnt
  • 找不到 DG 专业版,破解版又担心不安全,其他版本不支持文件写入

解决办法 使用 Linux dd partx mount 工具

  • U 盘被写入过一次后 windows 将其识别为其他设备导致 rufus 找不到U盘

解决办法 使用 Linux dd

  • 编译过程报错挂载 loop 设备失败,引导文件写盘后无法引导系统。

检查发现系统不能将 img 文件挂载到目录,编译工具把 zImage custom.gz rd.gz 和 grub.cfg 写到宿主机的第一个分区去了,创建的 img 文件中缺少文件,导致引导失败。

解决办法 编译之前检查能否挂载 loop 设备及分区。不能挂载的原因很多,我遇到的是 内核未启用 cp437 和 iso-8859-1 编码,造成无法挂载loop 设备中的分区。启用后重新编 译内核并安装,不仅 loop 设备可以挂载,写入镜像的引导盘也可以挂载读写(不需要通过 DG修改 grub.cfg)。

  • 由于上面所讲的原因,在使用工具编译 redpill-load 的时候覆盖掉工作机子的引导

文件 /boot/grub/grub.cfg, 导致重启电脑失败。恭喜中奖可以用到下面的命令使用 grub2 手动引导进入系统后修复。

set root=(hd0,msdosX)
linux /boot/vmlinuz
initrd /boot/initrd.img root=UUID=xxxxxxxxxxxxxxxxxxxx ro quiet 
boot

2 编译 redpill-load

2.1 编译 redpill-lkm

教程很多,就是使用上文提到的交叉编译工具直接整就是了,整完放到 redpill-load 的 ext/rp-lkm/redpill-linux-vx.y.zzz.ko。

2.2 编译 redpill-load

2.2.1 遇到的坑

官方的支持的配置文件较少,可以使用 pocopico-redpill-load。遇到的问题有:

  • include/json.sh:行16: 2:未绑定的变量

解决办法 检查 user-config.json 文件,修正格式后再试

  • ./ext-manager remove 删除扩展无效

解决办法 检查 bundle.json 文件,以及手动删除 custom/extentions 文件夹下的相应文件夹

  • 可以引导系统但是安装完后10分钟等待超时,刷新或者重启后还是未安装,要求重新安装

解决办法 通过检查是我加扩展驱动有问题,如果驱动加载出了问题可能造成引导问题, 所以不要乱用 ./ext-manager.sh add 加载驱动除非很清楚驱动有问题没有。如果不确定可 以先不加此驱动扩展,待进入系统用手工加载验证无误后再编译进引导中。

2.2.2 加载本地扩展

由于file: 和 http: 一样可以表示uri , 如果发现扩展源码有问题,则可以下载下来后自 己动手改一改 json 文件中的路径和 sha256 ,使用类似下面的方式将本地包加入扩展:

./ext-manager.sh add file:///root/dsm/ax88179_178a-driver/rpext-index.json

# 以下是常用的批量替换命令,记录一下
#sed -i 's?/root/dsm/?'`pwd`/'?' `grep /root/dsm/ -rl .`

总之,网上的保姆教程很多,但我遇到的好多坑却都是别人没有遇到的,特别突出的是pat 包装完后还是未安装状态而要求重装的,如果不认真排查可能就放弃了。

本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议 进行许可。

posted on 2022-08-09 17:08  YourTech-WuPeng  阅读(2208)  评论(0编辑  收藏  举报

导航