Yocto学习笔记(三)配置Busybox

1 Busybox介绍

BusyBox 是一个开源的、轻量级的 Unix 工具箱,它集成了许多标准 Unix 工具的精简版本。它被设计用来运行在资源受限的环境中,例如嵌入式系统或者启动盘。BusyBox 将多个标准 Unix 实用工具整合到一个可执行文件中,这些工具包括文件操作、进程管理、网络配置、文本处理等。

BusyBox 的主要特点包括:

  1. 精简性:BusyBox 的设计理念是在小型的可执行文件中集成尽可能多的功能,以节省系统资源。
  2. 可配置性:可以根据需要选择性地编译包含或排除特定功能,以满足不同系统的要求。
  3. 可移植性:BusyBox 可以运行在各种不同的 POSIX 系统上,包括 Linux、BSD、Solaris 等。
  4. 开源性:BusyBox 是自由开源软件,采用 GPL 授权协议发布。

在嵌入式 Linux 系统中,BusyBox 被广泛应用于构建小型和高效的根文件系统。通过将多个功能整合到一个可执行文件中,BusyBox 可以显著减小系统的磁盘占用和内存占用。此外,BusyBox 也被用作启动脚本或者系统初始化脚本的工具箱,用于配置系统和启动服务。

总的来说,BusyBox 是一个功能强大、高效且灵活的工具箱,适用于各种嵌入式和资源受限的环境,为系统提供了基本的 Unix 命令行工具和脚本功能。

2 Yocto与busybox

嵌入式软件开发中,BusyBox 是一个轻量级的 Unix 工具箱,它集成了许多标准 Unix 实用工具的精简版本。通过在 Yocto 中配置 BusyBox,可以在嵌入式 Linux 系统中实现更小的文件系统和更低的资源消耗。

要在 Yocto 中使用 BusyBox,需要在 Yocto 的配置文件中将其包含到系统中,并指定要包含的 BusyBox 工具。下面是一些配置 BusyBox 的一般步骤:

  1. 打开 local.conf 或者其他配置文件,通常位于 /build/conf/ 目录下。
  2. 确保 busybox 被添加到 CORE_IMAGE_EXTRA_INSTALL 变量中,以确保 BusyBox 被包含在根文件系统中。
  3. 确保 BusyBox 中包含所需的工具。可以通过设置 BUSYBOX_FEATURES 变量来指定要包含的功能。例如,BUSYBOX_FEATURES 可以包含 "feature1 feature2 ..." 的字符串。
  4. 重新构建你的 Yocto 映像,以包含 BusyBox。

在 BusyBox 配置中,你可以指定要包含的特定工具,以及在编译时要启用的功能。通过精心选择这些选项,可以确保 BusyBox 在系统中提供所需的功能,同时保持最小的系统资源占用。

3 Yocto配置busybox

使用busybox作为linux系统启动管理器,在distro/poky-customized.conf中添加如下代码将busybox作为默认的系统启动管理器,这样我们就可以通过编辑rcS,rcK文件来决定系统启动后和关机前执行的操作

bash 复制代码
# Use busybox as default init manager, config customized rcS, rcK
VIRTUAL-RUNTIME_init_manager = "busybox"

自定义的metalayer下的recipes-core文件夹中有imagesbusybox两个文件夹,在busybox文件夹中添加busybox_%.bbappendbusybox-inittab_%.bbappend文件,files中添加busybox-initutils.cfgbusybox-mdev.cfginittabrcKrcS文件
.
├── busybox
│ ├── busybox_%.bbappend
│ ├── busybox-inittab_%.bbappend
│ └── files
│ ├── busybox-initutils.cfg
│ ├── busybox-mdev.cfg
│ ├── inittab
│ ├── rcK
│ └── rcS
└── images
└── core-image-customized.bb

其中,files就是我们需要自定义配置的一些文件,用他们替代poky中busybox中的默认配置文件,因此在bbappend文件中,只需要在SRC_URI中添加这些文件即可,如下:

bash 复制代码
SRC_URI += " \
	file://busybox-initutils.cfg \
	file://busybox-mdev.cfg \
	file://rcS \
	file://rcK \
	"
  SRC_URI += " \
    file://inittab \
    "

3.1 inittab文件

inittab 是 Unix 和类 Unix 操作系统中的一个配置文件,用于指定系统引导时初始化进程(init)启动时应该执行的程序。该文件通常位于 /etc 目录下。

在 Linux 系统中,inittab 文件的作用是定义系统启动时要执行的初始化任务和服务,以及控制系统如何处理不同的运行级别(runlevel)。

inittab 文件的内容通常以行为单位组织,每行定义了一个任务或者服务的启动方式。每行的格式通常为:

bash 复制代码
id : runlevels : action : process

其中:

  • id 是一个唯一的标识符,用于表示要执行的任务或服务。
  • runlevels 指定了在哪些运行级别下要执行该任务或服务。运行级别是指系统的不同状态,通常用数字表示(如0、1、2、...、6),每个运行级别对应一组系统服务的状态。可以使用单个运行级别或者运行级别范围来指定,用逗号分隔。
  • action 指定了当系统运行到指定的运行级别时要执行的动作,常见的动作包括:
    ○ respawn:表示如果进程意外终止,则立即重新启动。
    ○ wait:表示等待指定的进程结束后再执行后续操作。
    ○ once:表示只执行一次,不会自动重新启动。
    ○ boot:表示在系统引导时执行。
  • process 是要执行的进程或者命令。

例如,一个简单的 inittab 文件可能如下所示:

bash 复制代码
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty -L tty1 9600 vt100
::shutdown:/etc/init.d/rcK

这个文件表示在系统启动时执行/etc/init.d/rcS脚本(sysinit 动作),并在终端 tty1 上启动一个 getty 进程(respawn 动作),在系统结束时执行/etc/init.d/rcK 脚本
inittab 文件的内容可以根据需要进行自定义和调整,以满足特定系统的要求。

3.2 rcS文件

rcS 是一个用于系统初始化的脚本文件,在许多 Linux 系统中都可以找到。它通常位于 /etc/init.d 目录下,是在系统引导过程中被执行的一个重要的初始化脚本。

rcS 脚本的作用包括但不限于以下几个方面:

  1. 系统初始化任务的执行:rcS 脚本负责执行系统引导时需要进行的初始化任务,例如加载驱动程序、挂载文件系统、启动网络等。这些任务是在系统引导过程中必须要完成的操作,确保系统能够正常运行起来。
  2. 启动和管理系统服务:在一些 Linux 发行版中,rcS 脚本也负责启动和管理系统的各种服务。它可能会根据配置文件中的设置,启动指定的服务进程,并在需要时监控和重新启动这些服务。
  3. 设置环境变量和系统参数:rcS 脚本可能会设置一些系统级的环境变量和参数,以确保系统在运行时具有正确的配置和环境。
  4. 执行其他初始化任务:根据具体的系统配置和需求,rcS 脚本可能还会执行一些其他的初始化任务,例如清理临时文件、设置时钟等。

rcS 脚本在系统引导过程中是在早期阶段被执行的,它的作用是确保系统能够顺利启动并达到基本可用状态。因此,rcS 脚本的编写和配置非常重要,直接关系到系统的启动过程和稳定性。rcS的例子如下:

bash 复制代码
#!/bin/sh

# Start all init scripts in /etc/rcS.d and /etc/rc5.d
# executing them in numerical order.
#
echo "<< rcS running scripts in /etc/rcS.d >>"

for i in /etc/rcS.d/S??* /etc/rc5.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
	*.sh)
	    # Source shell script for speed.
	    (
		trap - INT QUIT TSTP
		set start
		. $i
	    )
	    ;;
	*)
	    # No sh extension, so fork subprocess.
	    $i start
	    ;;
    esac
done

ifconfig usb0 192.168.8.88

start-stop-daemon -S -b -n your-app -a /usr/bin/your-app

start-debug-tools

3.3rcK文件

rcK 文件通常是 Linux 系统中的一个脚本文件,用于在系统关机或者重启时执行一些操作。它位于 /etc/init.d 目录下,是系统引导过程中的一个重要组成部分。

在 Linux 中,rcK 脚本的作用主要包括以下几个方面:

  1. 停止系统服务:rcK 脚本负责停止系统中正在运行的服务。在系统关机或者重启时,需要确保所有的服务都能够正常停止,以避免数据丢失或者系统资源泄露等问题。
  2. 卸载文件系统:rcK 脚本可能会卸载一些临时挂载的文件系统,释放系统资源并确保数据的完整性。
  3. 执行其他关机前的清理操作:根据系统的配置和需求,rcK 脚本可能会执行一些其他的关机前的清理操作,例如关闭网络连接、保存系统状态等。

rcK 脚本在系统关机或者重启时是在最后阶段被执行的,它的作用是确保系统能够安全地关闭并保存状态。因此,rcK 脚本的编写和配置非常重要,直接关系到系统的关机过程和数据的完整性。rcK的一个例子如下:

bash 复制代码
#!/bin/sh

# Stop all init scripts in /etc/rc6.d
# executing them in numerical order.
#
echo "<< rcK stop all init scripts in /etc/rd6.d >>"

for i in /etc/rc6.d/K??*; do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
	*.sh)
	    # Source shell script for speed.
	    (
		trap - INT QUIT TSTP
		set stop
		. $i
	    )
	    ;;
	*)
	    # No sh extension, so fork subprocess.
	    $i stop
	    ;;
    esac
done
相关推荐
Bearnaise10 分钟前
PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)
论文阅读·笔记·python·深度学习·机器学习·计算机视觉·3d
Zfox_11 分钟前
【Linux】进程信号全攻略(二)
linux·运维·c语言·c++
安於宿命16 分钟前
【Linux】简易版shell
linux·运维·服务器
黄小耶@27 分钟前
linux常见命令
linux·运维·服务器
叫我龙翔28 分钟前
【计网】实现reactor反应堆模型 --- 框架搭建
linux·运维·网络
古驿幽情31 分钟前
CentOS AppStream 8 手动更新 yum源
linux·运维·centos·yum
BillKu32 分钟前
Linux(CentOS)安装 Nginx
linux·运维·nginx·centos
BillKu35 分钟前
Linux(CentOS)yum update -y 事故
linux·运维·centos
a2663789640 分钟前
解决yum命令报错“Could not resolve host: mirrorlist.centos.org
linux·运维·centos
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节