嵌入式Linux学习记录之Uboot
1、Uboot是一个裸机程序,比较复杂
2、Uboot就是一个bootloader,用于启动Linux或其他系统。
Uboot是最主要的是工作初始化DDR。Linux运行在DDR里面的,一般Linux镜像zIgame(ulmage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI FLASH等外置存储区域。
需要将Linux镜像从外置flash拷贝到DDR中,在去启动
Uboot的主要目的就是系统的启动做准备。
Uboot不仅能启动Linux,也可以启动其他系统,比如vxworks.
Linux不仅能通过uboot启动
Uboot是个通用的bootloader,支持多种构架。
Uboot获取
1、首先是uboot官网,支持少
2、SOC厂商会从uboot官网下载某一版本的uboot,然后在版本的uboot加入相应的SOC以及驱动,这就是SOC厂商定制版的uboot,NXP官方的I.MX6ULL EVK板子。(推荐)
3、做开发板的厂商,开发板会参考SOC厂商的板子,开发板必然会官方的不一样。因此开发板厂商又会去修改SOC厂商做好的uboot,以适应的板子。
正点原子官方uboot
1、编译uboot的时候需要先配置
2、编译完成后会生成一个uboot.bin。必须向uboot.bin添加头部信息。uboot编译最后会通过/toos/mkimage软件添加头部信息,生成uboot.imx
3、如果配置过uboot,一定要注意shell会清除整个工程,那么配置的文件和配置项也会被删除
4、为了方便开发,建议在uboot顶层设置号ARCH和CORSS_COMPILE这两个变量的值
一、uboot启动log简析
1、以后带有调试性质的开发,uboot都是烧写到sd卡中,方便烧写
2、help命令
查看某一个命令
? 命令
3、信息查询
1、bdinfo 板子信息
2、printenv 查看板子的环境变量
4、setenv 命令 ---重点
设置环境变量 ,可以自定义环境变量
5、 saveenv命令 ----重点
内存操作命令
1、md
2、nm
3、mm
4、mw
5、cp
6、cmp
网络操作命令
1、ping命令
2、dhcp命令
3、nfs命令
目的就是为了调试程序
4、tftp命令
FAT格式文件系统操作命令
对于IMX6U来说,SD/EMMC分为3个分区:
1、uboot
2、Linux zImage dtb FAT
3、 系统根文件系统
1、fatinfo命令
fatinfo 命令用于查询指定 MMC 设置指定分区的文件系统信息
2 、fatls 命令
fatls 命令用于查询 FAT 格式设备的目录和文件信息
3 、fstype
fstype 用于查看 MMC 设备某个分区的文件系统格式
4 、fatload 命令
fatload 命令用于将指定的文件读取到 DRAM 中
5 、fatwrite 命令
BOOT操作命令:
1、booz命令
要启动linux必须将zlmage、dtb放到DRAM上
boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统,bootcmd 是一个很重要的环境变量!
bootz 命令用于启动 zImage 镜像文件
go 命令用于跳到指定的地址处执行应用
run 命令用于运行环境变量中定义的命令,比如可以通过“run bootcmd”来运行 bootcmd 中的启动命令,但是 run 命令最大的作用在于运行我们自定义的环境变量。
1、booz命令
要启动linux必须将zlmage、dtb放到DRAM上
bootz 命令用于启动 zImage 镜像文件
tftp 80800000 zImage
tftp 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 – 83000000
fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 - 83000000
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000'
setenv mybootnet 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000'
U-Boot源码:
1、arch/arm/cpu/u-boot.lds就是整个uboot的连接脚本
2、board/freescale/mx6ullevk ---重点
3、configs目录使uboot的默认配置文件目录。此目录都是以.defconfig结尾的。这些配置文件对应不同的板子
移植uboot的时候重点关注
\configs 主要使defconfig
当我们执行make xxx_defconfig 以后就是生成.config文件,其保存了详细的uboot配置信息。
顶层README,非常重要,建议大家阅读
u-boot 编译出来带ELF信息的uboot可执行文件