Security: Standard
Timeout: 3
Max Retransmit: 6
Tftp port: 69 (这个不能改)
Base Directory: vxWorks.bin 所在的目录
给目标板上电,在控制台串口下将看到:
Type "run tftpboot" to mount root .bin file over net
you should open a tftp server and set home directory correctly
Hit any key to stop autoboot: 0
Using i82559#0 device
TFTP from server 192.0.0.2; our IP address is 192.0.0.1
Filename 'vxWorks.bin'.
Load address: 0x100000
Loading: #################################################################
#################################################################
#############
done
Bytes transferred = 728640 (b1e40 hex)
## Starting application at 0x00100000...
tftp 设置图
接下来出现串口打印出一堆乱码。
进行到这一步,说明网口已经正确初始化,并从网络下载了VxWorks.bin 到本地内存, u-boot 要完成的工作已经完毕。后面出现乱码,是因为我们的VxWorks.bin
是基于RAM_LOW_ADRS 为0x00010000 而不是0x00100000 为基础制作的。修改config.h和makefile中的RAM_LOW_ADRS,重新编译生成vxWorks.bin:
make clean
make vxWorks
elftobin <vxWorks> vxWorks.bin
再次启动电路板,可以看到bootrom 启动,从flash 将u-boot.bin 加载到内存0x00010000, 然后u-boot
运行,从网络加载vxWorks.bin 到内存0x00100000,最后vxWorks 运行。
到此,u-boot 的一遍运行流程就结束了。如果需要选择其他的运行方式,可以在控制台
下先用手动输入命令的方法调试,调试完毕后修改再user8240.h 中的宏定义。当提示环境变
量没有设置时,可以用setenv 手动设置变量。
5. 最后的收尾工作
5.1 u-boot 从flash 加载VxWorks
为了最终摆脱PC 机,需要把vxWorks.bin 烧写到电路板的flash,让u-boot 从flash 加载vxWorks。首先仍然使用上面的工作方式,启动vxWorks,利用vxWorks
将vxWorks.bin写入flash,注意这里的vxWorks 的RAM_LOW_ADRS 为0x00100000。
在\common\main.c 的main_loop()中加入:
#if (defined CONFIG_USER8240 && defined BOOT_FROM_FLASH)
char tmpt[4];
int vxWorksLen = 0x100000;
ulong addr_vx,rc_vx;
int argc_vx;
char *argv_vx;
#endif
修改语句if (bootdelay >= 0 && s && !abortboot (bootdelay))
{
后的内容为:
#if (defined CONFIG_USER8240 && defined BOOT_FROM_FLASH)
/*auto-boot from flash*/
if(flashInit()==0)
{
/*首先读取U-BOOT 的长度,存储在FLASH_DATA_UBOOT 开始的头4 个字节*/
if(flashDataGet(FLASH_DATA_CPU,tmpt,4)!=0)
printf("error in getting vxWorks length\n");
else
{
vxWorksLen=tmpt[0]*0x01000000+tmpt[1]*0x00010000
+tmpt[2]*0x00000100+tmpt[3];
/*从flash 中的第FLASH_DATA_CPU 块开始读取vxWorks 本身长度再加上头4 个字节长度的字节*/
printf("\nloading vxWorks for %d bytes from flash\n",vxWorksLen);
if(flashDataGet(FLASH_DATA_CPU,
(char*)(IMAGE_VXWORKS_RAMADDR-4),
vxWorksLen+4) !=0)
printf("error in getting U-BOOT from flash\n");
else
{
/*开始运行*/
1
2
3
4
5
6
7
8
9
10
11 |