星期五, 07 05月 2021 11:03

高通 qca-wifi 移植

移植的方案是高通的SPF6.1版本,移植到开源OpenWrt18.06.1版本上。SPF6.1采用的内核是3.3.8,OpenWrt18采用的是4.14.90.内核差异只是其中一个难点,主要还是两者之间的框架差异,虽然都是基于OpenWrt开源框架,但是对于OpenWrt18.06.1来讲,更新的很多新的功能,在老的版本上有些组件要么丢弃要么更新。

移植的方案是高通的SPF6.1版本,移植到开源OpenWrt18.06.1版本上。SPF6.1采用的内核是3.3.8,OpenWrt18采用的是4.14.90.内核差异只是其中一个难点,主要还是两者之间的框架差异,虽然都是基于OpenWrt开源框架,但是对于OpenWrt18.06.1来讲,更新的很多新的功能,在老的版本上有些组件要么丢弃要么更新。

主要工作我这边划分了这么几个阶段。代码合入、编译、insmod qca-wifi、初始化调试、luci联调。以下就是根据这几个阶段进行详细讲解,不仅仅是移植步骤,其中也包括移植过程中遇到的一些典型问题。

代码合入

高通私有代码目录比较清晰,在根目录下的qca文件夹下,直接把这个文件夹移植过去放在OpenWrt的根目录下或者其他目录下,但是在添加feeds配置时要指定路径。

 

安装过程中可能会遇到一些问题,诸如depend或者一些未定义的东西。未定义基本都是一些Makefile的函数或者变量,只需要找到openwrt/logs/package/feeds/qca/qca-wifi 这个目录下的log信息,打开看下就知道少些什么文件了,把相应的移植过来就可以了。
对于一些依赖问题,目前最快的解决方法是对报错的依赖Makefile文件,进行拆分编译,先编译依赖模块,然后再编译报错模块(前提是需要把依赖配置删除掉,类似# PKG_BUILD_DEPENDS+=$(FW_10_4))。

编译

由于移植的大部分都是驱动程序,所以编译报错基本都涉及到内核的报错。修改思路是尽量不要动内核源码,以免污染内核。修改起来比较繁琐,而且基本上都是新旧接口替换,头文件替换等等。没什么比较难的东西,这部分主要还是耐心修改就可以了。

总结

至此所有的功能模块都已经调试完成,遇到每一个问题都需要找到相应的突破口,要不然面对这么个大的框架,会让人无从下手。通过这个qca-wifi的移植可以说把OpenWRt的基本知识大概研究了一遍,从代码移植、编译、install、insmod、芯片探测、系统初始化、wifi初始化、校准数据初始化、wifi基本配置工具(wlanconfig、iwconfig、iwpriv等)、luci调试等等。以及在解决问题过程中研究了下netifd的网络配置管理,dnsmasq的dhcp管理等等。模块虽然很独立,但是和系统其它基本组件需要很多配合。

查看 1720
麻喆

专栏编辑