rtl8188ftv debian linux 多架构移植方法

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:~#

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】error LNK2001: 无法解析的外部符号

参考&#xff1a;Qt/VS LNK2019/LNK2001&#xff1a;无法解析的外部符号_qt lnk2001无法解析的外部符号-CSDN博客 微软官方报错文档-链接器工具错误 LNK2019 __declspec error LNK2001: 无法解析的外部符号 "__declspec(dllimport) 原因 以这种为前缀的基本上跟库相关…

用Scrapy编写第一个入门项目(基础四件套:spider,pipeline,setting,items)

简介&#xff1a;scrapy是一个用于爬取网页并提取数据的应用框架&#xff0c;也可用于提取API数据 写在前面&#xff1a;只想看scrapy的童鞋子请跳过5-7直接step8&#xff09; step5&#xff0c;6是xpath和css入门&#xff0c;用于提取数据&#xff1b; step7是文件储存方式&…

SoundStream: 下一代的神经网络音频编解码器,实时压缩不牺牲音质

音频编解码技术的目标是&#xff0c;通过减少音频文件的大小来节省存储空间或减轻网络传输的负担。理想的情况下&#xff0c;即使音频被压缩&#xff0c;我们听到的声音与原版也应该没有任何区别。 过去&#xff0c;已经有不少编解码技术被开发出来&#xff0c;满足了这些需求…

【VS Code安装及远程服务器】(未完待续)

目录 一、Python 安装及设置1.1 Python安装1.2 Python设置 二、VScode 安装2.1 VScode安装2.2 中文界面设置及解决中文显示乱码问题2.2.1 中文界面设置2.2.2 解决中文显示乱码问题 2.3 VScode环境变量配置2.4 VScode添加到右键2.5 VScode终端&#xff0c;创建、激活虚拟环境&am…

Docker-Compose单机多容器应用编排与管理

前言 Docker Compose 作为 Docker 生态系统中的一个重要组件&#xff0c;为开发人员提供了一种简单而强大的方式来定义和运行多个容器化应用。本文将介绍 Docker Compose 的使用背景、优劣势以及利用 Docker Compose 简化应用程序的部署和管理。 目录 一、Docker Compose 简…

数据结构复习指导之串

文章目录 串 考纲内容 复习提示 1.串的定义和实现 1.1串的定义 1.2串的存储结构 1.2.1定长顺序存储表示 1.2.2堆分配存储表示 1.2.3块链存储表示 2.串的基本操作 拓展 知识回顾 串 考纲内容 字符串模式匹配 复习提示 本章是统考大纲第6章内容,采纳读者建议单独作为…

ActiveMQ 反序列化漏洞 (CVE-2015-5254)

一、漏洞描述 Apache ActiveMQ 是由美国阿帕奇&#xff08;Apache&#xff09;软件基金会开发的开源消息中间件&#xff0c;支持 Java 消息服务、集群、Spring 框架等。属于消息队列组件(消息队列组件&#xff1a;分布式系统中的重要组件&#xff0c;主要解决应用耦合、异步消息…

宽字符的来历:从ASCII到Unicode,C语言中的宽字符处理

目录 一、ASCII编码&#xff1a;字符世界的开篇 二、Unicode与宽字符的诞生 宽字符类型与宽字符串 三、C语言中的宽字符处理函数 四、宽字符与多字节字符 结语 在计算机科学的发展历程中&#xff0c;字符编码经历了从简单到复杂、从单一语言到全球多语种支持的演变过程。…

十大落地护眼灯有哪些?2024十大落地灯品牌排名

十大落地护眼灯有哪些&#xff1f;想要让孩子在舒适敞亮的光线下学习&#xff0c;不少家长都会给孩子选择入手落地灯&#xff0c;不过市面上却流传着落地灯品质恶劣的负面新闻。我是一名专业测评家居博主&#xff0c;终于搞清楚落地灯负面新闻的原因&#xff0c;其原因主要是因…

回顾python

回顾python 目录 回顾python 1.定义变量 2.分支控制结构 3.for循环 4.while 循环 5.类 面向对象 &#xff11;&#xff09;​方法的定义&#xff1a; &#xff12;&#xff09;类的定义&#xff1a; &#xff13;&#xff09;类的继承 1.定义变量 a23b"张三&quo…

【NOI-题解】1607. 两位数运算1020. 算算和是多少1029. 倒序输出一个四位整数1418. 求一个5位数的各个位之和1608. 三位数运算

文章目录 一、前言二、问题问题&#xff1a;1607. 两位数运算问题&#xff1a;1020. 算算和是多少问题&#xff1a;1029. 倒序输出一个四位整数问题&#xff1a;1418. 求一个5位数的各个位之和问题&#xff1a;1608. 三位数运算 三、感谢 一、前言 本章节主要讲解基本运算中的…

在线商城客服系统,多用户电商系统可API对接客服软件

在当今数字化时代&#xff0c;在线商城客服系统和多用户电商系统之间的无缝API对接已成为电商行业的重要趋势。这种整合为商家提供了更高效的客户服务和管理方式&#xff0c;提升了用户体验和业务效率。其中&#xff0c;商淘云电商客服系统作为一款强大的客服管理工具&#xff…

react props传参

props是父子传参的常用方法。 一、主要功能 1.传参 定义&#xff1a;父级组件向子级组件传递参数。 2.验证数据类型格式 定义&#xff1a;可以指定父组件传递过来数据为指定类型。 3.设置默认值 定义&#xff1a;在参数未使用时&#xff0c;直接默认为指定值。 二、实例代…

OpenSceneGraph

文章目录 关于 OpenSceneGraphScreenshots - OpenMW 关于 OpenSceneGraph 官网&#xff1a;https://openscenegraph.github.io/openscenegraph.io/github : https://github.com/openscenegraph/OpenSceneGraphClasses : https://podsvirov.github.io/osg/reference/opensceneg…

Android系统的硬件抽象层

硬件抽象层 Author: cpu_codeDate: 2020-07-12 22:20:34LastEditTime: 2020-07-13 22:52:02FilePath: \notes\android_bottom\hardware_abstraction_layer.mdGitee: https://gitee.com/cpu_codeGithub: https://github.com/CPU-CodeCSDN: https://blog.csdn.net/qq_44226094Gi…

后端如何处理接口的重复调用

首先是&#xff0c;原理在请求接口之前&#xff0c;使用过滤器拦截数据&#xff0c;来进行判断两次数据是否一致。 1.自定义注解 2.创建一个Handler处理器 3.RepeatSubmitInterceptor的实现类 4.过滤器的配置

thinkphp6 workerman无法使用框架Db/model等类库方法解决方案

thinkphp6 workerman无法使用框架Db/model相关操作解决 执行安装相关扩展 composer require webman/gateway-worker引入成功后编辑服务类文件,直接展示代码 <?phpnamespace app\server\controller;use GatewayWorker\BusinessWorker; use GatewayWorker\Gateway; use Gate…

从0到1手写注册中心Registry之核心接口设计

一. 数据模型 InstanceMeta用于描述服务实例的元信息&#xff1a; schema&#xff1a;比如httphost,&#xff1a;比如127.0.0.1port&#xff1a;比如8082context&#xff1a;比如midnight-rpcstatus&#xff1a;服务上下线&#xff0c;true/falseParameters: 服务携带的参数&…

React 第十一章 Dva

Dva 是一个基于 redux 和 redux-saga 的数据流方案&#xff0c;然后为了简化开发体验&#xff0c;dva 还额外内置了 react-router 和 fetch&#xff0c;所以也可以理解为一个轻量级的应用框架。 Dva 的本意&#xff0c;是将基于 React 技术栈中常用到的库集成到一起。当时&…

Django-admin组件

Django-admin组件 admin是django中提供的一套可视化工具&#xff1a;用于对ORM中定义的表进行增删改查。 1 概览 在django项目启动时&#xff0c;自动找到注册到admin中的所有model中定义的类&#xff0c;然后为这些类生成一系列的URL和视图函数&#xff0c;实现基本增删改查…