This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问该如何修改AM1808的UBOOT和LINUX KERNEL使得通过RMII驱动LAN8710A或LAN8720A?

Other Parts Discussed in Thread: AM1808

因为想用RMII接口来做ETHERNET,以释放一个UART。

请问该如何修改AM1808的UBOOT和LINUX KERNEL?我用的是网上下载的03.21.00.04的linux和uboot版本。

谢谢指点。

  • 这个最好能读读u-boot /kernel 的代码进行修改,如果您遇到问题,可以再来上面问

  • Yaoming Qin,你好。谢谢你的回复。

    能否提示一下需要看哪里文件?毕竟文件太多了。

    谢谢。

  • TI的在线支持太差了,几乎上面很多问题都没有实质性的回答。

    不知道这个论坛的意思何在。

  • Linux 本来就是以文档少闻名,所以读代码是必须的,代码多是没办法,多读读熟练就好了,kernel中你可以看看linux-2.6.37-psp03.21.00.04.sdk/drivers/net/davinci_mdio.c, uboot中你可以看看drivers/net/davinci_emac.c,具体怎么改,你自己多研究下代码,然后根据你选择的外围芯片进行设置

  • Yaoming Qin,

    谢谢你的回复。

  • 经过修改代码,我的板子的RMII能正常驱动了,但是出了一个问题,请Yaoming帮忙指导一下:

    我做了AM1808+LAN8720A的系统。

    在用nfs调试系统是时候发现:

    1,u-boot启动后,有时tftp连不上,这是用ping测,结果ping不同,往往复位一下,重新启动就好了。

    2,启动u-boot后,下载内核,启动内核,连接server上nfs系统,结果同样出现有时连不上nfs,这是复位系统重新启动启动就好了,有时要重新启动几次。

    成功和不成功的概率为50%对50%。

    我认为nfs应该没问题,否则就不可能启动 成功。有人说问题出在对8720的复位上。

    可我用万用表测了8720的复位脚,也没发现成功时和不成功,该脚的信号有什么不同。

    我想会不会是硬件的其他问题,例如不稳定,结果连上nfs后,我在板子上ping 192.168.xx.xx -s 65000,结果ping 500次左右都没有丢包,而且用时也差别不大。

    请高手帮忙看看。

    谢谢。

    *************************************

    下面是不能启动的报错节选:

    .....

    omap_rtc omap_rtc: setting system clock to 2000-01-01 00:00:53 UTC (946684853)

    usb 2-1: new full speed USB device using ohci and address 2

    usb 2-1: not running at top speed; connect to a high speed hub

    hub 2-1:1.0: USB hub found

    hub 2-1:1.0: 4 ports detected

    davinci_mdio davinci_mdio.0: resetting idled controller

    net eth0: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=0:00, id=7c0f1)

    usb 2-1.1: new full speed USB device using ohci and address 3

    IP-Config: Complete:

        device=eth0, addr=192.168.20.213, mask=255.255.255.0, gw=192.168.20.254,

        host=192.168.20.213, domain=, nis-domain=(none),

        bootserver=192.168.20.222, rootserver=192.168.20.222, rootpath=

    VFS: Unable to mount root fs via NFS, trying floppy.

    VFS: Cannot open root device "nfs" or unknown-block(2,0)

    Please append a correct "root=" boot option; here are the available partitions:

    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

    Backtrace:

    [<c00349b4>] (dump_backtrace+0x0/0x110) from [<c0395c34>] (dump_stack+0x18/0x1c)

    r6:00008000 r5:00000000 r4:c04dfab8 r3:c7828010

    [<c0395c1c>] (dump_stack+0x0/0x1c) from [<c0395d10>] (panic+0x74/0x198)

    [<c0395c9c>] (panic+0x0/0x198) from [<c0008ea0>] (mount_block_root+0x1c4/0x204)

    r3:00000030 r2:00000000 r1:c7829f58 r0:c04492d5

    r7:c0027e34

    [<c0008cdc>] (mount_block_root+0x0/0x204) from [<c0009084>] (mount_root+0xac/0xd0)

    r8:00000000 r7:00000013 r6:c00496c4 r5:c0027e49 r4:00200000

    [<c0008fd8>] (mount_root+0x0/0xd0) from [<c0009218>] (prepare_namespace+0x170/0x1c4)

    r4:c04df544

    [<c00090a8>] (prepare_namespace+0x0/0x1c4) from [<c0008a94>] (kernel_init+0x114/0x14c)

    r5:c0008980 r4:c04df4e0

    [<c0008980>] (kernel_init+0x0/0x14c) from [<c00496c4>] (do_exit+0x0/0x6c4)

    r4:00000000 r3:00000000

  • 从log上看,只是nfs没有mount, 导致kernel halt, 你还是和网口的phy的工程师聊聊

  • yaoming,你好。谢谢回复。

    你的意思应该还是硬件方面的问题咯?

  • 我刚做了几个实验:能帮忙看出头绪吗?

    实验1:用单独的路由器,只连我的电脑和板子,ip地址在bootargs中固定,结果如下:

    uboot失败3次,连nfs成功11次,连nfs失败10次。

    实验2:我用公司的局域网,bootargs设定ip=dhcp,结果每次都连接nfs成功。

    实验3:用公司局域网,静态设置ip地址,结果:1次u-boot连接网络失败,14次连接nfs成功,10次失败。

    实验4:u-boot下ping自己,不能成功,ping ubuntu可以,但也不是100%

    实验5:用网线直连电脑和板子,tftp下载uimage正常,在连接nfs的时候,网络连接显示断了,同时提示连接nfs失败。不知道这样是不是正常的。

  • yaoming, 你好!

    请问u-boot的davinci_emac.c中的

    static int gen_get_link_speed(int phy_addr)

    {

    u_int16_t tmp;

    if (davinci_eth_phy_read(phy_addr, MII_STATUS_REG, &tmp) &&

    (tmp & 0x04)) { ...}

    ......

    }

    tmp的意思是什么?看了一下代码,知道它的值是MDIO的USRACCESS0的bit 0-15,在datasheet中解释:User data bits. These bits specify the data value read from or to be written to the specified PHY register.

    u-boot ping ip,有时会失败,显示:

    WARN: emac_send_packet: No link

    此时,tmp=0x7809,与0x04与为0,所以没法往下执行。

    ping成功的时候,tmp =0x780d,正好可以往下执行。

    请问这个0x04是怎么来的?代表什么意思??

  • 这个地方应该是判断网线是不是接上了,你有没有机会找个网口phy的工程师看看,我这边再查查看

  • 谢谢。我今天又试了下。

    发现PHY没能设置成auto negotiate。而且我在gen_auto_negotiate函数中加入printf(),发现他根本没运行。而且我把mode[2:0]设为了111(3个管脚都拉高了),所以phy应该是工作在auto negotiate方式下的。

    我和SMSC的工程师联系过,他看了我的原理图,没有问题。

    后来我强制在davinci_emac_initialize()函数中加入了auto_negotiate函数。这样我在ping的时候读出来的phy的register1的值为0x782d。否则一直要么是0x780d,要么是0x7809

  • 朋友你好。我这边和你的情况差不多。我用的MII接口,国半dp83848的phy。在ip=dhcp情况下,是OK的。但IP在bootargs里面设置为固定值的时候,会出现不能连上nfs的情况;当在交换机链接一个不断发报文的dsp的时候,是100%通过nfs起不来。

    还有就是不管通过什么办法起来之后,会出现这样的情况:虚拟机ping板子ping不通。但是如果先用板子ping一下虚拟机,这个时候,再用虚拟机ping板子。就通了。

    看这位朋友的情况,让我觉得AM1808本身是不是有什么特别的处理机制?坑爹?

  • 你好,我也碰到你这种情况,能不能把解决方法分享一下,谢谢,我的qq85639973

  • 朋友你好  我用的rmii模式 am1808+dp83848  结果u-boot下ping不通  但是移植系统后能ping通。我怀疑是u-boot驱动问题,能不能交流下?我 的qq594194010。如果方便的话给我留个qq  十分感谢