学习lfs 项目 随机制作一个简易的系统

tip:这个小系统慢慢补充从开始的基础文件到,启动之后initramfs 更换根之后的系统,也就是呈现在用户面前的最终系统环境

首先需要概略讲解下linux 启动:

  开机-------------->ROM--------------->BIOS------------------>boot

就是开机自检之后设备将ROM的代码运行起来,更具bios的设置找到启动盘的位置;接下来就是启动盘分区表,找到启动程序

启动程序加载linux 内核,内核加载完毕后会有一个initramfs 小的系统,这个可以动态加载linux 内核需要的驱动模块,因为不是很多驱动都编译到了内核。然后根据initramfs 的init 进行初始化,初始化完成后将控制权交给正真的根系统文件,chroot 到new_root 之后就执行init 初始化程序,系统启动,启动服务进程

这个是启动项没有设置root启动后报错,linux内核加载后没有找到root 设备;不能挂载/new_root; 可以看出内核初始化后会chroot 到new_root(就是正真的系统文件)

然后就是启动后正常看到的大量日志输出 

 

 

  lfs项目地址:https://linuxfromscratch.org/lfs/view/stable/

 

    1、格式化一块硬盘然后挂载到目录(挂载到/mnt)

  2、创建基本文件:

    mkdir -pv usr/{bin,sbin,lib,lib64}

    mkdir -pv {dev,proc}

    for i in `ls usr`;do 

      ln -s /usr/$i $i;

    done

  基本文件结构

      现在需要在文件结构添加基本程序和库文件,复制目前系统的基本程序到/mnt 文件系统

  首先添加/sbin/bash 文件到 /mnt/usr/bin
       然后chroot /mnt 可能提示没有bash这个文件,有可能是 bash 程序需要的其他依赖项  :执行 ldd /sbin/bash 可以看到bash程序正常执行需要那些lib 文件

  
       cp -dp /usr/lib/libc.so.6 /mnt/usr/lib 

       添加需要的库文件之后 

   chroot /mnt 可以看到切换到了 以/mnt 为根的环境

====================================================================================================

  系统初始化阶段是从 init开始的 init 找到inittab 文件 si::sysinit:/etc/rc.d/init.d/rc S

  然后执行 启动脚本进行其他设置

===================================================================================================

一个简易的系统 包括 /etc , /root , /usr ,/bin , /lib ,/sbin , /sys ,/dev ,/proc ,/run

etc 需要的文件 inittab ,profile ,passwd ,group, fstab,mtab

bin,sbin 需要的程序:bash , agetty ,passwd ,login, 

然后就可以修改grub.cfg root=新的盘分区 

启动之后就可以到简易的文件系统了

posted @ 2022-11-25 20:25  caibird_bg  阅读(86)  评论(0编辑  收藏  举报