文章目录

哪些是文件系统

Linux文件系统中的文件是数据的集合,文件系统除了包含着文件中的数据并且还有文件系统的结构,所有Linux用户和程序听到的文件、目录、软联接及文件保护信息等都存贮在其中

怎么制做根文件系统文件编译busybox拷贝工具链lib目录所须要文件拷贝工具链usr/lib目录所须要文件制做/etc目录,创建/etc/init.d/rcS,/etc/fstab,/etc/inittab,/etc/passwd,/etc/shadow构建其他tmp,applicant,proc文件夹制做busybox

下载busybox

官网:

以君正提供Busybox为反例

makeisvp_uclibc_mini_defconfig

make-j

makeinstall

将_install拷贝下来,拿来制做根文件系统

拷贝工具链lib目录所须要文件

将toolchain/gcc_472/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/lib拷贝到要制做的文件系统目录lib中

cp-rf/junzheng/toolchain/gcc_472/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/uclibc/lib/.so./

在这里插入图片描述

cp-rf/junzheng/toolchain/gcc_472/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/lib/.so./

拷贝工具链usr/lib目录所须要文件

将/junzheng/toolchain/gcc_472/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/usr/lib/目录下的文件拷贝到文件系统中/usr/lib下

cp-rf/junzheng/toolchain/gcc_472/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/usr/lib/.so./

在这里插入图片描述

制做/etc目录,创建/etc/init.d/rcS,/etc/fstab,/etc/inittab,/etc/passwd,/etc/shadow/etc/init.d/rcS

在制做的根文件系统中

mkdiretc/init.d

cdetc/init.d

touchrcS

输入如下内容

#!/bin/sh
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
        
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
 
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

第1行,表示这是一个shell脚本

第3行,PATH环境变量保存着可执行文件可能存在的目录,这样我们在执行一些命令或则可执行文件的时侯就不会提示找不到文件这样的错误。

第4行,LD_LIBRARY_PATH环境变量保存着库文件所在的目录。

第5行,使用export来导入里面那些环境变量,相当于申明一些“全局变量”。

第7行,使用mount命令来挂载所有的文件系统,这种文件系统由文件/etc/fstab来指定,所以我们一会还要创建/etc/fstab文件。

第8和9行,创建目录/dev/ptslinux建文件系统,之后将devpts挂载到/dev/pts目录中。

第11和12行,使用mdev来管理热拔插设备,通过这两行,Linux内核就可以在/dev目录下手动创建设备节点。关于mdev的详尽内容可以参考busybox中的docs/mdev.txt文档

chmod777/etc/init.d/rcS

给rcS赋于可执行权限

假如须要测量热插拔设备须要内核打开:

CONFIG_HOTPLUG=y

但是打开执行echo/sbin/mdev>/proc/sys/kernel/hotplug

/etc/fstab

touch/etc/fstab

输入内容如下

# <file system> <mount pt>      <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
devpts          /dev/pts        devpts  defaults,gid=5,mode=620 0       0
#tmpfs          /dev/shm        tmpfs   mode=0777       0       0
tmpfs           /tmp            tmpfs   mode=1777       0       0
tmpfs           /run            tmpfs   mode=0755,nosuid,nodev  0       0
sysfs           /sys            sysfs   defaults        0       0

fstab格式如下:

<file system> <mount point> <type> <options> <dump> <pass>

[filesystem]:要挂载的特殊的设备,也可以是块设备,例如/dev/sda等等。

[mountpoint]:挂载点。

linux建立文件系统_linux建文件系统_建立文件linux

[type]:文件系统类型,例如ext2、ext3、proc、romfs、tmpfs等等。

[options]:挂载选项linux建文件系统,在Ubuntu中输入“manmount”命令可以查看具体的选项。通常使用defaults,也就是默认选项,defaults包含了rw、suid、dev、exec、auto、nouser和async。

[dump]:为1的话表示准许备份,为0不备份,通常不备份,因而设置为0。

[pass]:c盘检测设置,为0表示不检测。根目录‘/’设置为1,其他的都不能设置为1,其他的分区从2开始。通常不在fstab中挂载根目录,因而这儿通常设置为0。

/etc/inittab

创建/etc/inittab文件,并在inittab文件中输入如下内容:

# /etc/inittab
# Startup the system
::sysinit:/sbin/swapoff -a
::sysinit:/bin/mount -t tmpfs tmpfs /dev
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -a
::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
console::respawn:/sbin/getty -L console 115200 vt100 # GENERIC_SERIAL
# Stuff to do for the 3-finger salute
#::ctrlaltdel:/sbin/reboot
# Stuff to do before rebooting
::shutdown:/bin/umount -a -r

console::respawn:/sbin/getty-Lconsole115200vt100#GENERIC_SERIAL

使用getty做用户登入

(1)使用getty做登陆程序和使用login并没有显著区别,passwd和shadow文件的设置是一模一样,两个程序都是集成到busybox里的;

(2)console:指定复印输出并口;

(3)vt100:终端的输出格式;

(4)115200:并口的码率;

inittab的详尽内容可以参考busybox下的文件examples/inittab。init程序会读取/etc/inittab这个文件LINUX虚机,inittab由若干条指令组成。每条指令的结构都是一样的,由以“:”分隔的4个段组成,格式如下:

<id>:<runlevels>:<action>:<process>

[id]:每位指令的标示符,不能重复。并且对于busybox的init来说,有着特殊意义。对于busybox而言拿来指定启动进程的控制tty,通常我们将并口或则LCD屏幕设置为控制tty

[runlevels]:对busybox来说此项完全没用,所以空着

[action]:动作,用于指定可能用到的动作

[process]:具体的动作,例如程序、脚本或命令等。

/etc/passwd,/etc/shadow

/etc/passwd,/etc/shadow的内容参考下边制做

/etc/profile

填充如下内容

linux建文件系统_linux建立文件系统_建立文件linux

# Set PS1
if [ "$PS1" ]; then
        if [ "`id -u`" -eq 0 ]; then
                export PS1='[u@h:W]# '
        else
                export PS1='[u@h:W]$ '
        fi
fi
# Set terminal env
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH=/system/bin:$PATH
export LD_LIBRARY_PATH=/system/lib
# Set directoty and file default create permission
umask 022

/etc/group

填充如下内容

root❌0:

/etc/hostname

填充如下内容

你想显示的名称例如test

/etc/hosts

填充如下内容

127.0.0.1localhost

添加登陆密码

注意busybox须要

Uerinternalpasswordandgroupfunctionsratherthansystemfunction是被选中的状态

打开/etc/inittab文件linux安装,降低::sysinit:-/bin/login命令

针对/etc/passwd

root:x:0:0:root:/root:/bin/sh

用户名:用户登入时使用。厚度应在1到32个字符之间。

密码:x字符表示加密的密码储存在/etc/shadow文件中。请注意,您须要使用passwd命令来估算在CLI中输入的密码的哈希值,或则在/etc/shadow文件中储存/更新密码的哈希值,在这些情况下,密码哈希值储存为“x”。

用户ID(UID):必须为每位用户分配一个用户ID(UID)。UID0(零)为root保留,UID1-99为其他预定义账户保留。另外UID100-999由系统保留用于管理和系统账户/组。

组ID(GID):主要组ID(储存在/etc/group文件中)

用户ID信息:评论数组。它容许您添加有关用户的额外信息,比如用户的全名、电话号码等。该数组通过手掌命令使用。

主目录:用户登入时所在目录的绝对路径。假如该目录不存在,则用户目录将变为/

Command/shell:命令或shell的绝对路径(/bin/bash)。一般,这是一个壳体。请注意,它不一定是壳体。armLinux中是/bin/sh而不是/bin/bash。

shadow文件中内容为:

root:Wdfdfqwe:17226:::::

第一段表示登陆的用户名

第二段表示密文密码。

设置用户密码:

passwdroot

然后输入该用户的密码,然后在shadow中还会生成密文密码,你是难以晓得具体含意的,生成密文密码后,可以将shadow文件中的密文密码装入到制做根文件系统的文件夹中,之后烧写便于不用每次都设置密码

密码内容我在python的交互模式下生成:

>>> __import__("crypt").crypt("123456","$5$vaALBbZ3z6nsQE0Q$") 
'$5$vaALBbZ3z6nsQE0Q$DqZoXKkiRropyxtAYL80EQXTozNcYQULDgtqUUS1aa1'

crypt参数1为密码明码:123456

crypt参数2为摘要算法和盐值,用$符号隔开:

1表示摘要算法为MD5(5表示SHA-256,6表示SHA-512)

vaALBbZ3z6nsQE0Q表示盐值(你们可以随意设置,最多8位)

文件系统制做

文件系统格式有三种:

SquashfsJffs2Ubi文件系统Squashfs

SquashFS是一套基于Linux内核使用的压缩只读文件系统。该文件系统才能压缩系统内的文档,inode以及目录,文件最大支持2^64字节

制做形式

mksquashfsroot-uclibcxxx.squashfs-compxz

mksquashfs是制做文件系统的工具

root-uclibc须要压缩的文件系统文件夹

xxx.squashfs输出的可烧写的压缩文件

-compxz压缩格式:gzip(默认),lzo,xz

linux建立文件系统_linux建文件系统_建立文件linux

注意其中-b缺省,默认为128KB块大小,可指定

gzip&lzo&xz压缩

gzip&lzo&xz【可以理解为不同压缩软件例如rar,7z等等】

三大类型压缩算法对比

在这里插入图片描述

Jffs2

主要用于NOR型闪存,基于MTD驱动层,特征是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,由于垃圾搜集的关系而使jffs2的运行速率大大放慢。

制做形式

mkfs.jffs2-oxxx.jffs2-rroot-uclib-e0x10000-s0x1000-n-l-xzlib--pad

mkfs.jffs2:制做jffs2文件系统的工具

-oxxx.jffs2:输出的可烧写压缩文件

-rroot-uclib:输入的要压缩的文件夹

-e0x10000:设定擦除块的大小为(默认:64KB)

-s0x1000:设定擦除块的大小为(默认:64KB)

-n:指明不添加清楚标记(nandflash有自己的校检块,储存相关的信息。)假如挂载后会出现类似:CLEANMARKERnodefoundat

0x0042c000hastotlen0xc!=normal0x0的警告,则加上-n都会消失

-l:指定使用小端格式

-xzlib:指压缩格式

–pad:一般用16补码表示输出文件系统大小,不脚部分用0xff补充

Ubi文件系统

在某种程度上,UBIFS可以被觉得是JFFS2文件系统的下一代。

可以在其上运行标准文件系统,如ext2/ext3/ext4等

制做形式:

mkfs.ubifs-e0x1f000-c568-m2048-dconfig/-oconfig.ubifs-v

本文原创地址:https://www.linuxprobe.com/srjxlwjxtzzg.html编辑:刘遄,审核员:暂无