因为想用RMII接口来做ETHERNET,以释放一个UART。
请问该如何修改AM1808的UBOOT和LINUX KERNEL?我用的是网上下载的03.21.00.04的linux和uboot版本。
谢谢指点。
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.
因为想用RMII接口来做ETHERNET,以释放一个UART。
请问该如何修改AM1808的UBOOT和LINUX KERNEL?我用的是网上下载的03.21.00.04的linux和uboot版本。
谢谢指点。
这个最好能读读u-boot /kernel 的代码进行修改,如果您遇到问题,可以再来上面问
Linux 本来就是以文档少闻名,所以读代码是必须的,代码多是没办法,多读读熟练就好了,kernel中你可以看看linux-2.6.37-psp03.21.00.04.sdk/drivers/net/davinci_mdio.c, uboot中你可以看看drivers/net/davinci_emac.c,具体怎么改,你自己多研究下代码,然后根据你选择的外围芯片进行设置
经过修改代码,我的板子的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
我刚做了几个实验:能帮忙看出头绪吗?
实验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没能设置成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本身是不是有什么特别的处理机制?坑爹?