根文件系统初步测试

一.  简介

上一篇文章学习了向所编译生成的根文件系统中加入 lib库文件。文章地址如下:

根文件系统lib库添加与初步测试-CSDN博客

本文继上一篇文章的学习,本文对之前制作的根文件系统进行一次初步测试。

二.  根文件系统初步测试

为了方便测试,我们采用挂载网络根文件系统,通过nfs服务进行挂载。可以使用的前提是:

1.  Linux内核网络驱动要工作正常。

2.  重新设置 uboot的 bootargs 参数,也就是 Linux内核的命令行参数。

通过 tftp 服务,从ubuntu系统下加载我们前面移植 zImage和dtb,即开发板上已经设置好 bootcmd参数(之前其实已经设置好了)。

注意:通过 tftp服务可以从 ubuntu系统下载 zImage与 dtb设备树文件的前提是: ubuntu系统的 tftp服务所设置的目录存在 内核镜像 zImage和 dtb设备树文件。

开发板上电后,进入 uboot命令模式下,输入 "printenv" 命令即可查看 开发板上的 bootcmd参数值:

设置 bootargs参数:即设置根文件系统通过nfs服务启动

测试方法就是使用 NFS 挂载,uboot 里面的 bootargs 环境变量会设置 “root” 的值,所以我们将 root 的值改为 NFS 挂载即可。

Linux 内核源码里 有相应的文档讲解如何设置,文档为 Documentation/filesystems/nfs/
nfsroot.txt ,格式如下:
root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw
ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

以上参数说明如下:

<server-ip> :服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,即 Ubuntu IP 地址
<root-dir> 根文件系统的存放路径,例如,我这里存放路径为 /home/wangtian/linux/nfs_File/rootfs
<nfs-options> NFS 的其他可选选项,一般不设置。
<client-ip> 客户端 IP 地址,即开发板的 IP 地址, Linux 内核启动以后就会使用 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内,并且没有被其他的设 备使用。
Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用,如果不能
ping 通就说明没有被使用,那么就可以设置为开发板的 IP 地址。
<server-ip> 服务器 IP 地址,前面已经说了。
<gw-ip> 网关地址,我的就是 192.168.1.1
<netmask> :子网掩码,我的就是 255.255.255.0
<hostname> :客户机的名字,一般不设置,此值可以空着。
<device> 设备名,也就是网卡名,一般是 eth0 eth1…. ,正点原子的 I.MX6U-ALPHA
发板的 ENET2 eth0 ENET1 eth1 。如果你的电脑只有一个网卡,那么基本只能是 eth0
这里我们使用 ENET2 ,所以网卡名就是 eth0
<autoconf> 自动配置,一般不使用,所以设置为 off
<dns0-ip> DNS0 服务器 IP 地址,不使用。
<dns1-ip> DNS1 服务器 IP 地址,不使用。

根据上面的格式,proto=tcp”表示使用 TCP 协议。环境变量 bootargs 的 root 值如下:

root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs, proto=tcp ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off
进入 uboot 命令行模式,然后重新设置 bootargs 环境变量,然后保存:

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK

可以通过 "printenv" 命令查看 bootargs参数设置的是否正确:

设置好以后,使用boot” 命令启动 Linux 内核。操作如下:

如果设置成功。那么最后在输入 "Enter" 回车键时,会进入 根文件系统。

从上面开发板根文件系统打印的 Log信息可以看出,根文件系统是通过 nfs服务挂载的方式加载的。通过 " ls " 命令可以看到是我之前编译 busybox制作的根文件系统。

三.  设置根文件系统为可读写

进入根文件系统根目录下,创建一个文件,会创建失败:

这里不能创建的原因是,这里我设置根文件系统是只读的。

如果需要根文件系统可读可写,可以在设置 bootargs参数时 root参数值 加入 读写权限:

root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp rw ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off

重新设置 bootargs参数:

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp rw ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK
=>

输入 "boot " 命令重启开发板:

=> boot
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device
TFTP from server 192.168.1.66; our IP address is 192.168.1.50

最后输入 "Enter" 回车键,进入根文件系统根目录下,试着创建一个文件:

可以看出,这时可以创建一个文件。

那么是不是说明我们的 rootfs 就制作成功了呢?大家注意,上面打印信息中红色框中,有下面这一行错误提示:
can't run '/etc/init.d/rcS': No such file or directory
提示很简单,说是无法运行“ /etc/init.d/rcS”这个文件,因为这个文件不存在。看来我们的 rootfs 还是缺文件。下一篇继续完善 根文件系统 rootfs。

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

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

相关文章

Oracle 11g安装过程

文章目录 前言1.下载安装包2.安装2.1本地安装文件2.2 安装过程 3.查看是否安装成功3.1 查看oracle是否安装成功3.2 查看oracle服务 前言 本文仅用于记录亲自安装oracle的过程 1.下载安装包 官网地址&#xff1a; Oracle Database 11g Release 2 (11.2.0.1.0) 注意&#xff…

08、分析测试执行时间及获取pytest帮助

官方用例 # content of test_slow_func.py import pytest from time import sleeppytest.mark.parametrize(delay,(1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.0,0.1,0.2,0,3)) def test_slow_func(delay):print("test_slow_func {}".format(delay))sleep(delay)assert…

java SSM毕业生信息管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

前言 学校的规模不断扩大&#xff0c;学生数量急剧增加&#xff0c;有关学生的各种信息量也成倍增长。面对庞大的信息量需要有学生信息管理系统来提高学生管理工作的效率。通过这样的系统可以做到信息的规范管理、科学统计和快速查询、修改、增加、删除等&#xff0c;从而减少管…

韶音开放式耳机怎么样?Oladance耳机怎么样?三大开放式对比!

当代耳机的痛点之一&#xff1a;舒适度&#xff0c;为什么我会这么说呢&#xff1f;大家应该也会感受到现在无论用的是半入耳&#xff0c;入耳式甚至是头戴式的耳机&#xff0c;都是会有一个问题&#xff1a;耳朵酸胀。因为我们无论是买一千的&#xff0c;还是几十的都是会痛&a…

进入软件的世界

选择计算机 上高中的时候&#xff0c;因为沉迷于网络游戏&#xff0c;于是对计算机产生了浓厚的兴趣&#xff0c;但是那个时候对于计算机的了解还是非常肤浅的。上大学的时候&#xff0c;也就义无反顾的选择了计算机专业&#xff0c;其实并不是一个纯粹的计算机专业&#xff0…

PWN学习之LLVM入门

一、基本流程 ①找到runOnFunction函数时如何重写的&#xff0c;一般来说runOnFunction都会在函数表最下面,找PASS注册的名称&#xff0c;一般会在README文件中给出&#xff0c;若是没有给出&#xff0c;可通过对__cxa_atexit函数"交叉引用"来定位&#xff1a; ②通…

全球与中国汽车电力电子市场:增长趋势、竞争格局与前景展望

目前&#xff0c;世界各国都致力于转向更环保、更永续的传统交通替代方案。 电动车满足所有要求&#xff0c;因为它们具有零废气排放、改善空气品质、减少温室气体排放并创造更清洁、更健康的环境。此外&#xff0c;电动车的运作成本比传统内燃机驱动的汽车低&#xff0c;因为…

vue2+electron桌面端一体机应用

vue2+electron项目 前言:公司有一个项目需要用Vue转成exe,首先我使用vue-cli脚手架搭建vue2项目,然后安装electron 安装electron 这一步骤可以省略,安装electron-builder时会自动安装electron npm i electron 安装electron-builder vue add electron-builder 项目中多出…

Mybatis 操作续集(连着上文一起看)

"查"操作(企业开发中尽量不使用*,需要哪些字段就写哪些字段,都需要就全写上) Mybatis 会自动地根据数据库的字段名和Java对象的属性名进行映射,如果名称一样就进行赋值 但是那些名称不一样的,我们想要拿到,该怎么拿呢? 一开始数据库字段名和Java对象属性名如下图…

使用UART和USART在STM32上进行双向通信

在本文中&#xff0c;我们将深入了解如何在STM32上使用UART&#xff08;通用异步收发传输器&#xff09;和USART&#xff08;通用同步异步收发传输器&#xff09;实现双向通信。UART和USART是常见的串口通信协议&#xff0c;通常用于与其他设备进行数据传输。我们将重点介绍如何…

C语言中指针的进阶概念及应用

概念 指针是C语言编程中最强大的特性之一。除了基础的指针概念外&#xff0c;理解指针数组、指向指针的指针&#xff08;双重指针&#xff09;、指针与多维数组的关系以及函数指针等进阶概念&#xff0c;对于深入理解C语言至关重要。 指针的概念&#xff1a; 指针就是个变量…

科技云报道:AI+PaaS,中国云计算市场迎来新“变量”?

科技云报道原创。 没有小的市场&#xff0c;只有还没有被发现的大生意。 随着企业数字化转型的逐级深入&#xff0c;市场需求进一步向PaaS和SaaS层进发&#xff0c;使之成为公有云服务市场增长的主要动力。 根据IDC最新发布的报告显示&#xff0c;2022-2027五年间中国公有云…

几何对象的凸点集

// 引入VTK并初始化 #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkActor.h> #include <vtkCamera.h> #include <vtkConvexPointSet.h> #include <vtkDataSetMapper.h&g…

学习使用三个命令实现在腾讯云服务器TencentOS Server 3.1或者CentOS 8上安装ffmpeg

学习使用三个命令实现在腾讯云服务器TencentOS Server 3.1或者CentOS 8上安装ffmpeg Error: Unable to find a match: ffmpeg添加RPMfusion仓库安装SDL安装ffmpeg执行命令测试 Error: Unable to find a match: ffmpeg 添加RPMfusion仓库 yum install https://download1.rpmfus…

计算机辅助药物设计AIDD-小分子-蛋白质|分子生成|蛋白质配体相互作用预测

文章目录 计算机辅助药物设计AIDD【小分子专题】AIDD概述及药物综合数据库学习机器学习辅助药物设计图神经网络辅助药物设计自然语言处理辅助药物设计药物设计与分子生成 计算机辅助药物设计【蛋白质专题】蛋白质数据结构激酶-Kinase相似性学习基于序列的蛋白质属性预测基于结构…

数据结构算法-插入排序算法

引言 玩纸牌 的时候。往往 需要将牌从乱序排列变成有序排列 这就是插入排序 插入排序算法思想 先看图 首先第一个元素 我默认已有序 那我们从第二个元素开始&#xff0c;依次插入到前面已有序的部分中。具体来说&#xff0c;我们将第二个元素与第一个元素比较&#xff0c;…

使用正则表达式时-可能会导致性能下降的情况

目录 前言 正则表达式引擎 NFA自动机的回溯 解决方案 前言 正则表达式是一个用正则符号写出的公式&#xff0c;程序对这个公式进行语法分析&#xff0c;建立一个语法分析树&#xff0c;再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机&a…

C语言--每日选择题--Day35

第一题 1. 有如下定义&#xff1a;(x y) % 2 (int) a / (int) b 的值是&#xff08;&#xff09; int x 3; int y 2;float a 2.5; float b 3.5; A&#xff1a;0 B&#xff1a;2 C&#xff1a;1.5 D&#xff1a;1 答案及解析 D 本题是考查强制类型转换和操作符优先级 操作…

idea连接mysql详细讲解

IDEA连接mysql又报错&#xff01;Server returns invalid timezone. Go to Advanced tab and set serverTimezone prope 前进的道路充满荆棘。 错误界面 IDEA连接mysql&#xff0c;地址&#xff0c;用户名&#xff0c;密码&#xff0c;数据库名&#xff0c;全都配置好了&…

常见的几种计算机编码格式

前言&#xff1a; 计算机编码是指将字符、数字和符号等信息转换为计算机可识别的二进制数的过程&#xff0c;正因如此&#xff0c;计算机才能识别中英文等各类字符。计算机中有多种编码格式用于表示和存储文本、字符和数据&#xff0c;实际走到最后都是二进制&#xff0c;本质一…