uboot的就是universal bootloader(通用的启动代码)。
一、uboot的作用
(1)uboot主要作用是用来启动操作系统内核;
(2)uboot还要负责部署整个计算机系统;
(3)uboot中还有操作flash等板子上硬盘的驱动;
(4)uboot还得提供一个命令行界面供人操作。
二、uboot必须解决的问题
(1)自身可开机直接启动
(2)能够引导操作系统内核启动并给内核传参
(3)能够提供系统部署功能
(4)能进行soc级和班级硬件管理
三、uboot的工作方式
(1)uboot是一个开源项目,由若干个.c文件和.h文件组成,配置编译之后会生成一个uboot.bin,这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理的烧录到启动介质中拿给soc去启动。也就是说uboot在没有运行时变现为uboot.bin,一般躺在启动介质中。
(2)uboot运行时会被加载到内存中然后一条指令一条指令的拿给CPU去运行。
四、uboot的命令式shell界面
(1)普通程序的裸机程序运行起来就直接执行了,执行效果和代码有关。
(2)有些程序需要和人进行交互,于是乎程序中就实现了一个shell(shell就是提供人机交互的一个界面),uboot就实现了一个shell。
(3)uboot中的shell工作方式和Linux中的终端shell非常像,只是命令集不一样。
五、uboot的常用命令
(1)有些命令有简化的别名,譬如printenv命令可以简化为print,譬如setenv可以简化为set
(2)命令中的特殊符号(如单引号),uboot的有些命令带的参数非常长,为了告诉uboot这个非常长而且中间有很多空格的字符串是给他的一整个参数,所以用单引号将这个很长且中间有空格隔开的参数引起来。
(3)命令printenv/print
print命令不用带参数,作用是打印出系统中所有的环境变量。环境变量被存储在Flash的一块专门区域(Flash上有一个环境变量分区),一旦在程序中保存了该环境变量,那么下次开机时该环境变量的值将维持上一次更改保存后的值。
(4)设置(添加/更改)环境变量:setenv/set
用法:set name value
(5)保存环境变量的更改:saveenv/save
save命令不带参数,直接诶执行,作用是将内存中的环境变量的值同步保存到Flash中环境变量的分区。注意:环境变量的保存是整体的覆盖保存,也就是说内存中所有的环境变量都会整体的将Flash中环境变量分区中原来的内容整体覆盖。
彻底更改环境变量的值:第一步用set命令来更改内存中的环境变量,第二步用save命令将其同步到Flash中环境变量的分区。
六、网络测试指令:ping
(1)命令用法:ping ip地址
ping是测试开发板和主机之间的网络连接,步骤如下:
1)插上网线
2)设备主机的本地连接IPv4地址为192.168.1.10
3)确认开发板中uboot里几个网络相关的环境变量的值对不对。最重要的ipaddr(这个环境变量表示当前开发板的IP地址),这个地址必须和主机的IP地址在同一个网段。
网段的概念:一个IP地址分为两部分,一部分是网段地址,另一部分是主机地址(由子网掩码来区分哪一部分是网段,哪一部分是IP地址)。在子网掩码225.255.255.0的情况下,192.168.1.10这个IP地址的前三部分(192.168.1.)属于网段地址,第4部分(10)属于主机地址。
七、uboot常用命令tftp
(1)uboot本身主要目标是启动内核,为了完成启动内核必须要能够部署内核,uboot为了部署内核就需要将内核镜像从主机中下载过来然后烧录到本地flash中。uboot如何从主机下载镜像到开发板上?有很多中方式,主流方式是:fastboot和tftp。
(2)fastboot的方式是通过USB线进行数据传输。
(3)tftp方式:
1)ubuntu搭建tftp服务器
2)设置开发板uboot的环境变量,注意serverip必须设置为虚拟机ubuntu的ip地址。(serverip这个环境变量的意义就是主机tftp服务器的ip地址)
3)ping通ubuntu,然后开始下载:tftp 0x30000000 zImage-qt(意思就是将服务器上名为zImage-qt的文件下载到开发板内存的0x30000000地址处)
4)镜像下载到开发板的DDR后uboot就可以用movi指令进行镜像的烧写了。