从QSDK源码编译RAX3000Q所需的软件包

2022-02-10 | Router | #路由器 #OpenWrt

前一篇文章中讲到了如何开启RAX3000Q的ssh,并且发现其固件正是QSDK,但是并没有妥善解决软件包的问题,这一次我们尝试基于QSDK源码编译我们想要的软件包的ipk文件。

实践过程也是参考了很多网上的关于QSDK的文章。

我是在docker容器中构建的,环境是Ubuntu 20.04 (dockerhub上的ubuntu:latest),对于其他发行版如ArchLinux,在编译时可能需要解决宿主机上openssl头文件版本的问题,且本文中提到的patch可能不再适用。

获取源码

QSDK的源码管理类似于Android和ChromeOS,也基于repo工具,在开始之前需要先安装好repo

QSDK的manifest文件存放在这个仓库中,只有一个名为release的branch。在之前的分析中知道该路由器Openwrt版本为15.05和kernel版本为4.4,结合QSDK的wiki,我选择了主版本号为11的QSDK的最新的manifest文件:caf_AU_LINUX_QSDK_NHSS.QSDK.11.5.0.6_TARGET_ALL.11.5.0.6.055.xml

使用如下语句获取源码并初始化

repo init -u git://source.codeaurora.org/quic/cc-qrdk/releases/manifest/qstak -b release -m caf_AU_LINUX_QSDK_NHSS.QSDK.11.5.0.6_TARGET_ALL.11.5.0.6.055.xml
repo sync

请勿选择caf_AU_LINUX_QSDK_NHSS.QSDK.12.0.R9_TARGET_ALL.12.0.09.841.011.xml,测试发现其中的linux版本为5.4,且musl-libc版本与当前固件中的不符。

因为编译环境的问题,编译过程中(尤其是构建toolchain时)会导致很多error产生,在开始之前需要进行一些修改,这些修改多数是增加一些.patch文件,或者是对Makefile的一些改动。

其中大部分改动参考了这篇文章

编译

编译前的准备

首先进入qsdk源码目录,其中的目录布局和openwrt非常接近

cd qsdk

在配置之前将feeds中的软件包添加进来:

make package/symlinks

实际上是根据feeds.conf更新feeds,然后在./packages/feeds/目录里面创建到./feeds/packages中的feeds包的软链接,在这一步之后才能看见更多的软件包

配置QSDK

使用默认的配置作为.config

cp qca/configs/qsdk/ipq_open.config .config

接着使用菜单配置:

make menuconfig 

RAX3000Q自带的固件是32bit的,因此我们这里targetIPQsubtargetIPQ50xx(32bit),接着直接保存为.config

在现有的.config中添加默认配置:

make defconfig

接着可以进行一些个性化配置,或者备份对.config文件所作的修改,我直接跳过了:

make kernel_menuconfig # 配置内核,可选
make menuconfig # 再次配置,可选
scripts/diffconfig.sh > mydiffconfig # 备份修改到文件mydiffconfig,可选

编译

编译失败的排错

这篇文章里已经涵盖了很多在ubuntu20.04环境中编译时可能遇到的问题,但我在编译这一版本的QSDK时还遇到了额外的问题。所有对QSDK所需的修改已经在文章开头的diff文件中涵盖了,这里只是列出信息有助于排错:

引用