制作Linux小系统-外围文件系统定制
环境:
- window10
- vmvare pro 14
- centos6.10-mini
</br>
一、Linux启动过程分析
-
BIOS
-
MBR/GPT
- Master Boot Record and Disk partitions
- Globally Unique Identifier Parttion Table Format
-
OS Loader
- Window:NTLDR/BootMgr
- Linux:GRUB/GRUB2
-
OS Kernel
- DOS:IO.SYS MSDOS.SYS
- Window:ntoskrnl.exe
- Linux:vmlinuz
-
Application Manager
- DOS:command.com
- Window:explorer.exe
- Linux:init
-
Applications...
二、启动bash
/boot中的init*.img文件
- 一个由OS loader载入的镜像文件
- 临时“根文件系统”
# /boot/grub/grub.conf文件
title Linux 2.4
root (hd0,1)
kernel /boot/vmlinuz ramdisk_size=8192 root=LABEL=/
initrd /boot/initrd.img
制作根文件系统
使用原来的kernel,initd自己的init*.img
- 如何生成img文件
# . 表示当前目录
$ find . | cpio -H newc -o | gzip > /boot/initrd.img
- 解压生成的img(不小心删掉了自己的系统文件夹,可以用这个方法恢复)
$ mv initramfs.img initramfs.img.gz # 添加gz后缀
$ gunzip initramfs.img.gz # 解压
$ mkdir temp # 创建目录并将解压后的文件丢进去
$ cpio -i -F ../initramfs.img # 解压刚刚丢进temp的文件
制作init
Application Manager
init是开机后grub引导进入系统后执行的,所以想要开机进去之后得到一个bash,就得在这个里面定制过程
bash是一个命令,所以只要执行这个命令,就可以得到一个bash,
# 查找命令find,可使用通配符*
$ find / -name "bash"
可执行文件&动态库
随意创建一个目录作为我们小系统的根目录,创建必要的文件夹(拷入小系统的路径与大系统路径一致,例如bash在bin目录中,就要在小系统根目录下创建bin目录然后将bash拷入)
bash执行还需要有其依赖的动态库,我们的小系统启动起来是独立于大系统的,所以我们要将其依赖的动态库也拷进我们的小系统
# 查新指令依赖的动态库
$ ldd /可执行文件路径
$ ldd /bin/bash
- 拷贝可执行文件依赖动态库脚本
#!/bin/bash
# use : ./script.sh /可执行文件 /动态库目录
dependList=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )
echo $dependList
cp $dependList $2
- 拷贝目录下的所有可执行文件依赖的动态库脚本
#!/bin/bash
# use : ./script.sh /可执行文件目录 /动态库目录
for m in $(ls $1)
do
dependList=$( ldd $1/$m | awk '{if (match($3,"/")){ print $3}}' )
cp $dependList $2
done
三、管理设备
-
udev : 管理、监控主机设备的服务程序
- 依赖与sysfs文件系统(挂载于/sys)
- 规则文件/lib/udev
- 配置文件/etc/udev
- 自动在/dev目录下创建设备节点
-
/proc目录:通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制
-
/sys目录:硬件设备的驱动程序信息
通过执行/sbin/start_udev,就可以检测到所有的设备
# 查看当前机器所有设备
$ ls /dev
四、挂载磁盘
磁盘也是一种设备
在linux上挂载磁盘,磁盘一般是在dev目录里的,但是在上面的管理设备部分,当列出当前机器设备时,并没有看到有关sd之类的,这是因为缺少驱动程序*
Linux的驱动在/lib/modules目录,可以看到有不同的版本号
$ lsmod # 列出当前机器所使用的所有驱动
$ modinfo # 查看驱动具体介绍,包括驱动依赖关系
$ insmod # 加载指定的驱动
$ modprobe # 载入制定模块或者载入一组相依的模块,需要有依赖关系moudules.dep
- 磁盘所需驱动
- scsi_transport_spi.ko
- mptbase.ko
- mptscsih.ko
- mptspi.ko
- crc-t10dif.ko
- sd_mod.ko
- etx4文件系统驱动
- mbcache.ko
- jbd2.ko
- ext4.ko
当加载完磁盘和文件系统驱动,就可以挂载和读写原来的文件系统了
五、登录login
- login认证体系(PAM)
- /etc/pam.d
- /lib/security
六、使用/sbin/init启动系统
/sbin/init的工作:
- /etc/rc.sysinit
- probe devices:udevd
- fsck
- remount
- /etc/rc
- service
- /sbin/mingetty
- login prompt = mingetty+/bin/login
七、联网
-
网卡驱动:
- e1000.ko
-
ping:查看网络是否连通
-
ethtool:查看网卡信息
-
ifup、ifdown:启动,关闭网卡
-
mentohust:连接校园网的工具
-
ssh:连接到远程主机,或者被远程主机连接
-
scp:基于ssh在两台主机之间拷贝文件
网友评论