rtl8188ftv debian linux 多架构移植方法

news2024/12/30 2:42:25

5 块包邮,挂到 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、sudo modprobe cfg80211
/lib/modules/6.1.0-20-amd64/kernel/net/mac80211/mac80211.ko
/lib/modules/6.1.0-20-amd64/kernel/net/wireless/cfg80211.ko

实际上电脑系统里有/lib/modules/6.1.0-20-amd64/kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko,但是用不了rtl8188ftv,而且文件大小远小于自己编译的,可能是官方系统编译时 linux 还没有加入rtl8188ftv的驱动

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

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

我的 x86_64 debian 12 是 linux 6.1.0-20-amd64,但我是从 linux 6.6 里拿的代码,看起来还支持一些其他型号
在这里插入图片描述

这是 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/realtek/rtl8xxxu/ # 覆盖原模块
sudo depmod

依靠depmod扫描 /lib/modules/`uname -r`/ 下所有模块生成并生成 modules.xxx 实现自动挂载,在 /lib/modules/6.1.0-20-amd64/ 下的 modules.dep 里搜索一下 rtl8xxxu 就明白了。如果有多个同名模块会选择其中一个,所以建议depmod之后检查一遍modules.dep

不需要重启系统就能自动挂载模块,如果没什么问题就不用测试,直接走自动挂载路线。如果没能自动挂载,也就是插上设备后lsmod | grep rtl看不到,就看看modules.dep文件里的模块路径是不是用了系统自带的那个用不起来的同名模块

其实这个还依赖一个配置文件/lib/firmware/rtlwifi/rtl8188fufw.bin,这个文件是通用的,不区分架构,网上或者 x86_64 debian 里也有,都是这个固定位置
在这里插入图片描述
在这里插入图片描述

其他架构

比如 jh7110

不要把rtl8xxxu编译进内核,而是作为模块,因为 rtl8188ftv 要加载rootfs里的rtl8188fufw.bin,编译进内核会过早挂载,rootfs还没启动,会报找不到rtl8188fufw.bin,内核启动参数添加rootwait也不行

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 源码

mac80211 cfg80211编译进内核
比如搜索mac80211,显示搜索结果,这里已经选中了,所以Symbol: MAC80211 [=y]会显示[=y],没选中的会显示[=n],显示效果是立即生效的,但最后要保存

菜单里:按下 y 就显示 *,是编译到内核里,自动挂载。按下 m 显示 M ,是模块,需要把 .ko 复制到 rootfs 里,后面就手动设置一遍自动挂载。n 就是取消选择,框里显示空白
搜索结果里:y 的显示 y,m 的显示 m,没有配置的显示 n

Prompt: 此配置在菜单里显示的名字
Depends on:依赖的配置和其当前的状态
Selects:选择此配置就会自动选择的配置和其当前的状态
Location:此配置的菜单层次路径
(1)、(2)数字会在 1 到 9 循环,数字所在的菜单层次的那一行是菜单能显示的最后一个层次,后面的还没展开,去菜单里找的时候就找这一行,打开之后后面的层级才会展开
具体的看下linux/net/mac80211/Kconfig这个文件就明白了
在这里插入图片描述
在这里插入图片描述
要先打开depends列出的东西,不然菜单里 rtl 选项不显示。在menuconfig菜单里按下/打开搜索,挨个搜索并打开depends列出的东西,字母大小写都行。RTL8XXXU在菜单里显示出来的字符串是Realtek 802.11n USB wireless chips support
在这里插入图片描述
rtl8xxxu.ko放到rootfs里的 /lib/modules/`uname -r`/
一般制作的 rootfs 没有此目录,需要先在开发板上先运行一次 depmod,会提示找不到/lib/modules/xxx,然后mkdir -p /lib/modules/`uname -r`/,再执行一次depmod,会生成一些.alies .dep文件,提示警告找不到xxx.order什么的不用管。

还需要复制一份通用配置文件rtl8188fufw.binrootfs/lib/firmware/rtlwifi/下,没有相应文件夹就新建,因为路径是固定的。如果没有这个配置文件挂载模块就会报找不到rtlwifi/rtl8188fufw.bin

复制文件示例:

sudo mount /dev/sdc4 /mnt/ # sdc4 是开发板的 rootfs 所在的分区
sudo mkdir /mnt/lib/modules/6.6.0-g076ede06c00a/module
sudo cp linux/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko /mnt/lib/modules/6.6.0-g076ede06c00a/module/
sudo mkdir /mnt/lib/firmware/rtlwifi
sudo cp rtl8188fufw.bin /mnt/lib/firmware/rtlwifi/
sudo umount /mnt

复制好文件后,启动开发板后执行一次depmod

成功:

root@debian:~# usb 1-1.2: new high-speed USB device number 3 using xhci_hcd
usb 1-1.2: RTL8188FU rev B (SMIC) romver 0, 1T1R, TX queues 2, WiFi=1, BT=0, GPS=0, HI PA=0
usb 1-1.2: RTL8188FU MAC: 90:de:80:20:eb:6f
usb 1-1.2: rtl8xxxu: Loading firmware rtlwifi/rtl8188fufw.bin
usb 1-1.2: Firmware revision 4.0 (signature 0x88f1)
rtl8xxxu 1-1.2:1.0 wlx90de8020eb6f: renamed from wlan0

root@debian:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 003: ID 0bda:f179 Realtek Semiconductor Corp. RTL8188FTV 802.11b/g/n 1T1R 2.4G WLAN Adapter
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
root@debian:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 6c:cf:39:00:6d:d6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.71/24 brd 192.168.1.255 scope global dynamic noprefixroute end0
       valid_lft 259180sec preferred_lft 259180sec
    inet6 240e:3a1:ef0:6c60:4576:3a89:df07:6ad5/64 scope global dynamic noprefixroute 
       valid_lft 7179sec preferred_lft 3579sec
    inet6 fe80::cfaa:6af3:a323:4950/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: end1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 6c:cf:39:00:6d:d7 brd ff:ff:ff:ff:ff:ff
4: wlx90de8020eb6f: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether c2:8b:09:9c:5f:c2 brd ff:ff:ff:ff:ff:ff permaddr 90:de:80:20:eb:6f
root@debian:~# nmcli r wifi on # 打开 wifi
root@debian:~# nmcli dev wifi # 扫描 wifi,按 q 退出页面
IN-USE  BSSID              SSID            MODE   CHAN  RATE        SIGNAL  BAR>                                                                              
        2C:61:04:F9:FD:4E  360WiFi-F9FD4E  Infra  11    130 Mbit/s  70      ▂▄▆>
        10:39:4E:1C:45:F9  ChinaNet-45F7   Infra  11    270 Mbit/s  57      ▂▄▆>
        C0:B1:01:1F:28:CA  1205            Infra  3     270 Mbit/s  40      ▂▄_>
                                                       
root@debian:~# nmcli dev wifi connect "ChinaNet-45F7" password "12345678"                                                                     
wlx90de8020eb6f: authenticate with 10:39:4e:1c:45:f9
wlx90de8020eb6f: send auth to 10:39:4e:1c:45:f9 (try 1/3)
wlx90de8020eb6f: authenticated
wlx90de8020eb6f: associate with 10:39:4e:1c:45:f9 (try 1/3)
wlx90de8020eb6f: RX AssocResp from 10:39:4e:1c:45:f9 (capab=0x1431 status=0 aid=18)
usb 1-1.2: rtl8xxxu_bss_info_changed: HT supported
wlx90de8020eb6f: associated
Device 'wlx90de8020eb6f' successfully activated with 'd0c8f546-cc5e-42e4-b57a-a36a3a62d096'.
root@debian:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 6c:cf:39:00:6d:d6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.71/24 brd 192.168.1.255 scope global dynamic noprefixroute end0
       valid_lft 258880sec preferred_lft 258880sec
    inet6 240e:3a1:ef0:6c60:4576:3a89:df07:6ad5/64 scope global dynamic noprefixroute 
       valid_lft 7190sec preferred_lft 3590sec
    inet6 fe80::cfaa:6af3:a323:4950/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: end1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 6c:cf:39:00:6d:d7 brd ff:ff:ff:ff:ff:ff
4: wlx90de8020eb6f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 90:de:80:20:eb:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.73/24 brd 192.168.1.255 scope global dynamic noprefixroute wlx90de8020eb6f
       valid_lft 259188sec preferred_lft 259188sec
    inet6 240e:3a1:ef0:6c60:f781:6626:fa4:9f43/64 scope global dynamic noprefixroute 
       valid_lft 7190sec preferred_lft 3590sec
    inet6 fe80::4a36:54:6075:a6d3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@debian:~#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2/vue3 分别自动暴露 API 接口

思路 遍历当前目录下的所有文件&#xff1b;根据遍历结果循环导出文件名与模块名&#xff1b;将文件名作为前缀&#xff0c;模块名作为实际运用函数或变量&#xff1b;将数据整合&#xff0c;放到新的对象中并导出&#xff1b; vue2 的写法 vue3 的写法 使用 this.loading …

学生管理系统[Python语言]

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 学生管理系统是计算机专业最基础的一个作业&#…

计算机毕业设计python在线交友系统django+vue

Flask 是一个轻量级的 Web 框架&#xff0c;使用 Python 语言编写&#xff0c;较其他同类型框架更为灵活、轻便且容易上手&#xff0c;小型团队在短时间内就可以完成功能丰富的中小型网站或 Web 服务的实现。 本在线交友系统管理员功能有个人中心&#xff0c;用户管理&#xff…

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台&#xff0c;资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践&#xff0c;市场呈谨慎观望态势&#xff0c;热度无处安放。 北京金融大数据有限公司&#xff08;以下简称“金融大数据公司”&#xff09;作为市…

ERROR: [7df2405] missing Change-Id in commit message footer

git push origin HEAD:refs/for/[分支名] 使用“git push origin HEAD:refs/for/[分支名]”&#xff0c;报错信息见下图 报错信息&#xff1a;ERROR: [7df2405] missing Change-Id in commit message footer 解决办法 根据git的提示依次执行下面的语句即可 第一步&#xf…

车载气象站:可移动监测的气象站

TH-CZ5车载气象站是一种专门针对车辆、船舶等应急环境检测设备而设计的可移动监测的气象站。 一、系统介绍 车载气象站系统采用先进的高精度GPS及三轴电子罗盘&#xff0c;可实现车行驶时的风速、风向检测。整机为野外型设计&#xff0c;同时还可对气温、相对湿度、雨量、气压…

Nginx部署静态网页,网页嵌套PSE搜索

静态网页实现 1.目的2.PSE设置3.Docker部署nginx4.静态网页仿写参考文件 1.目的 组内有些探索性小需求&#xff0c;发现与OncoSearch功能类似&#xff0c;便尝试自己复现一下该网页&#xff0c;也为后面其他工作打个基础。感谢作者的无私分享&#xff0c;才让我有机会复现出结果…

windows ubuntu sed,awk,grep篇,8,Awk 语法和基础命令

目录 51.Awk 命令语法 52.Awk 程序结构(BEGIN,body,END)区域 53.打印命令 54.模式匹配 Awk 是一个维护和处理文本数据文件的强大语言。在文本数据有一定的格式&#xff0c;即每行数据包 含多个以分界符分隔的字段时&#xff0c;显得尤其有用。即便是输入文件没有一定的格式&a…

有什么好用的足球数据分析工具,可以生成可靠的投注策略?

在寻找好用的足球数据分析工具以生成可靠的投注策略时&#xff0c;有几个值得考虑的选项。以下是一些工具和建议&#xff1a; 乐彩数据分析&#xff1a;这款工具以其精准的预测和高达70%以上的准确率而受到赞誉。它利用大数据算法进行预测&#xff0c;相比个人预测更加准确。此…

集成框架 -- OSS

前言 接入oss必须有这两个文档基础 使用STS临时访问凭证访问OSS_对象存储(OSS)-阿里云帮助中心 前端上传跨域 正文 sts前后端通用&#xff0c;开通图示 AliyunSTSAssumeRoleAccess 后端实现代码 public static void main(String[] args) {String regionId "cn-ha…

邦注科技即热式节能模温机 模温机的工作原理

模温机是一种用于控制模具温度的设备&#xff0c;主要用于塑料注塑、压铸、橡胶成型等工艺中。 其工作原理主要包括以下几个步骤&#xff1a; 加热阶段&#xff1a; 当模具需要加热时&#xff0c;双温模温机会启动加热系统&#xff0c;将热传导油或热传导水加热至设定温度。加…

使用MATLAB/Simulink的PID控制系统设计和自动调整

书籍&#xff1a;Pid Control System Design and Automatic Tuning Using Matlab/Simulink 作者&#xff1a;Liuping Wang 出版&#xff1a;Wiley-IEEE Press 书籍下载-《使用MATLAB/Simulink的PID控制系统设计和自动调整》本书涵盖了具有操作约束的PID控制系统的设计、实施…

[Collection与数据结构] 七大排序算法汇总

1.概述 1.1 概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排…

合泰杯(HT32F52352)RTC的应用(计时)--->掉电不丢失VBAT(代码已经实现附带源码)

摘要 在HT32F52352合泰单片机开发中&#xff0c;rtc在网上还是挺少人应用的&#xff0c;找了很久没什么资料&#xff0c;现在我根据手册和官方的代码进行配置理解。 RTC在嵌入式单片机中是一个很重要的应用资源。 记录事件时间戳&#xff1a;RTC可以记录事件发生的精确时间&…

简单记录一下在linux中安装pytorch成功!

1. 安装版本 pytorch版本:2.0.0 torchvision版本:0.15.0 torchaudio版本&#xff1a;2.0.0 cuda版本&#xff1a;cuda11.8 python版本&#xff1a;3.9 # CUDA 11.8 pip install torch2.0.0cu118 torchvision0.15.1cu118 torchaudio2.0.1 --index-url https://download.py…

最详细的SSL证书说明及免费申请方法

JoySSL官网 注册码230918 SSL&#xff08;Secure Sockets Layer&#xff09;证书&#xff0c;现在通常指的是其继任者TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;是确保数据传输安全的核心技术之一。本文将深入探讨SSL证书的工作原理、重要性、类型以…

CSS-IN-JS Emotion

为什么会有css-in-js 优点 缺点 使用emotion插件库 npm i emotion/core emotion/styled使用时需要解析css属性 使用方式一&#xff1a; 通过注释告诉babel不讲jsx转化为react.create Element的调用&#xff0c;而是转化为jsx语法。会导致一个警告react未使用。 使用方式二&am…

windows11安装nginx

1.解压nginx安装包到没有中文的目录 2.双击运行nginx.exe 3.任务管理器查看是否有nginx进程 4.任务管理器->性能->资源监视器 5.网络->侦听端口&#xff0c;查看nginx侦听的端口&#xff0c;这里是90端口

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

IoT Scenario: Smart Retail System-Multiple Sources and Multiple Terminals

物联网/大数据可视化领域发文可以联系&#xff1a;nascimsina.com IoT Scenario: Smart Retail System Overview The use of IoT in the retail industry enhances customer experiences, optimizes inventory management, and provides valuable insights into consumer beh…