sam9x5平台搭建及rt3070驱动移植总结

来源:互联网 发布:淘宝打包发货工作流程 编辑:程序博客网 时间:2024/05/16 13:02

............................................................................................................

PC机系统:ubuntu 11.10

Linux kerner :  2.6.39

............................................................................................................

RT3070驱动编译过程不在多说,如果觉得改的什么问题也没有,且内核也进行了相应的配置,在编译时还是出现很多错误。对于这种情况建议从网上从新找个驱动源代码进行编译。我试过个了,对两个不同版本的3070驱动进行编译,一样的改的,一个可以编译成功,另一个却不行。

驱动编译好了之后,下载到板子,

>[root@mcuzone /home]#insmod rt3070sta.ko
rt3070sta: Unknown symbol __bswapsi2 (err 0)
insmod: can't insert 'rt3070sta.ko': unknown symbol in module or invalid parameter

显示__bswapsi2没有定义。因为板子内核是自带的,考虑是不是内核没有加相应东西,于是在PC上编译内核,使用SAM-BA烧写的板子上,重新启动,出现:

NAND read: device 0 offset 0x200000, size 0x300000
atmel_nand : multiple errors detected. Unable to correct.
NAND read from offset 200000 failed -1
 88064 bytes read: ERROR
Wrong Image Format for bootm command
ERROR: can't get kernel image!
U-Boot>

仔细阅读开发资料,发现厂家只建议采用所提供的bat烧写方式,于是连接上J-link,将文件中的内核替换成自己编译的,烧写完毕启动,发现终端只打印

roomboot

经过几次测试,发现个小细节,用bat烧写方式,完毕后要先关闭板子,拔出J-link,之后再才能重启。

期间为了烧写方便,自己弄了个NFS文件系统,挂载时出现

ending DHCP requests .....
eth0: link up (100/Full)
., OK
IP-Config: Got DHCP answer from 0.0.0.0, my address is 192.168.1.102
IP-Config: Complete:
     device=eth0, addr=192.168.1.102, mask=255.255.255.0, gw=192.168.1.1,
     host=192.168.1.102, domain=, nis-domain=(none),
     bootserver=0.0.0.0, rootserver=0.0.0.0, rootpath=, mtu=576
VFS: Cannot open root device "nfs" or unknown-block(0,255)
Please append a correct "root=" boot option; here are the available partitions:
1f00           65536 mtdblock0  (driver?)
1f01          196608 mtdblock1  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)

[<c0036b10>] (unwind_backtrace+0x0/0xe0) from [<c0358050>] (panic+0x50/0x170)
[<c0358050>] (panic+0x50/0x170) from [<c0008d20>] (mount_block_root+0x234/0x284)

[<c0008d20>] (mount_block_root+0x234/0x284) from [<c000902c>] (prepare_namespace
+0x164/0x1b8)
[<c000902c>] (prepare_namespace+0x164/0x1b8) from [<c00089ac>] (kernel_init+0x10
0/0x13c)
[<c00089ac>] (kernel_init+0x100/0x13c) from [<c0032b14>] (kernel_thread_exit+0x0
/0x8)

类似错误信息,查看后发现原来是没mount上,mout格式如下:

>setenv bootargs mem=128M console=ttyS0,115200 root=/dev/nfs rw nfsroot=192.168.1.108:/mcuzone/nfsroot/my_rootfs ip=dhcp

当内核替换之后以为驱动可以加载上了,试了之后发现还是会打印—bswapsi2没定义。自此排除原因为内核导致。上网搜了相关资料,有说是GCC的bug,于是考虑替换gcc。

原来gcc版本为arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 解压,用版本arm-2007q1-10-arm-none-linux-gnueabi.tar.bz2 解压后,采用新的gcc对驱动进行编译,完了之后下载到板子,出现

>rt3070sta: version magic '2.6.39 mod_unload ARMv5 p2v8 ' should be '2.6.39 mod_unload ARMv5 '
>insmod: can't insert 'rt3070sta.ko': invalid module format

出现内核版本不匹配,突然想起编译uImage时是采用2011.03.-41版本的gcc,而驱动是采用2007q1-10版本的gcc。于是用2007-q1-10版本的gcc先对内核进行编译,并make install,在对驱动代码进行编译。注意这个前后顺序不能改变,不然内核虽然改过来了。驱动却还是用之前编译的内核,加载驱动就会出现

>rt3070sta: version magic'2.6.39 mod_unload ARMv5 ' should be'2.6.39 mod_unload ARMv5 p2v8 '

>insmod: can't insert 'rt3070sta.ko': invalid module format

到现在驱动能加载了

[root@mcuzone /home]#chmod 777 rt3070sta.ko
[root@mcuzone /home]#insmod rt3070sta.ko
rtusb init --->
usbcore: registered new interface driver rt2870

呵呵

 

 

 

 

 

 

原创粉丝点击