1_5.4.4_根文件系统_构建根文件系统之构建根文件系统_P

发布者:温柔浪漫最新更新时间:2021-08-21 来源: eefocus关键字:根文件系统  构建 手机看文章 扫描二维码
随时随地手机看文章

根据下面五项创建根文件系统:


/dev/console,/dev/null;

init ⇒ busybox;

/etc/inittab;

配置文件中指定的程序;

C库。

/dev/console,/dev/null

首先先创建/dev/console和/dev/null两个设备,先看一下在PC机中这两个设备的描述。(各种设备都以文件的形式存在 /dev 目录下,称为设备文件)


crw中的C表示是字符类设备,5为主设备号,然后1是次设备号。(在嵌入式系统中,一个字符设备或者块设备都有一个主设备号和次设备号,主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序,次设备号用来表示该驱动程序的各个设备。例如一个嵌入式系统,有两个LED灯,需要可以独立的打开或者关断,那么可以写一个LED灯的字符设备驱动程序,将其的主设备号注册为10,次设备号分别为1和2,表示两个LED灯)

在这里插入图片描述

那么,我们首先创建一个dev目录,然后在dev目录下创建console和null。


使用mknod指令创建设备文件,c表示创建的是字符类设备(b的话则是块设备),然后主设备号5,次设备号1,null类似。

在这里插入图片描述

创建完毕后,使用ll查看。

在这里插入图片描述

init ⇒ busybox

第二项,init到busybox的链接,我们的init = /linuxrc,所以就是linuxrc到busybox的链接,这一项已经做好了。

在这里插入图片描述/etc/inittab

第三项,构造一个inittab,如果不构造一个我们自己的inittab文件,那么就会使用默认的配置,下图是之前总结的默认的配置。

在这里插入图片描述

我们不需要这么多,只要一个::askfirst:-/bin/sh就好。


创建一个etc目录,在该目录下再创建一个inittab文件,注意终端需要设置为console,将标准输入,标准输出,标准错误都定位到console里面去。


最终结果如下,使用cat命令查看一下文件内容。

在这里插入图片描述

这样,inittab文件就配置好了,这是一个最简单的inittab文件,它只执行一个执行时机为ASKFIRST的程序-/bin/sh,该程序的标准输入,标准输出,标准错误都从/dev/console控制。


配置文件中指定的程序

第四,配置文件中指定的程序,由于我们只想做一个最小的根文件系统,不执行任何应用程序,所以这里先不配置,等后面再完善。


C库

第五,C库。


查看应用手册,里面有说怎么安装C库。

在这里插入图片描述

把所有的.so文件复制过来就可以了,-d表示如果该文件是一个链接文件,那么复制过去也是一个链接文件,不会把动态链接的那些文件也复制过去,这样就不会很大。(.a表示静态库,我们不需要静态库)

在这里插入图片描述

在046下创建一个lib目录,然后把.so文件全部复制过去,注意-d不要忘了。

在这里插入图片描述
在这里插入图片描述

这样,我们就做好了一个最小的根文件系统,需要注意一下,这个根文件系统是没有应用程序的。


烧录根文件系统

那么,这个根文件系统要怎么烧到我们开发板上呢?


答:需要做一个映像文件,查看《嵌入式Linux应用开发手册》,17.4.4和17.4.5分别讲述了怎么制作yaffs和yaffs2根文件系统,其中,yaffs是给小页(一页512字节)的Flash使用的,我们的nand flash每一页有2048字节,所以要使用支持大页的yaffs2根文件系统。


编译映像文件使用的工具名叫做mkyaffs2image,格式为:mkyaffs2image 目录名 映像文件名。

在这里插入图片描述

执行如下编译指令,编译得到一个映像文件046_first_fs.yaffs2,把这个文件发送到windows下,再烧录开发板。

在这里插入图片描述

在uboot中的菜单页选择y,使用DNW烧写工具烧写映像文件。

在这里插入图片描述

烧写完成后,加载根文件系统时报错了,错误信息如下。

在这里插入图片描述

查看了一下init_main函数,发现是name比对的时候出的错,action是小写的,但是inittab里面是大写,导致匹配失败。

在这里插入图片描述
在这里插入图片描述

将ASKFIRST改为小写再重新编译映像文件并烧录,可以正常启动了。

在这里插入图片描述
在这里插入图片描述

这样,我的第一个根文件系统就成功烧录并运行了。


完善根文件系统

现在编译的根文件系统没有什么功能,比如我们想要使用ps命令,会发现不支持这个命令。

在这里插入图片描述

我们需要再完善一下它,怎么完善呢?


首先,使用mkdir proc创建一个proc文件夹,虽然创建了一个proc文件夹,但是此时ps命令还是无效的,还要挂接一个虚拟的根文件系统。

在这里插入图片描述

那么,要怎么做呢?


答:在内核中,当前有哪些应用程序在运行,这些信息都存在内核里面一个叫proc的虚拟的根文件系统,将刚刚创建的proc目录挂接到这个虚拟的根文件系统就可以实现ps命令了。


使用mount -t proc none /proc进行挂接,之后ps指令可以正常使用了。

在这里插入图片描述
在这里插入图片描述

这时候进入proc目录,可以看到,里面有很多文件,这是因为proc已经被挂载到了内核提供的那个虚拟的根文件系统了。

在这里插入图片描述

如果不想手动挂载,那么可以在/etc/inittab配置文件中进行自动挂载。


在inittab文件中添加一行,::sysinit:etc/init.d/rcS,然后在etc路径下创建init.d目录,并在该目录下创建rcS文件,这是一个脚本文件。

在这里插入图片描述

在rcS文件中输入挂接的命令,并且给它加上一个可执行的属性,之后每次运行就会在初始化的时候自动将proc挂载过去了。

在这里插入图片描述
在这里插入图片描述

除了上面这个方法,还有一个方法是使用 mount -a 指令,这个指令会将/etc/fstab中定义的所有档案系统挂上。

在这里插入图片描述

使用这个方法,首先修改rcS脚本,将mount -t proc none /proc注释掉,并添上一句mount -a。

在这里插入图片描述

然后,需要在etc目录下增加一个fstab文件,在该文件下依次添加proc /proc等等,每一项需要用空格隔开。


#行是格式说明:


device,要挂接的设备;

mount-point,挂载点;

type,文件系统类型;

options,挂接参数,用逗号隔开;

在这里插入图片描述

这两种方法都可以实现自动挂接。

在这里插入图片描述

载入新的根文件系统后,可以直接使用ps命令,可以通过查看/proc/mounts文件查看挂接了哪些文件。

在这里插入图片描述

继续完善。


现在的dev目录下只有两个东西,dev目录下的文件对应于设备和驱动,如果我们有成千上百个驱动,每个驱动都要单独创建一个dev文件,那会很麻烦,有一种udev机制,可以自动创建dev目录下的设备节点(/dev/设备节点)。

在这里插入图片描述

在嵌入式Linux系统中,有一个udev的简化版本叫做mdev,那么这个mdev要怎么使用呢?


在docs目录下有一个mdev.txt,里面有讲怎么使用。

在这里插入图片描述

可以看到第一步和第四步分别是将/sys和/dev挂载到sysfs和tmpfs,这两个也是虚拟的根文件系统。

在这里插入图片描述

在fstab中将sys和dev挂载过去。

在这里插入图片描述

用rcS自动执行剩下的操作,修改后的rcS文件如下。

在这里插入图片描述

/proc/sys/kernel/hotplug,热拔插,在动态加载设备插入U盘等热拔插设备时,内核就调用这个hotplug,hotplug指向mdev,这样内核就会自动创建对应的设备节点。


mdev -s把内核已经有的设备节点创建出来。


具体的说明可以看这篇文章(https://blog.csdn.net/qq_33160790/article/details/79266306)


重新编译yaffs2根文件系统,烧录重启,可以看到在dev目录下多了很多设备,

在这里插入图片描述

挂载了很多文件系统。

在这里插入图片描述

这样,我们这个最小的根文件系统就比较完善了。


如果我们想使用别的格式的根文件系统,比如说jffs2,这个格式一般是用在NOR Flash上的,当然它也可以用在Nand Flash上。(没找到zlib压缩包,该文件系统目前也不是重点,关于jffs2的学习以后再说)


使用NFS挂载根文件系统

我们现在每改动一次根文件系统都要重新烧写,那有什么办法可以不烧写呢?


答:使用 NFS挂载根文件系统 ,将根文件系统放在服务器上,内核启动时直接将服务器上的根文件系统当做设备的根文件系统就行。


要用NFS挂接根文件系统的话,开发板不可以直接连到电脑,需要连到一台路由器或交换机,然后电脑也连到这台路由器或交换机。

在这里插入图片描述

将开发板接到路由器,电脑与路由器无线连接,开发板插上网线还是没反应,设置ip地址之后显示如下,此时再ping电脑可以成功了。

在这里插入图片描述
在这里插入图片描述

挂接NFS需要两个条件:


服务器允许那个目录可以被别人挂接;

开发板去挂接那个目录。

设置服务器允许挂载

那个,服务器怎么允许那个目录被别人挂接呢?


答:通过NFS服务,修改/etc/exports文件,在文件中将需要挂载的目录加进去就好了。

在这里插入图片描述
在这里插入图片描述

然后要重启一下NFS服务,指令和结果如下图所示。

在这里插入图片描述

一般来说,这样做完这个目录就可以被别人挂载了,但是我们要先在服务器上实验一下,先将它挂载到服务器的/mnt目录上试一下。


使用mount指令挂载,发现挂载成功,说明服务器可以被挂载。

在这里插入图片描述
在这里插入图片描述

设置开发板挂载服务器

设置服务器可以被挂载之后,就可以将开发板挂载到服务器。


开发板挂载到服务器有两种方法,一种是手动挂载,一种是自动挂载。


手动挂载

手动挂载就是从Flash启动根文件系统之后,再用命令挂接NFS,需要执行以下步骤:


在开发板创建一个/mnt目录;

使用mount -t nfs -o nolock 192.168.0.103:/home/book/Desktop/test/046_first_fs /mnt指令,将/mnt挂载到服务器上;

执行完这两步之后,就将服务器上的/home/book/Desktop/test/046_first_fs挂载到开发板的mnt目录上了。


现在,在/mnt目录下可以看到046_first_fs目录下的文件内容了。

在这里插入图片描述

这种方法是在启动之后手动挂载,还有一种是在系统启动时自动挂载。


自动挂载

自动挂载就是直接从NFS启动,这需要修改命令行参数,重启开发板,进入uboot。


需要修改bootargs参数,我们目前是从Flash启动,所以这个参数为:bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0


需要设置为从NFS启动,这就需要设置以下两项:


服务器IP和挂载的目录,否则都不知道要挂到哪里去;

设置自己的IP,这是有一定的格式的。

使用grep指令,搜索一下bootargs参数的格式。

发现在Documentation目录下的nfsroot.txt文件中有设置的格式。

在这里插入图片描述

进入Documentation目录,然后查看nfsroot.txt,如下图所示,其中各项参数的意思这个文件也都有说明。

在这里插入图片描述
在这里插入图片描述

其中用中括号围起来的参数表示这一项可以省略,尖括号则不可省略。


使用set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.103:/home/book/Desktop/test/046_first_fs ip=192.168.0.110 init=/linuxrc console=ttySAC0指令,设置bootargs参数从nfs启动。


可以看到,服务器IP为192.168.0.103,目录为/home/book/Desktop/test/046_first_fs,开发板IP为192.168.0.110


下图是已经修改好了的bootargs参数。

在这里插入图片描述

设置完成后,重启开发板,此时一上电就自动挂载到服务器的046文件夹了。

在这里插入图片描述

关键字:根文件系统  构建 引用地址:1_5.4.4_根文件系统_构建根文件系统之构建根文件系统_P

上一篇:1_5.4.3_根文件系统_构建根文件系统之busybox_P
下一篇:1_5.5.1_字符设备驱动程序之概念介绍_P

推荐阅读最新更新时间:2024-10-12 12:01

用AT89单片机构建的水文缆道测验系统
   早期的中小河道水文测验一般是采用人工操作的水文缆道测验系统,操作时间长、劳动强度大、主观误差大。为此我们对原有的人工测验系统进行了改造,采用单片机控制替代人工进行自动水文测验。本文介绍了基于ATMEL89单片机的水文缆道自动测验系统,系统的设计是构建在原有设施基础上,而且尽量不改变系统结构并能兼容手动操作方法,自动地完成流量的测验计算和打印,适用于中小河道的悬索和悬杆两种类型的水文缆道。   根据水利部颁发的《水文缆道测验规范》及人工控制水文缆道的结构和测验要求,单片机控制系统的主要功能有:自动进行河道断面的面积、平均流速、流量测验和计算打印;河道断面任一垂线上水深、水面偏角、河底偏角、垂线平均流速的自动测验;干绳、湿绳和位
[单片机]
常见问题解答:如何在SPICE中构建铂RTD传感器模型
简介/概述 KWIK(技术诀窍与综合知识)电路应用笔记提供应对特定设计挑战的分步指南。对于给定的一组应用电路要求,本文说明了如何利用通用公式应对这些要求,并使它们轻松扩展到其他类似的应用规格。该传感器模型支持对电阻温度检测器(RTD)的电气和物理特性进行SPICE仿真。SPICE模型使用了描述RTD(其将温度转化为电阻)物理行为特性的参数。它还提供了一个典型的激励和信号调理电路,利用该电路可演示RTD模型的行为。 RTD概述 RTD是阻性元件,其电阻随温度变化而变化。RTD的行为已为人所熟知,可用于进行精密温度测量,精度可达0.1°C以下。RTD通常由一段缠绕在陶瓷或玻璃芯周围的导线构成,但也可以由镀在衬底上的厚膜电
[传感器]
常见问题解答:如何在SPICE中<font color='red'>构建</font>铂RTD传感器模型
技术文章—闪存存储构建安全汽车系统
在现代汽车嵌入式系统中,高度安全的数据存储是必不可少的,尤其是在面对日益高明的网络攻击时。本文将介绍设计师正确使用闪存的步骤。 对电子嵌入式系统的安全和安全保障需求从未有今天这样强烈。随着汽车的自动化程度不断提高,我们需要提高其安全保障水平,防止它们被黑客攻破。对于采用大量机器人与物联网(IoT)设备,需要处理敏感数据的工厂来说,同样如此。 对所有此类嵌入式系统来说,非易失性闪存存储器必不可少。闪存可用作代码存储、文件系统存储或直接运行代码的微控制器单元(MCU)存储器。如果要实现系统安全性,必须首先确保系统使用的闪存存储器是安全的。本文探讨闪存存储器的安全需求,帮助开发人员为汽车、工业和通信应用构建安全有保障的嵌入式系统
[汽车电子]
技术文章—闪存存储<font color='red'>构建</font>安全汽车系统
基于LabVIEW的“信号与系统”实验软平台构建
摘要:针对“信号与系统”课程教学中存在概念抽象、理解难等问题,构建基于LabVIEW软件设计实验教学软平台。首先,分析LabVIEW的特点,以及基于LabVIEW构建实验教学软平台的技术难点和可行性;其次,分析和归纳课程中的知识点和难点,研究贯穿课程教学的典型实验;再次,规划和设计软件框架,编程实现实验的目标;最后,介绍频谱泄露、时域卷积运算、典型信号频谱分析等具体知识点的LabVIEW实现。 0 引言 “信号与系统”是电气工程专业的专业基础课,被广泛应用于自动控制、信号处理、电路与系统等领域。由于该课程理论性强,内容抽象,学生普遍感到理解困难,学习吃力。 通常通过基于硬件或软件的实验加深学生对所学知识的理解。硬件实验利用示波器、
[测试测量]
基于LabVIEW的“信号与系统”实验软平台<font color='red'>构建</font>
合纵连横,看TI是如何构建自己物联网版图的
两年前TI发布了一个制作精良的动画视频,印证了如今大家对于物联网的判断。 在无线连接领域,TI可以说是走得最快的芯片供应商之一,Radia是TI 2003年收购的公司,专门从事WiFi设计,属于TI的合作伙伴,为了给TI客户提供更完整的解决方案,TI将Radia划入自己的WiFi版图中。 2006年,其又收购了ZigBee供应商Chipcon,当时这项技术只是在部分专业领域应用,然而随着物联网市场的扩大,智能家居和ZigBee技术越来越普及,已成为未来无线连接重要的技术之一。 当然,收购这些小公司对于TI的来说并可以改变公司技术发展趋势,但通过早期的收购,我们可以知悉彼时TI就对无线业务特别
[物联网]
合纵连横,看TI是如何<font color='red'>构建</font>自己物联网版图的
360发布报告 构建主动纵深防御方案应对智能网联汽车安全问题
3月24日,360发布了《2019年智能网联汽车信息安全年度报告》(下称《报告》),这是360连续第五年发布智能网联汽车信息安全年度报告。报告梳理了智能网联汽车网络安全方面的进展,同时建议针对2019年新出现的安全问题构建主动纵深防御策略,为智能网联汽车“新四化”保驾护航。 智能网联汽车“新四化” 新攻击手段来袭 360安全通信模组将解决大多数车厂难题 通信模组是导致批量控车发生的根源。2019年8月,百度公司在BlackHat世界黑客大会上,公布了黑客可以通过APN直接访问车厂后台核心网内的资源,从而进行控制车辆的攻击方法。2019年12月,360智能网联汽车安全实验室在与梅赛德斯奔驰的研究中也是利用了此
[汽车电子]
360发布报告 <font color='red'>构建</font>主动纵深防御方案应对智能网联汽车安全问题
基于S3C2440的嵌入式Linux文件系统构建
嵌入式Linux早已成为IT界家喻户晓的一个名字,使用Linux进行嵌入式产品开发有一个很大的优势,就是开发资源丰富,且成本低廉,嵌入式Linux操作系统越来越受到重视,其应用也越来越广泛。而文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制。根文件系统一直是Linux系统不可或缺的组件,在嵌入式Lin-ux中,内核在启动期间进行的最后操作之一就是安装根文件系统。Busybox是构建嵌入式Linux根文件系统的软件,用它制作根文件系统简单、方便,而且设置灵活。 1 根文件 Linux要在一个分区上存放系统启动所必需的文件,如内核映像文件、内
[单片机]
基于S3C2440的嵌入式Linux<font color='red'>根</font><font color='red'>文件系统</font><font color='red'>构建</font>
精密模拟微控制器构建温度监控器
优势和特性 ● 典型温度范围为0℃至+100℃ ● 18位无噪声代码分辨率 ● RTD温度监控器 ● 带ARM7处理内核的单芯片解决方案 连接/参考器件 ADuC7061:基于ARM7的微控制器,内置双通道24位Σ-Δ型ADC ADP3333-2.5:2.5 V低压差线性稳压器 ADP7102-2.5:2.5 V低压差线性稳压器 电路功能与优势 本电路显示如何在精密RTD温度监控应用中使用精密模拟微控制器ADuC7061。ADuC7061集成双通道24位Σ-Δ型ADC、双通道可编程电流源、14位DAC、1.2 V内部基准电压源、ARM7内核、32 kB闪存、4 kB SRAM以及各种数字外设
[单片机]
精密模拟微控制器<font color='red'>构建</font>温度监控器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved