系统移植 uboot 1

news2025/1/11 21:03:27

一、uboot概念

1.1 uboot和bootloader关系

1.bootloader:是一系列引导加载程序的统称 ,uboot是其中之一。

1.2 uboot特点

1.uboot是由德国DNEX小组进行维护的

2.uboot是一个开源分布式系统

3.uboot支持多种硬件架构平台(ARM/X86/POWERPC)

4.uboot短小精悍

5.uboot是一个裸机程序

6.uboot 引导linux内核进行启动,内核启动之后,uboot的生命周期就结束

7.uboot在启动成功之后,会给内核传递两个参数(bootcmd和bootargs)

1.3 uboot环境变量

以下所有学习的命令,需要在串口工具进行输入
1.help ------>查看uboot中所有的环境变量相关信息内容
2.help uboot命令 ------>查看uboot命令中的环境信息
3.help loadb命令
    help loadb ------>串口工具输入命令
    loadb - load binary file over serial line (kermit mode) ------>打印帮助信息
    
    Usage:
    loadb [ off ] [ baud ] ------>uboot命令格式  
        - load binary file over serial line with offset 'off' and baudrate 'baud'
4.help go命令
    FSMP1A> help go
    go - start application at address 'addr'
    
    Usage:
    go addr [arg ...] ------>uboot命令格式 
        - start application at address 'addr'
          passing 'arg' as arguments
5.help gpio命令
    FSMP1A> help gpio
    gpio - query and control gpio pins
    
    Usage:
    gpio <input|set|clear|toggle> <pin>
        - input/set/clear/toggle the specified pin
    gpio status [-a] [<bank> | <pin>]  - show [all/claimed] GPIOs
    input:设置输入的值
    set:设置相应的值
    clear:设置清除相应的值
    toggle:设置gpio翻转状态
    例子:
        FSMP1A> gpio toggle gpioe10
        gpio: pin gpioe10 (gpio 74) value is 1
        FSMP1A> gpio toggle gpioe10
        gpio: pin gpioe10 (gpio 74) value is 0
        FSMP1A> gpio toggle gpiof10
        gpio: pin gpiof10 (gpio 90) value is 1
        FSMP1A> gpio toggle gpiof10
        gpio: pin gpiof10 (gpio 90) value is 0
        FSMP1A> gpio toggle gpioe8 
        gpio: pin gpioe8 (gpio 72) value is 1
        FSMP1A> gpio toggle gpioe8
        gpio: pin gpioe8 (gpio 72) value is 0
6.pri:打印环境变量信息   ------>串口工具输入:pri
      FSMP1A> help pri
        printenv - print environment variables ------>打印变量信息
    
    Usage:
    printenv [-a] ------> 查看所有环境变量信息
        - print [all] values of all environment variables
    printenv name ... ------>pri uboot变量
        - print value of environment variable 'name'
7.pri/printenv ------>  打印环境变量信息
    arch=arm  ------> 指定架构
    baudrate=115200 ------> 波特率
    board=stm32mp1 ------>板子名称
bootargs=root=/dev/nfs nfsroot=192.168.1.210:/home/linux/nfs/rootfs,tcp,v4 console=ttySTM0,115200 init=/linuxrc ip=192.168.1.250
    bootargs参数功能:自启动参数,设置ubuntu挂载根文件系统到开发板上的路径和ip地址
bootcmd=tftp 0xc2000000 uImage;tftp 0xc4000000 stm32mp157a-fsmp1a.dtb;bootm 0xc2000000 - 0xc4000000
    bootcmd参数功能:自启动命令,倒计时时间进入0之前不按下enter键盘,进入自启动模式,并且执行自启动命令
    bootdelay=3 ------>倒计时时间
    ethaddr=12:56:78:ff:ff:4e ------>物理地址ip
    gatewayip=192.168.1.1 ------>设置开发板网关
    ipaddr=192.168.1.250 ------>设置开发板ip地址
    netmask=255.255.255.0 ------>设置开发板子网掩码
    serverip=192.168.1.210 ------>设置服务器(ubuntu)的ip地址
8.run -------> 运行run后面的命令   格式:run uboot命令 run bootcmd
    1)交互模式:
        当uboot启动成功之后,在倒计时时间进入0之前,按下键盘enter键,进入交互模式,和uboot命令进行交互
    2)自启动模式:
        当uboot启动成功之后,在倒计时时间进入0之前,不按下键盘enter键,进入自启动模式,执行自启动命令(bootcmd)不可以使用uboot命令
    3)设置bootcmd格式
        setenv bootcmd uboot命令1\;uboot命令2\;...............
        saveenv
    4)在arm课程中,需要输入两条命令:loadb 0xc0008000  go 0xc0008000    
        FSMP1A> setenv bootcmd loadb 0xc0008000\;go 0xc0008000
        FSMP1A> saveenv
        Saving Environment to MMC... Writing to MMC(0)... OK
    5)在串口工具中,查看bootcmd环境变量信息
        FSMP1A> pri bootcmd
        bootcmd=loadb 0xc0008000;go 0xc0008000
    6)在串口工具中,执行run bootcmd命令,观察现象
    FSMP1A> run bootcmd
    ## Ready for binary (kermit) download to 0xC0008000 at 115200 bps...

    7)在倒计时时间进入0之前,不按下键盘enter键,进入自启动模式,观察现象
    Hit any key to stop autoboot:  0 
    ## Ready for binary (kermit) download to 0xC0008000 at 115200 bps...
9.ping命令 ------->测试开发板和ubuntu组网是否成功
    ping - send ICMP ECHO_REQUEST to network host

    Usage:
    ping pingAddress
    格式:ping 服务器(ubuntu)ip地址
    
10.tftp命令 ------->使用tftp命令将文件下载到开发板内存中,一定保证开发板和ubuntu组网成功
    FSMP1A> help tftp
    tftpboot - boot image via network using TFTP protocol
    
    Usage:
    tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
    格式:tftp 地址 文件名

1.4 设置uboot环境变量

1.设置uboot环境变量:setenv  ------>修改环境变量
2.保存uboot环境变量:saveenv ------>保存环境变量
3.修改环境变量格式:
    setenv 要修改的环境变量 修改的值
    saveenv
4.设置开发板倒计时时间为20s
    FSMP1A> setenv bootdelay 20
    FSMP1A> saveenv
    Saving Environment to MMC... Writing to redundant MMC(0)... OK
    FSMP1A> pri bootdelay
        bootdelay=20

二、组网过程

2.1 准备工作

1.Ubuntu需要安装tftp服务器和nfs服务器成功,本地测试没有问题
2.关闭windows防火墙,参考如下图片
3.设置电脑为百兆全双工模式
    控制面板------>网络和Internet------>网络和共享中心------>更改适配器配置------>需要自己对应以太网网卡名字
    ------>右键------>属性------>配置------>高级------>连接速度和双工模式------>百兆全双工模式------>确定

2.2 PC端和开发板连接方式

        网卡或USB转接。

2.3 ubuntu网络配置

1.ubuntu中需要设置为桥接模式

2.ubuntu中的网络设置需要设置为静态ip地址

3.需要通过ifconfig命令查看ip,是否为自己配置的静态ip

2.4 开发板网络配置

FSMP1A> setenv serverip 192.168.1.250 ----->设置服务器(ubuntu)ip地址
FSMP1A> setenv ipaddr 192.168.1.100 ----->设置服务器开发板IP地址
FSMP1A> setenv netmask 255.255.255.0 ----->设置开发板子网掩码
FSMP1A> setenv gatewayip 192.168.1.1 ----->设置开发板网关
FSMP1A> saveenv ----->记得保存!!!!
Saving Environment to MMC... Writing to MMC(0)... OK

2.5 测试ping命令

测试目的:测试开发板和ubuntu是否组网连接成功
FSMP1A> ping 192.168.1.250
成功现象:
    ethernet@5800a000 Waiting for PHY auto negotiation to complete... done
    Using ethernet@5800a000 device
    host 192.168.1.250 is alive
失败现象:

    ethernet@5800a000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
    phy_startup() failed: -110FAILED: -110ping failed; host 192.168.1.250 is not alive

2.6 测试tftp命令

1.将asm-led.bin拷贝到~/tftpboot目录下
    cp asm-led.bin ~/tftpboot/
2.在串口工具:输入tftp下载命令
    FSMP1A> tftp 0xc0008000 asm-led.bin
    成功现象:
    Using ethernet@5800a000 device
    TFTP from server 192.168.1.250; our IP address is 192.168.1.100
    Filename 'asm-led.bin'.
    Load address: 0xc0008000
    Loading: #
             36.1 KiB/s
    done
    Bytes transferred = 488 (1e8 hex)
3.在串口工具:输入go运行命令
FSMP1A> go 0xc0008000
## Starting application at 0xC0008000 ...

    练习题:如何设置bootcmd命令,倒计时时间进入0之前,可以自动执行tftp命令?
    FSMP1A> setenv bootcmd tftp 0xc0008000 asm-led.bin\;go 0xc0008000
    FSMP1A> saveenv
    Saving Environment to MMC... Writing to MMC(0)... OK
    FSMP1A> run bootcmd

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞轮效应,中国企业级SaaS的一次自我革命

“数智飞轮”“客户成功”&#xff0c;三年时间&#xff0c;用友YonSuite终于按下了发展的“快进键”&#xff0c;中国企业级SaaS的产业革命也就此开始。 前不久&#xff0c;用友发布了2022年三季报。在公司战略增强公有云订阅业务的前提下&#xff0c;中型企业云服务业务收入…

模拟电路设计(38)---基于LT1173的负压产生电路

今天来介绍下LT1173在buck&#xff08;step-down&#xff09;模式的工作电路。在介绍PWM电路结构时&#xff0c;有一种形式成为buck型&#xff0c;如下所示&#xff1a; 晶体管开关变换器&#xff08;buck&#xff09;电路 LT1173提供了内置开关管的集电极和发射极管脚&#x…

【图像处理OpenCV(C++版)】——2.2 OpenCV之矩阵运算详解(全)

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

一篇文章让你认识与学习bash(干货满满)

Linux界存在着这样一种说法&#xff1a;“在Linux的环境下&#xff0c;如果你不懂bash是什么&#xff0c;那么其他的东西就不用学了。”bash的学习是所有命令行模式与未来主机维护与管理的重要基础&#xff0c;所以得认真对待。 一.硬件、内核与shell 1.1 什么是shell? 看下图…

Linux下安装mysql5.7.18

查询mysql的安装文件&#xff1a; find / -name mysql有安装mysql的路径&#xff0c;有是存放MySQL安装包的路径 卸载mysql: 删除安装路劲 rm -rf /opt/mysql删除配置文件 rm -rf /etc/my.cnf删除/etc/init.d/下跟mysql有关的全部文件&#xff0c;一般包括mysql文件或mys…

浅尝Go语言的协程实现

文章目录为什么需要协程协程的本质协程如何在线程中执行GMP调度模型协程并发为什么需要协程 协程的本质是将一段数据的运行状态进行打包&#xff0c;可以在线程之间调度&#xff0c;所以协程就是在单线程的环境下实现的应用程序级别的并发&#xff0c;就是把本来由操作系统控制…

微服务框架 SpringCloud微服务架构 25 黑马旅游案例 25.1 搜索、分页

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构25 黑马旅游案例25.1 搜索、分页25.1.1 直接开干25 黑马旅游案例 25.1 搜…

PyTorch~自定义数据读取

这次是PyTorch的自定义数据读取pipeline模板和相关trciks以及如何优化数据读取的pipeline等。 因为有torch也放人工智能模块了~ 从PyTorch的数据对象类Dataset开始。Dataset在PyTorch中的模块位于utils.data下。 from torch.utils.data import Dataset围绕Dataset对象分别从…

前端入门必备基础

化繁为简 HTML5要的就是简单、避免不必要的复杂性。HTML5的口号是“简单至上&#xff0c;尽可能简化”。因此&#xff0c;HTML5做了以下改进&#xff1a; 以浏览器原生能力替代复杂的JavaScript代码。 新的简化的DOCTYPE。 新的简化的字符集声明。 简单而强大的HTML5API。…

[附源码]Python计算机毕业设计SSM基于云数据库的便民民宿租赁系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

《Linux运维实战:MongoDB数据库全量逻辑备份恢复(方案一)》

一、备份与恢复方案 mongodump是MongoDB官方提供的备份工具,它可以从MongoDB数据库读取数据,并生成BSON文件,mongodump适合用于备份和恢复数据量较小的MongoDB数据库, 不适用于大数据量备份。 默认情况下mongodump不获取local数据库里面的内容。mongodump仅备份数据库中的文档&…

回溯算法(1)组合

文章目录回溯算法理论77. 组合216. 组合总和17. 电话号码的组合回溯算法理论 回溯算法其实就是递归&#xff0c;只不过递归又分为递去和归来&#xff0c;其中归来便就是回溯。 为什么要使用回溯&#xff1f; 有些问题我们通过暴力解法也很难解决&#xff0c;比如说我们接下来…

C语言学习之路(高级篇)—— 变量和内存分布(上)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 数据类型 1) 数据类型概念 什么是数据类型&#xff1f;为什么需要数据类型? 数据类型是为了更好进行内存的管理&#xff0c;让编译器能确定分配…

04 | 云硬盘的使用方法

前期环境&#xff1a; Ubuntu 0 云硬盘类型 云硬盘类型包括&#xff1a; 高性能云硬盘通用型 SSD 云硬盘SSD 云硬盘增强型 SSD 云硬盘极速型 SSD 云硬盘&#xff0c;仅支持随存储增强型云服务器一同购买&#xff0c;不支持单独购买 1 创建云硬盘 1.1 创建方式 1.1.1 单个…

第二证券|连拉20CM涨停!防疫新概念股火了!恒生科技指数涨逾5%

周四上午&#xff0c;“新十条”发布后&#xff0c;由于A股商场已反弹一段时刻&#xff0c;两市股指今天早盘接连震动走势&#xff0c;港股在地产、科技、消费等板块带动下&#xff0c;体现更为强势。 A股上证指数早盘在3200点附近持续震动&#xff0c;光伏、化肥、物流、港口等…

JavaScript内置对象(内置对象、查文档(MDN)、Math对象、日期对象、数组对象、字符串对象)

目录 JavaScript内置对象 内置对象 查文档 MDN Math对象 Math概述 案例一&#xff1a;封装自己的对象 随机数方法 random() 案例一&#xff1a;猜数字游戏 日期对象 Date 概述 Date()方法的使用 获取日期的总的毫秒形式 案例一&#xff1a;倒计时效果 数组对象 …

DoltLab本地部署实践

目录引言Dolt是什么&#xff1f;如何本地部署使用DoltLab具体安装步骤安装期间FAQ写在最后其他相关资料引言 自从搞深度学习训练模型以来&#xff0c;一直有个问题困扰着我&#xff1a;训练所用数据集的管理。为什么说这是一个问题呢&#xff1f; 在读研时&#xff0c;我们依据…

ELK日志分析系统概述及部署

文章目录一、ELK日志分析系统1、概念2、完整日志系统基本特征3、使用ELK的原因4、ELK 的工作原理二、ELK日志分析系统集群部署的操作步骤环境准备&#xff1a;1、 ELK Elasticsearch 集群部署&#xff08;在Node1、Node2节点上操作&#xff09;1.1、更改主机名、配置域名解析、…

剑指 Offer 53 - I. 在排序数组中查找数字 I

摘要 剑指 Offer 53 - I. 在排序数组中查找数字 I 一、二分查找 1.1 二分查找的分析 由于数组已经排序&#xff0c;因此整个数组是单调递增的&#xff0c;我们可以利用二分法来加速查找的过程。 考虑 target在数组中出现的次数&#xff0c;其实我们要找的就是数组中「第一…

汇编语言ch2_2 汇编语言中的debug

使用debug 可以完成以下功能&#xff1a; 可以查看 和改变 CPU 中&#xff0c;寄存器的内容&#xff1b;可以查看 和改变内存中的内容&#xff1b;可以将内存中的 机器指令 翻译成汇编指令使用汇编指令 在 内存中 存入 机器指令执行机器指令 首先&#xff0c;启动 Debug,在DO…