Chinaunix

标题: u-boot从flash启动,但是无法启动eth0 [打印本页]

作者: piaoxiang    时间: 2006-07-31 15:10
标题: u-boot从flash启动,但是无法启动eth0
u-boot移植正常,接下来的工作是将linux内核2.4.21移植到at91rm9200。首先下载,设置好变量,然后执行ping,可以ping通。但是在固化到flash之后,无法启动eth0。查看启动部分,如下:
eth0: Link now 10-HalfDuplex
eth0: AT91 ethernet at 0xfefbc000 int=24 10-HalfDuplex (00:00:00:00:00:00)
也就是说,原先设置的ethaddr变量没有存入,结果只能成为00:00:00:00:00:00。这时用ifconfig查看,没有显示。如果执行ifconfig eth0 <ip>,会出现如下提示:
SIOCSIFFLAGS:Cannot assign requested address。

请教了。。。
作者: connet    时间: 2006-07-31 16:35
ifconfig 修改 mac addr 后再试
作者: a-ki    时间: 2006-07-31 16:53
原帖由 piaoxiang 于 2006-7-31 15:10 发表
首先下载,设置好变量,然后执行ping,可以ping通。


这说MAC已经写入PHY了,不然你如何PING的通,如何可以下载?

eth0: AT91 ethernet at 0xfefbc000 int=24 10-HalfDuplex (00:00:00:00:00:00)
而之所以启动LINUX的时候MAC显示为全零,是因为,你在u-boot里设置
MAC不是合法有效的!你可以换一个试试.
作者: piaoxiang    时间: 2006-07-31 17:18
to a-ki:
这里的mac到底指的是什么?如果在win上,那是固化在网卡上的EPROM里。而对于at91rm9200开发板来说,这个mac地址是随时可设的吗?如果不合法,那么合法的规则是什么?多谢指点。。
作者: piaoxiang    时间: 2006-07-31 17:28
原帖由 connet 于 2006-7-31 16:35 发表
ifconfig 修改 mac addr 后再试


connect兄,因为没有命令modprobe,所以无法执行啊
作者: a-ki    时间: 2006-07-31 21:57
原帖由 piaoxiang 于 2006-7-31 17:18 发表
to a-ki:
这里的mac到底指的是什么?如果在win上,那是固化在网卡上的EPROM里。而对于at91rm9200开发板来说,这个mac地址是随时可设的吗?如果不合法,那么合法的规则是什么?多谢指点。。


在9200开发板上外接的是一个PHY芯片 ,MAC是存在u-boot,或者是在linux里的 。
在u-boot里,有两种方式可以设定MAC地址。
一是通过终端设定环境变量:
U-Boot> setenv ethaddr 12:34:56:78:90:ab
这种方式,你可以人为的为每块板子设定不同的MAC地址。

另外你可以定程序中做定义:
#define CONFIG_ETHADDR  12:34:56:78:90:ab

至于在linux里面MAC地址存在哪,当然可以是存在EEPROM里,但我想也应该是由程序读出来,然后由驱动构造成完整的以太网桢,再通过9200的MII接口写入PHY(如dm9161)后,由PHY来发出。不会象某些芯片会自动读入。
作者: piaoxiang    时间: 2006-08-01 17:12
问题:u-boot从flash启动后ethaddr无效,导致eth0无效。
环境:移植到at91rm9200,u-boot的版本为 1.1.1
具体过程如下:
u-boot移植运行正常,过程就不叙述了。在u-boot运行正常的情况下,准备移植内核:
大体上的规划如下:

0x0000 0000
           INTERNAL ROM(128K BYTES)
0x1000 0000(第0扇区)
           boot.bin       FLASH
0x1001 0000(第0扇区)
          uboot.gz        FLASH
0x1002 0000(第1扇区)
          ulmage          FLASH
0x1012 0000(第16扇区)
          ramdisk         FLASH
0x107E0000(第63扇区)
     u-boot环境变量  FLASH
0x2000 0000
                          SDRAM
0x2100 0000
          ulmage          SDRAM
0x2110 0000
         ramdisk          SDRAM

我采用的是第一种,在终端设定环境变量。具体如下:
u-boot>setenv ipaddr 192.168.1.100          #设定目标板ip
u-boot>setenv serverip 192.168.1.106        #主机ip
u-boot>setenv ethaddr 00:00:00:00:ff:01     #设定目标板mac地址
u-boot>saveenv                              #保存环境变量
u-boot>tftpboot 20000000 boot.bin           #采用tftp协议,将boot.bin下载到20000000的SDRAM
u-boot>protect off 1:0                      #除保护
u-boot>erase 1:0                            #清除bank1的第0扇区
u-boot>cp.b 20000000 10000000 2984          #把boot.bin从ram复制到flash区10000000处,2984为boot.bin的大小(16进制)
u-boot>tftpboot 20000000 u-boot.bin.gz      #同上
u-boot>cp.b 20000000 10010000 aacf
然后更换引脚,设为片外启动。断电重启,这是u-boot从flash开始引导,出现提示符,设定环境变量使过程自动化:
u-boot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200 mem=32M
u-boot>setenv bootcmd tftpboot 21100000 ramdisk-rmk7\;tftpboot 21000000 uImage\;bootm 21000000
u-boot>saveenv
u-boot>run bootcmd
成功进入login提示,输入root,进入系统:
#ifconfig eth0 192.168.1.100
#ping 192.168.1.106
可以ping通。
接下来要固化到flash里面:
u-boot>setenv bootcmd tftpboot 21100000 ramdisk-rmk7\;tftpboot 21000000 uImage
u-boot>saveenv
u-boot>run bootcmd
u-boot>protect off 1:2-11
u-boot>erase 1:2-11
u-boot>cp.b 21000000 10020000 9c64f
u-boot>erase 1:12-60
u-boot>cp.b 21100000 10120000 5591e6
u-boot>setenv bootcmd cp.b 10020000 21000000 9c64f\;cp.b 10120000 21100000 5591e6\;bootm 21000000
u-boot>saveenv
重新上电后,顺利进入login,输入root进入,执行命令如下:
AT91RM9200DK login: root
[root@AT91RM9200DK /root]$ifconfig eth0 192.168.1.100
SIOCSIFFLAGS: Cannot assign requested address
[root@AT91RM9200DK /root]$ifconfig
[root@AT91RM9200DK /root]$ifconfig eth0 up
SIOCSIFFLAGS: Cannot assign requested address
[root@AT91RM9200DK /root]$
查看启动提示过程,发现:
eth0: Link now 10-HalfDuplex
eth0: AT91 ethernet at 0xfefbc000 int=24 10-HalfDuplex (00:00:00:00:00:00)
eth0: Davicom 9196 PHY (Copper)
也就是说mac地址没有写入,成为了00:00:00:00:00:00。
思考了好长时间,没有解决。希望高手帮忙。。。。
作者: piaoxiang    时间: 2006-08-01 17:20
原帖由 a-ki 于 2006-7-31 21:57 发表


在9200开发板上外接的是一个PHY芯片 ,MAC是存在u-boot,或者是在linux里的 。
在u-boot里,有两种方式可以设定MAC地址。
一是通过终端设定环境变量:
U-Boot> setenv ethaddr 12:34:56:78:90:ab
这种方 ...



多谢帮忙解答了。我用的是第一种方法,今天换了第二种方法试了一下,发现仍然存在上述情况。换用了好几个mac地址,可是都不行。
作者: a-ki    时间: 2006-08-01 18:41
如果我没有记错,你的这个MAC地址(00:00:00:00:ff:01)是不属于任何一个厂家的。
你可以把你本机网卡的MAC复制过来把最近两个字节做更改再试试。我机器的的网卡是RTL8139,它的MAC地址为:00:E0:4C:4D:XX:XX。
我现在用的是u-boot-1.1.4,之前也遇到同样的问题,现在就是更改了正确的MAC地址后已经可以正常的通过NFS启动Linux了。
作者: piaoxiang    时间: 2006-08-02 15:13
我再试验吧,多谢a-ki了
作者: piaoxiang    时间: 2006-08-03 10:52
呵呵,问题解决了,现在将解决方案写在下面,希望学习at91rm9200的朋友在这个地方省点力气。
在超级终端中启动linux后,以root身份登陆,执行下面语句:
#ifconfig eth0 hw ether 00:e0:4c:4d:8d:5f     //此处是重新赋予mac地址
eth0: Setting MAC address to 00:e0:4c:4d:8d:5f     //显示结果
#ifconfig eth0 <your_targetboard_ip>     //此处设置你的目标板的ip
#ifconig                                                    //查看设置内容
#ping -c 8 <your_server_ip>                //ping 你的server,来检验一下

问题总结:我觉得这里是u-boot和linux不一致的地方,具体的原理部分还不是很不清楚,该分歧的地方具体在那里有待研究。不过我觉得这里不是mac地址设置的问题。实验了一下,mac地址是可以随便设的。只不过在u-boot里面设定的ethaddr没有读到linux下面,使得其为00:00:00:00:00:00。所以需要重新设定mac地址。如果有人清楚的知道该问题的核心所在,请告诉我,呵呵,在此多谢了。我也会好好思考的。
    多谢a-ki的帮助,虽然用更改mac地址的方法没有成功,但是在此过程中又获得了关于mac地址的有关内容。12个数字中,其中前6个代表厂商,后6个是区分产品的。整个mac固化到eprom里,所有的mac都是不相同的。
    该问题暂时解决了,但是还没有最终解决,希望以后可以。
作者: piaoxiang    时间: 2006-08-03 11:48
解决方案应该和connect提示的方法一样,只不过当时还不熟悉如何用,呵呵




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2