当前位置: 首页 > news >正文

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器

测试uboot命令,搭建nfs服务器和tftp服务器,是测试uboot非常关键的一步。跳过这一节,后面可能要踩坑。

一、输入“help回车”,查询uboot所支持的命令

二、输入“? bootz回车”,查询“bootz”怎么用

注意:和boot一样,用来启动 Linux 系统的

三、常用的查询命令

1、输入“? bdinfo回车”,查询“bdinfo”怎么用

输入“bdinfo回车”,查询“开发板的信息

2、输入“printenv回车”,打印环境变量

3、输入“version回车”,打印uboot当前的版本号

四、输入“reset回车”,设置开发板重启

五、输入“? setenv回车”,查询“setenv”怎么用

六、修改环境变量,setenv和saveenv是成对出现的

见下图:

七、新建环境变量

输入“setenv author 'console=ttySTM0,115200 root=/dev/mmcblk2p2 rootwait rw'回车

输入“saveenv回车”,保存新建环境变量“author”,及其值。

输入“reset回车”,重启开发板

八、输入“printenv回车”,打印环境变量

九、删除环境变量

输入“setenv author回车”,将“author”设置为空值,就可以删除环境变量

输入“saveenv回车”,保存新建环境变量“author”,及其值。

输入“reset回车”,重启开发板

输入“printenv回车”,打印环境变量

十、内存操作命令

1、显示指定内存地址的值

输入“? md回车”,查询md的用法

注意:在uboot里,所有的数据为16进制

输入“md.b C0100000 14回车”,查询内存首地址为“0xC0100000”开始处的20个字节;

输入“md.w C0100000 A回车”,查询内存首地址为“0xC0100000”开始处的20个字节;

输入“md.l C0100000 5回车”,查询内存首地址为“0xC0100000”开始处的20个字节;

2、修改指定内存地址的值

输入“? nm回车”,查询“nm”的用法

使用nm将内存地址为c0100000处的4个字节修改为12345678,然后再改回原来的值。

3、输入“? mm回车”,查询“mm”的用法

修改指定地址的内存值,和“nm用法”不同的地方是:它修改内存数据后,内存的地址会自动增加。

使用mm将内存地址为c0100000处的4个字节修改为12345670,然后再改回原来的值。

4、使用“一个数据”填充“指定内存起始地址”的一段内存

使用mw将内存地址为c0100000处的12个4字节修改为“0A0A0A0A”。

十一、清除命令cls

在调试串口按回车,会一直执行“上次执行的命令”,为了取消,可以输入“cls”清除“上次执行的命令”;

输入cls就可以清除“自动执行上条命令”

十二、数据拷贝命令cp

将内存首地址为“C0100000”处的12个4字节数据拷贝到内存首地址为“C0100030”处

十三、比较两段内存的数据是否相等CMP

十四、网络操作命令

1、输入“ifconfig”查询虚拟机的IP地址,加下图:

2、将开发板的USB串口连接好,打开串口调试,设置网路变量

输入“setenv ipaddr 192.168.2.178回车”,设置开发板的IP地址为“192.168.2.178”

输入“setenv ethaddr 00:04:9f:04:d2:36回车”,设置开发的MAC地址为“00:04:9f:04:d2:36”

输入“setenv gatewayip 192.168.2.1回车”,设置网关地址为“192.168.2.1”

输入“setenv netmask 255.255.255.0回车”,设置子网掩码为“255.255.255.0”

输入“setenv serverip 192.168.2.180回车”,设置ubuntu主机的IP地址为“192.168.2.180”

输入“saveenv回车”,保存环境变量

3、输入“dhcp回车”,路由器获分配IP地址给开发板

十五、搭建nfs服务器

nfs命令功能:使用uboot中的nfs命令将ubuntu中的文件下载到开发板的DRAM内存中;其次是用来从ubuntu下载内核镜像uImage和设备树

uImage文件路径为08、系统镜像\08、系统镜像\02、出厂系统镜像\03、linux-mp1-5.4.31-gca8f6cddb-v1.7 。

stm32mp157d-atk.dtb文件路径为08、系统镜像\08、系统镜像\02、出厂系统镜像\03、linux-mp1-5.4.31-gca8f6cddb-v1.7 。

1、将uImage文件发送到虚拟机“zgq/linux/nfs”目录下

2、输入“ls回车”,列出“nfs”目录下的文件和文件夹

3、输入“nfs C2000000 192.168.2.180:/home/zgq/linux/nfs/uImage回车”从服务器下载uImage,保存到内存首地址为“C2000000”

十六、在ubuntu上搭建TFTP服务器

tftp命令功能:用来从ubuntu下载内核镜像uImage和设备树。

1、安装 tfp-hpa 和 tfpd-hpa,输入“sudo apt-get install tftp-hpa tftpd-hpa回车

2、输入“mkdir tftpboot回车”,创建“tftpboot”目录

3、输入“chmod 777 /home/zgq/linux/tftpboot回车”,给tftpboot赋可执行权限,非常重要

配置“tftp”创建“/etc/xinetd.d”目录

输入“cd /etc/回车

输入“sudo mkdir xinetd.d回车

输入“ls回车

4、输入“sudo vi tftp回车”,新建一个tftp文件

server tftp

{

        socket_type = dgram

        protocol = udp

        wait = yes

        user = root

        server = /usr/sbin/in.tftpd

        server_args = -s /home/zgq/linux/tftpboot/

        disable = no

        per_source = 11

        cps = 100 2

        flags = IPv4

}

5、按“ESC”,再输入“:wq回车”,保存文件。

6、输入“sudo service tftpd-hpa start回车”,启动tftp服务器

7、输入“sudo vi /etc/default/tftpd-hpa回车

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/zgq/linux/tftpboot"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="-1 -c -s"

8、按“ESC”,再输入“:wq回车”,保存文件。

9、输入“sudo service tftpd-hpa restart回车”,重启“tftp服务器”

至此,“tftp服务器”搭建好了。

十七、使用tftp从ubuntu下载文件

1、将“uImage”拷贝到“tftpboot”目录下

输入“cd nfs/回车

输入“cp uImage /home/zgq/linux/tftpboot/回车

2、输入“chmod 777 uImage回车”,给uImage赋可执行权限

3、在串口输入“tftp C2000000 uImage回车”,将uImage下载到内存地址为C2000000地址处,实现从ubuntu下载文件,见下图:

十八、EMMC和SD卡操作命令

1、输入“mmc info回车”,查询SD卡的信息

2、查询EMMC信息

输入“mmc rescan回车”,扫描mmc

输入“mmc list回车”,列出mmc设备
输入“mmc dev 1回车”,切换到EMMC设备

输入“mmc info回车”查看EMMC信息

3、查看EMMC分区

输入“mmc dev 1回车”,切换到EMMC设备

输入“mmc part回车”,查看EMMC分区

4、读EMMC

输入“mmc dev 1回车”,切换到EMMC

输入“mmc read c0000000 400 10回车

从EMMC的第1024(0x400)个块开始,读取16(0x10)个块的数据到DRAM的0XC0000000地址处。

十九、EXT格式文件系统操作命令

1、查询EXT4格式设备的目录和文件信息

输入“mmc dev 1回车”,切换到EMMC设备

输入“mmc info回车”查询EMMC信息

2、输入“mmc part回车”查看EMMC分区

输入“ext4ls mmc 1:2”查看“boot分区”有哪些文件和目录

3、将EMMC中的uImage文件读到DRAM中

输入“ext4load mmc 1:2 C2000000 uImage回车”,将EMMC分区2中的uImage读到内存C2000000地址处。

4、将ubuntu中的uImage文件烧写到EMMC中,生成文件为“test_uImage”

输入“mmc dev 1回车”,切换到EMMC设备

输入“tftp C0000000 uImage回车”,使用tftp将uImage下载到内存C0000000的地址处。

输入“ext4write mmc 1:2 C0000000 /test_uImage 7ef8a0回车

输入“ext4ls mmc 1:2回车”查看“boot分区”有哪些文件和目录

见下图:

二十、使用网络下载uImage和设备树stm32mp157d-atk.dtb到内存再启动linux

1、使用FileZilla将uImage和设备树stm32mp157d-atk.dtb上传到tftpboot目录下,见下图:

2、给uImage和stm32mp157d-atk.dtb赋可执行权限,非常重要

输入“ls回车”,列出tftpboot目录下的文件和文件夹

输入“chmod 777 uImage回车

输入“ls回车”,列出tftpboot目录下的文件和文件夹发现uImage变成了可执行文件;

输入“chmod 777 stm32mp157d-atk.dtb回车

输入“ls回车”,列出tftpboot目录下的文件和文件夹,发现stm32mp157d-atk.dtb变成了可执行文件;

3、输入“tftp C2000000 uImage回车”,将uImage下载到DRAM中的C2000000地址处;

输入“tftp C4000000 stm32mp157d-atk.dtb回车”,将设备树下载到DRAM中的C4000000地址处;

4、输入“bootm c2000000 - c4000000回车”启动linux内核

二十一、从EMMC直接启动linux

输入“mmc dev 1回车”,切换到EMMC

输入“ext4ls mmc 1:2回车”查看“boot分区”是有uImage和stm32mp157d-atk-dtb

输入“ext4load mmc 1:2 c2000000 uImage回车”,将EMMC中的uImage文件加载到内存地址C2000000处

输入“ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb回车”,将EMMC中的stm32mp157d-atk.dtb文件加载到内存地址C4000000处

输入“bootm c2000000 - c4000000回车”启动linux内核

二十二、通过设置环境变量bootcmd的值,从EMMC启动linux系统

开发板上电,运行TF-A,然后是uboot,然后是bootcmd

出现“STM32MP>”时输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从EMMC启动linux系统

出现“STM32MP>”时输入: saveenv,保存bootcmd的值

出现“STM32MP>”时输入: boot回车,启动 Linux 系统

二十三、通过设置环境变量bootcmd的值,从网络启动linux系统

出现“STM32MP>”时输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 -c4000000',设置从网络启动linux系统

出现“STM32MP>”时输入: saveenv,保存bootcmd的值

出现“STM32MP>”时输入: boot,启动 Linux 系统

二十四、run命令

1、输入“setenv mybootemmc 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'回车

输入“saveenv回车”,保存创建的mybootemmc环境变量;

输入“run mybootemmc回车”,设置从EMMC启动linux。

输入“boot回车,启动 Linux 系统;

2、输入“setenv mybootnet 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'回车

输入“saveenv回车,保存创建的mybootnet环境变量;

输入“run mybootnet回车”,从网络启动linux。

输入“boot回车”,启动 Linux 系统;

相关文章:

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器

测试uboot命令,搭建nfs服务器和tftp服务器,是测试uboot非常关键的一步。跳过这一节,后面可能要踩坑。 一、输入“help回车”,查询uboot所支持的命令 二、输入“? bootz回车”,查询“bootz”怎么用 注意:和…...

C++枚举算法(3)

我家的门牌号 题目描述&#xff1a; 我家住在一条短胡同里&#xff0c;这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍&#xff0c;恰好等于n&#xff0c;求 我家的门牌号及总共有多少家。 数据保证有唯一解。 输入 一个正整数n。n < 100000。…...

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…...

Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义

链表 空链表&#xff1a; 注意&#xff1a;函数不能返回局部变量的地址 操作&#xff1a; 1.创建空链表 2.头插 3.尾插 4.链表遍历 5.链表的长度 free&#xff1a;释放 删除&#xff1a; 头删 void popFront(struct Node *head) { //1.p指针变量指向首节点 //2.断…...

python_蓝桥杯刷题记录_笔记_全AC代码_入门5

前言 关于入门地刷题到现在就结束了。 题单目录 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 2.P1426 小鱼会有危险吗 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 一开始写的代码是三重循环&#xff0c;结果提交上去一堆地TLE&#xff0c;然后我就给减少…...

二叉树的详解

二叉树 【本节目标】 掌握树的基本概念掌握二叉树概念及特性掌握二叉树的基本操作完成二叉树相关的面试题练习 树型结构&#xff08;了解&#xff09; 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。…...

【第三十五节】idea项目的创建以及setting和Project Structure的设置

项目创建 Project Structure的设置 点击file ~ Project Structure 进入...

【c++】跟webrtc学引用计数

rtc::RefCountInterface 接口类 G:\CDN\rtcCli\m98\src\rtc_base\ref_count.h引用计数想形成一种树状结构 // Interfaces where refcounting is part of the public api should // inherit this abstract interface. The implementation of these // methods is usually provid…...

开源免费的物联网网关 IoT Gateway

1. 概述 物联网网关&#xff0c;也被称为IOT网关&#xff0c;是一种至关重要的网络设备。在物联网系统中&#xff0c;它承担着连接和控制各种设备的重要任务&#xff0c;将这些设备有效地连接到云端、本地服务器或其他设备上。它既能够在广域范围内实现互联&#xff0c;也能在…...

华为OD机试真题C卷-篇3

文章目录 查找一个有向网络的头节点和尾节点幼儿园篮球游戏 查找一个有向网络的头节点和尾节点 在一个有向图中&#xff0c;有向边用两个整数表示&#xff0c;第一个整数表示起始节点&#xff0c;第二个整数表示终止节点&#xff1b;图中只有一个头节点&#xff0c;一个或者多…...

[SWPUCTF 2021 新生赛]include

他让我们传入一个flag值 我们传入即可看到代码部分 传入一个php的伪类即可 得到经过Base64加密的flag&#xff0c;解密即可...

LeetCode、17. 电话号码的字母组合【中等,dfs回溯】

文章目录 前言LeetCode、17. 电话号码的字母组合【中等&#xff0c;dfs回溯】题目与类型思路递归回溯优化&#xff1a;StringBuilder来回溯补充代码&#xff1a;2024.1.31&#xff08;简化&#xff09; 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博…...

SSRF漏洞给云服务元数据带来的安全威胁

文章目录 前言元数据服务威胁1.1 Metadata元数据1.2 RAM资源管理角色1.3 STS 临时凭据利用1.4 CF云环境利用框架1.5 元数据安全性增强 TerraformGoat2.1 永久性AccessKey2.2 SSRF靶场环境搭建2.3 腾讯云CVM配角色2.4 接管腾讯云控制台 SSRF组合拳案例3.1 上传图片功能SSRF3.2 文…...

【C++】强制类型转换

强制类型转换分为显式和隐式 显式直接用小括号强制转换&#xff0c;float b (int)a; 隐式直接 float b 0.5; int a b; C中更推荐用四个强制类型转换的关键字&#xff1a; 1、static_cast&#xff0c; 2、const_cast&#xff0c; 3、reinterpret_cast&#xff0c; 4、dynami…...

java日志框架总结(四 、JCL日志门面技术)

日志框架出现的历史顺序&#xff1a;Log4j → JUL → JCL → slf4j → logback → log4j2 一、背景 在前面博文中&#xff0c;我们分别讲述了常用的2个日志框架&#xff1a;JUL&#xff08;Java Util Logging&#xff09;、Log4J。那么如何选择使用哪一个呢&#xff1f; 根据项…...

mfc140.dll丢失的几种修复方式,有效的解决文件丢失问题

mfc140.dll是Microsoft Foundation Class (MFC)库中的一个非常重要的DLL文件。它承载了许多被执行程序使用的函数和资源。这个库主要被广泛应用于开发Windows操作系统上的应用程序。然而&#xff0c;有时候我们可能会遭遇到mfc140.dll缺失或损坏的情况&#xff0c;这会导致依赖…...

从一个小故事讲解观察者模式~

定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式&#xff1f; 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义&#xff1a; 观察者模式定义了对象之间…...

LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】

文章目录 前言LeetCode、1137. 第 N 个泰波那契数【简单&#xff0c;动态规划】题目与分类思路一维动态规划 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术…...

Python爬虫urllib详解

前言 学习爬虫&#xff0c;最初的操作便是模拟浏览器向服务器发出请求&#xff0c;那么我们需要从哪个地方做起呢&#xff1f;请求需要我们自己来构造吗&#xff1f;需要关心请求这个数据结构的实现吗&#xff1f;需要了解 HTTP、TCP、IP 层的网络传输通信吗&#xff1f;需要知…...

Linux嵌入式开发+驱动开发-中断

swi汇编指令可以产生软中断&#xff0c;以下是硬件中断的产生到执行完毕的全过程&#xff1a; 在自己设计的芯片“CPU响应中断”程序的第四个步骤可以转向“中断向量控制器”&#xff0c;中断向量控制器中存储中断元服务地址即处理中断处理程序的地址&#xff0c;而不用使用0X1…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...