linux启动minicom、u-boot的常用命令、网络命令tftp、nfs/根文件系统、u-boot的bootargs环境变量

linux启动minicom

sudo minicom -con

进入minicom界面:
在这里插入图片描述
打开单片机
在这里插入图片描述
在打开之后,我们通过

printenv

查看环境配置
在这里插入图片描述
在修改配置之前,我们最好先将环境初始化一下,初始化代码为

nand erase.chip

u-boot的常用命令

尽管u-boot是一个裸机程序,但功能却一点也不简单。
u-boot支持的命令可用help命令打印。下面介绍一些常用命令。
内存命令:
内存查看命令md [.b, .w, .l] address [# of objects]
在这里插入图片描述
内存修改命令(地址不自增) nm [.b, .w, .l] address
内存修改命令(地址自增) mm [.b, .w, .l] address
内存拷贝命令 cp [.b, .w, .l] source target count从source拷贝count个单元到target
nand-flash常用命令:
nand-flash信息 nand info
nand-flash坏块信息 nand bad
nand dump[.oob] off - dump page 打印出从off处开始的 dump page 页的数据
nand erase.chip nand-flash整片擦除

u-boot的环境变量相关的命令

之前提到过u-boot的一个功能是能够设置、保存一些参数。这些参数无论是u-boot本身还是引导linux操作系统都是至关重要的。这些参数被称之为环境变量,和linux系统、windows系统所说的环境变量类似。
可以使用printenv命令打印出所有的环境变量,可以看出环境变量都是一些键值对。这里键值全是文本,或者简单认为就是字符串。键值对中的键被称之为变量名,值被称之为变量的值。
我们可以随意添加一个环境变量,设置新的环境变量使用setenv命令如:setenv myarg ‘hello world’
也可以修改一个环境变量,只需对原有的环境变量重新赋值就行。如:setenv myarg ‘hello 2440’
如果要删除一个环境变量只需将值设置为“空”就行。如:setenv myarg
每个环境变量都有
各自不同的作用
,如bootdelay是指u-boot启动后等待的时间,超时后将会自动加载linux内核并尝试启动内核。可需要注意的是修改环境变量之后要保存保存就是把参数写入到nand-flash中去。用saveenv保存对环境变量的修改。
在这里插入图片描述
u-boot提供了常用的网络协议,接下来我们用的最多的就是tftp协议。因为我们需要通过该协议从电脑上下载linux内核程序,但是要使用tftp,就需要我们配置好网络相关的环境变量。他们包括:

  1. netmask子网掩码
  2. ethaddr 以太网mac地址
  3. serverip tftp服务器ip地址
  4. ipaddr mini2440ip地址
    必须按照实际情况配置这些参数,保存后重启开发板,并用ping命令测试。这个ping命令只能开发板ping电脑。

u-boot最常用的网络命令tftp

要使用tftp网络协议,我们首先需要把ipaddr跟自己虚拟机上的地址设置在同一个段上
在这里插入图片描述
在这里插入图片描述
随后我们就可以ping一下,看是否能连通
在这里插入图片描述
alive说明已经连通

u-boot用tftp下载linux内核并启动linux

u-boot是一种引导程序,我们目的是要启动linux系统。既然u-boot可以使用tftp来下载任意文件,那么就可以使用tftp下载编译好的linux内核文件到mini2440中,并让mini2440引导linux系统。

  1. 复制已经编译好的linux内核文件uImage到tftp根目录。
  2. 用tftp命令下载这个文件到开发板:tftp 0x30008000 uImag
  3. 下载完成后使用u-boot命令bootm 0x30008000启动linux操作系统;
    在这里插入图片描述
    启动内核:
    在这里插入图片描述
    此时已经启动成功!
    若启动不成功,则说明缺少根文件系统
    我们创建一个文件:nfs

nfs挂载
NFS(Network File System)是一种用于分布式文件系统的协议,它允许计算机用户或者操作系统通过网络以NFS客户端形式访问远程服务器上的文件。

nfs/根文件系统

linux内核启动以后会自动去挂载根文件系统。
那么什么是根文件系统?注意这里千万不要把根文件系统和fat,fat32,nfs……文件系统混为一谈。这里的根文件系统其实指的是一个文件夹,这个文件夹其实就是linux的系统根目录。
这个就是ubuntu系统根目录,也是根文件系统:
在这里插入图片描述
首先第一个问题是这个根文件系统放哪?按照裸机,ubuntu的根文件系统是保存在硬盘上的,那么自然mini2440的根文件系统就应该在mini2440的硬盘nand-flash上。但是为了之后我从电脑上向mini2440传递文件方便,在开发阶段我们一把都使用nfs网络文件系统
按照一般的方法,根文件系统的制作需要使用专门的工具软件busy-box。其实就是创建一堆文件夹,并编译常用的命令进去。这里我们使用已经编译好的根文件系统rootfs111.tar。我们直接把这个压缩文件在nfs服务器文件夹中解压缩即可。

查看自己是否安装nfs:
在这里插入图片描述
说明nfs服务端正常工作,之后我们还需要配置一个跟nfs相关的一个重要配置:

sudo vi /etc/exports 

在这里插入图片描述
我们需要在nfs里面放置根文件系统
在这里插入图片描述
这段系统就是给2440用的。
如何让mini2440知道我们的根文件系统是在nfs服务器上,并让linux自动去挂载呢?这个需要通过一个u-boot的环境变量来设置。

u-boot的bootargs环境变量

u-boot的bootargs环境变量是一个非常重要的环境变量,该环境变量并不是给u-boot自己用的,这个环境变量在bootm时传递给linux内核,使linux内核清楚应该去哪里找根文件系统
一个设置nfs根文件系统的例子如下:

setenv bootargs `root=/dev/nfs 
nfsroot=192.168.1.100:/home/linux/nfs/rootfs ip=192.168.1.17 
console=ttySAC0,115200 init=/linuxrc`

主要成员
含义如下:

  1. root=/dev/nfs 表示根文件系统是nfs即网络文件系统,如果使用nand-flash作为根文件系统载体,则root=/dev/mtdblockx
  2. nfsroot=192.168.1.100:/home/linux/nfs/rootfs 表示网络文件系统挂载的具体位置
  3. ip=192.168.1.17 linux启动以后的ip地址
  4. console=ttySAC0,115200 linux系统启动以后控制台是串口0,波特率115200
  5. init=/linuxrc linux系统启动后的第一个进程在根文件系统中的位置
    这个过程如果每次都是手动操作的话过于繁琐,我们可以设置bootcmd环境变量来让系统自动执行这个过程。
    如果把上面的过程设置到bootcmd中去的话可以:
setenv bootcmd ‘tftp 0x30008000 uImage;bootm 0x30008000

可以看出bootcmd变量类似一个脚本,里面就放了两个命令,分别就是下载和启动命令。
保存配置后重启开发板,启动后不要输入任何东西,系统在倒计时结束后自动运行bootcmd
如果已经进入u-boot命令行,可以用run bootcmd执行启动命令
这样子就可以进入终端了
在这里插入图片描述

nfs打开不成功

sudo vi /etc/default/nfs-kernel-server

在这里插入图片描述
在最后一行加上:

RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog" //版本

完后重启即可

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

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

相关文章

ObjectMapper解析JSON数据

ObjectMapper的作用 1.背景: 当我们调用API的时候捕获的数据,往往需要结合文档所定义的类进行转换,也就是Java对象与JSON 字符串之间的转换 2.作用: ObjectMapper 是 Jackson 库中的一个关键类,它的作用是将 JSON 数据…

第七周学习笔记DAY.4-方法重写与多态

学完本次课程后,你能够: 实现方法重写 深入理解继承相关概念 了解Object类 会使用重写实现多态机制 会使用instanceof运算符 会使用向上转型 会使用向下转型 什么是方法重写 方法的重写或方法的覆盖(overriding) 1.子类根据…

【Python系列】非异步方法调用异步方法

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C语言学习/复习23---

一、数据的存储 二、数据类型的介绍 三、整型在内存中的存储 将原码转换为补码。如果数是正数,则补码与原码相同;如果数是负数,则先将原码按位取反,然后加1。将补码转换原补码。如果数是正数,则补码与原码相同&#x…

【简单介绍下日常的启发式算法】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

CLSRSC-400: A system reboot is required to continue installing

RHEL 7.9ORACLE RAC 12.2.0.1.0,在运行root.sh脚本时,出现CLSRSC-400: A system reboot is required to continue installing报错 # /u01/app/12.2.0/grid/root.sh Performing root user operation.The following environment variables are set as:ORA…

在Windows安装R语言

直接安装R语言软件 下载网址:R: The R Project for Statistical Computing 下载点击install R for the first time 通过Anaconda下载RStudio 提前下载好Anaconda 点击Anaconda Navigate 点击RStudio的Install下载就好了

《大话数据结构》04 静态链表

1. 静态链表 其实C语言真是好东西,它具有的指针能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。后来的面向对象语言,如Java、C#等,虽不使用指针,但因为启用了对象引用机…

C语言进阶课程学习记录-第36课 - 函数与指针分析

C语言进阶课程学习记录-第36课 - 函数与指针分析 函数类型实验-函数指针实验-回调机制小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 函数类型 实验-函数指针 #include <stdio.h>typedef in…

PLC工业网关,实现PLC联网

在当今工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;作为控制系统的核心&#xff0c;其稳定性和可靠性至关重要。然而&#xff0c;随着工业互联网和智能制造的快速发展&#xff0c;如何实现PLC的联网通信&#xff0c;提高数据传输效率&#xff0c;成…

Redis教程——数据类型(哈希、集合)

上篇文章我们学习了Redis教程——数据类型&#xff08;字符串、列表&#xff09;&#xff0c;这篇文章学习Redis教程——数据类型&#xff08;哈希表、集合&#xff09; 哈希表Hash 哈希表是一个string类型的field(字段)和value(值)的映射表&#xff0c;hash特别适合用于存储…

C语言进阶课程学习记录-函数指针的阅读

C语言进阶课程学习记录-函数指针的阅读 5个标识符含义解析技巧 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 5个标识符含义解析 int (*p1) (int* , int (*f) ( int* ) );定义了指针p1,指向函数&#…

OpenHarmony实战开发-如何通过分割swiper区域,实现指示器导航点位于swiper下方的效果。

介绍 本示例介绍通过分割swiper区域&#xff0c;实现指示器导航点位于swiper下方的效果。 效果预览图 使用说明 1.加载完成后swiper指示器导航点&#xff0c;位于显示内容下方。 实现思路 1.将swiper区域分割为两块区域&#xff0c;上方为内容区域&#xff0c;下方为空白区…

采用等价类划分法设计测试用例

例题1 请采用等价类划分法设计测试用例。 考虑软件 app, 它有两个输入变量 , 分别是 name 和 age, 其中 ,name 是至多包含 20 个字母字符的非空字符串 ,age 是整数型变量 ,0 ≤ age ≤ 120 。当输入给 name 的字符串的长度超过 20时 ,name 取前 20 个字符作为 name 的值 ; 如果…

【面试经典 150 | 二分查找】搜索旋转排序数组

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;二分查找 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行…

宏集eX700M系列HMI实现港口设备数据上云

前言 随着港口设备信息化技术的快速发展&#xff0c;越来越多的企业想要把现场设备数据上传到云平台&#xff0c;进而实现关键数据的远程监控和分析处理。在此背景下&#xff0c;国内某信息化公司想要将港口设备数据通过MQTT上传到该公司自研IOT平台&#xff0c;实现数据上云&…

java项目的构建工具-Maven

黑马程序员JavaWeb开发教程 文章目录 一、概述1、介绍&#xff08;1&#xff09;介绍&#xff08;2&#xff09;Maven的作用&#xff08;3&#xff09;官网&#xff08;4&#xff09;仓库 2、安装 二、IDEA 集成 Maven1、配置Maven环境2、创建Maven项目&#xff08;1&#xff0…

入门必备:MySQL本地安装(Windows11)

下载安装 社区版下载地址:https://dev.mysql.com/downloads/ 选择合适自己操作系统的版本&#xff1a; 下载完成后是一个.msi文件&#xff0c;双击安装即可&#xff1b; 接下来请看图&#xff1a; 上面的步骤完成后&#xff0c;大概会弹出黑窗口并且有下面的UI界面&#xff…

Simlab python二次开发1-将所有缸套内表面半径加大1mm

Simlab python二次开发1-将所有缸套内表面半径加大1mm 1、打开模型文件2、getBodiesWithSubString&#xff08;&#xff09;从名字得到Bodies3、建Body类Group3.1、定义放入Group中的Bodies3.2、建Group 4、将缸套内表面建组&#xff0c;并扩半径1mm4.1、simlab.getBodiesFromG…

密码学 | 数字签名 + 数字证书

&#x1f951;原文&#xff1a;数字签名和数字证书的原理解读 - 知乎 &#x1f951;声明&#xff1a;后文图中若未明确指明&#xff0c;默认是 Bob 的公钥或私钥。 Step1&#xff1a;Bob 有两把钥匙&#xff0c;一把是公钥&#xff0c;另一把是私钥。 Step2&#xff1a;Bob 把…