天嵌 ARM开发社区

 找回密码
 注册
查看: 2024|回复: 0

AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植

[复制链接]
freewing 发表于 2015-9-15 13:56:35 | 显示全部楼层 |阅读模式
  移植完成声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍。介绍之前先感慨一下:TI的维护的内核真的很健壮,DTS真的很强大。


  1. Nand驱动移植

  阅读TQ335x的原理图可知,TQ335x的Nand连接到了GPMC上,且与DTS中默认的配置吻合,此处不做任何修改,详情如下:
  1. <font face="微软雅黑">nandflash_pins_s0: nandflash_pins_s0 {  
  2.     pinctrl-single,pins = <  
  3.         0x0 (PIN_INPUT_PULLUP | MUX_MODE0)  /* gpmc_ad0.gpmc_ad0 */  
  4.         0x4 (PIN_INPUT_PULLUP | MUX_MODE0)  /* gpmc_ad1.gpmc_ad1 */  
  5.         0x8 (PIN_INPUT_PULLUP | MUX_MODE0)  /* gpmc_ad2.gpmc_ad2 */  
  6.         0xc (PIN_INPUT_PULLUP | MUX_MODE0)  /* gpmc_ad3.gpmc_ad3 */  
  7.         0x10 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad4.gpmc_ad4 */  
  8.         0x14 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad5.gpmc_ad5 */  
  9.         0x18 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad6.gpmc_ad6 */  
  10.         0x1c (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad7.gpmc_ad7 */  
  11.         0x70 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_wait0.gpmc_wait0 */  
  12.         0x74 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpio0_30 */  
  13.         0x7c (PIN_OUTPUT | MUX_MODE0)       /* gpmc_csn0.gpmc_csn0  */  
  14.         0x90 (PIN_OUTPUT | MUX_MODE0)       /* gpmc_advn_ale.gpmc_advn_ale */  
  15.         0x94 (PIN_OUTPUT | MUX_MODE0)       /* gpmc_oen_ren.gpmc_oen_ren */  
  16.         0x98 (PIN_OUTPUT | MUX_MODE0)       /* gpmc_wen.gpmc_wen */  
  17.         0x9c (PIN_OUTPUT | MUX_MODE0)       /* gpmc_be0n_cle.gpmc_be0n_cle */  
  18.     >;  
  19. };  </font>
复制代码

  直接编译内核,并放到开发板上运行。这时我们会发现内核可以识别Nand,但是因为没有开启OMAP的BCH功能会报一处错误。开启该配置项的方法如下:
  1. <font face="微软雅黑">Device Drivers  --->  
  2.     <*> Memory Technology Device (MTD) support  --->  
  3.         <*>   NAND Device Support  --->  
  4.             <*>     Support hardware based BCH error correction  </font>
复制代码

  保存配置并退出menuconfig,然后重新编译内核并放到开发板上运行,此时会发现内核已经可以正常识别Nand了,完整的启动Log会在文章末尾给出。从这里可以看出,TI的内核维护的真的很不错,比以前移植三星芯片时省事很多。




  2. 网卡驱动移植

  进行网卡驱动移植的方法与进行Nand驱动移植的方法相同,逻辑上讲,先应该去确认下网卡的引脚连接并在DTS中进行相应的pinmux设置,但是,移植完Nand后查看内核的启动Log可知,网卡已经正常识别了,因此,可以直接执行指令:
  1. udhcpc
复制代码

  来动态获取ip(需要将开发板通过网线连接到路由器并开启路由器的DHCP功能,默认一般是开启的),会发现开发板能够从路由器分配到IP,但是没有分配DNS,这是因为我们只做文件系统时没有进行dhcp的设置。设置方法很简单,将busybox中的examples/udhcp/simple.script拷贝到根文件系统的usr/share/udhcpc/目录下,并改名为default.script即可。然后重新执行:
  1. udhcpc  
复制代码

会发现开发板可以正常获取到IP和DNS,但是仍有一处错误,详细如下:
  1. @tq335x #udhcpc   
  2. udhcpc (v1.22.1) started  
  3. Setting IP address 0.0.0.0 on eth0  
  4. [   11.489311] net eth0: initializing cpsw version 1.12 (0)  
  5. [   11.576237] net eth0: phy found : id is : 0x1cc915  
  6. [   11.581418] libphy: PHY 4a101000.mdio:01 not found  
  7. [   11.586480] net eth0: phy 4a101000.mdio:01 not found on slave 1  
  8. Sending discover...  
  9. [   13.576458] cpsw 4a100000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx  
  10. Sending discover...  
  11. Sending select for 192.168.0.103...  
  12. Lease of 192.168.0.103 obtained, lease time 86400  
  13. Setting IP address 192.168.0.103 on eth0  
  14. Deleting routers  
  15. route: SIOCDELRT: No such process  
  16. Adding router 192.168.0.1  
  17. Recreating /etc/resolv.conf  
  18. Adding DNS server 10.0.0.1  
复制代码

参考TI官网提供的evm开发板的dts,本文对tq335x.dts做如下修改:
  1. &mac {  
  2.     slaves = <1>;  
  3.     pinctrl-names = "default", "sleep";  
  4.     pinctrl-0 = <&cpsw_default>;  
  5.     pinctrl-1 = <&cpsw_sleep>;  
  6.     status = "okay";  
  7. };  
复制代码

然后删除以下节点:
  1. &cpsw_emac1 {  
  2.     phy_id = <&davinci_mdio>, <1>;  
  3.     phy-mode = "rgmii-txid";  
  4. };  
复制代码

重新编译tq335x.dtb:
  1. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- tq335x.dtb  
复制代码

用新的tq335x.dtb启动开发板:
  1. load mmc 0:1 0x88000000 /boot/tq335x.dtb  
  2. load mmc 0:1 0x82000000 /boot/zImage  
  3. bootz 0x82000000 - 0x88000000  
复制代码

最后,再次使用指令:
  1. udhcpc  
复制代码

进行测试,会发现开发板能够正常获取IP和DNS。如果您的路由器已经连接到了外网,还可以使用ping指令测试与外网的连接,如ping谷歌的DNS服务器:
  1. ping 8.8.8.8  
复制代码

  至此,就完成了TQ335x的Nand和网卡驱动移植,并不需要深入的了解其内部的工作原理,有问题可以留言讨论。如果想了解这两个模块的工作原理,强烈推荐韦东山老师的嵌入式教学视频,静下心来看的话,绝对物有所值。该视频还是需要一定的硬件和软件功底的,如果看不懂可以补习下C语言、基本原理图阅读等方面的知识。


TQ335X开发板:http://www.embedsky.com/index.php?s=/Product/show/id/49.html

TQ335XB开发板:http://www.embedsky.com/index.php?s=/Product/show/id/86.html



您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-27 03:57 , Processed in 1.015618 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表