以下内容源于网络资源的学习与整理,如有侵权请告知删除。

参考博客

Uboot和系统移植(19)------- 根文件系统构建过程详解_big__C的博客-CSDN博客

一、总结

(1)本节在前面的理论分析的基础上,我们开始从零开始构建一个根文件系统。

(2)构建根文件系统的步骤如下。

  1. 首先在形式上创建一些空目录。
  2. 然后利用busybox软件来创建bin/、sbin/、linuxrc这三个(目录)文件。
  3. 接着构建与修改etc目录下的文件(包括inittab文件、rcS文件、profile文件、fstab文件、shadow文件、passwd文件等等)。
  4. 最后构建lib目录(即把交叉编译工具链的动态链接库复制到根文件系统的lib目录)。

(3)我们可以通过NFS方式来挂载这个文件夹形式的根文件系统,以验证其可用性。后续也可以将它制作成镜像文件并烧录到Flash中,参见博客制作ext2格式的根文件系统镜像。

二、构建根文件系统的步骤

1、明确最小根文件系统包含哪些内容

(1)由博文根文件系统的目录结构可知,根文件系统一般有/dev、/etc/lib、/usr、/var、/proc、/tmp、/home、/root、/mnt、/bin、/sbin、/sys等目录(这些目录有些是最小根文件系统必需的,有些不是必需的),以及/linuxrc文件。

(2)我们先创建一个文件夹“rootfs_xjh”,然后在该文件夹内创建以上文件夹。至于/bin、/sbin目录,以及/linuxrc文件,它们是由busybox生成的,可以生成后再拷贝到文件夹“rootfs_xjh”里。

2、使用busybox生成bin/、sbin/、usr/目录与linuxrc文件

步骤1、获取busybox源码

(1)busybox是开源项目,版本差异不大;这里选择busybox-1.24.1版本。

(2)官方网站下载:Index of /downloads。


步骤2、解压后修改Makefile

将Makefile中的ARCH、CROSS_COMPILE修改如下:

ARCH = arm
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-


步骤3、配置busybox

先“make defconfig”,然后“make menuconfig”,按照下面图示进行配置。


步骤4、编译与安装

(1)执行“make”时出现错误如下。

解决方法:此文件和主功能无关,可以避开。

1)先找到sync.c文件。在此目录下find -name "sync.c",知道其在./coreutils/sync.c。

2)切换到coreutils目录,在Kbuild文件中查找“sync.o”,可知由宏CONFIG_SYNC来控制是否编译。

3)在make menuconfig中,输入/然后查找SYNC,转到其位置选择为N。

(2)再次执行make进行编译,然后执行make install进行安装。

安装目录默认在busybox-1.24.1/_install,我们也可以在make menuconfig时设置安装目录。

安装成功后里面有bin/、sbin/、linuxrc、usr/这个四个目录或文件。其中linuxrc、bin/、sbin/、usr/bin/、usr/sbin/目录下的命令都指向了bin/busybox,如下所示。



步骤5:将目录bin/、sbin/、usr/以及文件linuxrc拷贝到rootfs_xjh文件夹

cp bin/ sbin/ usr/ linuxrc /home/xjh/iot/embedded_basic/rootfs/rootfs_xjh -raf

3构建etc目录

这步骤主要是拷贝一些文件到etc/目录下,并对这些文件进行一些修改。

最终的根文件系统对应的文件夹内容如下:


步骤1、将busybox/examples/bootfloopy/etc/中的文件拷贝到rootfs_xjh/etc/目录

busybox/examples/bootfloopy/etc/有fstab、init.d、inittab、profile四个文件或目录。


步骤2:修改rootfs_xjh/etc/inittab文件

(1)如果需要开机免登陆而直接进入shell,则修改如下。console::askfirst:-/bin/sh表示系统启动后,如果按回车就执行/bin/sh而出现命令行,从而不会出现登录界面。

::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
#tty2::askfirst:-/bin/sh
console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

注意按回车之后自动有“[root@xjh]#”,root应该是默认的,而xjh是/etc/profile文件中写好的。

(2)如果需要开机时登陆用户,则设置如下。::respawn:-/bin/login表示系统启动的时候会提示用户登录。至于是否还需要输入密码,则要看shadow文件第一行代码的第一个冒号和第二个冒号之间是否有加密的密码。如果没有,则只要输入用户名root然后回车即可,无需输入密码;如果有则和拷贝源的密码一样。

::sysinit:/etc/init.d/rcS
::respawn:-/bin/login
#tty2::askfirst:-/bin/sh
#console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

步骤3、设置用户名与密码设置

下面操作的前提,是步骤2的时候选择(2).。

将虚拟机linux系统里的/etc/passwd、/etc/group、/etc/shadow拷贝到rootf_xjh/etc/目录下,然后修改三个文件的相关内容。

(1)修改passwd文件

只保存与root相关的行,修改passwd文件内容为“root:x:0:0:root:/root:/bin/sh”(没双引号,而且因为busybox不支持bash,这里的/bin/bash要改为/bin/sh)。

(2)修改group文件

只保存与root相关的行,修改group文件内容为“root:x:0:root”(没双引号)。

(3)修改shadow文件

只保存与root相关的行,而且与root相关的行不需要更改(此时登陆密码和拷贝源的密码一致),或者可以清除这行第一个冒号和第二个冒号之间的内容(登陆时只需要输入root这个用户名然后回车即可,无需密码)。

//第一个冒号和第二个冒号之间的内容是加密后的密码
root:$7$.KKrGMfb$M2qiFqy1dNaMVv9LVfk/0Fex4EDrLu5ladkTR0mZ6SrMvlvJHjTSF30/KwRNVjPhMJQn04qzIV9wQwujCIgCm.:17463:0:99999:7:::

步骤4、修改rootfs_xjh/etc/profile文件

# Ash profile
# vim: syntax=sh# No core files by default
ulimit -S -c 0 > /dev/null 2>&1USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATHHOSTNAME=`/bin/hostname`export USER LOGNAME PS1 PATH


步骤5、修改rootfs_xjh/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


步骤6、修改rootfs_xjh/etc/init.d/rc.S文件

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=S
prevlevel=Numask 022export PATH runlevel prevlevelmount -aecho /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s/bin/hostname -F /etc/sysconfig/HOSTNAMEifconfig eth0 192.168.1.100

4、构建lib目录

(1)这一步也就是将动态链接库复制到rootfs_xjh/lib目录。动态链接库位于虚拟机linux系统的/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/目录。

cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/*so* /home/xjh/iot/embedded_basic/rootfs/rootfs_xjh/lib/ -rdf

(2)为什么复制的是交叉编译工具链的动态链接库,而非gcc的动态链接库呢?这是因为根文件系统是在板子上工作的,即动态链接库的使用是在arm体系架构中,而非虚拟机的Intel 80386。也就是说,如果使用gcc编译则可以在虚拟机中运行,但不能在开发板运行;如果要在开发板运行则需要用arm-linux-gcc来编译,但此时编译得到的文件不能在虚拟机运行。

(3)可以用“file xx”命令来查看一个可执行程序是哪个架构的。

从零开始构建根文件系统相关推荐

  1. 教你用 buildroot 构建根文件系统

    如果想要构建完整的根文件系统,大家一般都是使用buildroot,它不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植. 嵌入式系统三大部分:b ...

  2. 构建根文件系统(一)

    接着前边内核移植的文章,记录根文件系统的构建. 这里要用到强大的busybox,我选择的版本是busybox-1.18.5.tar.bz2 ,1.17的也可以:之所以选择这个版本是因为基于现在的交叉编 ...

  3. buildroot构建根文件系统

    buildroot构建根文件系统 一.简介 Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.本文使 ...

  4. Buildroot 构建根文件系统(Jz2440)

    1. Buildroot 简介      Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和 ...

  5. 野火i.MX6ULL Pro开发板构建根文件系统

    眼瞅着2020年马上就要到头了,承诺给大家的Linux移植三部曲还差最后一篇,这个拖延癌晚期恐怕今年是治不好了,不到最后的DL绝不妥协-- (这句话是年前写的,写了个开头就疫情了,封城,电脑丢在了公司 ...

  6. 嵌入式中利用ubuntu-base构建根文件系统

    在嵌入式环境中,我们最常用busybox.yocto或buildroot来构建根文件系统,这种情况下,当我们需要使用一些组件的时候,往往需要我们使用源码编译,移植到开发板中.那有没有像ubuntu的文 ...

  7. 【ARM】使用Ubuntu-base构建根文件系统

    使用Buildroot构建根文件系统 介绍 资源下载 配置根文件系统 设置软件源 安装必要软件 添加新用户 设置主机名称和本机IP 设置终端串口 网络DHCP FTP服务器搭建 串口无法登录 开机启动 ...

  8. 笔记:使用buildroot构建根文件系统

    文章目录 简介 构建过程 buildroot包下载 配置 Target options配置项 Build options配置项 Toolchain配置项 System configuration配置项 ...

  9. 【ARM】使用Busybox构建根文件系统

    Busybox构建根文件系统 介绍 下载 配置busybox 配置交叉编译器 取消静态库编译 添加vi命令的支持 取消简化模块 支持mdev 中文支持 编译 完善根文件系统 创建必要文件夹 复制库 启 ...

最新文章

  1. mysql中decimal不能为空吗_程序员,知道Mysql中事务ACID的原理吗?
  2. nginx指定配置文件启动_NGINX安全加固手册
  3. linux中iptables对防火墙的操作
  4. 阿里云 MaxCompute 2020-4 月刊
  5. oracle sqlplus执行脚本_连接Oracle出错:sqlplus quot;/as sysdbaquot;
  6. 【英语学习】【English L06】U01 Breakfast L5 Continental and English
  7. Vmware怎样使用nat和桥接方式解决虚拟机联网问题
  8. JDK8下载,安装及环境变量的配置
  9. 关于FileAttributes
  10. 什么是引发?Java运行时系统引发的异常如何处理?
  11. 客户端验证的极品--jQuery.validator
  12. 交叉表 mysql_MySql交叉表
  13. Android系统中SD卡各文件夹名称功能详解
  14. 《C语言》2022山西专升本C语言知识点
  15. 计算机房的正常温度和湿度,机房的温度、湿度标准值是多少?
  16. Kafka学习征途:不再依赖ZK的KRaft
  17. SAP MM 固定资产采购订单
  18. 乐乎常用的html源码,点点网关闭自定义html模板代码功能,网易lofter重新映入眼帘...
  19. 如何在游戏中快速集成聊天功能
  20. 【PANDA教程】PANDA详细教程笔记

热门文章

  1. 国与国之间通讯都是依托海底光缆!
  2. 驱动轮是什么意思_驾驶机动车经常听说驱动轮那你知道是什么意思吗
  3. 网页攻击 和 跨域 的相关问题梳理
  4. 老烟民突然戒烟,会对身体有危害?正确戒烟这样做
  5. 装饰大楼,备用钥匙,IOIOI卡片占卜总结
  6. 用友文件服务器恢复,用友U8账套数据恢复及备份.doc
  7. 车载bc8android蓝牙,android蓝牙接收单片机数据并绘制波形
  8. 连快播王欣都要做区块链,蚂蚁金服为什么不碰ICO?
  9. (未完)第十二章:动态内存
  10. 币圈“黑天鹅“事件,USDT完美演绎不可能事件