在orangepi-PC, ubuntu wily mini下使用usb wifi(rtl8188cu/rtl8192cu)

linux内核3.8以后加入了在内核态加载firmware的支持,因此systemd在v217以后去除了用户太加载firmware的支持

而orangepi到现在(2016年1月6日)仍然使用的是3.4.39内核,该内核不支持内核态加载firmware。而wily(ubuntu 15.10)使用的systemd是v225,不支持用户态加载firmware,因此在orangepi+wily的情况下,firmware是无法加载的。

要解决这个问题,我们需要使用udev的rule文件调用外部程序加载firmware

我写了这样一个程序来加载firmware,代码地址为:https://github.com/freason/orangepi_wily_firmware_loader.git

使用方法如下:

1. 修改: “/lib/udev/rules.d/50-firmware.rules”这个文件,把

  SUBSYSTEM=="firmware", ACTION=="add", ATTR{loading}="-1"

这一行换成:

  SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware $env{FIRMWARE} /sys/$env{DEVPATH}"

2. 用arm-gcc编译firmware.c生成名为firmware的可执行文件,并把这个文件拷贝到orangepi的/lib/udev目录下

  这里有两种方式,一种是直接在orangepi下编译,另外一种是使用arm-linux-gnueabi-gcc进行交叉编译。我使用的第二种方式,github上提供了我编译的版本

3. 拷贝firmware到orangepi的/lib/firmware下,orangepi wily没有提供firmware所以我们必须手动从其他地方拷贝firmware过来,我是从pc的UBUNTU上拷贝过来的

firmware.c工作的原理:

插入usb wifi后,rtl8192cu的驱动会请求firmware,这时内核会创建两个文件loading和data。其中loading为加载的状态,1为正在加载,0为加载完成,-1为错误,我们向loading文件里写入这三个字符串即可通知内核相应的消息。data为数据缓冲,我们将firmware数据写入该文件,内核会从这个文件中读取firmware数据。

注意:写loading这个文件不能使用bash中的echo+重定向,我试过,没成功。我没有仔细研读fopen的代码,但firmware.c中打开文件时使用的模式为"we",其中e表示O_CLOEXEC,参见http://linux.die.net/man/3/fopen,不知bash下有什么命令能起到这个模式的作用。

时间: 2024-10-12 15:10:56

在orangepi-PC, ubuntu wily mini下使用usb wifi(rtl8188cu/rtl8192cu)的相关文章

在orangepi-PC, ubuntu trusy mini下使用usb wifi(rtl8188cu/rtl8192cu)

orangepi-PC + ubuntu 14.04本身支持firmware的读取,之所以会无法加载rtl8192cu的firmware是因为orangepi-PC的ubuntu 14.04(trusty) 没有提供firmware 我们需要做的只是从其他地方拷贝firmware到orangepi的/lib/firmware中即可,我是从笔记本上跑的ubuntu中拷贝的firmware 当网卡加载后,因为没有界面,所以我们需要用命令行配置网卡,我使用的方法如下: 1. 更改/etc/networ

在Linux下使用usb wifi

今天购买了D-Link DWL-G122 usb wifi dongle.之前已经在网上查好了,该款设备可以被Linux支持,同时也找到了几种安装驱动的方法: 使用ndiswrapper直接安装Windows XP版(目前ndiswrapper只支持XP版的)的驱动程序文件(*.inf). 直接从Realtek上下载相应的驱动程序.事先可以在驱动光盘中找到Windows版驱动程序文件的名字,如net8192su.inf.然后在Realtek的官方网站上搜索8192su相应的Linux驱动. 从g

天嵌E9平台下进行USB Wifi模块RT3070驱动的移植

因为项目工作须要,要在天嵌E9平台下实现wifi的点对点,点对多点的传输. Wifi 模块芯片:雷凌3070芯片 嵌入式平台:E9(ARM) 交叉编译环境:arm-none-linux-gnueabi 1 首先下载了wifi模块的驱动 2011_0719_RT3070_RT3370_RT5370_RT5372_RT2070_Linux_STA_V2.5.0.3_DPO 2 对驱动进行交叉编译 a 打开驱动文件解压后的文件,假设须要WPA等功能,可打开./os/linux/config.mk进行编

Andorid开发学习---ubuntu 12.04下搭建超好用的安卓模拟器genymotion 安装卸载virtualbox 4.3

什么是Genymotion? Genymotion是一套完整的工具,它提供了Android虚拟环境.它简直就是开发者.测试人员.推销者甚至是游戏玩家的福音. Genymotion支持Windows.Linux和Mac OS等操作系统,容易安装和使用:按简单的安装过程,选择一款Android虚拟设备,开启后就体验Genymotion带来的快感吧.-----引自百度百科 一.下载并安装genymotion 1.下载genymotion http://www.genymotion.cn/#theme=

Ubuntu 16.04下使用VirtualBox虚拟机安装Windows XP win7 linux 安装虚拟机

1. http://www.linuxidc.com/Linux/2016-09/135192.htm 2. 对于初次使用Ubuntu 16.04的多小伙伴来说,可能还不是很熟悉操作,有时候,我们就需要在这个Ubuntu系统中,再安装一个虚拟机来帮助自己完成Windows下的需求,那么这里就来讲讲如何在Ubuntu 16.04下安装VirtualBox虚拟机. 如果是Ubuntu16.04升级之后VirtualBox不能安装,提示缺少两个依赖库,分别为 1.libsdl1.2debian(lib

Ubuntu 14.04下超级终端Minicom连接ARM(转)

转自:https://blog.csdn.net/ajianyingxiaoqinghan/article/details/70209765 笔者的工作环境: PC系统:Ubuntu 14.04 LTSARM板信息:Linux内核版本:Linux iMX6-ubuntu-desktop 3.0.35-g914453f-dirty #1 SMP PREEMPT Wed Nov 30 18:00:25 PST 2016 armv7l armv7l armv7l GNU/Linux内核:Linux主机

Hadoop 2.2.0 常见问题之:Ubuntu 64环境下“Unable to load native-hadoop library for your platform”问题”

问题 最近在学习Hadoop(2.2.0),打算写一个MapReduce的小程序在Ubuntu 64位的环境下测试一把,一切环境配置完毕后,执行的过程中,控制台输出下面的内容: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 原因 在网上搜索了一番,得出如下结论: "The reason

Ubuntu 14.04下如何更换更新源(更新为163源)

Ubuntu 14.04下如何更换更新源(更新为163源) 浏览:8103 | 更新:2014-12-26 18:39 | 标签:ubuntu 1 2 3 4 5 分步阅读 Ubuntu下自带的源更新起来真的好难等,于是小编果断将其换之,经过各种尝试,最后还是选择了163的.下面就由小编来给大家分享一下是如何更新的吧. 工具/原料 装有Ubuntu14.04系统一台. 网络处于连通状态 方法/步骤 1 首先打开终端,用root登陆. 2 切换到/etc/apt/目录下,执行:cd /apt/ge

ubuntu /var/log/下文件介绍

本文简单介绍ubuntu /var/log/下各个日志文件,方便出现错误的时候查询相应的log   /var/log/alternatives.log -更新替代信息都记录在这个文件中 /var/log/apport.log -应用程序崩溃记录 /var/log/apt/   -用apt-get安装卸载软件的信息 /var/log/auth.log   -登录认证log /var/log/boot.log  -包含系统启动时的日志./var/log/btmp    -记录所有失败启动信息 /va