Linux——Uboot命令使用

打印 上一主题 下一主题

主题 872|帖子 872|积分 2620

什么是Uboot?

   1)Uboot是一个裸机程序,比较复杂。类似我们PC机的BIOS程序。
  2)Uboot就是一个bootloader,作用就是用于启动Linux大概其他系统,Uboot最主要的工作是初始化DDR,由于Linux的运行是运行在DDR内里的。(Linux镜像编译出来如果不做裁剪的话有四五兆字节那么大,一样平常芯片内部ram没有那么大,无法运行,必须放到DDR中运行),以是如果要运行Linux,就要先初始化好DDR,才华在DDR中运行Linux系统。
  一样平常Linux镜像(叫做zimage大概是uimage)+装备树(.dtb)存放在SD、EMMC、NAND、SPI FLASH等等外置存储地区。
  Uboot可以引导Linux镜像从外置flash拷贝到DDR中,再去启动。
  Uboot不仅能启动Linux,也可以启动其他系统,比如vxworks。
  Uboot是个通用的bootloader,支持多种架构。
   Uboot编写扼要流程

   最直接的方式就是官网下载,但是不大概编写Uboot的时候思量到所有芯片的需求,如果必要一些特别的驱动,就必要SOC(系统级芯片)厂商本身去更改和添加原始Uboot的一些内容,做开发板的厂商也必要根据SOC厂商做好的Ubooot举行修改,从而来顺应本身制作的开发板。
  编写好的Uboot程序的编译

   (1)通过FTP传输(FileZilla)在Windows系统下将正点原子编写的Uboot压缩包传输到Ubuntu

  (2)通过命令举行解压缩
  

  v显示过程,x解压缩,j表示tar.bz2文件,f使用归档文件
  (3)512MB(DDR3)+8GB(EMMC)核心板使用如下命令来编译Uboot
  清理编译文件
  

  设置Uboot
  

  文件夹下会生成一个.config文件,使用ls  -a命令查看
  

  编译Uboot
  

  V=1的作用是把编译的过程详细打印出来。
  编译完成之后会在文件夹里生成一个u-boot.bin的文件,与我们的裸机实验一样生成一个可实验文件,但是我们要运行程序必须在.bin文件里添加头部信息(主要有IVT镜像向量表,包含了一系列的地点信息、BOOT Data包含了启动时必要的一些关键数据,比如镜像要拷贝到哪个地点、拷贝的巨细等信息、DCD是装备设置数据,主要用于初始化系统时钟、DDR等装备信息。),添加完之后会生成u-boot.imx文件,uboot是通过/tools/mkimage如许的一个工具添加头部信息的,如下:
  

  Uboot命令的使用

   信息查询命令
  常用的信息查询命令有3个,分别是bdinfo、printenv和version。
  bdinfo命令可以得出 DRAM 的起始地点和巨细、启动参数保存起始地点、波特率、 sp(堆栈指针)起始地点等信息,如下:
  

  printenv命令用于输出环境变量信息。Uboot的环境变量是可以修改的,有专门的命令来修改Uboot的环境变量。
  

  version命令用来显示版本号,下图打印出的信息表示用的Uboot版本是2016年的,前次编译时间是2024年,用的是arm-linux-gnueabihf-gcc编译器。
  

  环境变量操纵命令
  1)修改环境变量
  环境变量的修改涉及到两个命令,setenv命令用于设置环境变量大概修改环境变量,saveenv命令将修改后的环境变量保存到flash中。
  例如我们要将延时时间修改成5秒后才启动linux内核,可以
  

  如果我们修改的环境变量的值有空格,我们就必要将其值用单引号括起来
  2)新建环境变量
  命令 setenv 也可以用于新建命令,用法和修改环境变量一样,比如我们新建一个环境变量 author,author 的值为我的名字拼音:zhangzs,那么就可以使用如下命令:
  

  3)删除环境变量
  删除环境变量的命令跟设置环境变量命令相同,只要在变量后面赋空值即可
  

  内存操纵命令
  内存操纵命令就是直接对DRAM举行读写操纵的,常用的内存操纵命令有md、nm、mm、mw、cp和cmp。
  1)md命令
  格式如下:
  md [.b,.w,.l] address [# of objects]
  显示格式[.b,.w,.l]对应byte、word和long,也就是1个字节、2个字节和4个字节来显示内存值。,address是要查看内存的起始地点,[# of objects]表示要查看的数据长度,比如要显示的内存长度为20,显示格式为.b的话就是20个字节,显示格式为.w的话就是20*2个字节,显示格式为.l的话就是20*4个字节。
  uboot命令中的数据都是十六进制的!不是十进制!!
  例如要查看以0x80000000开始的20个字节的内存值,显示格式位.b,(0x14表示20)使用如下命令:
  

  2)nm命令
  nm命令用于修改指定地点的内存值,修改完之后输入q退出
  

  3)mm命令
  mm命令也是修改指定地点的内存值的,但是相比于nm命令,mm命令修改完一个内存值之后地点会自增。
  

  4)mw命令
  命令mw用于使用一个指定的数据填充一段内存
  

  5)cp命令
  cp是数据拷贝指令,用于将DRAM中的数据从一段内存拷贝到另一段内存,大概从NOR FLASH中拷贝到DRAM
  

  6)cmp命令
  cmp是比较命令,用于比较两段内存的数据是否相等
  

  

  网络操纵命令
  在举行网络操纵命令之前,我们必要将电脑和开发板连接至同一起由器(笔记本电脑也可以无线连接,但要确保假造机有网络),且我们必要将开发板和假造机设置为同一网段,由于我们的开发板连接了路由器,以是要是处于同一网段我们必要手动修改Ubuntu的ip,如下:
  

  DNS服务器记得设置!否则大概会没网!!
  如果照旧没网的话设置一下假造机:
  

  根据实际设置环境变量
  

  1)ping命令
  作用是检测处于同一网段的呆板能不能相互通讯,如今我们的开发板与我们的假造机处于同一网段
  

  2)dhcp命令
  从路由器获取ip地点
  

  3)nfs命令
  通过nfs(网络文件系统)可以在计算机之间通过网络来分享资源
  格式:nfs [loadAddress] [[hostIPaddr:]bootfilename]
  loadAddress 是要保存的 DRAM 地点,[[hostIPaddr:]bootfilename]是要下载的文件地点。这 里我们将正点原子官方编译出来的 Linux 镜像文件 zImage 下载到开发板 DRAM 的 0x80800000 这个地点处。

  如果出现Loading: T T T T T T T T /Loading: *** ERROR: File lookup fail这些情况,可以参考我的另一篇博客Linux——Uboot使用NFS出现Loading: T T T T T T T T /Loading: *** ERROR: File lookup fail-CSDN博客
  4)tftp命令
          tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令 使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此必要在 Ubuntu 上搭建 TFTP 服务器, 必要安装 tftp-hpa 和 tftpd-hpa,命令如下:
  

  

  创建文件
  

  在文件中输入如下内容
  

  然后启动 tftp 服务
  

  打开文件tftpd-hpa
  

  修改
  

  重启tftp
  

  tftp服务器已经搭建好了
  一点要确保我们已经给了tftp文件夹和zImage权限,否则会传输失败!!
  

  EMMC和SD卡操纵命令
  1)mmc命令
  “mmc”是一系列命令,其后可以跟不同的参数,输出?mmc大概mmc -help即可查看mmc相关的命令:
  

  FAT格式文件操纵命令
  1)fatinfo命令
  fatinfo 命令用于查询指定 MMC 装备分区的文件系统信息
  

  命令的作用是查询emmc的分区1的文件系统信息(mmc表示接口)
  2)fatls命令
  fatls命令的作用是查询FAT格式装备的目录和文件信息
  

  命令的作用是查询SD卡的分区1的目录和文件信息
  3)fstype命令
  查询装备的文件格式
  

  fat格式存放Linux的镜像和装备树,ext4格式存放Linux的根文件系统(rootfs)
  4)fatload命令
  fatload 命令用于将指定的文件读取到 DRAM 中
  

  命令的作用是将mmc接口的装备1的分区1的zImage文件写到DRAM的80800000位置
  5)fatwrite命令
  将DRAM的数据写到MMC装备中
  语句的作用是将DRAM的0x80800000位置的zImage文件写到MMC装备1的分区1,巨细为0x6788f8
  

  EXT格式文件系统操纵命令
  uboot有ext2和ext4两种格式文件系统的操纵命令。
  常用的命令为ext2load、ext2ls、ext4load、ext4ls 和 ext4write,使用方式跟FAT格式文件系统一样。
  BOOT操纵命令
  1)bootz命令
  bootz 命令用于启动 zImage 镜像文件
  

  

  2)bootm命令
  bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件
  3)boot命令
  boot命令是来启动Linux系统,boot会读取环境变量bootcmd来启动Linux系统
  如果我们要通过网络来启动Linux,可以举行如下操纵
  

  设置好环境变量bootcmd然后保存,通过boot命令来启动Linux系统,如果要从emmc启动就做如下环境变量定义
  

  








免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表