roofs 根文件系统制作

2023-10-25 13:59
文章标签 制作 文件系统 roofs

本文主要是介绍roofs 根文件系统制作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

roofs 根文件系统制作

1.根文件系统简介

  根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作系统的交互。文件是用户和操作系统之间交互的主要工具。
  Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
  所谓制作根文件系统, 就是创建各种目 录, 并且在目 录里创建相应的文件。 例如: 在/bin目录下放置可执行程序,在/lib 下放置各种库等等,通常配合 chroot 命令使用。
  在Linux下制作跟文件系统,我们需要要到busybox工具。Busybox 是一个开源项目 , 遵循 GPL v2 协议。 Busybox 将众多的 UNIX 命令集合进一个很小的可执行程序中, 可以用来替代 GNU fileutils、 shellutils 等工具集。 Busybox 中各种命令与相应的 GNU 工具相比, 所能提供的选项比较少, 但是也足够一般的应用了。Busybox 主要用于嵌入式系统。

2.BusyBox简介

  BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的shell。
  BusyBox甚至还集成了一个http 服务器和一个 telnet 服务器,而所有这一切功能却只有区区1M左右的大小。我们平时用的那些 linux 命令就好比是分立式的电子元件,而 busybox 就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍。在嵌入式 linux 应用中,busybox 有非常广的应用,另外,大多数 linux 发行版的安装程序中都有 busybox 的身影。
  busybox 下载地址:Busybox
在这里插入图片描述
在这里插入图片描述
  接下来以busybox-1.30.1版本为例实现根文件系统制作。

2.根文件系统制作

开发平台:ubuntu18.04.6
开发板:Cortex-A9 tiny4412
BusyBox版本:1.30.1
交叉编译器:arm-linux-gcc

2.1 现在busybox源码,配置环境,编译源码

  (1)下载busybox源码,解压到用户目录下。

[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/busybox-1.30.1.tar.bz2 

  (2)配置编译环境

[wbyq@wbyq src_pack]$ cd busybox-1.30.1/
[wbyq@wbyq busybox-1.30.1]$ make menuconfigSettings  --->  (arm-linx-)  Cross compiler prefix (NEW) (/home/wbyq/src_pack/rootfs) Destination path for 'make install' 

在这里插入图片描述
在这里插入图片描述
  配置好后保存退出,make编译。

2.2 编码源码

[wbyq@wbyq busybox-1.30.1]$ make
2.2.1 编译错误1

  编译过程中若出现以下错误,则重新打开配置菜单,将syncfs屏蔽即可。
在这里插入图片描述

[wbyq@wbyq busybox-1.30.1]$ make menuconfig

在这里插入图片描述
在这里插入图片描述
  修改完成后保存退出,再次重新编译。

2.2.2 编译错误2

  编译过程中若出现以下错误,则重新打开配置菜单,将setns屏蔽即可。
在这里插入图片描述

[wbyq@wbyq busybox-1.30.1]$ make menuconfig

在这里插入图片描述
在这里插入图片描述  解决错误后重新编译安装。

[wbyq@wbyq busybox-1.30.1]$ make && make install -j8

  编译安装成功。
在这里插入图片描述

2.3 完善根文件系统

  进入到rootfs安装目录下,进行根文件系统完善。

[wbyq@wbyq busybox-1.30.1]$ cd /home/wbyq/src_pack/rootfs/
[wbyq@wbyq rootfs]$ ls
bin  linuxrc  sbin  usr
2.3.1 参考ubuntu根目录,创建必要目录
[wbyq@wbyq rootfs]$ mkdir etc lib lost+found proc snap tmp boot home media root srv cdrom mnt run dev opt sys

在这里插入图片描述

2.3.2 创建必要文件

  创建 etc/profile 文件、 etc/init.d 目 录、 etc/init.d/rcS 文件

[wbyq@wbyq rootfs]$ touch etc/profile 
[wbyq@wbyq rootfs]$ mkdir etc/init.d
[wbyq@wbyq rootfs]$ touch etc/init.d/rcS
[wbyq@wbyq init.d]$ chmod +x rcS 
2.3.3 完善etc目录
[wbyq@wbyq rootfs]$ cp /etc/passwd etc/
[wbyq@wbyq rootfs]$ cp /etc/group etc/
[wbyq@wbyq rootfs]$ cp /etc/fstab etc/
[wbyq@wbyq rootfs]$ cp ../busybox-1.30.1/examples/inittab etc/
2.3.4 修改 inittab 文件

  修改 etc/inittab文件,只保留下面内容:

::sysinit:/etc/init.d/rcS #设置初始化执行的文件
#需要加上 console askfirst 表示需要按下回车才可以进入系统
#respawn 表示开机直接进入系统
console::askfirst:-/bin/sh 
::ctrlaltdel:/sbin/reboot #指定重启命令
::shutdown:/bin/umount -a -r #指定关机时执行的命令
2.3.5 编写/etc/init.d/rcS启动脚本文件
mount -a
mkdir /dev/pts
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname wbyq #设置主机名称
  • rcS文件相关命令介绍

mount -a
mkdir /dev/pts
  /dev/pts 是远程登陆(telnet,ssh 等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts 其实是动态生成的, 不象其他设备文件是构建系统时就已经产生的硬盘节点.
mount -t devpts devpts /dev/pts
  内核虚拟文件。和 proc 一样,Linux 提供给管理员通过文件系统和内核进行沟通( 读\写)的一种渠道。 pts 是远程虚拟终端。 devpts 即远程虚拟终端文件设备。 通过/dev/pts 可以了解目前远程虚拟终端的基本情况。
echo /sbin/mdev > /proc/sys/kernel/hotplug
  linux系统对于热插拔事件的产生默认都是调用 /sbin/hotplug, 该程序通过加载驱动程序, 创建设备节点,挂载分区等。 如果系统中不是/sbin/hotplug 来执行,而是 mdev,那么用户应当在早期启 动的时候将改执行档( 包含绝对位置)设置进去,于是有了上面的echo/sbin/mdev> /proc/sys/kernel/hotplug 我们可以在脚本中注释掉该命令行,重新开机后 cat/proc/sys/kernel/hotplug 就会发现返回来的是/sbin/hotplug 说明系统默认都是调用这个。 这个配置在内核编译的时候写好的在内核 目录下的.config可以看到有个配置叫做CONFIG_UEVENT_HELPER_PATH=“/sbin/hotplug”
mdev -s #生成设备节点
/bin/hostname wbyq #设置主机名称

2.3.6 编写 profile 文件 gedit etc/profile
USER="id-un" #id -un 是获得当前登陆的用户名称,USER="`id -un`" 则是将 id -un 的返回值赋值给变量 USER
LOGNAME=$USER #用于显示用户名称
PS1='[\u@\h \W]\$ ' #命令行样式环境变量, 查看系统命令行样式 echo $PS1
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH HOSTNAME
2.3.7 拷贝必要动态库文件
[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./lib/ -rfdv
[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/* ./lib/ -rfdv
[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/* ./lib/ -rfdv
2.3.8 完善dev目录,创建设备节点
[wbyq@wbyq rootfs]$ sudo mknod dev/null c 1 3

2.4 设置NFS共享

  添加NFS共享目录

[wbyq@wbyq rootfs]$ sudo vim /etc/exports
/home/wbyq/src_pack/rootfs  *(rw,no_root_squash,sync,insecure)

在这里插入图片描述

2.5 配置网络

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

2.6 IP设置

  若开发板和电脑直连,则可设置为静态IP方式,若是经过路由器,则可使用动态IP方式。
在这里插入图片描述

3.配置开发板环境变量

setenv bootargs root=/dev/nfs nfsroot=192.168.10.123:/home/wbyq/src_pack/rootfs ip=192.168.10.106:192.168.10.123:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702

192.168.1.123:/home/xsw/linux_work/rootfs —服务器 IP 与共享目 录
192.168.1.106 —开发板 IP 地址
192.168.1.123:192.168.1.1:255.255.255.0 —主机 IP、 子网掩码、 网关
  在uboot命令行执行,配置完后重启开发板。
在这里插入图片描述

3.1 开发板启动挂载NFS失败问题

  若开发板引导内核后出现无法通过NFS挂载rootfs,则是由于开发板nfs版本协议和ubuntu的nfs协议不兼容。
在这里插入图片描述
  解决办法:修改/etc/default/nfs-kernel-server 文件,添加协议版本支持。

[wbyq@wbyq rootfs]$ sudo vim /etc/default/nfs-kernel-server
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

在这里插入图片描述
  保存后重启NFS服务,重启开发板。

3.2开发板启动挂载进入命令行报错

  原因:主要是etc/fstab文件格式不对,fstab文件报错磁盘挂载信息。
在这里插入图片描述
  解决办法:修改rootfs下的/etc/fstab文件

[wbyq@wbyq rootfs]$ gedit etc/fstab /dev/mapper/vg_wbyq-lv_swap swap                  swap    defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                  proc    defaults        0 0

在这里插入图片描述

  • 启动成功

在这里插入图片描述
  至此,根文件系统制作完成,开发板启动成功。接下来将正式进入驱动开发之旅。

  NFS 配置参考:https://blog.csdn.net/weixin_44453694/article/details/126554023
  uboot命令参考:https://blog.csdn.net/weixin_44453694/article/details/126608765

这篇关于roofs 根文件系统制作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/283048

相关文章

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Linux中的缓冲区和文件系统详解

《Linux中的缓冲区和文件系统详解》:本文主要介绍Linux中的缓冲区和文件系统方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、FILE结构1、fd2、缓冲区二、文件系统1、固态硬盘2、逻辑地址LBA(一)数据块 Data blocks(二)inode表

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列5—Linux镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系

OpenStack镜像制作系列2—Windows7镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系列