Linux文件系统构建

article/2025/9/23 22:33:15

一、什么是文件系统
文件系统可以简单理解为两个部分,一个是文件,另一个是系统。文件系统是一个用来组织和管理文件的系统,有了文件系统之后,就可以轻松操作存储在存储介质上的文件,比如文件的增、删、查、改等基本操作。文件系统的格式有很多种(fat32、ext2、ext3、ntfs等)。

根文件系统:最顶端称为根,在Linux上用“ \ ”表示,然后将一个按照特定目录组成的文件系统挂载到根上,这个系统就叫做根文件系统。

二、不同工具构建文件系统的优缺点

![在这里插入图片描述](https://img-blog.csdnimg.cn/d53b112094074b32bb6e41bdfc4070b0.pn
三、Busybox
Busybox是一个集成大量Linux命令的工具,例如ls,cat,cp等命令,使用busybox可以很容易构建出根文件系统需要的命令。

3.1 从官网下载busybox的源码并解压
Busybox官网:https://busybox.net/

3.2 使用命令make menuconfig进入图形界面来配置busybox
在这里插入图片描述

找到对应的交叉编译器进入该编译器目录的bin文件下,复制它的绝对路径到图形界面的对应地方,并未路径后面加上编译器的头部。
在这里插入图片描述

在这里插入图片描述
在绝对路径bin之后还需要添加编译器名称的头部,复制过去即可
在这里插入图片描述
最后回车退出保存,这样交叉编译器就配置好了

然后配置Build static binary是否选中,取消选中,因为静态编译会使编译后的文件变得很大。最后配置busybox支持中文,需要修改libbb/printable_string.c,注释掉两处if(c>=0x7f) break;
在这里插入图片描述
在这里插入图片描述

还需要修改libbb/unicode.c,同样需要将if(c>=0x7f) 修改掉
在这里插入图片描述
接着再打开图形配置界面,选中vi-style line editing commands,support unicode选中mdev(热插拔功能)。

输入make编译busybox,编译成功后输入make install,完成后就可以看到busybox生成的文件夹
在这里插入图片描述
3.3 完善根文件系统
制作的文件系统还需要新建“dev,etc,lib,lib64.mntprocsys,tmp,var”文件夹,在安装目录install/使用命令:sudo mkdir devetc liblib64 mnt proc sys tmp var创建文件,接下来的工作重点是etc和lib这两个文件夹
3.3.1lib文件
对于lib这个文件的完善我们需要把对应的交叉编译器的库拷贝到lib文件夹下
在这里插入图片描述
你可以选择复制整个文件夹也可以使用sudo cp <绝对路径>* 的方式拷贝所有目录

3.3.2 etc文件
首先进入到创建好的etc文件下,使用命令“vim ethO-setting”创建网络配置信息文件,这个文件里面 存放都是如IP地址,网关等网络信息,使用命令“chmod777eth0-setting 修改权限为777,并在“eth0-setting” 文件里输入下面的内容:

IP=192.168.1.230
Mask-255.255.255.0
Gateway=-192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90

IP:开发板启动后默认设置的IP地址,IP地址为192.168.1.230
Mask:开发板启动后默认设置的掩码,掩码为,255.255.255.0
Gateway:开发板启动手默认配置的网关,网关为192.168.1.1
DNS:开发板启动后默认设置的DNS,DNS为192.168.1.1
MAC:开发板启动后默认设置的MAC地址,MAC地址为08:90:90:90:90:90
MAC地址和本文保持一致即可,其余网络信息大家依据自己的网络情况设置即可

接下来还需要在etc文件下输入sudo mkdir init.d创建一个文件,使用“cdinit.d”命令进入到“init.d”文件夹,并在“init.d” 文件夹下面使用“vim ifconfig-eth0”命令建立“ifconfig-eth0”文件, 然后在里面输入以下内容,最后使用命令“sudo chmod777ifconfig-eth0”修改权限为777

#!/bin/sh
echo -n Try to bring eth0 interface up. >/dev/ttS0
if[-f/etc/eth0-setting];then
source /etc/eth0-setting|
if grep -q "^/dev/root/nfs "/etc/mtab;then
echo-n NFS root..> /dev/ttyS0
else
ifconfig eth0 down
ifconfig eth0 hw ether$MAC
ifconfig ethO $IP netmask $Mask up
route add default gw $Gateway
6
echo nameserver $DNS >/etc/resolv.conf
else
if grep -q"^/dev/root/nfs"/etc/mtab;then
echo -n NFS root.> /dev/ttyS0
else
/sbin/ifconfigeth0192.168.253.12 netmask255.255.255.0up  fi
fi
echo Done >/dev/ttyS0

ifconfig-eth0是一个网络配置文件,大致工作流程就是读取我们创建的eth0-setting文件来设置网络,如果eth0-setting文件不存在就使用默认配置

最后,在“init.d”文件夹下使用“sudo vi rcS”命令建立“rcS”文件,并输入以下内容, 最后使用命令“sudo chmod 777 rcS”修改权限为777。rcS文件也是一个配置文件,是用来配置 Linux系统的

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:  runlevel=S
prevlevel-N
umask 022
dxport PATH runlevel prevlevel
B
#Trap CTRL-C &c only in this shell so we can interrupt subprocesses.   
trap":"INT QUIT TSTP
/bin/hostname iTOP-LS2K1000
mount -a
echo/sbin/mdev>/proc/sys/kernel/hotplug  /sbin/mdev -s
mkdir-p /dev/pts
/bin/mount-n -t devpts none /dev/pts-o mode-0622  mkdir p /var/empty
mkdir-p /var/log
mkdir-p /var/log/boa
mkdirp /var/lock
mkdir p /var/run
mkdir-p /var/tmp
sysloqd
/etc/rc d/init.d/netd start
mkdir /mnt/disk
/sbin/ifconfiglo 127.0.0.1  /etc/init.d/ifconfig-eth0  sleep 1
echo  如****4
~/dev/ttySO
echo  **
****************"> /dev/ttyS0

返回到“initd”文件夹的上一级目录“etc”,并使用命令使 用“sudo vi passwd”命令建立文件“passwd”,并输入以下内容,最后使用命令使用“sudo chmod 755 passwd” 命令修改“passwd” 文件的权限为777

root:x:0:0:root/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:9999:Nobody/:

在inittab文件里面执行了console:askfirst:-/bin/sh语句,启动/bin/sh 的时候会启动 /etc/profile 文件的配置信息,后面我们也会创建 inittab文件,这里我们先来编写 profile 文件.使用“sudo vi profile”命令在“etc”目录建立“profile”文件,并输入以下内容 最后使用“sudo chmod 755 profile”命令修改“profile”文件的权限,如下图所示:

#Ash profile
#vim: syntax=sh
#No core files by default
ulimit-Sc 0>/dev/null2>&1
USER="`id-un`"
LOGNAME=SUSER
PS1=TSUSER@SHOSTNAME]#
PATH=SPATH
HOSTNAME=`/bin/hostname`
eXport USER LOGNAME PS1 PATH

netd文件是用用来配合 profile文件里面的/etc/rcd/init.d/netd start的这行代码来启 动netd服务的。这里我们就来一起创建这个文件,使用“sudo mkdir rcd”命令在“etc”目录建立文件夹“rcd,然后使用“cd rcd” 命令进入到刚才建立的“rcd”文件夹,接下来在“rc.d”目录下使用“sudo mkdir init.d”命令建立“init.d”文件夹, 使用“cd init.d” 命令进入到刚才建立的“init.d”文件夹下,输入命令sudo vi netd,写入以下代码:

#!/bin/sh
base-inetd
#See how we were called.
case "$1" in
start)
/usr/sbin/$base
stop)
pid-/bin/pidof Sbase  if[-n "$pid"];then  kill-9 $pid
fi
esac  exit 0

我们返回到etc目录下,并使用命令sudo vim inittab 创建inittab文件,并写入以下 内容,接着使用命令sudo chmod 777 inittab 修改inittab 文件权限,

"sysinit:/etc/init.d/rcs
console askfirst-/bin/sh
:restart/sbin/init
-ctrlaltdel:/sbin/reboot
shutdown:/bin/umount-a-r
shutdown:/sbin/swapoff-a

回到etc 目录下,使用命令sudo vim fstab创建fstab文件,然后输入以下内容,输入完成后并修改权限为777,fstab文件是配置Linux 系统启动以后自动挂载的分区。

proc /proc proc  defaults 0 0
tmpfs /tmp tmpfsdefaults 0 0
sysfs /sys sysfs defaults 0 0

在etc 目录下面,使用命令sudo vim mdev.conf 新建mdev.conf 文件,因为我们在rcS文件里面配置了热拔插功能,但是还需要mdev.conf配合,mdev.conf 文件是U 盘 sd卡的热拔插文件,我们在 mdev.conf 输入以下内容:

sd[a-z][0-9] 0:0 666 @ /etc/hotplug/udisk inserting
sd[a-z]D:0 666$/etc/hotplug/udisk removing

然后在hotplug 文件夹下创建 udisk_inserting 和udisk_removing 文件,并把权限修改 成777,在里面输入以下内容:

udisk_inserting:
#!/bin/sh
echo"usbdisk insert!">/dev/console
if[-e"/dev/$MDEV"  I ;then
mkdir -p/mnt/usbdisk/$MDEV
mount/dev/$MDEV/mnt/usbdisk/$MDEV
echo"/dev/$MDEV mountedin/mnt/usbdisk/$MDEV">/dev/console
fi

udisk_removing

#!/bin/sh
echo "usbdisk remove!">/dev/console  umount-I/mnt/usbdisk/sd*
rm -rf/mnt/usbdisk/sd*

我们需要在etc 目录下创建mtab文件,/etc/mtab是当前的分区挂载情况,记录的是当前系统已挂载的分区。每次挂载/卸载分区时会更新/etc/mtab文件中的信息。所以在 ifconfig-eth0 文件里面我们就是通过这个/etc/mtab来判断当前的文件系统是不是nfs网络文件系统。

3.4打包busybox文件系统
首先返回到文件系统源码所在文件下的上一级目录,在这个目录下创建一个rootfs文件,然后输入命令dd if = /dev/zero of = rootfs.img bs = 1M count = 300,接下来将打包好的文件格式化为ext4格式的mkfs.ext4 rootfs.img 然后将rootfs.img 挂载到rootfs文件下sudo mount rootfs.img rootfs 最后将我们制作好的sys复制到rootfs文件下sudo cp -rfpd sys/* ./rootfs ,取消挂载sudo umount rootfs,到这里文件系统就已经打包好了,我们可以将这个文件系统烧写到开发板上


http://chatgpt.dhexx.cn/article/LF63f3iK.shtml

相关文章

关于虚拟机设置静态ip和克隆后重启网关报错的问题以及配置DNS

1.首先&#xff0c;用 ifconfig 命令查询是否存在eth0网卡 2.vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑ifcfg-eth0文件&#xff0c;如图&#xff1a; 加入如下配置 BOOTPROTOstatic IPADDR192.168.183.201 NETMASK255.255.255.0 GATEWAY192.168.183.1#网关 DNS1114…

linux上bridge vlan etho

Linux 接口bridge及vlan架构 一、组网结构图如下&#xff1a; 1、SW交换机和HUB 1)、交换机连接HUB的端口为trunk模式&#xff0c;trunk vlan100&#xff0c;交换机上的外网网段为10.10.100.0/24&#xff0c;vlan为100&#xff0c;分配iptables服务器的IP是10.10.100.100&#…

linux系统出现“Bring up interface etho”错误

linux系统启动网络服务出现以下两个错误的情况&#xff1a; 1、​Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization. 2、Bring up interface etho:Error :No suitable device found:no device found for connection ‘System…

虚拟机启动以后linux的etho网卡没有ip

查看windows的服务进程中&#xff0c;VM的DHCP服务是否启动&#xff0c;启动即可~ 转载于:https://www.cnblogs.com/leite/p/9332946.html

Linux网络配置ifcfg etho不生效

Linux网络配置ifcfg etho不生效 1.在RHEL4上&#xff0c;在ifcfg-eth0上配置IP地址等信息。详细配置如下 /etc/sysconfig/network-scripts/ifcfg-eth0 2.在shell上&#xff0c;ifconfig查看eth0网卡信息&#xff0c;发现ip地址并没有生效 3.ping地址报错如下&#xff1a; …

centos etho网卡不可用提示:Device etho does not seem to be present解决办法

虚拟机克隆一个后&#xff0c;重启网络提示Device etho does not seem to be present 解决办法&#xff1a; 首先&#xff0c;打开/etc/udev/rules.d/70-persistent-net.rules内容如下&#xff1a; # vi /etc/udev/rules.d/70-persistent-net.rules # This file was automati…

linux 网卡开启和关闭

一、查询网卡 命令&#xff1a; ifconfig 可以看到 eth0: eth1: 之类的 二、关闭网卡 命令 &#xff1a;ifdown eth0 这个是关闭网卡eth0 再查看一下网卡 三、开启网卡 命令 &#xff1a;ifup eth0 这个是开启网卡eth0

linux下 etho网卡设置

1、首先&#xff0c;用 ifconfig 命令查询是否存在eth0网卡 2、vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑ifcfg-eth0文件&#xff0c;如图&#xff1a; 加上以下配置&#xff1a; DEVICEeth0 TYPEEthernet ONBOOTyes #启动时开启网卡 NM_CONTROLLEDyes BOOTPRO…

linux之用户密码忘记后如何修改密码

修改用户密码 当我们的linux用户密码忘记后&#xff0c;无法进入时不要着急这里帮你解决 1&#xff09;首先重启我们的系统&#xff0c;然后马上反复按上下键就会进入这样的一个界面 2&#xff09;然后按一下e键&#xff0c;进入下一个界面 3&#xff09;找到这个以lin…

Linux 服务器修改登陆用户的密码

1. 成功登陆到远程服务器之后&#xff0c;输入指令&#xff1a;passwd 2.确认指令正确&#xff0c;按下回车键&#xff0c;即可弹出提示&#xff0c;让输入新的密码 3.如果输入的新密码过于简单&#xff0c;是不能通过Linux系统的&#xff0c;所以密码应该设置的复杂一些&#…

Linux 系统怎么改开机密码

前言 kali和ubuntu虚拟机装的时候密码设置的都和本机一样&#xff0c;后面开虚拟机开的越来越频繁&#xff0c;&#xff08;密码太长了…&#xff09;就想着怎么改个密码。因为windows改开机密码的操作太简单&#xff0c;但是linux的设置里面好像又没有这一项&#xff0c;所以…

怎样修改linux(虚拟机)系统开机密码

解决方法&#xff1a; 1.要确保在root权限下&#xff0c;才能实现修改。&#xff08;必须拥有root权限&#xff09; 修改的语法为&#xff1a;passwd YY &#xff08;这里的YY指的是自己的新密码&#xff09; 执行命令&#xff1a;passwd YY 按照提示输入两遍提示即可。 &…

【Linux编程】三分钟让你学会Linux下用户密码更改

Linux环境下密码更改包括两种&#xff1a; 第一种&#xff1a;root用户&#xff08;管理员&#xff09;密码更改 第二种&#xff1a;非root用户&#xff08;普通用户&#xff09;密码更改 可能需要进行密码更改的场景&#xff1a; ①购买云服务后&#xff0c;原始的root密码过…

Linux忘记root登陆密码,修改密码方法

前言 <1>为了安全&#xff0c;通常我们会把密码设置的较为复杂&#xff0c;因此一旦我们密码记录的文件发生错误或者忘记密码了&#xff0c;下面有几个方法可以帮你重设密码 <2>实际上分为两种更改密码的方法&#xff08;有服务运行的最好不要重启&#xff09;&am…

Linux修改普通用户密码

【起因】    人都会忘记密码&#xff0c;即使你之前做过了统计&#xff0c;但是一次不经意的修改&#xff0c;没有统计&#xff0c;也会产生大麻烦。 【前提】    此前提为你修改虚拟机用户密码所必须的软件&#xff1a;   XShell任意版本即可 【具体步骤】    …

linux修改用户密码命令

useradd testuser 创建用户testuser passwd testuser 给已创建的用户testuser设置密码 说明&#xff1a;新创建的用户会在/home下创建一个用户目录testuser usermod --help 修改用户这个命令的相关参数 userdel testuser 删除用户testuser rm -rf testuser 删除用户testuser所在…

Linux系统服务器修改用户密码的方法

Linux系统下可以通过 passwd 命令来个修改用户的密码&#xff0c;操作起来也非常的简单。 Linux修改用户密码的方法 命令&#xff1a; #修改自己登录用户的密码 passwd #修改某个用户的密码&#xff0c;必须root用户 passwd 用户名 例&#xff1a; Linux 修改自己当前用户的密码…

Linux 重置root密码和修改用户密码

一、没有忘记自己的密码&#xff0c;进行修改 1、修改root密码 执行&#xff1a;passwd root, 按照提示输入新的密码两次。 如果用xshell连接的情况下&#xff0c;需要重新验证新的密码。 [rootcentos7 ~]# passwd root 更改用户 root 的密码 。 新的 密码&#xff1a; 无效…

Linux系统修改 root 用户密码

方法一&#xff1a;rd.break 第1步 重启系统&#xff0c;在下图所示界面按e键 第2步&#xff1a;找到 linux这行&#xff0c;末尾输入 空格 rd.break 然后按 ctrlx 第3步&#xff1a; 查看可选步骤 输入&#xff1a;mount | grep sysroot 这里sysroot是以ro只读的形式挂载的…

Linux服务器如何修改登录用户的密码

Linux作为一款开源免费的系统&#xff0c;在服务器上的使用非常广泛&#xff0c;由于Linux是一个非以可视化界面为主的系统&#xff0c;所以很多设置需要用到指令&#xff0c;例如修改登录用户的 密码&#xff0c;就需要使用到:passwd 1、输入用户的正确密码&#xff0c;登录到…