制作Linux小系统-外围文件系统定制
环境: - window10 - vmvare pro 14 - centos6.10-mini
一、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,
1 | # 查找命令find,可使用通配符* |
可执行文件&动态库
随意创建一个目录作为我们小系统的根目录,创建必要的文件夹(拷入小系统的路径与大系统路径一致,例如bash在bin目录中,就要在小系统根目录下创建bin目录然后将bash拷入)
bash执行还需要有其依赖的动态库,我们的小系统启动起来是独立于大系统的,所以我们要将其依赖的动态库也拷进我们的小系统
1 | # 查新指令依赖的动态库 |
拷贝可执行文件依赖动态库脚本
#!/bin/bashuse : ./script.sh /可执行文件 /动态库目录
dependList=$( ldd $1 | awk ‘{if (match($3,”/“)){ print $3}}’ )
echo $dependList
cp $dependList $2
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,就可以检测到所有的设备
1 | # 查看当前机器所有设备 |
四、挂载磁盘
磁盘也是一种设备
在linux上挂载磁盘,磁盘一般是在dev目录里的,但是在上面的管理设备部分,当列出当前机器设备时,并没有看到有关sd之类的,这是因为*缺少驱动程序 Linux的驱动在/lib/modules目录,可以看到有不同的版本号
1 | $ lsmod # 列出当前机器所使用的所有驱动 |
- 磁盘所需驱动
- 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在两台主机之间拷贝文件
原文链接: https://www.delta1037.cn/2018/Linux/Linux小系统(一)-小系统制作/
版权声明: 转载请注明出处.