Uboot烧录及使用(IMX6U)
一、UBOOT学习
0、基础知识
进入uboot,查询到dram 起始地址为0x80000000,大小为0x20000000(512Mb)
bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x20000000
eth0name = FEC1
ethaddr = 88:30:6D:AF:F4:8F
current eth = FEC1
ip_addr = 192.168.1.3
baudrate = 115200 bps
TLB addr = 0x9FFF0000
relocaddr = 0x9FF55000
reloc off = 0x18755000
irq_sp = 0x9EF52EA0
sp start = 0x9EF52E90
DDR ADDR | 程序 |
---|---|
0x80800000 | zImage |
0x83000000 | dtb |
1、UBOOT裸程序构成
由 IVT + Boot Data + DCD + bin 构成,在DDR中的存放地址如下:
DDR ADDR | 内容 |
---|---|
0x877ff000 | boot load start |
…(+ 1KB, block 0, block 1) | reserve |
0x877ff400 (bolck 2) | IVT(u-boot.imx) |
… | Boot data |
… | DCD |
(+ 3Kb) | ( IVT+BOOTDATA+DCD) |
0x87800000 | bin |
①IVT内容
TAG、指定IVT大小
bin PC指针
DCD地址(ddr)
boot data地址(ddr)
IVT地址(ddr)
②Boot Data内容
xxx.imx起始地址
镜像大小
③DCD内容
TAG、DCD大小、版本
寄存器及值,配置基础功能(时钟、DDR等)
2、Uboot烧写方法
①从linux用户空间直接将uboot.imx烧录到SD/EMMC设备
烧录到SD卡
#将SD卡插入开发板或者ubunto开发环境
$ sudo fdisk -l #查看SD卡/dev名
$ sudo dd if=u-boot.imx of=/dev/yourSdName bs=1024 seek=1 conv=fsync
烧录到EMMC
$ echo 0 > /sys/block/mmcblk1boot0/force_ro #开启emmc写功能
$ dd if=u-boot.imx of=/dev/mmcblk1boot0 bs=1024 seek=1 conv=fsync
$ echo 1 >/sys/block/mmcblk1boot0/force_ro #关闭写
$ mmc bootpart enable 1 1 /dev/mmcblk1 #使能分区1
②从uboot中下载后,再写入到SD/EMMC设备block 2处
=> setenv serverip 192.168.1.101
=> tftp 80800000 u-boot.imx
Using FEC1 device
TFTP from server 192.168.1.101; our IP address is 192.168.1.3
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #########################
938.5 KiB/s
done
Bytes transferred = 363520 (58c00 hex)
=> mmc dev 0 0
switch to partitions #0, OK
mmc0 is current device
=> mmc write 80800000 2 2c6 #363520/512
MMC write: dev # 0, block # 2, count 710 ... 710 blocks written: OK
#emmc需要这一步
=>mmc partconf 1 1 0 0
#重启后,查看版本
=> version
③ 使用mfgtool通过串口烧录
1、配置BOOT_CFG 为01000000
2、连接串口
3、烧录
④ 在ubuntu开发环境下使用imxdownload
1、插入SD卡
2、找到/dev名
3、./imxdownload u-boot.bin /dev/sdd
3、Uboot下常用命令
=> mmc info #查看当前mmc设备信息
=> mmc list #查看mmc设备列表
=> mmc dev 1 [可选part]#切换到mmc设备1(默认到分区part=0)
=> mmc part #查看当前设备分区
=> mmc read/write/erase 80800000 600 10 #读取0x600块开始10个块到80800000ddr addr.
=> nand info
=> nand device
=> nand erase addr size
=> nand wrete/read addr off size
=> fatinfo mmc 0:1 #产看分区文件系统信息
=> fat[ext2/ext4]ls mmc 0:1 #查看mmc0分区1下文件
=> fat[ext]load mmc 0:1 80800000 file #将文件读取到ddr
=> fdt addr 80800000 #设置设备树地址
=> fdt print #查看设备树文件内容
=> bootz 80800000 - 83000000 #从ddr启动linux镜像zImage(808) 、inidrd(-)、dtb(830)
=> bootm 80800000 #从ddr启动镜像uImage
=> boot #从bootcmd读取,并执行命令
=> reset #重启
=> go addr #跳转到addr并运行bin程序
=> run xxxcmd #运行自定义的xxxcmd(类似于bootcmd)