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的编译概述

  这里可以参考我另一篇博客:https://www.cnblogs.com/xingboy/p/14858853.html里的4部分(  编译boot Loader),里面可能会有一些描述不够准确的地方,可以评论区指出。

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里的命令集合。

  注意:这里的命令全部是概述,不包括所有命令,具体命令使用可以网上查阅详细说明。

      

  
posted @ 2022-05-06 23:28  白菜没我白  阅读(328)  评论(0编辑  收藏  举报