Linux下BusyBox根文件系统制作

BusyBox 简介

busybox 是一个集成了超过一百个最常用 linux 命令和工具的软件。它包含了简单的工具,如 ls、cat 和 echo 等,还包括一些更大、更复杂的工具。有人称 busybox 为 linux 工具中的瑞士军刀。简单来说,busybox 就像一个大型工具箱,它整合了许多 linux 工具和命令,同时也包含了 android 系统自带的 shell。busybox 提供了一个相对完善的环境,适用于任何小的嵌入式系统。

本文将介绍如何使用 BusyBox 创建一个最小根文件系统,使 Linux 系统能够正常运行,并进入 Linux 命令行终端。

嵌入式 Linux 系统启动通常需要以下三个步骤:

编译、烧录并启动 U-Boot 引导程序,并设置好 U-Boot 环境变量。编译、烧录内核,并使用 U-Boot 引导内核,成功启动内核。如果使用 NFS 网络挂载方式,在设置 U-Boot 环境变量时,配置好 NFS 服务器的 IP 地址、目录等参数。Linux 内核启动后,根据参数指引挂载根文件系统,挂载成功后,最终进入命令行终端,接下来就可以愉快地进行 Linux 编程了。

获取 BusyBox 源码

官方链接:https://www.php.cn/link/e59dbe69c119b5d59e91b9b630dadc05

下载截图:

Linux下BusyBox根文件系统制作

制作过程

(1). 环境介绍

目标开发板:友善之臂 Tiny4412Linux 内核:3.5U-Boot 版本:2010.12

(2). 编译根文件系统所需的基本文件

[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 menuconfigBusybox 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

(3). 拷贝动态库

[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

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

[wbyq@wbyq rootfs]$ cp /etc/fstab etc/[wbyq@wbyq rootfs]$ cp /etc/passwd etc/[wbyq@wbyq rootfs]$ cp /etc/group etc/

(5). 创建 inittab

[wbyq@wbyq rootfs]$ cp ../busybox/busybox-1.23.2/examples/inittab etc/

(6). 修改 inittab 文件

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

(7). 创建 /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 -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -s/bin/hostname wbyq

(8). 创建 /etc/profile 文件

[wbyq@wbyq rootfs]$ touch etc/profile[wbyq@wbyq rootfs]$ gedit etc/profile

编写以下代码:

USER="id-un"LOGNAME=$USERPS1='[u@h W]$ 'PATH=$PATHHOSTNAME='/bin/hostname'export USER LOGNAME PS1 PATH HOSTNAME

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

(9). 挂载文件系统

挂载文件系统分为两种:

本地挂载:产品发布时使用这种方式,将文件系统放在 SD 卡或 EMMC 上。网络挂载(NFS):产品开发阶段使用这种方式,将文件系统放在 PC 机上。

开发板 NFS 网络挂载的思路:

PC 机开启 NFS 服务器,配置 NFS 共享的路径,将 rootfs 共享出来。开发板作为 NFS 客户端,去挂载 PC 机共享的目录,完成文件系统的访问。

配置 PC 机 NFS 服务器:

[wbyq@wbyq rootfs]$ sudo vim /etc/exports/home/wbyq/work/rootfs *(insecure,rw,no_root_squash,sync)

编写脚本方便启动 NFS 服务器,可以放在用户目录下:

比如:nfs_restart.sh# 使用脚本需要管理员权限,脚本改权限为可执行service nfs restart   #重启 NFS 服务器service iptables stop #关闭防火墙ifconfig eth0 192.168.10.11  #设置 IP 地址

查看系统网卡名称:ifconfig

(10). 配置虚拟机和 PC Linux 的网络

Linux下BusyBox根文件系统制作Linux下BusyBox根文件系统制作

(11). 运行脚本启动 NFS 服务器

[wbyq@wbyq ~]$ sudo ./nfs_restart.sh[sudo] password for wbyq:关闭 NFS 守护进程:                                        [失败]关闭 NFS mountd:                                          [失败]关闭 NFS quotas:                                          [失败]关闭 NFS 服务:                                            [确定]启动 NFS 服务:                                            [确定]关掉 NFS 配额:                                            [确定]启动 NFS mountd:                                          [确定]正在启动 RPC idmapd:                                      [确定]正在启动 RPC idmapd:                                      [确定]启动 NFS 守护进程:                                        [确定][wbyq@wbyq ~]$ sudo ./nfs_restart.sh关闭 NFS 守护进程:                                        [确定]关闭 NFS mountd:                                          [确定]关闭 NFS quotas:                                          [确定]关闭 NFS 服务:                                            [确定]启动 NFS 服务:                                            [确定]关掉 NFS 配额:                                            [确定]启动 NFS mountd:                                          [确定]正在启动 RPC idmapd:                                      [确定]正在启动 RPC idmapd:                                      [确定]启动 NFS 守护进程:                                        [确定][wbyq@wbyq ~]$

(12). 设置 U-Boot 的环境变量

进入 U-Boot 命令行,设置环境变量。

set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702set bootargs root=/dev/nfs nfsroot=: ip=:::255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702执行示例:TINY4412 # set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702TINY4412 # saveTINY4412 # reset

(13). 挂载成功后重启

开发板重启后正常进入 Linux 命令行:

Linux下BusyBox根文件系统制作Linux下BusyBox根文件系统制作Linux下BusyBox根文件系统制作

以上就是Linux下BusyBox根文件系统制作的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/32071.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
谷歌浏览器打开网页总是白屏如何解决
上一篇 2026年10月6日 22:08:54
c++如何实现多线程编程_c++ std::thread使用方法
下一篇 2025年12月19日 11:25:07

相关推荐

  • 谷歌浏览器打开网页总是白屏如何解决

    谷歌浏览器打开网页总是白屏如何解决谷歌浏览器打开网页总是白屏如何解决谷歌浏览器打开网页总是白屏如何解决谷歌浏览器打开网页总是白屏如何解决

    Chrome白屏通常由硬件加速、扩展程序、缓存或驱动问题引起。首先尝试重启浏览器,若无效则关闭硬件加速功能,排查显卡驱动兼容性;接着清除缓存与Cookie,检查扩展程序冲突,可使用隐身模式测试;若问题持续,尝试重置浏览器设置、创建新用户配置文件,或彻底卸载并重装Chrome,确保系统与驱动更新,最终…

    2026年10月6日 • 用户投稿
    000
  • Linux wc命令怎么使用

    Linux wc命令用于计算字数。 利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。 语法: wc 参数: -c或–bytes或–chars 只显示Bytes数…

    用户投稿 2026年10月6日
    500
  • 基于自定义Comparator实现复杂排序

    基于自定义Comparator实现复杂排序基于自定义Comparator实现复杂排序基于自定义Comparator实现复杂排序基于自定义Comparator实现复杂排序

    本文介绍如何利用Java 8的Comparator接口,结合自定义的Comparator实现对复杂对象的排序。重点讲解了Comparator.comparing(Function, Comparator)方法的使用,并通过示例代码展示了如何将外部传入的Comparator应用于对象属性的比较,最终实…

    2026年10月6日 • 用户投稿
    100
  • win11小组件怎么关闭_Win11彻底禁用小组件功能的方法

    win11小组件怎么关闭_Win11彻底禁用小组件功能的方法win11小组件怎么关闭_Win11彻底禁用小组件功能的方法win11小组件怎么关闭_Win11彻底禁用小组件功能的方法win11小组件怎么关闭_Win11彻底禁用小组件功能的方法

    可通过任务栏设置、组策略、命令提示符、注册表或PowerShell禁用Windows 11小组件;2. 各方法分别适用于不同场景,从隐藏图标到彻底卸载,逐步增强禁用程度。 如果您希望完全禁用 Windows 11 的小组件功能,无论是为了减少干扰还是节省系统资源,都可以通过多种方式实现。以下提供了几…

    2026年10月6日 • 用户投稿
    000
  • 如何将讯飞文档链接分享给他人

    如何将讯飞文档链接分享给他人如何将讯飞文档链接分享给他人如何将讯飞文档链接分享给他人如何将讯飞文档链接分享给他人

    在日常办公与学习过程中,我们经常需要将讯飞文档中的内容分享给他人。那么,如何才能快速生成并发送讯飞文档的分享链接呢?接下来就为你详细讲解整个操作流程。 分享前的准备工作 在开始分享之前,请确保你已经完成文档的撰写或修改,并对内容进行了核对,确认无误且适合对外共享。 具体操作步骤如下 打开目标文档:登…

    2026年10月6日 • 用户投稿
    400
  • Linux raid0如何配置

    Linux raid0如何配置Linux raid0如何配置Linux raid0如何配置Linux raid0如何配置

    raid0配置方法: 1、首先开机,进入启动屏幕后按下“delete”进入bios,找到“存储设置”。 2、然后按下enter进入该选项,在配置部分打开raid选项,随后按F10进行保存。 3、系统重启后按下ctrl+i进入raid界面。 4、在出现的四个选项中点击1选项,随后按下tab或者ente…

    2026年10月6日 • 用户投稿
    700
  • 如何在composer脚本中获取当前项目的根目录

    如何在composer脚本中获取当前项目的根目录如何在composer脚本中获取当前项目的根目录如何在composer脚本中获取当前项目的根目录如何在composer脚本中获取当前项目的根目录

    最推荐通过事件对象获取项目根目录:利用 Event 对象的 $event->getComposer() 获取实例,结合 vendor-dir 配置反推根路径,如 $composer->getConfig()->get(‘vendor-dir’) . &#82…

    2026年10月6日 • 用户投稿
    000
  • 哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址

    哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址

    哔哩哔哩在线视频入口是bilibili.com/,该平台汇聚原创短视频、动画、音乐演出和纪录片等内容,支持弹幕互动、兴趣小组交流及创作者互动,提供多端适配与跨设备同步功能。 直接观看“☞☞☞☞☞点击哔哩哔哩在线视频入口☜☜☜☜☜”; 直接观看“☞☞☞☞☞点击哔哩哔哩B站免费流媒体地址☜☜☜☜☜”; …

    2026年10月6日 • 用户投稿
    000
  • win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出

    win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出

    1、重启Windows资源管理器可释放U盘占用;2、使用资源监视器查找并结束访问设备的进程;3、通过事件查看器定位阻止弹出的PID并结束对应进程;4、更新USB驱动确保硬件通信正常;5、禁用快速启动避免系统未完全释放设备;6、用DiskPart命令移除盘符强制解除逻辑映射,从而安全移除U盘或移动硬盘…

    2026年10月6日 • 用户投稿
    000
  • linux操作之重定向问题怎么解决

    一、概述 (1)重定向命令列表 命令 说明 command > file将输出重定向到 filecommand > file将输出以追加的方式重定向到 filen > file将文件描述符为 n 的文件重定向到 filen >> file将文件描述符为 n 的文件以追加…

    2026年10月6日
    1000
  • 保时捷女销冠称被合成AI不雅视频 本人:坚决追究涉案人员的法律责任

    10月11日,据媒体报道,青岛保时捷销售中心员工牟女士近日公开表示,自己遭遇了由ai技术恶意生成的虚假视频和不当内容的网络诽谤与侮辱,目前已向警方报案,并决心追究相关责任人的民事及刑事责任。 在接受采访时,牟女士透露,此前也曾遭遇过“黄谣”攻击,但此次情况更为严重。相关不实视频持续扩散,浏览量或已超…

    2026年10月6日
    000
  • google浏览器手机版 google浏览器手机版最新入口

    google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口

    google浏览器手机版最新入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来google浏览器手机版最新入口,感兴趣的网友一起随小编来瞧瞧吧! https://www.google.com/chrome/ 界面简洁直观 1、启动浏览器后可以看到干净的主屏幕,没有过多复杂的元素堆砌,搜索…

    2026年10月6日 • 用户投稿
    000
  • linux下静态链接库和动态链接库的区别有哪些

    linux下静态链接库和动态链接库的区别有哪些linux下静态链接库和动态链接库的区别有哪些linux下静态链接库和动态链接库的区别有哪些linux下静态链接库和动态链接库的区别有哪些

    区别:1、动态库的后缀为“.so”,静态库的后缀为“.a”。如果动态函数库发生变化,程序不需要重新编译,但如果静态函数库变化了,则必须重新编译程序。3、相对于静态库,动态库在编译的时候并没有被编译进目标代码中,用户的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较…

    2026年10月6日 • 用户投稿
    000
  • Composer在Mac上通过Homebrew如何安装?

    Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?

    确认Homebrew已安装,若未安装需先执行官方命令;2. 使用brew install php安装PHP并验证版本;3. 运行brew install composer安装工具;4. 执行composer –version确认安装成功,Homebrew自动处理依赖与路径配置。 在Mac…

    2026年10月6日 • 用户投稿
    300
  • 近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍

    近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍

    今天,国家安全部曝光一起不法分子假冒国安的荒诞闹剧:在某南方小城,一公园大门被一群不速之客急促叩响,几名身着迷彩服、衣后印着“执勤”字样的人员闯入保安室。他们自称是国家安全局工作人员,正在执行一项重要任务,需“接管”公园至次日上午。值班保安还没来得及反应,就被集中控制,并被没收手机,失去了与外界的联…

    2026年10月6日 • 用户投稿
    200
  • 基于自定义Comparator创建Comparator的教程

    基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程

    本文旨在解决如何基于已有的 Comparator 创建用于比较自定义类型 IntIdx 的 Comparator。通过使用 Comparator.comparing(Function, Comparator) 方法,可以优雅地将外部传入的比较器应用于 IntIdx 对象的特定属性,并与其他比较规则组…

    2026年10月6日 • 用户投稿
    100
  • Yii框架中的表单验证:确保输入数据正确

    yii框架是一个高效、灵活的web应用程序开发框架。在yii框架中,表单验证是确保用户输入的数据正确的重要部分。本文将介绍yii框架中的表单验证及其相关技术。 一、表单验证概述 表单验证是指在提交数据之前,对输入的数据进行验证,确保数据符合规定的格式和要求。在Yii框架中,表单验证可以通过模型来实现…

    用户投稿 2026年10月6日
    100
  • 如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    明确指定select语句中的列名能提升查询效率,减少数据传输。1.避免使用select *,列出必要列以增强可读性和安全性;2.结合where和join优化查询逻辑,减少全表扫描;3.合理创建索引以加速检索但需权衡写入性能;4.使用explain分析执行计划定位性能瓶颈;5.用coalesce处理n…

    2026年10月6日 • 用户投稿
    100
  • win8系统日志在哪里查看_win8查看系统事件日志方法

    win8系统日志在哪里查看_win8查看系统事件日志方法win8系统日志在哪里查看_win8查看系统事件日志方法win8系统日志在哪里查看_win8查看系统事件日志方法win8系统日志在哪里查看_win8查看系统事件日志方法

    1、通过控制面板进入事件查看器可系统化查找日志,适合图形界面用户;2、通过计算机管理快速访问系统工具,适用于熟悉管理功能者;3、使用Win+R输入eventvwr.msc最快捷,直接启动事件查看器查看系统日志。 如果您需要排查Windows 8系统中的错误或异常行为,查看系统日志是关键步骤之一。系统…

    2026年10月6日 • 用户投稿
    200
  • Java中实现数字敏感的自然排序

    Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序

    本文探讨了Java中字符串(特别是包含数字的字符串,如文件名或版本号)默认排序行为的局限性,即“Test11”会排在“Test2”之前。针对Java标准库Collator缺乏内置数字敏感排序选项的问题,文章介绍了如何利用第三方库alphanumeric-comparator实现人类友好的自然排序,并…

    2026年10月6日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信