美文网首页
Linux小系统(一)-小系统制作

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

作者: delta1037 | 来源:发表于2019-05-21 10:34 被阅读0次

    制作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文件

    • 一个由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在两台主机之间拷贝文件

    相关文章

      网友评论

          本文标题:Linux小系统(一)-小系统制作

          本文链接:https://www.haomeiwen.com/subject/tlnlzqtx.html