#History:2011-05-18

#Author:yingru

新增:

在内核添加对设置雷凌网卡参数的wireless tools的支持:

Make menuconfig:

Device Drivers --->

Network device support --->

Wireless LAN (non-hamradio) --->

[*] Wireless LAN drivers (non-hamradio)

& Wireless

Extensions

[*] Wireless Extension API over

RtNetlink

--- Obsolete Wireless cards

support

(pre-802.11)

<

> STRIP

(Metricom starmode radio

IP)

<

> USB ZD1201

based Wireless device

support

<

> IEEE 802.11

for H

由于天联三号的无线网卡总是出问题,实验室打算换一款网卡,初步决定用rt3070芯片的无线网卡。

在雷凌的官网下载了rt3070的linux下sta驱动。(从makefile判断,最新发布的sta驱动也可以修改作为ap驱动或者apsta驱动)

要将linux

PC机上驱动移植到dm365上,主要修改了makefile和config.mk以及源代码的一小处。

大致步骤可以参见驱动目录下的 README_STA_usb文档,但是这个文档讲得有些笼统。

makefile:

README_STA_usb文档中所述:

In Makefile

63  set the

"MODE = STA" in Makefile and chose the TARGET to Linux by set

"TARGET = LINUX"

64  define the

linux kernel source include file path LINUX_SRC

65  modify to

meet your need.

把MODE和TARGET修改掉。如果要编译AP或者APSTA的驱动,则MODE应相应地改掉。

内核目录,修改成dm365源码ti-davinci所在。

下面要改的是PLATFORM,默认的PALTFORM是PC,这里改成DM6446,一个是因为DM6446和其他平台选项相比,与DM365更接近,最重要的原因是,细看Makefile,其实这里选择平台完全是为了下面对应修改KERNEL_SRC和CROSS_COMPILE,如果选的别的平台,在后面对应平台的if语句下,把KERNEL_SRC和CROSS_COMPILE改成自己需要的就行了。还有,与平台相关的一个参数是CFLAGS,这个参数在os/linux/config.mk中修改,下面会详细说。

258 ifeq ($(PLATFORM),DM6446)

259 #LINUX_SRC = /home/fonchi/work/soc/ti-davinci

260 LINUX_SRC =

/home/yr/workdir/lsp/ti-davinci/linux-2.6.18_pro500

261 endif

如上,平台选的是dm6446,在对应的if语句里面把LINUX_SRC改成内核源代码所在目录。

另外有一个CHIPSET参数,在makefile中没有明确让用户修改,可以通过 make CHIPSET=3070

来传递参数进makefile,达到修改CHIPSET的目的。后来发现,在fedora14下,chipset设置成3070或2070都会报如下错误:implicit

declaration of function 'RT33xx_Init'

,改回5370,错误消失。。

makefile中的参数大概就修改这几处。

下面修改os/linux下的config.mk文件:

首先set 'HAS_WPA_SUPPLICANT=y' and

'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n'.

这是关于安全性的设置,没有细究。

再仔细看config.mk文件,下面有这样一段与平台有关的语句:

760 ifeq ($(PLATFORM),DM6446)

761  CFLAGS := -nostdinc -iwithprefix include

-D__KERNEL__ -I$(RT28xx_DIR  )/include -I$(LINUX_SRC)/include

-Wall -Wstrict-prototypes -Wno-trigraphs -

fno-strict-aliasing

-fno-common -Os -fno-omit-frame-pointer -fno-omit-frame-

pointer -mapcs

-mno-sched-prolog -mlittle-endian -mabi=apcs-gnu -D__LINUX_AR

M_ARCH__=5 -march=armv5te

-mtune=arm9tdmi -msoft-float -Uarm -Wdeclaration-a

fter-statement -c -o

$(WFLAGS)

767 export CFLAGS

768 endif

这是相应平台下CFLAGS的设置。

第一次make前我没有修改这里。make到最后会报错,错误提示如下:

arm_v5t_le-ld: ERROR: Source object

/home/yr/3070/3070driver/os/linux/rt5370sta.mod.o has EABI version

4, but target /home/yr/3070/3070driver/os/linux/rt5370sta.ko has

EABI version 0

搜索了一下关于EABI的解释,是程序和C库之间的一个接口,这个错误的大概意思应该是我用EABI编译了交叉编译链,但是又去访问OABI连接的库,出问题了。

搜遍百度,有这样一篇排版烂到家的文章。。。

http://hi.baidu.com/ovum/blog/item/c1d3cd1e178a648687d6b6c7.html

名字还TMD叫【整理】,整理你妹啊。。排版都木有。。看到吐。。

下面是我贴的那篇神一样排版的文章:

什么是ABI ABI,application binary interface

(ABI),应用程序二进制接口。既然是接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况: A。应用程序

操作系统; B。应用程序

(应用程序所用到的)库 C

。应用程序各个组件之间类似于API的作用是使得程序的代码间的兼容,ABI目的是使得程序的二进制(级别)的兼容。 2。什么是OABI 和

EABI OABI中的O,表示“Old”,“Lagacy”,旧的,过时的,OABI就是旧的/老的ABI。

EABI中的E,表示“Embedded”,是一种新的ABI。 EABI有时候也叫做GNU EABI。

OABI和EABI都是专门针对ARM的CPU来说的。 3。EABI的好处 / 为何要用EABI A。支持软件浮点和硬件实现浮点功能混用

B。系统调用的效率更高 C。后今后的工具更兼容 D。软件浮点的情况下,EABI的软件浮点的效率要比OABI高很多。

4。OABI和EABI的区别两种ABI在如下方面有区别: A。调用规则(包括参数如何传递及如何获得返回值)

B。系统调用的数目以及应用程序应该如何去做系统调用 C。目标文件的二进制格式,程序库等

D。结构体中的填充(padding/packing)和对齐。 E。 OABI: * ABI flags passed to

binutils: -mabi=apcs-gnu -mfpu=fpa * gcc -dumpmachine:

arm-unknown-linux * objdump -x for compiled binary: private flags =

2: [APCS-32] [FPA float format] [has entry point] * "file" on

compiled Debian binary: ELF 32-bit LSB executable, ARM, version 1

(ARM), for GNU/Linux 2.2.0, dynamically linked (uses shared libs),

for GNU/Linux 2.2.0, stripped * "readelf -h | grep Flags"" Flags:

0x0 EABI: * ABI flags passed by gcc to binutils: -mabi=aapcs-linux

-mfloat-abi=soft -meabi=4 * gcc -dumpmachine:

arm-unknown-linux-gnueabi * objdump -x for compiled binary: private

flags = 4000002: [Version4 EABI] [has entry point] * "file" on

compiled binary (under Debian): ELF 32-bit LSB executable, ARM,

version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses

shared libs), for GNU/Linux 2.4.17, stripped * "readelf -h | grep

Flags"" Flags: 0x4000002, has entry point, Version4 EABI

【如何查看当前的库文件或者目标文件是EABI还是OABI】可以通过readelf -h查看: [crifan@linux-41lh

bch]$readelf -h a_eabi_object.obj ELF Header: Magic: 7f 45 4c 46 01

01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement,

little endian Version: 1 (current) OS/ABI: UNIX - System V ABI

Version: 0 Type: REL (Relocatable file) Machine: ARM Version: 0x1

Entry point address: 0x0 Start of program headers: 0 (bytes into

file) Start of section headers: 42880 (bytes into file) Flags:

0x4000000, Version4 EABI Size of this header: 52 (bytes) Size of

program headers: 0 (bytes) Number of program headers: 0 Size of

section headers: 40 (bytes) Number of section headers: 12 Section

header string table index: 9 [crifan@linux-41lh bch]$readelf -h

a_oabi_object.obj ELF Header: Magic: 7f 45 4c 46 01 01 01 61 00 00

00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian

Version: 1 (current) OS/ABI: ARM ABI Version: 0 Type: REL

(Relocatable file) Machine: ARM Version: 0x1 Entry point address:

0x0 Start of program headers: 0 (bytes into file) Start of section

headers: 46400 (bytes into file) Flags: 0x200, GNU EABI, software

FP Size of this header: 52 (bytes) Size of program headers: 0

(bytes) Number of program headers: 0 Size of section headers: 40

(bytes) Number of section headers: 24 Section header string table

index: 21

【提示】常见遇到的一些问题,我所知道的是,对于OABI的交叉编译器,比如arm-linux-gcc这一套工具,如果你当初是用oabi编译的,那么生成的整套工具链,也是oabi的,用oabi的工具链去编译和链接其他eabi的库,就会出问题,常常是在ld的时候,提示类似如下错误:

arm-linux-ld: error: Source object

drivers/mtd/bch/bch_4_s_noRomtable.obj has EABI version 0, but

target drivers/mtd/built-in.o has EABI version 4

其解决办法就是,用同一套去编译不同的文件和链接不同的库,比如都是用OABI或者都是用EABI,比如重新去编译一个EABI的交叉工具链,然后用这个EABI的工具链去编译你其他的文件。【参考】

1。ABI/EABI/OABI

http://blog.csdn.net/hongjiujing/archive/2008/07/21/2686556.aspx

2。Why ARM's EABI Matters

http://www.chineselinuxuniversity.net/articles/1255.shtml 3.[PDF]

The new arm ABI (EABI) and Debian armel port 下载此文件 (29 个页面)

4ArmEabiPort http://wiki.debian.org/ArmEabiPort

=========================华丽的分割线============================================================

于是回去看config.mk,果然CFLAGS里面有这样一小截:-mabi=apcs-gnu

我按照上面文章的提示,把这段改成

-mabi=aapcs-linux -mfloat-abi=soft

-meabi=4

然后保存,make,错误提示:不能识别-meabi=4是神马。

回来修改config.mk,既然原来只有-mabi=apcs-gnu,那么我只把-mabi=apcs-gnu改成-mabi=aapcs-linux先。

改完后,make,成功,生成rt5370sta.ko文件。

拷到开发板上,加载成功,但是会出现一些warning,这是对没有声明GPL

license的警告(开源``你们懂得)。

只要在源代码/os/linux/usb_main_dev.c下,加上MODULE_LICENSE("GPL");再重新make一下即可。insmod没有问题。

然后按照README_STA_usb文档完成后面的几步就可以了。

啊哈哈哈~~~~~

小小的成就感~~~~~

rt3070网卡 linux驱动,移植rt3070芯片网卡驱动到dm365全过程---yingru相关推荐

  1. c++驱动键鼠源码_Android移植FM芯片RDA5807M驱动指导

    文档说明 本文档以SC826为例(MSM8953平台,Android 7),描述如何移植FM芯片RDA5807M驱动. 移植修改 1):rdafm_drv.c rdafm_drv.h 放到kernel ...

  2. 初识Linux Kernel 移植 之 dm9621网卡驱动移植

    初识Linux 驱动移植 -- dm921 概述 配置内核 dm9621 网卡驱动编译配置选项 问题探索 读 dm9621 MAC 地址失败 网卡反复断开重连 概述 将kernel移植到开发板并能正常 ...

  3. linux系统 RTL8152B网卡驱动移植-USB转网卡

    本文描述了在imx6q上对百兆网卡RTL8152B进行移植的过程,有相关的疑惑的可参考本文进行移植. 感谢国芯科技的范工 y_fan 的耐心指点,RTL8152B相关移植的资料比较少,范工给予重要调试 ...

  4. linux虚拟机如何加网卡,linux虚拟机添加新的网卡

    linux虚拟机添加新的网卡 在vmware workstation虚拟机中添加虚拟网卡,默认是找到不到该设备的,必须要手动配置相关的信息才行. 首先查看系统中默认网卡的信息 ifconfig [ro ...

  5. linux进去网卡,Linux上使用socket进行网卡抓包

    Linux下使用socket进行网卡抓包 有时候需要自己编写代码进行抓包,以找出特殊意义的包. 下面是简单的一个示例: #include #include #include #include #inc ...

  6. linux在芯片设计与实现,基于Linux的Atheros无线芯片网卡驱动的设计与实现

    Design and Implementation of Linux based Atheros wireless network card's driver DU Qingbo 1 杜清波(1985 ...

  7. python做一个linux网卡,Linux系统Python可以选择不同网卡进行网络访问吗?

    是这样的,我有一台远程的Linux服务器(Debian系统),上面有两块网卡,同样的IP. 我现在需要选择第二块网卡,因为这块网卡连上了CMCC的专线,可以进行一些CMCC的业务操作.但是默认的使用的 ...

  8. linux脚本自动修改网卡,Linux脚本程序自动修改网卡配置文件中的MAC地址

    在玩Linux虚拟机的时候,一个安装好linux系统的virtual HDD会用于创建多个虚拟机,这样就不需要在创建每个虚拟机都安装一遍系统了.virtual HDD加载到虚拟机后,新的虚拟机的MAC ...

  9. Linux内核移植 part3:sdmmc驱动

    一种纯粹靠读书学来的真理,与我们的关系,就像假肢.假牙.蜡鼻子甚或人工植皮.而由独立思考获得的真理就如我们天生的四肢:只有它们才属于我们. -- 叔本华 读书的价值在于认识你自己,而不是用填鸭式的知识 ...

最新文章

  1. 机器学习笔记:线性规划,梯度下降
  2. python中get函数作用_python get函数有什么作用?示例解析
  3. Mybatis中的缓存详解
  4. 张一鸣回忆7年创业历程:小民宅里诞生第一版推荐引擎
  5. 【转】UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 1: invalid continuation 汉字编码
  6. 除了国内红海拼刀,移动 App 在海外能否挖到新机会?
  7. JavaScript快速上手
  8. python如何删除对象属性_如何销毁python中属性中的对象?
  9. 今天8月5号 2011-08-05
  10. 三次hermite插值matlab,三次hermite插值
  11. 淘宝短视频原创检测,重复检测算法原理分析
  12. Xutils-Android中数据存储和网络传输的框架
  13. 创新彰显实力,方正璞华又获一项国家发明专利
  14. PHP程序员必看书籍
  15. MySQL基础命令-学习的时候记录一下
  16. XUPT第三届新生算法赛
  17. Revit中创建基于线的砌体墙及【快速砌体排砖】
  18. 老师计算机组合照说说,照毕业照分离说说 2018照毕业照心情感言说说朋友圈
  19. FCRP-D---帆软官网模拟题,kettle模块
  20. Jetson Nano主板的五种联网方法

热门文章

  1. dp——洛谷P1240 诸侯安置
  2. OPS 数字标牌开放式可插拔规范
  3. JavaScript用事件委托实现留言板功能
  4. Task 04:文字图例尽眉目
  5. 大数据学习路线,芜湖 起飞~
  6. 【编译原理系列】词法分析与有限自动机
  7. 2021年安全类比赛writeup总结
  8. java相同字符组合归类_对相同字母组合的单词进行归类
  9. God.Game 漏洞复盘:跑路还是黑客攻击?
  10. 百度之星2018初赛游记