正点原子MP157系统移植和根文件系统构建视频教程之uboot命令学习笔记

2023-05-16

本篇内容主要来自正点原子手册《【正点原子】STM32MP1嵌入式Linux驱动开发指南V2.0.pdf》10.3 U-Boot 命令使用,视频是第6.1讲到第6.6讲。

目录

1、下载第三方库

2、基础命令

2.1 修改环境命令

2.2 md 命令

2.3 nm命令

2.4 MM 命令

2.5 mw 命令

2.6 CP 命令

2.7 CMP 命令

2.8 mmc

3、网络类命令

4、nfs命令

5、从网络获取内核和设备树文件,并加载到ddr中再启动内核(用单个命令实现):

6、从mmc的文件系统中获取内核和设备树文件,并加载到ddr中再启动内核(用单个命令实现):

7、boot和bootm命令

8、uboot镜像中静态配置ip serverip等地址:

9、bootcmd和bootargs命令

从文件系统格式的mmc中加载内核镜像和设备树文件,并启动(用bootcmd实现):

 网络下载,从虚拟机中获取内核镜像和设备树文件,并加载启动(用bootcmd实现):

10、MII命令:

11、其他命令

11.1 ums

11.2 reset:

11.3 go:

11.4 run:

11.5 mtest


1、下载第三方库

首先需要在 Ubuntu 中安装一些库,否则编译 uboot 会报错,安装命令如下:
sudo apt-get install libncurses5-dev bison flex

2、基础命令

2.1 修改环境命令

setenv bootdelay 5   #uboot等待键盘响应的时间设置为5秒
saveenv              #保存环境变量

2.2 md 命令

用于显示内存值
md.b C0100000 10    #查看从地址0xC0100000k开始的内存数据,16个字节,10是0x10
md.w C0100000 10    #查看从地址0xC0100000k开始的内存数据,16个字(一个字是两个字节)
md.l C0100000 10    #查看从地址0xC0100000k开始的内存数据,16个双字

2.3 nm命令

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

C0100000 表示现在要修改的内存地址, ea0000b8 表示地址 0xc0100000 现在的数据,‘?’后面就可以输入要修改后的数据 0x12345678 ,输入完成以后按下回车,然 后再输入‘q’即可退出。

2.4 MM 命令

mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用 nm
命令的话地址不会自增。
.l 格式修改从地址 0XC0100000 开始的连续 3 个内存块 (3*4=12 个字节) 的数据为 0X05050505

2.5 mw 命令

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

比如使用 .l 格式将以 0XC0100000 为起始地址的 0x10 个 内存块(0x10 * 4=64 字节 ) 填充为 0X0A0A0A0A ,命令如下:
mw.l C0100000 0A0A0A0A 10

2.6 CP 命令

cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 NorFlash 中的数据拷贝到 DRAM 中。
使用 .l 格式将 0xC0100000 处的地址拷贝到 0xC0100100 处,长度为 0x10 个 内存块(0x10 * 4=64 个字节 ) ,命令如下所示:
cp.l c0100000 c0100100 10

2.7 CMP 命令

cmp 是比较命令,用于比较两段内存的数据是否相等。
我们使用 .l 格式来比较 0xC0100000 0xC0100100 这两 个地址数据是否相等,比较长度为 0x10 个内存块 (16 * 4=64 个字节 ) ,命令如下所示:
cmp.l c0100000 c0100100 10

2.8 mmc

uboot 支持 EMMC SD 卡,因此也要提供 EMMC SD 卡的操作命令。一般认为 EMMC 和 SD 卡是同一个东西.
mmc 是一系列的命令,其后可以跟不同的参数,输入“? mmc ”即可查看 mmc 有关的命 令.

3、网络类命令

uboot网络配置:

setenv ipaddr 192.168.2.20
setenv ethaddr b8:ae:1d:01:01:00  #设置mac地址
setenv gateway 192.168.2.1
setenv netmask 255.255.255.0
setenv serverip 192.168.2.129      #这是pc ubuntu虚拟机的ip地址
saveenv
dhcp
dhcp 用于从路由器获取 IP 地址,前提是开发板得连接到路由器上的,如果开发板是和电脑直连的,那么 dhcp 命令就会失效。
执行完dhcp后,再ping serverip:ping 192.168.2.129

说明:与开发板相连的pc端网卡口和vm虚拟出来的网卡同网段,并将他们桥接起来,这样在开发板uboot中才能ping同vm虚拟机。

我的连接图大概是这样的:

我的虚拟机仅仅增加了NAT网络适配器,没有添加桥接模式。此时虚拟机便能ping通百度了,如果不通,请执行udhcpc -i ens33,重新学习一个ip(其实ip地址不会变化),或者重启网络(/etc/init.d/network-manager restart),再ping。

网卡VMware Network Adapter VMnet8和网卡“以太网”选择桥接之后,两个各自的IP地址便消失了,新生成的网卡“网桥”自动生成一个地址,该地址如果和虚拟机不是同网段,我们可以静态指定为同网段。

pc端使用桥接方式可能导致win10系统经常蓝屏,报错bridge.sys,不建议使用该方式。有另一个方案可行且没风险,见链接:

stm32mp157开发板平通pc虚拟机ubuntu系统,方便nfs挂载根文件系统_汉尼拔勇闯天涯的博客-CSDN博客

4、nfs命令

nfs C2000000 192.168.2.129:/home/wang/linux/nfs/uImage


从192.168.2.129的ubuntu虚拟机中下载文件/home/wang/linux/nfs/uImage到开发板起始地址处:C2000000

5、从网络获取内核和设备树文件,并加载到ddr中再启动内核(用单个命令实现)

mmc dev 1
tftp C2000000 uImage                 #从虚拟机下载内核镜像文件uImage到开发板DDR中,ddr首地址是C2000000
tftp C4000000 stm32mp157d-atk.dtb    #从虚拟机下载设备树二进制文件stm32mp157d-atk.dtb到开发板DDR中,ddr首地址是C4000000
bootm C2000000 - C4000000            #启动内核,内核首地址是C2000000,initrd地址没有设置,设备树地址为C4000000

6、从mmc的文件系统中获取内核和设备树文件,并加载到ddr中再启动内核(用单个命令实现):

mmc dev 1
ext4ls mmc 1:2    #查看文件在dev 1的2分区中是否有文件uImage和stm32mp157d-atk.dtb
ext4load mmc 1:2 C2000000 uImage
ext4load mmc 1:2 C4000000 stm32mp157d-atk.dtb
bootm C2000000 - C4000000 

7、boot和bootm命令

ST 官方 uboot 并没有使能 boot 和 bootd 这两个命令,需要自行配置 uboot 来启动这两个命令,正点原子出厂系统已经使能了这两个命令。

boot和bootd是同一个命令。

bootm和bootz也是同一个命令,bootm针对uImage镜像内核,bootz针对zImage镜像内核。

uboot文件include\configs\stm32mp1.h中定义该宏,即是打开了bootm和boot命令:
#define CONFIG_CMD_BOOTD     /*boot和bootd命令使能*/ 

#define CONFIG_CMD_BOOTD     /*boot和bootd命令使能*/

8、uboot镜像中静态配置ip serverip等地址:

 在文件include\configs\stm32mp1.h中增加如下宏就行,虽然搜不到这些宏被调用的地方,但是不耽误他们编入镜像中。

#define CONFIG_IPADDR    192.168.2.20
#define CONFIG_GATEWAYIP 192.168.2.1
#define CONFIG_NETMASK   255.255.255.0
#define CONFIG_SERVERIP  192.168.2.129
#define CONFIG_NET_RANDOM_ETHADDR  /*随机生成mac地址*/

 uboot启动时自动生成mac地址,但是该地址不会写入uboot参数中,即敲print命令看不到mac地址。

9、bootcmd和bootargs命令

bootcmd 保存着 uboot 默认命令,uboot 倒计时结束以后就会执行 bootcmd 中的命令。
bootargs 保存着 uboot 传递给 Linux 内核的参数,比如指定 Linux 内核所使用的 console、指定根文件系统所在的分区等。

从文件系统格式的mmc中加载内核镜像和设备树文件,并启动(用bootcmd实现):

setenv bootcmd 'ext4load mmc 1:2 C2000000 uImage;ext4load mmc 1:2 C4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
saveenv 
boot

 网络下载,从虚拟机中获取内核镜像和设备树文件,并加载启动(用bootcmd实现):


setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
saveenv 
boot

10、MII命令:


在 STM32MP157 上是不能读取的,原因是 ST 官方提供的 uboot 中,每次网络通信完成以后会关闭 ETHMAC 时钟,所以 MII 命令就会无法工作。

解决这个方法很简单,每次使用 MII 或者 MDIO 命令来操作 PHY 芯片的时候,先使能 ETHMAC 时钟。

这样操作之后才能适用mii命令:

STM32MP> mm 0x50000218
50000218: 00030000 ? 0x00030700
5000021c: 00030700 ? q
STM32MP> mii info 0x4
PHY 0x04: OUI = 0x0000, Model = 0x10, Rev = 0x0A, 100baseT, FDX

11、其他命令

11.1 ums

在 uboot 下我们可以将开发板虚拟成一个 U 盘:
ums 0 mmc 1


11.2 reset:


重启uboot

11.3 go:


跳转到制定地址处运行命令


11.4 run:


运行命令,例:

setenv mycmd 'ext4load mmc 1:2 C2000000 uImage;ext4load mmc 1:2 C4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'  #创建了名为mycmd的命令
run mycmd

11.5 mtest

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

mtest c1000000 c2000000  #反复测试ddr地址范围c1000000-c2000000内的读写

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正点原子MP157系统移植和根文件系统构建视频教程之uboot命令学习笔记 的相关文章

  • PHP上传图片 (从html到JS再到php onclick方式提交)

    1 首先form表单必须是post方式提交 xff0c 并且含有enctype 61 34 multipart form data 34 属性 如图 2 JS代码 利用formdata接收html中form表单的数据 利用append将其他
  • MongoDB Windows系统各个64位版本下载地址: http://dl.mongodb.org/dl/win32/x86_64

    MongoDB Windows系统各个64位版本下载地址 xff1a http dl mongodb org dl win32 x86 64
  • PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

    看PostgreSQL9的官方文档 xff0c 我越看越迷糊 xff0c 这表空间 xff0c 数据库 xff0c 模式 xff0c 表 xff0c 用户 xff0c 角色之间的关系怎么在PostgreSQL里这么混乱呢 xff1f 经过中
  • 关于phpExcel的使用

    execl数据导出 应用场景 xff1a 订单导出 64 param string title 模型名 xff08 如Member xff09 xff0c 用于导出生成文件名的前缀 64 param array cellName 表头及字段
  • phpExcel的使用方法以及导入导出实例【转载】

    一 下载PHPExcel 下载地址 xff1a https github com PHPOffice PHPExcel 二 读取Excel文件内容插入数据库 lt php require once 39 Classes PHPExcel p
  • 关于git 、初识git (fatal: Not a valid object name: 'master'.)

    主要错误原因是因为没有master分支 必须要commit一次 才可以有master分支 才可以创建别的分支 具体步骤 1 打开命令行 git add index html 2 git commit m 34 this is a test
  • 关于git的使用

    查看https blog csdn net qq 42072311 article details 80696886 https blog csdn net kevindgk article details 51606925 查看这两个博客
  • php使用upload封装类上传文件

    原文https blog csdn net navioo article details 51777799
  • phpStorm2018安装与破解(免安装打包版)

    首先将我为大家事先准备好的打包文件拷贝至软件安装盘 xff0c 本人安装于D盘 xff0c 所以这里已本人安装破解的过程进行讲述 1 gt phpStorm2018 2 2下载请转至链接 https pan baidu com s 1Kno
  • 最简洁的麦克纳姆轮原理与控制方法

    最简洁的麦克纳姆轮控制原理与控制方法 0 写在前面 对于第一次接触麦轮的小伙伴们肯定是没办法十分清晰地想象出麦轮底盘的各种运动该如何控制的 而在实际使用中 xff0c 麦轮的运动灵活性与控制难度之比又非常高 xff0c 可以说是在比较平整的
  • Nuttx下移植uorb笔记

    Nuttx下移植uorb笔记 之前接触过ros下的消息机制 xff08 生产者 消费者 xff09 模型 xff0c 第一感觉是灵活好用 xff0c 但是在资源有限的嵌入式环境里面 xff0c 邮箱 消息 显得就有点不那么灵活 xff0c
  • 关于ADRC算法以及参数整定(调参)的一些心得体会

    关于ADRC算法以及参数整定 xff08 调参 xff09 的一些心得体会 ADRC xff0c 全称叫做Active Disturbance Rejection Control xff0c 中文名是自抗扰控制技术 这项控制算法是由中科院的
  • boa-0.94.13:CGI中文问题

    为什么中文乱码 用win7 自带的浏览器ie 打开服务器的cgi form html xff0c 在Name 输入框输入 汉字 两个字 xff0c 提交服务器 如图1 图1 返回的是结果为 xff1a Server Got you para
  • 跑通VINS-Fusion全流程

    跑通VINS Fusion全流程 常规安装步骤详见官方1 ROS安装2 ceres solver安装3 VINS Fusion安装4 KITTI数据集下载5 跑通KITTI数据集 常规安装步骤详见官方 https github com HK
  • 带GPS的SLAM数据集汇总

    1 带GPS的相关SLAM数据集 Kitti 部分带部分不带 xff0c 看网站写的很详细 xff0c 数据集很常用 http www cvlibs net datasets kitti eval odometry php CMU Visu
  • 跑通GVINS——港科大新作

    跑通GVINS 港科大新作 0 简介1 环境2 跑通GVINS3 数据集4 相关资料打包下载 xff08 不包括数据集 xff09 6 泡泡机器人解读 港科大又一力作 xff01 vins mono以及vins fusion升级版GVINS
  • GVINS文章暴力翻译(仅供自学)

    GVINS文章暴力翻译 xff08 仅供自学 xff09 摘要1 介绍2 相关工作3 符号和定义A 框架b 状态 4 GNSS基本介绍A GNSS 概述B 伪距测量C 多普勒测量D SPP算法 5 系统概述6 概率公式A 地图估计B 惯性因
  • Vins-fusion用到的kitti数据集轨迹对不齐,使用evo -a转换

    kitti数据集基准问题 下面两个图一个是转换前 xff0c 一个是evo a 转换后的 问题描述 xff1a 现在遇到的问题是groundtruth和估计的位姿没有在一个坐标系中 xff0c 生成的轨迹对不齐 xff0c 需要首先根据位姿
  • 怎样用美图秀秀制作一寸照片

    有些时候 xff0c 老是会埋怨自己的http jingyan baidu com article 73c3ce28c852b7e50243d945 html证件照很难看 xff0c 自己拍的照片又不合格 xff0c 该怎么办呢 这里和大家
  • Realsense D435i关闭IR结构光

    Realsense D435i 关闭IR光 前言环境一次性关闭IR光从源码修改 前言 由于要做Realsense D435i的双目结构光相机标定 xff0c 其中用到了ROS来录制数据包 xff0c 但是结构光会影响标定 xff0c 所以得

随机推荐

  • vins-mono保存、重载地图、evo工具测试

    vins mono保存 重载地图 evo工具测试 地图保存与加载先跑起来修改地图保存的路径保存地图重载地图 evo测评evo工具修改数据格式使用evo绘制轨迹与双目ORB SLAM2进行对比 下面咱们来对vins mono地图进行简单测试
  • C++11新特性简介

    目录 功能扩展与增强 右值概念 类中右值扩展 标准库中右值扩展 内联命名空间 初始化 initialzier list 原始字符串 自定义字面值 类型自动推导 auto decltype 常量表达式函数constexpr 变长模板 空指针n
  • Realsense D435i单目跑ORB_SLAM2(无ROS版)

    主要参考mono euroc这个文件修改 xff0c 把数据源改成realsense的就可以了 如何获取realsense数据 xff0c 在之前的博客也阐述过 Realsense D435i 43 Opencv 获取彩色 深度 IMU数据
  • QGC开发 显示双GPS/RTK信息以及自定义页面(ubuntu)

    一 QGC开发 显示双GPS RTK信息 1 在sitl中进行仿真 xff0c 虚拟出第二个GPS mavlink发送到地面站 如下图中 xff0c 在mavlink msg gps2 raw h中找到发送第二组gps rtk数据函数mav
  • 03_FreeRTOS 二进制信号量

    03 FreeRTOS 二进制信号量 本文介绍 xff1a 二进制信号量的使用方法 简介信号量 信号量基本上用于将任务与系统中的其他事件同步 在FreeRTOS中 xff0c 信号量是基于队列机制实现的 FreeRTOS中有4种信号量 xf
  • 【首发】 ubuntu20.04安装matlab2021b/matlab2020b

    文章目录 一 下载地址1 1 2021b下载链接 BT 1 2 2021a下载链接1 3 2020b CSDN下载链接 二 MATLAB2021b安装方法2 1 Mount iso文件2 2 通过 install 启动安装程序2 3 输入正
  • 无人机右手定则以及角度大小方向粗判断

    无人机右手定则 xff1a 左力右场 xff0c 知道z轴方向 xff0c 然后就知道了xy轴方向 xff0c 其中x轴为大拇指指向的方向 四旋翼无人机欧拉角角度大小与其状态的关系 xff1a 设大地坐标系为 xff1a E xff08 O
  • NuttX RTOS

    目录 综述 NuttX是什么 看看这些文件和功能 它怎么会是一个小小的操作系统呢 xff1f NuttX讨论组 你想谈谈NuttX的特性吗 xff1f 你需要帮助吗 xff1f 问题吗 错误吗 下载 我在哪里可以买到NuttX xff1f
  • Arducopter Yaw角分析

    Arducopter Yaw 现梳理一遍Poshold模式下的yaw的情况 xff1a 首先从 Copter fast loop gt update flight mode gt Copter ModePosHold run span cl
  • TortoiseGit

    TortoiseGit用法 ubuntu16 04 18 04部署gitlab服务器 xff1a https blog csdn net qq 28263253 article details 80469203 一 如何安装 xff1a 下
  • 如何生成gazebo仿真环境的二维地图真值

    在移动机器人仿真中 xff0c 二维地图真值可以用来评价slam建图结果 xff0c 也可以直接给路径规划算法提供输入 利用gazebo进行仿真时 xff0c 有很多方法都可以获取静态仿真环境的二维地图真值 xff0c 本文将对以下链接 x
  • gazebo仿真环境加载模型方式

    我们都知道 xff0c gazebo可以在自带的gui中创建模型 导入模型 xff0c 然后将一批模型组成的仿真环境保存为一个world文件 xff1a 例如上图所示的场景 xff0c 我们可以从模型库中导入一些模型 xff0c 然后或直接
  • libCurl实现HTTP请求

    目录 接口说明使用步骤setopt函数部分选项说明 示例写数据回调GET请求POST请求 libCurl是一个多协议 跨平台的客户端URL传输库 xff1b 使用libCurl可方便地进行HTTP请求 接口说明 libCurl提供easy
  • EKF SLAM学习笔记03

    3 EKF SLAM 在上一节中我们看到的是扩展卡尔曼滤波在定位中的应用 xff0c EKF同样可以应用于SLAM问题中 在定位问题中 xff0c 机器人接收到的观测值是其在二维空间中的x y位置 如果机器人接收到的是跟周围环境有关的信息
  • AirSim仿真IMU内参分析

    目录 IMU简介IMU随机误差a 高斯白噪声 xff1a b 零偏不稳定性 xff08 bias instability xff09 xff1a 如何获得IMU随机误差参数随机误差参数的离散化 AirSim中的IMU噪声参数IMU噪声参数在
  • Gazebo仿真加速的几种思路

    以下是一些关于如何加速gazebo仿真的话题 gazebo仿真提速 xff1a xff08 无gpu加速 xff09 论坛上的相关帖子 xff1a How can I speed up simulation in Gazebo 在不考虑用g
  • PNG平面图转gazebo world文件的程序

    1 代码来源 xff1a GitHub 20chase menge gazebo generator menge是进行人群动态模拟的仿真程序 xff0c 可以使用以上链接的文件生成外壳从png图片生成相应的gazebo world 2 使用
  • AirSim使用--vslam

    声明 xff1a 本文写于2020年7月 xff0c 只对当时的代码版本有效 0 下载zip 001 zip 002 zip 003等分卷文件时 xff0c 可以使用 xff1a ubuntu 如何解压 zip 001 zip 002 zi
  • Ubuntu 16.04 Kalibr安装使用

    1 安装前置时 xff0c python igraph失败 xff0c 已解决 根据以下链接 xff1a https github com ethz asl kalibr issues 82 安装python igraph Ok I sol
  • 正点原子MP157系统移植和根文件系统构建视频教程之uboot命令学习笔记

    本篇内容主要来自正点原子手册 正点原子 STM32MP1嵌入式Linux驱动开发指南V2 0 pdf 10 3 U Boot 命令使用 xff0c 视频是第6 1讲到第6 6讲 目录 1 下载第三方库 2 基础命令 2 1 修改环境命令 2