linux系统移植:u-boot常用指令(下)(代码片段)

JeckXu666 JeckXu666     2023-02-16     129

关键词:

Linux系统移植:U-Boot常用指令(下)

一、U-Boot 常用命令(上)

1.1 EMMC和SD卡命令

uboot 支持 EMMC 和 SD 卡,提供 EMMC 和 SD 卡的操作命令

mmc 指令

命令描述
mmc info输出 MMC 设备信息
mmc read读取 MMC 中的数据
mmc read addr blk# cnt
addr 是数据读取到 DRAM 中的地址,blk 是要读取的块起始地址(十六进制),一个块是 512 字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,cnt 是要读取的块数量(十六进制)
mmc wirte向 MMC 设备写入数据
mmc write addr blk# cnt
addr 是要写入 MMC 中的数据在 DRAM 中的起始地址,blk 是要写入 MMC 的块起始地址 (十六进制),cnt 是要写入的块大小
mmc erase擦除 MMC 设备的指定块
mmc erase blk# cnt
blk 为要擦除的起始块,cnt 是要擦除的数量,不要乱用 mmc erase 来擦除 MMC 设备!
mmc rescan扫描 MMC 设备,扫描当前开发板上所有的 MMC 设备,包括 EMMC 和 SD 卡
mmc part列出 MMC 设备的分区
mmc dev切换 MMC 设备,用于切换当前 MMC 设备
mmc dev 0
切换到 SD 卡,0 为 SD 卡,1 为 eMMC
mmc list列出所有有效的 MMC 设备,查看当前开发板一共有几个 MMC 设备
mmc hwpartition设置 MMC 设备的分区
mmc bootbus……设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值
mmc bootpart……设置指定 MMC 设备的 boot 和 RPMB 分区的大小
mmc partconf……设置指定 MMC 设备的 PARTITION_CONFG 域的值
mmc rst复位 MMC 设备
mmc setdsr设置 DSR 寄存器的值

千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表

1.2 FAT 格式文件系统命令

对于 FAT 格式文件系统的 emmc 文件,uboot 有 fatinfo、fatls、fstype、fatload 和 fatwrite 相关操作命令

1.2.1 fatinfo 命令

令用于查询指定 MMC 设置指定分区的文件系统信息

fatinfo <interface> [<dev[:part]>]

interface 表示接口,比如 mmc,dev 是查询的设备号,part 是要查询的分区

1.2.2 fatls命令

查询 FAT 格式设备的目录和文件信息

fatls <interface> [<dev[:part]>] [directory]

interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory 是要查询的目录

eg:查询分区1的文件

1.2.3 fstype 命令

查看 MMC 设备某个分区的文件系统格式

fstype <interface> <dev>:<part>

eg:查询emmc三个分区的文件系统

分区 0 格式未知,因为分区 0 存放的 uboot,并且分区 0 没有格式化,所以文件系统格式未知

分区 1 的格式为 fat,分区 1 用于存放 linux 镜像和设备树

分区 2 的格 式为 ext4,用于存放 Linux 的根文件系统(rootfs)

1.2.4 fatload 命令

将指定的文件读取到 DRAM 中

fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]

interface 为设备接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省 略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的 话表示从文件首地址开始读取

eg:将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的 0X80800000 地址处

1.2.5 fatwrite 命令

将 DRAM 中的数据写入到 MMC 设备中(使用前需要修改板子配置头文件,使能写文件系统,使能如下)

#define CONFIG_FAT_WRITE 

fatwrite 格式

fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>

interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是要写入的数据在 DRAM 中的起始地址,filename 是写入的数据文件名字,bytes 表示要写入多少字节的数据

1.3 EXT 格式文件系统命令

uboot 有 ext2 和 ext4 这两种格式的文件系统的操作命令,常用的就五个命令,分别为: ext2load、ext2ls、ext4load、ext4ls 和 ext4write

命令功能
ext2load从 ext2 文件系统中读文件数据
ext2ls以查询文件和目录
ext4load从 ext4 文件系统中读文件数据
ext4ls以查询文件和目录
ext4write写文件数据

1.4 NAND 操作命令

uboot 是支持 NAND Flash 的,所以也有 NAND Flash 的操作命令,我的开发板没有 nand ,使用没有 nand 操作指令,这里做简单介绍

1.4.1 nand info命令

打印 NAND Flash 信息

1.4.2 nand device命令

用于切换 NAND Flash

1.4.3 nand erase命令

nand erase 命令用于擦除 NAND Flash,在向 NAND Flash 写数据 之前一定要先对要写入的区域进行擦除

nand erase[.spread] [clean] off size //从指定地址开始(off)开始,擦除指定大小(size)的区域。
nand erase.part [clean] partition //擦除指定的分区
nand erase.chip [clean] //全篇擦除

1.4.4 nand write命令

向 NAND 指定地址写入指定的数据,一般和 nand erase 命令配置使用来更新 NAND 中的 uboot、linux kernel 或设备树等文件

nand write addr off size

1.4.5 nand read命令

从 NAND 中的指定地址读取指定大小的数据到 DRAM 中

nand read addr off size

1.4.6 正点原子 NAND 介绍

I.MX6U-ALPHA 开发板出厂系统 NAND 分区如下

0x000000000000-0x0000003FFFFF : "boot"
0x000000400000-0x00000041FFFF : "env"
0x000000420000-0x00000051FFFF : "logo"
0x000000520000-0x00000061FFFF : "dtb"
0x000000620000-0x000000E1FFFF : "kernel"
0x000000E20000-0x000020000000 : "rootfs"

第一个分区存放 uboot,地址范围为 0x0~0x3FFFFF(共 4MB);

第二个分 区存放 env(环境变量),地址范围为 0x400000~0x420000(共 128KB);

第三个分区存放 logo(启 动图标),地址范围为 0x420000~0x51FFFF(共 1MB);

第四个分区存放 dtb(设备树),地址范围为 0x520000~0x61FFFF(共 1MB);

第五个分区存放 kernel(也就是 linux kernel),地址范围为 0x620000~0xE1FFFF(共 8MB);

最后一个分区,存放 rootfs(根文件系统)

1.5 BOOT操作命令

uboot 有相关的 boot (引导)命令来启动 Linux,常用的跟 boot 有关的命令有:bootz、bootm 和 boot

1.5.1 bootz 命令

将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令来启动

bootz [addr [initrd[:size]] [fdt]]

addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在 DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中 的地址

如果我们要启动 Linux 系统的话,只需要使用命令 fatload 将 zImage 和设备树文件从 EMMC 的分区 1 中拷贝到 DRAM 中,然后使用命令 bootz 启动即可

1.5.2 bootm 命令

bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件

启动内核指令格式

bootm addr

addr 是 uImage 镜像在 DRAM 中的首地址

启动内核同时使用设备树指令

bootm [addr [initrd[:size]] [fdt]]

addr 是 uImage 在 DRAM 中的首地址,initrd 是 initrd 的地址,fdt 是设备树(.dtb)文件 在 DRAM 中的首地址

1.5.3 boot 命令

boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统

bootcmd 是一个很重要的环境变量,这个环境变量保存着引导命令,就是启动的命令集合

bootcmd 很重要,比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为

“tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000”

然后使用 saveenv 将 bootcmd 保存起来,然后直接输入 boot 命令即可从网络启动 Linux 系统

uboot 倒计时结束以后就启动 Linux 系统,其实就是执行的 bootcmd 中的启动命令!

对原子开发板来说,如果不修改 bootcmd 的话,每次开机 uboot 倒计时结束以后都会自动从 EMMC 里面读取 zImage 和 imx6ull-14x14-emmc-7-1024x600-c.dtb,然后启动 Linux

1.6 其他常用命令

1.6.1 reset 命令

reset 命令顾名思义就是复位的,输入“reset”即可复位重启

1.6.2 go 命令

go 命令用于跳到指定的地址处执行应用

go addr [arg ...]

addr 是应用在 DRAM 中的首地址

1.6.3 run 命令

run 命令用于运行环境变量中定义的命令,比如可以通过 run bootcmd 来运行 bootcmd 中 的启动命令,但是 run 命令最大的作用在于运行我们自定义的环境变量

run 环境变量

1.6.4 mset 命令

mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR

mtest [start [end [pattern [iterations]]]]

start是要测试的DRAM 开始地址,end 是结束地址,比如我们测试 0X80000000~0X80001000 这段内存

mtest 80000000 80001000

这里我测试了 284 次

成为linux程序员需要学习啥

1第一部分:LINUX平台搭建与环境熟悉 了解Linux系统;区分各种版本的Linux系统,以便于拓展Linux视野。1、Linux简介;2、Linux系统的主要特点;3、Linux的组成;4、主要的Linux版本;5、嵌入式Linux简介与发展第二部分虚拟机安装和LINU... 查看详情

linux系统移植:u-boot启动流程(下)(代码片段)

目录Linux系统移植:U-Boot启动流程(下)一、run_main_loop函数详解二、cli_loop函数详解三、cmd_process函数详解Linux系统移植:U-Boot启动流程(下)一、run_main_loop函数详解uboot启动以后会进入3秒倒计时,如果... 查看详情

linux系统移植:u-boot顶层makefile分析(下)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(下)一、调用scripts/Kbuild.include二、导出交叉编译工具变量设置三、导出其他变量四、makexxx_config过程五、make过程Linux系统移植:U-Boot顶层Makefile分析(下)继续沿着... 查看详情

linux系统移植:nxp官板uboot移植(代码片段)

文章目录Linux系统移植:NXP官板uboot移植一、获取官板U-Boot二、编译下载U-Boot源码三、官方驱动验证Linux系统移植:NXP官板uboot移植移植NXP的IMX6ULL官板U-Boot到原子的开发板一、获取官板U-Boot去NXP官网下载评估板的U-Boot,... 查看详情

嵌入式linux第二部分-裸机开发/系统移植/驱动开发/内核开发

...。主要涉及Linux环境配置,嵌入式Linux裸机开发,Linux文件系统及系统移植,驱动开发等部分。目前持续更新中,更新时间:2022年11月13日【嵌入式Linux】裸机开发篇LinuxC语言及Makefile基础【嵌入式Linux】1.shell概念及常用命令行【嵌... 查看详情

linux系统移植:u-boot链接脚本(代码片段)

文章目录Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍二、u-boot.lds分析Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍前面提到的U-Boot的本质就是一个大的裸机程序,执行的时候需要先找到程序入口,而程序的链接... 查看详情

linux系统移植博文导航

Linux系统移植专栏更新很久了,博主今天就把以前的博文整理一下,希望对感兴趣的朋友有所帮助,在此感谢CSDN这个平台给出了这个一个交流的机会,也感谢大家的支持。Linux相关的网站U-BootLinux内核busyboxLinux系统移植Linux系统移... 查看详情

linux系统移植:正点原子u-boot移植(代码片段)

文章目录Linux系统移植:正点原子U-Boot移植一、What‘sU-Boot?1.1U-Boot简介1.2U-Boot选择二、正点原子U-Boot编译2.1编译环境2.2编译脚本三、U-Boot烧写与启动Linux系统移植:正点原子U-Boot移植一、What‘sU-Boot?1.1U-Boot简介Linux系统启... 查看详情

正点原子i.mx6u-mini移植篇u-boot移植过程详解(代码片段)

...以后Linux还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。所以U-Boot、Linuxkernel和rootfs这三者一起构成了一个完整的Linux系统,一个可以正常使用、功能完善的Linu... 查看详情

linux系统移植:u-boot工程创建(代码片段)

文章目录Linux系统移植:U-Boot工程创建一、U-Boot文件目录二、U-Boot目录解析2.1arch文件夹2.2board文件夹2.3config文件夹2.4.u-boot.xxx_cmd文件2.5顶层Makefile文件2.6u-boot.xxx文件2.7.config文件2.8README文件三、U-Boot过程创建3.1打开工程文件夹3... 查看详情

linux系统移植:u-boot启动流程(上)(代码片段)

目录Linux系统移植:U-Boot启动流程(上)一、reset函数源码详解二、lowlevel_init函数详解三、s_init函数详解四、_main函数详解Linux系统移植:U-Boot启动流程(上)一、reset函数源码详解根据链接文件,可以... 查看详情

linux系统移植:u-boot顶层makefile分析(上)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(上)一、版本号二、传递变量到子make三、命令输出四、静默输出五、编译输出目录六、代码检查七、模块编译八、获取主机架构和系统九、设置目标架构、交叉编译器和配置... 查看详情

怎样移植u-boot和linux到s3c2440开发板

...启动。本文就介绍如何实现该功能,并组成一个最简单的系统,这不仅要移植uboot,还要移植linux内核及创建一个根文件系统。首先我们对nandflash进行分区,规划好每个文件存放在nandflash的位置。下面是nandflash的分区:第0分区:0... 查看详情

如何往riscv上移植linux

参考技术A步骤一:编译生成u-boot.elf文件使用gitclone命令从github上下载u-boot源码,注意使用主分支(master),使用tar命令对下载的压缩文件解压,tarzxvfu-boot-digilent-2012.04-digilent-13.01.tar.gz。如果下载的是zip文件用unzipu-boot-digilent-2012.0... 查看详情

linux系统移植:u-boot启动流程(中)(代码片段)

Linux系统移植:U-Boot启动流程(中)一、board_init_f函数详解board_init_f函数是_main函数初始化中调用的重要函数之一,函数主要有两个工作:初始化一系列外设,比如串口、定时器,打印一些消息初始化gd... 查看详情

嵌入式linux6.u-boot常用命令

U-Boot命令使用进入uboot的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前uboot所支持的命令,如图常用的uboot命令信息查询命令常用的和信息查询有关的命令有3个bdinfo、printenv和versionbdinfo printenv 查看详情

嵌入式linux6.u-boot常用命令

U-Boot命令使用进入uboot的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前uboot所支持的命令,如图常用的uboot命令信息查询命令常用的和信息查询有关的命令有3个bdinfo、printenv和versionbdinfo printenv 查看详情

u-boot-2016.07移植(第一篇)初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析目录U-BOOT-201607移植 第一篇 初步分析目录编译和移植环境更新交叉编译工具1下载arm-linux-gcc4432安装arm-linux-gcc443安装环境Ubuntu910下载u-boot-201607并解压分析顶层Makefile1找出目标依赖关系2总结... 查看详情