根文件系统熟悉根文件系统构建过程记录

lztutumo lztutumo     2022-12-07     155

关键词:

根文件系统制作过程大致分为两步:

  1)用busybox构建基本的框架

  2)添加必要目录及文件,比如etc目录及目录中的配置文件

内核挂载根文件系统到进入命令行的过程:

  1)内核找到根文件系统路径后,首先加载运行init参数指定的进程1,如init=/linuxrc,运行根文件系统中的/linuxrc,使得内核转到用户态;

  2)然后linuxrc会解析/etc/inittab文件,inittab文件中是一些条目,这些条目指明了在某种状态下会执行哪些操作,比如一个简单的inttab文件如下,其中sysinit指明系统启动或重新启动时会执行脚本文件/etc/init.d/rcS文件、shutdown指明系统关机时会卸载之前挂载的文件系统

inittab文件

#first:run the system script file

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/sh -->打印Please press Enter to activate this console.

::ctrlaltdel:-/sbin/reboot

#umount all filesystem

/* 在关机的时候,执行/bin/umount -a -r 也就是关机之前卸载之前挂载的文件系统 */

::shutdown:/bin/umount -a -r

#restart init process

::restart:/sbin/init

  3)linuxrc解析完inittab文件后,会执行sysinit指定的操作,即执行脚本文件/etc/init.d/rcS,如下是一个rcS文件,这个rcS文件大致做的工作是:导出几个环境变量、挂载/etc/fstab文件中所列出的文件系统、获取用户登入名,设置网口ip地址等;

/etc/init.d/rcS文件

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

//导出环境变量

export PATH runlevel prevlevel

//挂载/etc/fstab文件中所列出的文件系统

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

// /etc/sysconfig/HOSTNAME文件中保存了用户登入名

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10

 

/etc/fstab文件,这个文件指明将具体文件系统挂载在哪个目录下,这些挂载目录需要我们手动创建

#       <file system>   <mount point>   <type>  <options>       <dump>  <pass>

        proc                   /proc                 proc       defaults           0             0

        sysfs                  /sys                   sysfs      defaults           0             0

        tmpfs                 /var                   tmpfs     defaults           0             0

        tmpfs                 /tmp                  tmpfs     defaults           0             0

        tmpfs                 /dev                   tmpfs    defaults            0             0

4)登入用户名密码设置

  linuxrc执行完/etc/init.d/rcS脚本文件后,就会去执行inittab文件中respwan和askfirst字段指定的操作,如上inittab文件中askfirst指定的操作是执行/bin/sh(::askfirst:-/bin/sh),这个程序是跳过用户登入步骤,直接进入命令行,因此需要修改/bin/sh为/bin/login或者/sbin/gettty;然后添加/etc/passwd和/etc/shadow,这两个文件可以直接从ubuntu拷贝,在开发板启动后,通过passwd root去修改登入密码;

5)拷贝用户空间应用程序运行时所需的动态库文件到lib目录下,这些文件在交叉编译工具链目录下/usr/local/arm-2009q3/arm-none-linux-gnueabi/libc/lib。

  至此,一个简单的根文件系统构建完成,可以被内核挂载并启动进入命令行。

 

根据挂载根文件系统时的执行过程,大概清楚构建根文件系统大概需要做如下工作:

  1)我们需要用busybox构建出根文件系统的原始模板,内核可以挂载这个原始模板,并运行/linuxrc程序;

  2)创建/etc/inittab文件、/etc/init.d/rcS文件;

  3)创建用户登入所需文件/etc/passwd和/etc/shadow;

  4)创建文件系统挂载目录/proc、/sys、/var、/tmp、/dev;

  5)创建lib目录,从交叉编译工具链目录/usr/local/arm-2009q3/arm-none-linux-gnueabi/libc/lib拷贝动态库文件到lib目录下

 

一、用busybox构建根文件系统的原始模板

  具体过程参考https://blog.csdn.net/Jason_416/article/details/105802347博客

  1、需要选择上静态编译,不然内核运行/linuxrc时会报错。

技术图片

  2、编译busybox

    Make -j4

    如下,busybox编译成功

技术图片

  3、将编译好的busybox安装到指定的目录(根文件系统目录)

    Make install

    安装后,安装目录内容如下

技术图片

  4、将busybos的安装目录添加到/etc/exports文件中,以使得开发板内核启动时可以通过nfs挂载这个根文件系统

技术图片

    添加完后,重启nfs

    /etc/init.d/nfs-kernel-server restart

  5、配置uboot的bootargs,使得kernel启动时到上述安装目录挂载根文件系统

    启动后,效果如下

技术图片

    出现上述错误,是由于根目录下还没有创建一些必要的文件

  6、在根文件目录下添加必要的目录和文件

    1)创建并完善etc目录

      添加/etc/inittab文件

#first:run the system script file

::sysinit:/etc/init.d/rcS

#::askfirst:-/bin/sh

#ttySAC2::sysinit:/bin/login

ttySAC2::respawn:/sbin/getty -L ttySAC2 115200 vt100

::ctrlaltdel:-/sbin/reboot

#umount all filesystem

::shutdown:/bin/umount -a -r

#restart init process

::restart:/sbin/init

      添加/etc/fstab文件

#       <file system>   <mount point>   <type>  <options>       <dump>  <pass>

        proc            /proc           proc    defaults        0       0

        sysfs           /sys            sysfs   defaults        0       0

        tmpfs           /var            tmpfs   defaults        0       0

        tmpfs           /tmp            tmpfs   defaults        0       0

        tmpfs           /dev            tmpfs   defaults        0       0

      创建/etc/init.d目录并添加/etc/init.d/rcS文件

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

 

runlevel=S

prevlevel=N

 

umask 022

 

export PATH runlevel prevlevel

 

mount -a

 

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

 

/bin/hostname -F /etc/sysconfig/HOSTNAME

      添加用户名密码相关文件/etc/sysconfig/HOSTNAME,文件中保存用户登入名

技术图片

      /etc/profile文件

# Ash profile

# vim: syntax=sh

 

# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

 

USER="`id -un`"

LOGNAME=$USER

PS1=‘[$USER@$HOSTNAME]# ‘

PATH=$PATH

 

HOSTNAME=`/bin/hostname`

 

export USER LOGNAME PS1 PATH

      /etc/ passwd文件

root:x:0:0:root:/root:/bin/sh

      /etc/shadow文件

root:N06xh3ETHkhFE:10957:0:99999:7:::   //加密的密码,明文密码是123456

    2)创建目录/proc、/sys、/var、/tmp、/dev、/lib

    3)从交叉编译工具链拷贝库文件到/lib目录,如下

技术图片

 

  至此,可以登入进入命令行

技术图片

 


  本文仅是本人在熟悉根文件系统框架过程中的记录,分析总结出来以便自己更好的理解,大家勿喷哈。参考了网上的博客没有一一列出。如有侵权,请联系删除。

参考博客:

   https://blog.csdn.net/Jason_416/article/details/105802347

  朱有鹏老师视频:http://t.elecfans.com/topic/8.html

 

  

构建根文件系统之根文件系统

 在构建根文件系统之busybox中,我们已经实现了配置,编译,安装busybox。即那个init程序的来源。首先在pc看一下,/dev/console 和/dev/null的具体信息:执行ls/dev/console /dev/nullcrw-------1rootroot5,16月2708:06/dev/console //字符设... 查看详情

根文件系统笔记(代码片段)

《2.uboot和系统移植-第19部分-2.19.根文件系统构建实验及过程详解》 欢迎访问《朱老师物联网大讲堂》官方网站 www.zhulaoshi.org 以获取本课程更多信息第一部分、章节目录2.19.1.根文件系统的构建路线2.19.2.busybox的移植实战2.19.3... 查看详情

根文件系统构建

...ux“三巨头”已经完成了2个了,就剩最后一个rootfs(根文件系统)了,本章我们就来学习一下根文件系统的组成以及如何构建根文件系统。这是Linux移植的最后一步,根文件系统构建好以后就意味着我们已经拥有了一个... 查看详情

根文件系统构建(yocto方式)

本章有独立的教程,请参考《【正点原子】I.MX6UYocto构建根文件系统V1.0.pdf》! 查看详情

linux基于busybox移植rootfs根文件系统(代码片段)

文章目录1.前言2.下载Busybox3.编译Busybox4.向rootfs根文件系统添加lib库5.根文件系统初步测试6.完善rootfs根文件系统7.根文件系统最终测试8.移植过程错误汇总1.前言我们所熟悉的Linux主要由三部分组成:uboot、LinuxKernel、rootfs(根文... 查看详情

busybox构建根文件系统和制作ramdisk

        定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统。它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整、功能丰富的文件系统,其中包括大... 查看详情

linux系统移植:根文件系统构建(代码片段)

文章目录Linux系统移植:根文件系统构建一、什么是根文件系统二、根文件系统目录2.1子目录bin2.2子目录dev2.3子目录etc2.4子目录lib2.5子目录mnt2.6子目录proc2.7子目录usr2.8子目录var2.9子目录sbin2.10子目录sys2.11子目录opt三、BusyBox创... 查看详情

linux系统移植:根文件系统构建(代码片段)

文章目录Linux系统移植:根文件系统构建一、什么是根文件系统二、根文件系统目录2.1子目录bin2.2子目录dev2.3子目录etc2.4子目录lib2.5子目录mnt2.6子目录proc2.7子目录usr2.8子目录var2.9子目录sbin2.10子目录sys2.11子目录opt三、BusyBox创... 查看详情

busybox最小根文件系统(代码片段)

目录busybox(三)最小根文件系统引入构建终端构造inittab配置应用程序构建C库制作映像文件yaffstitle:busybox(三)最小根文件系统tag:armdate:2018-11-1417:57:08---busybox(三)最小根文件系统引入在busybox(一)浅析中,得出结论,一个最小的根文件系统... 查看详情

构建根文件系统之启动第一个程序(韦大仙)

...启动内核内核的目的:启动应用程序,而应用程序位于根文件系统上面。因此,需要构建根文件系统。只需完成以上几步,就可以在单板上搭建出一个linux系统来。问题:有那么多应用程序,内核启动后首相打开哪一个?内核启... 查看详情

rk3399系统移植|基于ubuntucore20.04构建根文件系统(代码片段)

...一、准备工作1.安装qemu2.下载ubuntu-corearm64版本二、修改根文件系统1.准备工作2.挂载根文件系统到主机3.更新4.安装语言包5.安装基本软件6.安装开发常用软件7.用户设置8.退出三、制作根文件系统镜像四、启动测试1.串口登录测试2.... 查看详情

rk3399系统移植|基于ubuntucore20.04构建根文件系统(代码片段)

...一、准备工作1.安装qemu2.下载ubuntu-corearm64版本二、修改根文件系统1.准备工作2.挂载根文件系统到主机3.更新4.安装语言包5.安装基本软件6.安装开发常用软件7.用户设置8.退出三、制作根文件系统镜像四、启动测试1.串口登录测试2.... 查看详情

正点原子i.mx6u-mini移植篇ubuntu-base根文件系统移植构建过程详解(代码片段)

...tu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。一、ubuntu-base获取Ubuntu的移植非 查看详情

buildroot构建指南——根文件系统(rootfs)

...得转载。 目录(?)[+] Buildroot构建指南——根文件系统(Rootfs)  Buildroot的Rootfs构建流程有一个大框架,有些部分是Buildroot系统做好的,有些细节需要自己来实现,Rootfs也是Buildroot中最为复杂的部分。Rootfs的构建... 查看详情

根文件系统制作过程(代码片段)

1.顶层Makefile中有根文件系统目标$(ROOTFS):$(ROOTFSDIR)#生成ROOTFS之前需要生成依赖ROOTFSDIR#使用脚本rootfsimg.sh来生成根文件系统的image $(HIDE)$(shell$(LITEOSTOPDIR)/tools/scripts/make_rootfs/rootfsimg.sh$(ROOTFS_DIR)$(FSTYPE)$ROOTFS_ 查看详情

根文件系统挂载过程

目录注册挂载rootfs文件系统解压initramfs到rootfs中prepare_namespace挂载磁盘上的文件系统注册挂载rootfs文件系统首先是rootfs的注册和挂载,rootfs作为一切后续文件操作的基石。start_kernel  vfs_caches_init    mnt_init      init_... 查看详情

buildroot构建指南——根文件系统(rootfs)

Buildroot构建指南——根文件系统(Rootfs)  Buildroot的Rootfs构建流程有一个大框架,有些部分是Buildroot系统做好的,有些细节需要自己来实现,Rootfs也是Buildroot中最为复杂的部分。Rootfs的构建流程概述Rootfs的构建流程如图1所示... 查看详情

正点原子i.mx6u-mini移植篇ubuntu-base根文件系统移植构建过程详解(代码片段)

...tu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。一、ubuntu-base获取Ubuntu的移植非常简单,... 查看详情