0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式Linux开发-busybox根文件系统制作

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-14 08:51 次阅读

1. 前言

如果大家做过linux系统移植、或者Linux相关开发,对根文件系统这个名词应该很熟悉,在搭建嵌入式开发环境过程中,移植bootloader,移植kernel制作根文件系统是必须要做3件事情。

根文件系统是内核启动时所挂载mount的第一个文件系统,系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。根文件系统作为系统的,系统启动之后为完成一些初始化配置,操作。比如:系统登录输入的开机密码、开机账户这些信息就是存放在根文件系统里的。

根文件系统挂载的流程:先运行uboot引导内核,内核启动完成之后,根据配置的环境变量,找到根文件系统的位置,将/dev/xxx挂载,然后执行/linuxrc程序,等其执行完后。切换根目录,再挂载具体的根文件系统,根文件系统执行完之后,执行init的进程,也就第一个用户进程,对系统进行各种初始化的操作。

上面说的/dev/xxx 是根文件系统存放位置的设备节点,根文件系统支持从SD卡、光盘、EMMC、NFS网络位置进行挂载。/linuxrc 是根文件系统制作之后,在顶层目录生成的文件。

根文件系统必须具备的几个重要目录:/bin、/etc、/lib、/dev

其中/bin目录存放系统的基本命令,比如:ls 这些命令就放在这里面。

/etc存放系统的配置文件,根文件系统挂载之后会执行/etc下的配置文件完成对系统初始化。

/lib目录下存放系统运行需要的共享库文件,也就是动态库. 格式是: xxx.so

/dev目录下存放内核生成的设备节点,这个目录下的文件是内核自动生成的。

2. 根文件系统制作

制作根文件系统,需要用到Busybox工具包。

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的shell。

Busybox下载地址: busybox.net/

image-20220124091505384

接下来对Busybox进行配置、交叉编译、安装,生成根文件系统需要的基本目录文件。

我这里用到的版本是1.23.2,下载之后,解压busybox-1.23.2.tar.bz2 到Linux系统指定目录下。

下面是操作的步骤:

[wbyq@wbyq ~]$ mkdir ~/work/busybox -p
[wbyq@wbyq ~]$ tar xvf busybox-1.23.2.tar.bz2 -C ~/work/busybox/
[wbyq@wbyq ~]$ cd work/busybox/
[wbyq@wbyq busybox]$ cd busybox-1.23.2/
[wbyq@wbyq busybox-1.23.2]$ make menuconfig
​
 Busybox Settings --->  
  Build Options --->       
     (arm-linux-) Cross Compiler prefix 
  Installation Options ("make install" behavior) ---> 
     (/home/wbyq/work/rootfs) BusyBox installation prefix  
​
[wbyq@wbyq busybox-1.23.2]$ make && make install
复制代码

安装完成之后,在配置的目录下就可以看到生成的文件了。

image-20220124092133428image-20220124092148935image-20220124092226635

3. 完善根文件系统

上面busybox生成的文件只是根文件系统的基本文件,接下来还需要自己做一些完善,比如: 修改etc配置、拷贝动态库等等。

(1). 拷贝动态库

[wbyq@wbyq lib]$ cp ~/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/* ./ -rd
[wbyq@wbyq lib]$ cp ~/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/* ./ -rd
[wbyq@wbyq lib]$ sudo cp ~/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./ -rd
复制代码

(2).创建fstab文件,完善/etc目录

[wbyq@wbyq rootfs]$ cp /etc/fstab etc/
[wbyq@wbyq rootfs]$ cp /etc/passwd etc/
[wbyq@wbyq rootfs]$ cp /etc/group etc/
复制代码

(3). 创建inittab

cp busybox解压目录/examples/inittab /tiny4412/rootfs/etc/
[wbyq@wbyq rootfs]$ cp ../busybox/busybox-1.23.2/examples/inittab etc/
复制代码

(4). 修改上面拷贝的inittab文件

::sysinit:/etc/init.d/rcS   #set初始化执行的文件
console::askfirst:-/bin/sh  #需要加上console  askfirst表示需要按下回车才可以进入系统 respawn表示开机直接进入系统
::ctrlaltdel:/sbin/reboot   #指定重启命令
::shutdown:/bin/umount -a -r #指定关机时执行的命令
复制代码

(5). 创建 etc/init.d/rcS 文件

[wbyq@wbyq rootfs]$ touch etc/init.d/rcS
[wbyq@wbyq rootfs]$ chmod 777 etc/init.d/rcS
[wbyq@wbyq rootfs]$ gedit etc/init.d/rcS
写入以下代码:
mount -a
mkdir /dev/pts                 
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname wbyq
复制代码

(6).创建 etc/profile文件

[wbyq@wbyq rootfs]$ touch etc/profile
[wbyq@wbyq rootfs]$ gedit etc/profile
编写以下代码:
USER="id-un"
LOGNAME=$USER
PS1='[\u@\h \W]$ '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH HOSTNAME
复制代码

参数解释: PS1是命令行样式设置的环境变量。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19008

    浏览量

    302914
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • busybox
    +关注

    关注

    0

    文章

    21

    浏览量

    11284
收藏 人收藏

    评论

    相关推荐

    文件系统制作

    不可或缺的组件,在嵌入式Lin-ux中,内核在启动期间进行的最后操作之一就是安装文件系统Busybox是构建嵌入式
    发表于 04-29 21:32

    嵌入式文件系统构建

    文件系统,因此非常适合嵌入式系统。要注意的是,不同的文件系统都有相应的制作工具,但是其主要的原理和制作
    发表于 09-02 14:25

    嵌入式-文件系统制作

    文件系统制作一. busybox操作tar -xf busybox-1.19.4.tar.bz2cd busybox-1.19.4vim
    发表于 10-06 14:19

    嵌入式-文件系统制作

    文件系统制作 一. busybox操作 tar -xf busybox-1.19.4.tar.bz2 cd busybox-1.19.4
    发表于 07-05 09:52

    嵌入式Linux文件系统怎么制作

    不可或缺的组件,在嵌入式Lin-ux中,内核在启动期间进行的最后操作之一就是安装文件系统Busybox是构建嵌入式
    发表于 04-06 07:39

    如何使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境呢

    使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境1、搭建嵌入式基本开发环境2、QEMU安装3、编译Linux内核和dtb
    发表于 11-05 08:21

    Busybox制作嵌入式Linux文件系统

    文件系统Linux 的运行提供最基本的工具、库、脚本和一些特殊文件的支持Busybox制作
    发表于 06-12 16:05 19次下载

    基于zynq的Linux文件系统生成

    Linux中Root Filesystem(文件系统)是必不可少的,常用的是BusyBox,本节就介绍一下使用BusyBox
    发表于 02-10 15:58 5719次阅读
    基于zynq的<b class='flag-5'>Linux</b><b class='flag-5'>根</b><b class='flag-5'>文件系统</b>生成

    实验五 基于busybox文件系统制作实验-2016

    基于busybox文件系统制作实验-2016
    发表于 09-15 08:52 10次下载

    你知道嵌入式Linux内核?文件系统制作也是有密切关联的

    嵌入式Linux系统使用的是Linux内核,制作方法基本和X86平台的Linux内核一致,下面介
    发表于 04-28 15:13 667次阅读

    了解并学习嵌入式linux文件系统制作

    首先,本文档制作文件系统,是用mkyaffsimage打包成了yaffs镜像文件,也可以使用其他打包工具制作成其他形式的
    发表于 05-05 11:50 1046次阅读
    了解并学习<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>根</b><b class='flag-5'>文件系统制作</b>

    i.MX6ULL嵌入式Linux开发5-文件系统完善

    上篇文章,使用BusyBox构建了基础的嵌入式Linux系统文件系统,基本的功能可以正常运行
    的头像 发表于 03-14 08:44 1321次阅读
    i.MX6ULL<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>开发</b>5-<b class='flag-5'>根</b><b class='flag-5'>文件系统</b>完善

    嵌入式Linux开发-文件系统NFS网络挂载

    文件系统Linux内核启动之后挂载的第一个文件系统,上篇文章里已经介绍过,如何使用busybox
    的头像 发表于 08-14 08:57 1821次阅读

    rootfs文件系统制作

    本文记录了文件系统的一些知识点,Busybox 工具的使用和 最小文件系统制作
    发表于 10-31 11:56 2次下载

    使用BusyBox构建文件系统

    文件系统的构建,是 Linux移植三大组成部分的最后一步,文件系统构建好后,就构成了一个基础的、可以运行的
    的头像 发表于 04-19 11:20 1237次阅读
    使用<b class='flag-5'>BusyBox</b>构建<b class='flag-5'>根</b><b class='flag-5'>文件系统</b>