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

JeckXu666 JeckXu666     2023-02-16     200

关键词:

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

一、U-Boot 命令行

烧写启动 U-Boot 后,弹出如下界面:

其中 第 1 行 是 uboot 版本信息和编译时间

2 - 3 行 表面了芯片的厂商和最高主频以及当前主频;4 行 是复位源;5 行 是板子名字,当前的板子名字;6 行 提示 I2C 准备就绪;7、8 行是 RAM 和 ROM ;

10 、11 行 是 LCD 型号(800 * 480);12-14 行 是标准输入、标准输出和标准错误所使用的终端;

第 15 和 16 行 是切换到 emmc 的第 0 个分区上,因为当前的 uboot 是 emmc 版本的,也就 是从 emmc 启动的。我们只是为了方便将其烧写到了 SD 卡上,但是它的“内心”还是 EMMC 的。所以 uboot 启动以后会将 emmc 作为默认存储器

18 行 提示 FEC1 网卡地址没有设置,这里还没有配置

最后一行就是 uboot 命令行,在其中我们可以输入 uboot 指令

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

2.1 help帮助命令

列出所有命令

help 或者 ?

查询某一条命令功能,比如查询 ls 指令的功能

help ls

2.2 信息查询命令

bdinfo:查看板子信息

打印出 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息

printenv:打印环境信息,显示一些环境参数的配置信息,当然这些参数也是可以修改的

version:查看 uboot 版本,uboot 编译时间和编译器

2.3 环境变量修改命令

2.2 中有打印环境变量,此处我们可以直接通过指令进行变量修改

2.3.1 修改环境变量

修改环境变量的操作涉及到两个命令:setenv 和 saveenv

setenv:设置或者修改环境变量的值

saveenv:保存修改后的环境变量;一般环境变量是存放在外部 flash 中的, uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中,所以使用命令 setenv 将修改的环境变量值保存到 flash 中

eg:设置 uboot 启动延时时间从 3 s到 10 s

setenv bootdelay 10
saveenv

修改的环境变量值可能会有空格,比如 bootcmd 等,这个时候环境变量值就得用单引号括起来

2.3.2 新建\\删除环境变量

命令 setenv 可用于新建命令,比如新建 test 值为 jeckxu666

setenv test jeckxu666
saveenv

重新启动 uboot ,打印变量

删除变量的话,我们直接使用 setenv 设置变量的值为空就行

2.4 内存操作命令

内存操作命令就是用于直接对 DRAM 进行读写操作,常用的内存操作命令有 md、nm、 mm、mw、cp 和 cmp

2.4.1 md 指令

md 命令用于显示内存值

md[.b, .w, .l] address [# of objects]

[.b .w .l] :对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值

address :就是要查看的内存起始地址

[# of objects] :表示要查看的数据长度(总长度安装选择的内存大小来计算)

eg:

2.4.2 nm 指令

nm 命令用于修改指定地址的内存值

nm[.b, .w, .l] address

输入指令后,就可以跟在后面输入我们需要修改的值,如下,修改 0x80000000 内存值为 0x66666666,修改完成输入 q 退出修改:

2.4.3 mm 指令

mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命 令 nm 的话地址不会自增,使用 mm 修改完一个值后会修改下一个值

mm[.b, .w, .l] address

2.4.4 mw 指令

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

mw[.b, .w, .l] address value [count]

eg:

2.4.5 cp 指令

cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash 中的数据拷贝到 DRAM 中

cp[.b, .w, .l] source target count

2.4.6 cmp 指令

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

cmp[.b, .w, .l] addr1 addr2 count

eg例程:

2.5 网络操作命令

ARM 板的调试经常用到网络功能,uboot 提供了许多用于网络调试的指令,将开发板和电脑连接在同一个交换机或者路由器下,方便进行网络调试

首先看一下 env 环境中关于网络的配置变量

环境变量描述
ipaddr开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址
ethaddr开发板的 MAC 地址,一定要设置
gatewayip网关地址
netmask子网掩码
serverip服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码

这些网络参数用于配置网关网段,使网络处于局域网下,使用如下代码进行设置 (以下的ip地址要根据自己的情况进行设置)

setenv ipaddr 210.45.244.17
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 210.45.244.1
setenv netmask 255.255.255.0
setenv serverip 210.45.244.1
saveenv

2.5.1 ping 命令

通过 ping 命令可以验证网络能否使用

ping 210.45.244.116

比如,我用开发板 ping 我的电脑主机和一台不存在的机器,分别有如下结果:

只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping 命令做处理,如果用其他的机器 ping uboot 的话会失败!

2.5.2 dhcp 命令

dhcp 可以用于从路由器获取 IP 地址,前提得开发连接到路由器(交换机自动分配IP)上

2.5.3 nfs 命令

nfs (Network File System) 网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源

可以通过网络将编译好的 linux 镜像和设备树文件下载 到 DRAM 中,然后直接运行

主机通过 nfs 和开发板建立连接,首先需要新建一个文件夹作为 nfs 的根目录,把正点原子出厂内核镜像放进去,这文件我已经上传,可以 0 积分下载: 正点原子阿尔法开发板出厂内核镜像


然后我们在 uboot 中通过 nfs 指令,下载镜像到 DRAM 中 0x80800000 地址处,nfs 指令格式

nfs [loadAddress] [[hostIPaddr:]bootfilename]

下载指令

nfs 0x80800000 210.45.244.116:/home/jeck/linux/nfs/zImage

下载完成如下:

待加入

2.5.4 tftp 命令

tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令 使用的 TFTP 协议

使用前需要在主机上安装 tftp 服务

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

然后在主机上创建一个文件夹,方便传输文件

使用 tftp 需要新建文件 /etc/xinetd.d/tftp 文件,在配置文件里面输入如下内容

server tftp

	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/jeck/linux/tftp
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4

然后修改 /etc/default/tftpd-hpa 文件传输信息,改变传输目录

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/jeck/linux/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s" 

配置完成,启动服务

sudo service tftpd-hpa start

我们使用 tftp 就是把文件传到对应目录下,权限设置为 777 ,然后在 uboot 内就可以调用 tftp 指令来传文件了

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

指令和 nfs 差不多,区别在于 tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可,因为文件目录已经配置完成,使用如下指令传文件

tftp 80800000 zImage

传输完成图片:

待加入

成为linux程序员需要学习啥

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

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

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

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

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

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

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

linux系统移植博文导航

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

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

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

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启动流程(下)一、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系统移植:u-boot链接脚本(代码片段)

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

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... 查看详情

如何往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... 查看详情

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

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

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

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

linux学习:uboot移植

...nbsp;2)第二阶段的功能初始化本阶段使用的硬件设备检测系统内存映射将内核从Flash读取到RAM中为内核设置启动参数启动内核关于uboot启动分析以下这条链接写的不错,使用的是MINI2440平台: http://w 查看详情

系统移植知识点总结(代码片段)

系统移植知识点总结系统移植学习各知识点总结接下来我们了解一下常见的操作系统简单了解一下系统移植bootloaderu-boot源码u-boot简单移植操作系统os文件系统fileSystem系统移植学习各知识点总结首先我们来了解一个设备要运行起... 查看详情