Abstract:本文介绍自己解决基于ARM平台下linux开发中,通过tftp下载镜像文件时出现“Loading: T T T T T T T T T T T T T T T T T T T T”的解决办法
Introduction
使用的TI DM365的评估板,使用CCS3.3烧写ubl、u-boot
首先,使用仿真器将ubl和u-boot烧写到NAND Flash中,在Linux主机上配置好TFTP服务器,在Windows下面设置并打开串口终端,下面是和众达给出的烧写操作。
uImage烧写和更新的操作
硬件连接完成后,即可通过TFTP服务下载内核,电源上电,此时Windows PC机超级终端显示启动信息,如下图:
超级终端显示Hit any key to stop autoboot:4 时按下回车键,中断系统,此时显示提示符SEED_DVS365v1.0 :> ;
下面配置U-Boot环境变量用于TFTP下载内核启动;
配置TFTP服务器IP地址:
Target# setenv serverip xxx.xxx.xxx.xxx
此处的xxx.xxx.xxx.xxx为TFTP服务器的IP地址,根据实际网络设置决定;
配置SEED-DVS365平台的IP地址:
Target# setenv ipaddr xxx.xxx.xxx.xxx
此处的xxx.xxx.xxx.xxx为SEED-DVS365的IP地址,根据实际网络设置决定;
配置网卡地址
Target# setenv ethaddr 00:0C:29:94:D7:D6
保存以上设置,并将SEED-DVS365重新上电
Target# saveenv
Note:重新上电的作用是使刚刚设置的MAC地址生效
关闭自动启动并烧写内核
Target# setenv autostart no
Target# saveenv
Target# nand erase 0x400000 0x200000
Target# tftp 0x80800000 uImage
Target# nand write 0x80800000 0x400000 0x200000
配置设置启动方式
Target# setenv bootcmd 'nand read 0x80800000 0x400000 0x200000; bootm 0x80800000'
配置自动启动并保存
Target# setenv autostart yes
Target# saveenv
至此,ubl、u-boot、uImage已经全部烧写完成。但此时系统不能启动Linux命令提示行,需要烧写root文件系统。
Problem: 在如上操作中
在这一步时 Target# tftp 0x80800000 uImage 在tftp下载时出现如下情况:
SEED_DVS365v0.1 :>DM36x initialization passed!
TI UBL Version: 1.50
Booting Catalog Boot Loader
BootMode = NAND
Starting NAND Copy...
Valid magicnum, 0xA1ACED66, found in block 0x00000019.
DONE
Jumping to entry point at 0x81080000.
U-Boot 1.3.4 (Jul 9 2010 - 13:55:01)
I2C: ready
DRAM: 128 MB
NAND: NAND device: Manufacturer ID: 0x20, Chip ID: 0x76 (ST Micro NAND 64MiB 3,
3V 8-bit)
Bad block table found at page 131040, version 0x00
Bad block table found at page 131008, version 0x00
64 MiB
In: serial
Out: serial
Err: serial
Ethernet PHY: RTL8201 @ 0x1f
Hit any key to stop autoboot: 0
SEED_DVS365v0.1 :>setenv autostart no
SEED_DVS365v0.1 :>saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x3fc000 -- 100% complete.
Writing to Nand... done
SEED_DVS365v0.1 :>nand erase 0x400000 0x200000
NAND erase: device 0 offset 0x400000, size 0x200000
Erasing at 0x5fc000 -- 100% complete.
OK
SEED_DVS365v0.1 :>tftp 0x80800000 uImage
TFTP from server 192.168.1.254; our IP address is 192.168.1.101
Filename 'uImage'.
Load address: 0x80800000
TFTP from server 192.168.1.16; our IP address is 192.168.1.101
Filename 'uImage'.
Load address: 0x80800000
Loading: T T T T T T T T T T T T T T T T T T T T
Retry count exceeded; starting again
应该是tftp没有连上,查找如下设置,都没有找到问题所在
1. linux下防火墙设置已关;
2. linux下tftp服务器设置也没问题;
3. linux下IP地址如下:
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:57:56:D2
inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: 2001:da8:100e:4154:20c:29ff:fe57:56d2/64 Scope:Global
inet6 addr: fe80::20c:29ff:fe57:56d2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:671 errors:0 dropped:0 overruns:0 frame:0
TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:72645 (70.9 KiB) TX bytes:12011 (11.7 KiB)
Interrupt:67 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2313 errors:0 dropped:0 overruns:0 frame:0
TX packets:2313 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4063909 (3.8 MiB) TX bytes:4063909 (3.8 MiB)
4. Windows XP的防火墙已关,XP的IP:192.168.1.96,XP下和虚拟机可以相互ping通
[root@localhost ~]# ping 192.168.1.96
PING 192.168.1.96 (192.168.1.96) 56(84) bytes of data.
64 bytes from 192.168.1.96: icmp_seq=1 ttl=64 time=1.63 ms
64 bytes from 192.168.1.96: icmp_seq=2 ttl=64 time=0.191 ms
但是通过评估板的u-boot ping 不通Window和Linux主机,如下:
SEED_DVS365v0.1 :>ping 192.168.1.254
ping failed; host 192.168.1.254 is not alive
Solution:经分析肯定是网路方面存在问题,考虑很久发现自己Windows下网络设置导致此问题,Windows在此环境中通过路由拨号上网,是自动获取IP地址,不需设置IP和网关等,开始时手动的设置IP和网关,但此时其实Windows 已通过DHCP给Windows分配了IP和网关,手动设置导致网络出现了问题,不需要手动的改动IP,这样问题迎刃而解。