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

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

3天内不再提示

描述buildroot中支持的三种系统初始化方式

嵌入式小生 来源:嵌入式小生 作者:iriczhao 2022-11-02 09:05 次阅读

一、导读

本文描述buildroot中支持的三种系统初始化方式以及buildroot在实际构建过程中是如何工作的。

二、系统初始化的三种方式

我们已经知道,在linux内核启动后期会尝试加载用户空间的init程序,init程序是由内核启动的第一个用户空间程序(PID为1),该程序负责启动用户空间的服务和程序(例如:Web服务、图形应用程序、其他网络服务等)。

在使用buildroot构建linux根文件系统时,其支持三种不同类型的初始化系统,可以在“System configuration”选项下的“Init system”选择项中进行选择:

poYBAGNhwm6AJZqMAACWQzNKlWU951.jpg

(1)第一种是“BusyBox”

BusyBox 实现了基本的 init 程序,对于大多数嵌入式系统而言,选择这种方式已经足够了。启用“BR2_INIT_BUSYBOX”将确保 BusyBox 会生成并安装其 init 程序,这也是 Buildroot 的默认解决方案。

BusyBox init程序会在启动时去读取/etc/inittab文件。除了挂载一些重要的文件系统之外,默认的 inittab 的主要工作是启动/etc/init.d/rcS shell脚本,并启动一个 getty 程序(用于提供登录提示)。

(2)第二种是“systemV”

该种解决方案使用传统的sysvinit程序,位于Buildroot目录package/sysvinit中,在Upstart或Systemd出现之前,这是大多数桌面Linux发行版使用的解决方案。Sysvinit同样使用inittab文件(其语法与 BusyBox 中的语法略有不同)。与此init解决方案一起安装的默认inittab 位于package/sysvinit/inittab中。

(3)第三种是“systemd”

systemd是用于Linux的新一代init系统。它的功能远远超过传统的init程序:强大的并行处理能力、使用socket和D-Bus激活启动服务、按需启动守护程序、使用Linux控制组跟踪进程、支持对系统状态进行快照和还原等等。

systemd在相对复杂的嵌入式系统上很有用,例如:需要D-Bus和服务之间相互通信的系统。值得注意的是systemd会带来了大量的大型依赖项,例如dbus、udev等。

buildroot如何工作

本小节描述buildroot的工作机制。

在《buildroot使用笔记-01 | 常规使用步骤》一文中,对buildroot的目录结构进行了分析,可以明确知道:buildroot基本上是一组Makefile文件,这些文件可以对所需软件进行下载、配置和编译。除此之外,buildroot中还包含了各种软件包的补丁:主要是那些涉及交叉编译工具链的软件包,例如:gcc、binutils和uClibc等。

对于软件包来说,每个软件包基本上只有一个Makefile文件,它们以.mk扩展名进行命名。在buildroot中,Makefile分成许多不同的部分:

toolchain/目录包含与交叉编译工具链相关的所有软件的Makefile和相关文件:binutils、gcc、gdb、kernel-header 和 uClibc。

arch/目录包含 Buildroot 支持的所有处理器体系架构的定义。

package/目录包含所有用户空间的工具和库(Buildroot 可以将它们编译并添加到目标根文件系统)的 Makefile 和相关文件,每个软件包都有一个子目录。

linux/目录包含 Linux 内核的 Makefile 和相关文件。

boot/目录包含 Buildroot 支持的 Bootloader 的 Makefile 和相关文件。

system/目录包含对系统集成的支持,例如目标文件系统框架 skeleton 和 init 系统的选择。

fs/目录包含与生成目标根文件系统镜像有关的软件的 Makefile 和相关文件。

每个目录至少包含2个文件:

xxx.mk 是用于下载、配置、编译和安装软件包的Makefile。

Config.in 是配置工具描述文件的一部分,用于描述与软件包相关的选项。

在buildroot配置完成后,主Makefile执行的具体操作步骤如下:

(1)创建所有的输出目录:staging、target、build 等(默认在output/目录中,我们可以使用“O=”来指定另一个路径)。

(2)生成工具链目标。当使用内部工具链时,这意味着buildroot会生成交叉编译工具链。当使用外部工具链时,这意味着将检查外部工具链的功能并将其导入到Buildroot环境中。

(3)生成TARGETS变量中列出的所有目标。该变量由所有组件的 Makefile 填充。生成这些目标时将生成用户空间软件包(库、程序集)、内核、引导加载程序的编译以及根文件系统镜像,在该过程中,会联网命中、下载所需要的软件包,然后对其进行编译构建。在编译构建过程中,单个操作步骤一般会显示对应的下载进度提示,过程进度提示等。在执行对应的操作时,还会有相应的提示,类似于下图所示的信息

pYYBAGNhwoeACh3aAAHDSOyHmM8301.jpg






审核编辑:刘清

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

    关注

    10

    文章

    460

    浏览量

    40018
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21609
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3349

原文标题:buildroot使用笔记-03 | 系统初始化的三种方式和buildroot的工作方式

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread自动初始化详解

    初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行,非常的方便。 1 普通初始化 前面也讲了,我们在写单片机的程序时,需要对硬件进行
    的头像 发表于 06-25 21:38 1.1w次阅读
    RT-Thread自动<b class='flag-5'>初始化</b>详解

    自动初始化机制原理详解

    自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。这篇文章就来探索一下其中的奥秘, 简单理解其原理!
    的头像 发表于 12-16 09:33 954次阅读
    自动<b class='flag-5'>初始化</b>机制原理详解

    PL-232驱动--三种系统

    PL-232驱动--三种系统,适用于Windows7,WindowsXp,Windowsserver
    发表于 01-22 10:55

    STM32支持三种启动方式

    正文不得不提的启动方式STM32支持三种启动方式 1. FLASH启动 2. SRAM启动 3. 系统存储器启动这
    发表于 08-23 06:03

    【原创分享】变量的初始化技巧

    初始化的时候可以使用参数列表。这两形式比较类似,因此结构体在初始化阶段和数组的情况是相似的。结构体的两初始化
    发表于 09-08 15:28

    基于RK3399 kernel中的时钟系统初始化

    、复用、分频、倍频等功能。RK3399的时钟系统主体是clk-rk3399.c这个文件。初始化方式kernel中的时钟初始化代码位于驱动初始化
    发表于 06-30 17:36

    RT-Thread系统初始化与启动流程详细描述

    的时候,在使用前都必须先初始化, 通常的做法是在主程序运行前手动添加调用初始化函数。 而 RT-Thread 提供了另一低耦合高内聚的初始化方式
    发表于 08-25 15:15

    LINUX系统引导和初始化-LINUX内核解读

    Linux 的系统引导和初始化 ----------Linux2.4.22内核解读之一 一、 系统引导和初始化概述 相关代码(引导扇区的程序及其辅助程序,以 x86体系为例): \li
    发表于 11-03 22:31 53次下载

    RDA1846S初始化设置

    RDA1846S初始化设置RDA1846S初始化设置RDA1846S初始化设置
    发表于 01-15 17:08 0次下载

    PL-232驱动--适用于三种系统

    PL-232驱动--适用于三种系统
    发表于 01-07 21:01 0次下载

    8253初始化程序分享_8253应用案例

    本文首先介绍了8253概念及8253各通道的工作方式,其次详细介绍了8253初始化要求及编程,最后用一个例子介绍了8253的初始化程序。
    发表于 05-23 15:52 2.2w次阅读
    8253<b class='flag-5'>初始化</b>程序分享_8253应用案例

    霍尔无刷电机如何进行程序初始化

    霍尔无刷电机这种系统在进行程序初始化已经预先设定好一些变量,因此随着系统初始化进行,这些变量也开始进入了初始化过程中,而且这个过程中也设计
    的头像 发表于 10-15 17:29 7645次阅读

    压供电系统三种运行方式

    我国低压供电系统三种运行方式:国低压供电系统主要有三种运行方式:TN
    发表于 05-26 17:06 1w次阅读
    压供电<b class='flag-5'>系统</b>的<b class='flag-5'>三种</b>运行<b class='flag-5'>方式</b>

    FPGA的三种配置方式详解

    FPGA器件有类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。AS由FPGA器件引导配置操作过程
    发表于 07-09 10:53 8167次阅读

    Armlinux内核移植及系统初始化过程分析

    Armlinux内核移植及系统初始化过程分析说明。
    发表于 04-06 15:53 11次下载