rtl8188ftv linux debian 多架构移植方法

发布于:2024-04-27 ⋅ 阅读:(28) ⋅ 点赞:(0)

6 块包邮,挂到 x86_64 debian 12 虚拟机,实测下载能到 22Mbps,也可能就2Mbps,上传能到 40Mbps

关键词:rtl8xxxu、rtl8xxxu.ko、rtl8xxxu_8188f.c、mac80211.h、cfg80211.ko、sudo modinfo rtl8xxxu.ko | grep depend、sudo modprobe mac80211

这里编译成模块,可挂载模块直接测试,不用重启系统

主要依赖 rtl8xxxu.ko,其代码在linux/drivers/net/wireless/realtek/rtl8xxxu里,不同的内核版本的代码也会变化,一份代码不可通用,应理解方法自行编译。
主要变化的是系统 api,不重要的就直接注释掉,有的则是结构体成员又包了一层,需要把包了一层的名字加上去,也可以从同一版本的linux内核代码里找,就不改代码。都可以试试

我的 x86_64 debian 12 是 linux 6.1.0-20-amd64,但我是从 linux 6.6 里拿的代码,看起来还支持一些其他型号
在这里插入图片描述
如果是编译到内核里就需要打开depends列出的东西,不然不显示
在这里插入图片描述
这是Makefile
在这里插入图片描述

编译成模块

rtl8xxxu 文件夹单独复制出来编译
x86_64 debian 12:

sudo apt install linux-headers-$(uname -r) # 安装头文件,也可能系统已经自带
make CONFIG_RTL8XXXU=m -C /lib/modules/`uname -r`/build M=`pwd` modules # -C 后面的路径还可以是 /usr/src/linux-headers-6.1.0-20-common,都是进到  /usr/src/linux-headers-6.1.0-20-common 里

如果编译出现错误,那就是 api 变了。我这次遇到的问题是这个rtl8xxxu_core.c里的ieee80211_handle_wake_tx_queue变了,就直接注释了,再编译一次就好了,然后编译出了rtl8xxxu.ko
在这里插入图片描述
测试:

$ sudo insmod rtl8xxxu.ko
insmod: ERROR: could not insert module rtl8xxxu.ko: Unknown symbol in module

是因为这个模块还依赖其他模块,查看这个模块依赖哪些东西:

$ sudo modinfo rtl8xxxu.ko | grep depend
depends:        usbcore,mac80211,cfg80211

修复:

sudo modprobe cfg80211
sudo modprobe mac80211
sudo insmod rtl8xxxu.ko
# 没有任何输出就对了

查看模块挂载信息:

$ lsmod | grep rtl
rtl8xxxu              233472  0
mac80211             1175552  1 rtl8xxxu
cfg80211             1142784  2 mac80211,rtl8xxxu
usbcore               348160  12 xhci_hcd,ehci_pci,usbnet,usbhid,usb_storage,rndis_host,ehci_hcd,xhci_pci,cdc_ether,rtl8xxxu,uas,uhci_hcd

把 rtl8188ftv 插上电脑就能看到 wifi 出现了,然后就好了

开机自动加载模块:

sudo cp rtl8xxxu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/
# 如果上面的复制不过去就自己找下路径,比如 sudo cp rtl8xxxu.ko /lib/modules/6.1.0-20-amd64/kernel/net/wireless/
sudo depmod

其他架构

比如 jh7110。现在还没测试。。。先记录下
从芯片用的 linux 源码里复制出来的就不用改了,应该一次就编译成功

sudo apt install gcc-riscv64-linux-gnu
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- CONFIG_RTL8XXXU=m -C /media/xiaguangbo/linux_data/data/jh7110/source/linux M=`pwd` modules # -C 后面的路径也可以是其他芯片的 linux 源码

mac80211cfg80211这两个可能就用make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- menuconfig去源码的菜单里去配置还是怎样