2-Linux系统移植前知识概述之U-boot概述
1、Uboot是什么
1. 是一个裸机程序,跟单片机的裸机程序类似;
2. 是一种比较通用的 boot loader;
3. 它支持绝大部分CPU。
作用举例:在做系统时,把系统镜像复制到SD卡,烧录时,uboot程序根据硬件上boot引脚的状态,控制CPU把SD卡里的镜像复制到目标板子的EMMC中,实现系统烧录;烧录成功后重启后,uboot再根据硬件上你切换好的boot引脚的状态,选择启动EMMC里的系统。
在系统移植时,uboot就是一个裸机程序,它的存在就是为了引导启动Linux,和我们pc机的BIOS差不多的功能。只要你能正确的给kernel传递参数,uboot就不是必须的。
2、Uboot能做什么
1. 初始化DDR,让Linux在DDR运行,Linux的镜像(zImag/uImag)、设备树dtb都存放在MMC或者NAND或者Flash里;
2. 将Linux从外置的Flash拷贝到DDR中运行;
3. 主要为系统启动做准备;
4. 除了可以启动Linux外,还可以启动其他系统,例如vxworks;
5. Linux还可以通过其他 boot loader 启动,uboot不是唯一的选择。
uboot的获取方法可以参考博客:1- Linux系统移植前期准备概述 里的2.4部分。
3、Uboot启动流程
1. 启动Uboot开始时会有一个倒计时,在启动倒计时结束前,可以用回车进行命令行模式,执行意向命令,具体可以help命令查看,后续补充常见的uboot命令,可用于直接命令操作或者编写uboot;
2. 启动倒计时结束后,会依次启动镜像、设备树、内核;
3. 运行Linux。
4、Uboot的编译概述
5、u-boot启动log的概述
u-boot启动时会显示一些板载信息,一般我们改uboot的时候,就只需要改一下一些板载信息;
如果uboot启动时没有读到的一些环境变量,它们就会使用默认值;
最后uboot会读取镜像,启动kernel。
6、u-boot命令概述
uboot命令用好的时候,可以方便我们看源码。
6.1 基本命令
Help :信息查询; printenv:查看板子环境变量;
bdinfo:打印板载信息; setenv:自定义环境变量;
saveenv:保存环境变量; reset:重启;
run:运行自定义的命令; go:跳到指定地址命令。
6.2 内存操作命令
md:显示内容,注意uboot里的数字都是16进制,eg: md .b 0x8000000020 命令表示从0x80000000开始显示0x20个内容;
mm:修改内存,每次修改后地址会自增;
cp:复制,eg: cp + .b/.w/.l + 原地址 + 目的地址 + 需要复制的数据长度;
cmp:比较两段内存数据是否相等,eg: cmp + .b/.w/.l + 原地址 + 目的地址 + 比较数据长度 。
6.3 网络操作命令
ping:测试网络是否连通,注意测试机与被测对象要在同一个局域网;
nfs:可以把系统镜像和设备树在线跟新;
tftp:可以在线下载,类似nfs。
6.4 MMC命令
mmc info:打印内存信息(当前选中的);
mmc rescan:扫描MMC;
mmc list:列出mmc;
mmc dev:设置当前使用的设备,eg: mmc dev 1 切换到 mmc 1,mmc dev 1 0 切换到 mmc 1 的 0 分区;
mmc par:显示当前mmc分区信息;
mmc read:读mmc数据,eg: mmc + read + 将读取到的数据保存的地址 + 目标块地址 + 长度(16进制);
mmc write:写数据到mmc,eg: mmc + write + 要写的数据 + 从哪个块开始写(块号) + 要写的块的数量;
mmc erase:擦除,eg: mmc + erase + 块号 + 块数。
6.5 FAT格式文件系统操作命令
fat info:查看制度分区的文件系统信息,eg:fat info mmc 1:1 查看EMMC 1的分区1;
fat ls:查FAT设备的目录/文件信息,eg: fat ls mmc 1:1;
fstype:查看分区文件格式,eg:fstype mmc 1:2;
fatload:把制定分区读到DRAM中,eg:fatload mmc(mmc名) 1:1 808000 zImage 把mmc 1的第一个分区的zImage存放到808000中;
fat write:将DRAM中的数据写到MMC。
6.6 EXT格式文件操作命令用得少,不细说
6.7 NAND命令
uboot命令要注意区分MMC和NAND操作,在编译uboot时候操作NAND内存就要用NAND命令;
mtest:DDR读写测试命令,eg:mtest + 起始地址 + 结束地址;
nand device:用于切换 NAND flash ,如果板子多个 NAND 可用该命令切换;
nand info:查看nand信息;
nand erase:擦擦nand,eg:nand erase 0 1000000 从 0x00 - 0x1000000 擦除;
nand write:写数据,nand里写数据要先擦除,eg:nand write 80800 0 10000 把 80800 的数据写到 0 地址中,写0x1000个;
nand read:读数据,从指定地址读指定数据大小到DRAM中,相当于复制,
eg:nand + read + 目的地址 + 要读取的nand数据的地址 + 读取大小 ( nand read 0x8100000 0x6000000 0x1900);
6.8 boot操作命令
uboot用来启动Linux,这些命令就用的上了;
bootz:启动Linux,启动zImage,
eg: bootz + linux镜像在DRAM中的地址 + initrd在DRAM中的地址,没有用 " - " 代替 + 设备树在DRAM中的地址
( bootz 80800000 - 83000000 ) ;
bootm:与bootz格式一样,用于启动uImage;
boot:也可启动Linux,读取bootcmd环境变量启动Linux,bootcmd相当于一个命令集;
eg: setenv bootcmd ' tfp 8080000 zImage ; tfp 8300000 xxx.dtb ; bootz 808000 - 8300000 ' ( 把 ‘ ’ 里的命令集合到 bootcmd ),
saveenv:保存命令集合,boot:执行上面保存在bootcmd里的命令集合。
注意:这里的命令全部是概述,不包括所有命令,具体命令使用可以网上查阅详细说明。
本文来自博客园,作者:白菜没我白,转载请注明原文链接:https://www.cnblogs.com/xingboy/p/15953073.html