利用u-boot移植更新u-boot自身

2019-07-13 05:34发布

做嵌入式开发的时候经常要进行u-boot的移植,u-boot是嵌入式linux系统的引导程序,相当于pc机上的bios。
我移植的板子是华恒的PXA270-R2,u-boot代码是华恒光盘配送的。嵌入式linux版本是2.6.10。由于我原先的u-boot还是完好的,所有我用u-boot来烧写u-boot,如果u-boot损坏了的话,就要用jtag烧写了。
下面介绍用u-boot来烧写u-boot的过程。 1.修改u-boot代码(如果有必要的话)
如果你纯粹为了更新u-boot,而不用对u-boot的一些属性的进行定制的话是不用修改源码的,直接编译就可以了。
我这次由于要修改内核的长度和ramdisk的起始地址,所以进行了 u-boot-1.1.2/include/configs/pxa270.h 文件的修改,当然其他板子的话要修改对应的文件,我主要修改了以下属性:
/*modified FLASH_RAMDISK_START 0x001a0000 to 0x001c0000*/
#define FLASH_RAMDISK_START 0x001c0000
/*modified FLASH_KERNEL_LEN 0x00160000 to 0x00180000*/
#define FLASH_KERNEL_LEN 0x00180000 2.编译代码
#先清除原来的编译
make distclean
#对不同的开发板进行配置
make pxa270_config
#然后
make
编译后会生成u-boot.bin 这就是我们要烧写到flash的u-boot文件,配置启动tftp服务,把它拷贝到tftpboot目录下。
3.minicom下进入u-boot
使用minicom连接板子,启动板子后,当出现u-boot的启动信息:
start linux now(y/n):
按空格或者回车就可以进入u-boot控制台。 4.去除扇区保护
在一些比较新的版本的u-boot里,会有扇区保护,烧写之前必须去掉保护,要获知有无烧写保护可以用通过查看u-boot新息命令
=>flinfo
输出如下:
Bank # 1: INTEL 28F128J3A
Size: 16 MB in 128 Sectors
Sector Start Addresses:
00000000 (RO) 00020000 00040000 00060000 00080000
000A0000 000C0000 000E0000 00100000 00120000
.........
.........
(RO)表示保护
=> protect off 1:0
输出如下:
Un-Protect Flash Sectors 0-0 in Bank # 1
..
---------------------[说明]--------------------------
保护和去除保护的命令如下:
protect on 1:n--m
protect off 1:n--m
这里的n和m的值为flash芯片128个扇区中整数 0,1,2,…… 126, 27) n < m 。参数m可以省略, 略m表示对指定的扇区执行操作,1 是protect函数执行的判断条件,如果是0就不执行相关操作。
另外还可以设置或取消u-boot的所有保护:
=>protect on all
=>protect off all
-------------------------------------------------------- 5.烧写
=> protect off 1:0
=> tftp a0008000 u-boot.bin
=> fl 0 a0008000 20000
输出如下:
start_sect=0x0,end_sect=0x0
************erase sector 0x0***********
----------program sector 0x0---------
然后重新设置扇区保护
=> protect on 1:0 reset一下,启动系统引导成功的话就可以了。