uboot的使用
编译UBOOT
1、配置编译环境
make distclean
清除旧配置
make ARCH=arm CROSS_COMPILE=arm-xxx-linux- xxx_config
2、编译UBOOT
make ARCH=arm CROSS_COMPILE=arm-xxx-linux- -j 20
编译成功后,将在UBOOT目录下生成u-boot.bin。
烧写UBOOT
若芯片是第一次烧写,则参考上一篇写的文档。
下面的情况是DRAM中已经运行了UBOOT。
1、烧写到SPI-Norflash
//对内存初始化,大小1MB
mw.b <ddr_addr> 0xff 0x100000
//检测并初始化SPI-Norflash
sf probe 0
//擦除1M大小
sf erase 0x0 0x100000
//将UBOOT下载到内存
tftp <ddr_addr> u-boot.bin
//将内存中固件写入SPI-Norflash
sf write <ddr_addr> 0x0 0x100000
上述步骤完成后,重启系统即可。
2、烧写到SPI-Nandflash
//内存初始化,大小1MB
mw.b <ddr_addr> 0xff 0x100000
//擦除1MB大小
nand erase 0 0x100000
//将UBOOT下载到DDR
tftp <ddr_addr> uboot.bin
//将DDR内存写入NAND Flash
nand write <ddr_addr> 0x0 0x100000
3、烧写到EMMC
//对内存初始化,大小1MB
mw.b <ddr_addr> 0x0 0x100000
//UBOOT下载到DDR
tptf <ddr_addr> u-boot.bin
//将DDR内容写入EMMC
mmc write 0 <ddr_addr> 0 0x100000
UBoot配置文件常见修改地方:
配置文件所在地方:include/configs/xxx.h
1、CONFIG_BOOTARGS
内核启动参数,常见修改是内核启动以后内存配置,分区大小配置。
2、CONFIG_BOOTCOMMAND
OS启动命令,说明从哪里启动内核。
下面是从spi norflash中加载并启动内核
sf probe;sf read 0x80600000 0x40000 0x280000;bootm 0x8060000
命令bootm
引导在DDR中的程序映像。
格式:
bootm addr1 addr2
addr1——是程序image地址
addr2——一般是ramdisk地址,可以忽略;
3、CONFIG_BOOTDELAY
配置uboot等待时间。单位s
4、uboot中添加密码功能:
在配置文件中添加如下内容:
#define CONFIG_AUTOBOOT_KEYED
#define CONFIG_AUTOBOOT_STOP_STR "123456"
#define CONFIG_AUTOBOOT_PROMPT "Press xxx in %d second"
#define CONFIG_AUTOBOOT_DELAY_STR "linux"
5、SD卡升级
就是实现sdupdate命令,在UBOOT命令下,从SD卡中加载UBOOT,KERNERL,ROOTFS以及demo.bin。
在isvp_t40.h中添加#define CONFIG_AUTO_UPDATE
定义
具体代码在common/cmd_sdupdate.c
中。
需要注意,LOAD_ADDR
表示把SD卡上的相应程序,加载到的内存位置。
程序中默认设置为0x82000000,由于这个地址处在uboot堆上,常见uboot的堆大小在isvp_t40.h中CONFIG_SYS_MALLOC_LEN
的宏配置。这个地址能被使用的大小将受到堆大小的限缺电,还有uboot代码中malloc空间的限制。(需要读取轶闻大文件的时候,可以适当增大 CONFIG_SYS_MALLOC_LEN
)