我们采用的ralink_SDK3.6使用的是U-Boot早期的1.1.3版本,并在其上做了一些删减和修改,具体做了哪些改动我们可以借助比对工具进行分析,这里推荐两个工具beyond compare 和 meld 分别是windows和linux的比对工具,都是基于图形界面,可以清晰的看到代码的增删状态。
Ralink_SDK中的U-Boot我们可以拿来直接使用,一些针对HG255d的移植我们在后几期再讨论,这里先初步体验一下。在SDK的Code目录下的Uboot文件夹就是Ralink_SDK3.6的U-Boot,在linux环境下,安装必要的编译工具后进入该目录然后 make menuconfig 命令,进入如下的界面:
将每个选项选择到如下状态,关于DRAM Component 选择128Mb 这个作出解释,HG255d的RAM是32MByte容量,由两颗16bit位宽的RAM芯片并列组成,所以是32位宽,这里注意下一大写的B表示byte,小写的b表示bit,1byte=8bit,DRAM Component 值表示单颗RAM芯片的bit数量,DRAM Component选择128Mbit,128Mbit = 16MByte,两颗16MByte得容量就是32MB。
将配置保存,然后 make 就能生成Uboot的可执行文件 uboot.bin 将 文件导入hg255d的内存然后运行,具体的操作方法请参考第十期。U-boot的默认console通过TTL输出,可以使用串口调试工具查看U-Boot的输出信息,我这里使用的是SecureCRT,Ralink的U-Boot的console波特率默认为57600bps 具体的连接参数为:
U-Boot 1.1.3 (Sep 15 2016 - 18:21:14)
Board: Ralink APSoC DRAM: 16 MB
relocate_code Pointer at: 80fb0000
config usb..
Set info->start[0]=BF000000
flash_protect ON: from 0xBF030000 to 0xBF030FFF
*** Warning - bad CRC, using default environment
============================================
Ralink UBoot Version: 3.6.0.0
--------------------------------------------
ASIC 3052_MP2 (Port5<->None)
DRAM component: 128 Mbits SDR
DRAM bus: 32 bit
Total memory: 32 MBytes
Flash component: NOR Flash
Date:Sep 15 2016 Time:18:21:14
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384
##### The CPU freq = 384 MHZ ####
estimate memory size =16 Mbytes
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
You choosed 3
0
3: System Boot system code via Flash.
## Booting image at bf050000 ...
Bad Magic Number,FFFFFFFF
You choosed 4
0
4: System Enter Boot Command Line Interface.
U-Boot 1.1.3 (Sep 15 2016 - 18:21:14)
RT3052 # ?
? - alias for 'help'
bootm - boot application image from memory
cp - memory copy
erase - erase FLASH memory
go - start application at address 'addr'
help - print online help
loadb - load binary file over serial line (kermit mode)
md - memory display
mdio - Ralink PHY register R/W command !!
mm - memory modify (auto-incrementing)
mw - memory write (fill)
nm - memory modify (constant address)
printenv- print environment variables
protect - enable or disable FLASH write protection
reset - Perform RESET of the CPU
rf - read/write rf register
saveenv - save environment variables to persistent storage
setenv - set environment variables
spicmd - read/write data from/to eeprom or vtss
tftpboot- boot image via network using TFTP protocol
version - print monitor version
RT3052 #
可以输入命令了解一下与U-Boot的交互方式,如果你是第一次接触U-Boot那可以利用搭建好的环境结合一些理论知识对U-Boot进行一次系统的学习,我的原则就是边动手边学习,所有的理论学习都要通过一次动手实践来巩固。文章前面讲到的是怎样实现一个最简单的U-Boot实践环境,接下来我们会继续深入,分析U-Boot的编译和运行原理。