背景:之前我用我的树莓派来组网测试,但是一个以太网口不够用,无线不能接入测试网,所以萌生了用空闲usb口来当网口的想法,JD一搜,买了个绿联的USB百兆网卡给我的树莓派用。
但是店家说内核版本超5.3的可能不能用,我的都到15了
pi@link:~ $ uname -a
Linux link 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
本来打算自己编的,结果买来还是直接免驱,asix驱动早就有了。
但我可能还是决定编译一下,就当学习了。
先放个资料,还有这个,
店家给的驱动在这,包含了源码和makefile,readme等。芯片官方网站在这,也给出了驱动,版本对比如下:
-rwxr-xr-x 1 sss sss 37580 Jun 29 22:54 AX88772C_772B_772A_760_772_178_LINUX_DRIVER_v4.20.0_Source.tar.gz
-rwxr-xr-x 1 sss sss 39329 Jun 29 22:54 AX88772C_772B_772A_Linux_Driver_v5.0.0_Source.tar.bz2
readme里都写明了编译驱动需要linux内核源码,树莓派内核下载在这,树莓派交叉编译工具下载在这,但是readme里说这些工具可能已经过时了,推荐使用apt安装,我是arm64的可以用这个:
sudo apt-get install gcc-aarch64-linux-gnu
使用交叉编绎的原因是,看别人的文档,好像要编挺长时间,所以就交叉编译提高下速度。
顺便提一句,编译驱动有两种办法,一种是编译进镜像里,一种是编译出.ko然后用命令安装。我准备用第二种,这里开个坑,后续编进镜像里。对了,这里还有一个限制:
Note: Please make sure the kernel is built with one of the “Support
for Host-side, EHCI, OHCI, or UHCI” option support.
树莓派必定启用了这个选项,因为他支持usb。
官网给出的源码除了给出驱动的编译教程外,还多了个命令行工具ioctl的编译,用于改写eeprom的内容,比如mac地址。这次应该用不到这个。
好了,前期准备差不多了,各种资料准备好后,就该决定怎么编了。需要的东西概括下包括:
linux内核源码,交叉编译工具链,驱动源码。内核源码是同一套,但是另外两个是额外的两套,考虑到我的内核版本,我还是选个冒险的方案吧,apt安装最新的工具链,驱动源码也用官网的:
Linux kernel 5.x/4.x/3.x/2.6.x Driver | Version | Release Date | File Size |
---|---|---|---|
For all Android systems, Linux kernel 2.6.14 and later | 5.0.0 | 2022-02-21 | 38.4 KB |
先看树莓派官方文档,交叉编译内核章节,配置内核章节。
还有linux官方的Kernel Build System教程。