1. 环境准备与内核编译
玩过全志V3S开发板的朋友都知道,这玩意儿性价比是真高,但资料也是真的散。最近在荔枝派Zero上折腾RTL8723BS这个WiFi模块,想把过程记录下来,给后来人铺个路。我用的环境是主线Linux内核5.10,根文件系统是Buildroot 2017.8.1。选择主线内核主要是为了更好的驱动支持和社区维护,虽然可能会遇到一些小坑,但长远看更省心。
第一步肯定是准备编译环境。你得有一台性能还凑合的电脑,装好Ubuntu或者你习惯的Linux发行版。我习惯用Ubuntu 20.04,比较稳定。然后就是安装一堆编译依赖,这个步骤不能省,不然编译到一半报错更头疼。打开终端,一口气把常用的工具链和库都装上:build-essential, gcc-arm-linux-gnueabihf, bison, flex, libssl-dev, ncurses-dev 这些一个都不能少。你可以用 apt-get install 一条命令搞定,记得前面加上 sudo。
接下来就是获取内核源码。你可以去 kernel.org 下载,或者用全志官方维护的仓库。我这里用的是主线5.10内核。下载解压后,进入内核源码目录。为荔枝派Zero编译内核,有一个现成的默认配置可以用,非常方便。执行 make ARCH=arm licheepi_zero_defconfig 这个命令。这个配置文件已经为V3S芯片做了很多基础适配,包括打开了我们需要的RTL8723BS驱动选项。
这里有个关键点需要注意。执行完 make menuconfig 之后,我们需要确认一下WiFi驱动的配置状态。RTL8723BS这个驱动在内核里被标记为 “staging” 驱动,意思是它还在“舞台”上,代码质量可能不如主线驱动那么稳定,但功能是完整的。在配置菜单里,你需要找到 Device Drivers -> Staging drivers -> Realtek RTL8723BS SDIO WiFi。默认情况下,licheepi_zero_defconfig 已经把它配置为编译成内核模块(=m),而不是直接编译进内核(=y)。这是有原因的,因为这个模块需要加载一个额外的固件文件(rtl8723bs_nic.bin)到WiFi芯片内部才能工作,编译成模块更方便我们后续管理和加载。
配置确认无误后,就可以开始编译了。命令是 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4。这里的 -j4 表示用4个线程并行编译,能大大加快速度,具体数字根据你电脑的CPU核心数来定。编译过程大概要十几二十分钟,泡杯茶等着就好。编译完成后,我们需要的驱动模块文件 r8723bs.ko 会生成在 drivers/staging/rtl8723bs/ 目录下。同时,我们还需要把编译生成的整个内核镜像(zImage)和设备树文件(sun8i-v3s-licheepi-zero.dtb)也准备好,后面会用到。
2. 驱动模块与固件部署
内核编译好了,驱动模块也生成了,下一步就是把这些东西放到开发板上运行。首先把TF卡分成两个分区:第一个是FAT32格式的BOOT分区,用来放内核镜像和设备树;第二个是EXT4格式的根文件系统分区。用读卡器把卡接到电脑上,把编译好的 zImage 和 .dtb 文件拷贝到BOOT分区。
重点来了,驱动模块和固件怎么处理?我们把刚才生成的 r8723bs.ko 文件,以及在内核源码目录里找到的 rtl8723bs_nic.bin 固件文件,也一并拷贝到TF卡的BOOT分区。先放这里,等系统跑起来我们再挪到正确的位置。为什么这么做呢?因为我们的根文件系统是只读的或者还没有这些文件,直接从BOOT分区复制过去最方便。
把TF卡插回荔枝派Zero,上电启动。系统跑起来后,通过串口终端登录。首先,我们要把驱动模块加载到内核。把TF卡BOOT分区挂载到开发板上的某个目录,比如 /mnt,然后进入该目录。执行 insmod r8723bs.ko 命令。如果一切顺利,你会看到类似下面的内核日志输出:
# insmod r87


450

被折叠的 条评论
为什么被折叠?



