Linux小系统(一)-小系统制作

2019-05-21  本文已影响0人  delta1037

制作Linux小系统-外围文件系统定制

环境:

</br>


一、Linux启动过程分析

  1. BIOS

  2. MBR/GPT

    • Master Boot Record and Disk partitions
    • Globally Unique Identifier Parttion Table Format
  3. OS Loader

    • Window:NTLDR/BootMgr
    • Linux:GRUB/GRUB2
  4. OS Kernel

    • DOS:IO.SYS MSDOS.SYS
    • Window:ntoskrnl.exe
    • Linux:vmlinuz
  5. Application Manager

    • DOS:command.com
    • Window:explorer.exe
    • Linux:init
  6. Applications...

二、启动bash

/boot中的init*.img文件

# /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

# . 表示当前目录
$ find . | cpio -H newc -o | gzip > /boot/initrd.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

三、管理设备

通过执行/sbin/start_udev,就可以检测到所有的设备

# 查看当前机器所有设备
$ ls /dev

四、挂载磁盘

磁盘也是一种设备

在linux上挂载磁盘,磁盘一般是在dev目录里的,但是在上面的管理设备部分,当列出当前机器设备时,并没有看到有关sd之类的,这是因为缺少驱动程序*

Linux的驱动在/lib/modules目录,可以看到有不同的版本号

$ lsmod # 列出当前机器所使用的所有驱动
$ modinfo # 查看驱动具体介绍,包括驱动依赖关系
$ insmod # 加载指定的驱动
$ modprobe # 载入制定模块或者载入一组相依的模块,需要有依赖关系moudules.dep

当加载完磁盘和文件系统驱动,就可以挂载和读写原来的文件系统了

五、登录login

六、使用/sbin/init启动系统

/sbin/init的工作:

七、联网

上一篇下一篇

猜你喜欢

热点阅读