【i.MX6ULL】使用buildroot构建根文件系统

文章目录

  • 前言
  • 1、下载源码
  • 2、构建根文件系统
    • 1. 配置buildroot
    • 2. 编译buildroot
    • 3. buildroot根文件系统测试
  • 3、buildroot第三方软件和库的配置
    • 1. 使能 alsa-lib
    • 2. 使能 alsa-utils
  • 4、 buildroot下的busybox配置
    • 1. busybox配置
    • 2. 使能常用命令

前言

本篇文章时参考的正点原子的教程,按照教程给野火的imx6ull mini开发板制作一个根文件系统。
正点原子的教程对于刚入门的是非常友好的,感谢~
话不多说,步入主题吧

1、下载源码

下载路径:https://buildroot.org/download.html
在这里插入图片描述

2、构建根文件系统

1. 配置buildroot

将 buildroot 源码 buildroot-2023.02.8.tar.bz2 拷贝到 ubuntu 中。拷贝完成以后对其进行解压,命令如下:

tar -xzvf buildroot-2023.02.8.tar.gz

解压完成以后就会得到一个名为“buildroot-2023.02.8”的目录,此目录就是我们解压得到的 buildroot 源码,进入到此目录中,此目录下的文件:
在这里插入图片描述
buildroot 和 uboot、Linux kernel 一样也支持图形化配置,输入如下命令即可打开图形化配置界:

make menuconfig

打开以后的图形化配置界面如图所示:
在这里插入图片描述
接下来我们就依次配置 buildroot,配置完成以后就可以进行编译了。

  1. 配置 Target options
    首先配置 Target options 选项,需要配置的项目和其对应的内容如下(“=”号后面是配置项要选择的内容!):

    Target options-> Target Architecture = ARM (little endian)-> Target Binary Format = ELF-> Target Architecture Variant = cortex-A7-> Target ABI = EABIhf-> Floating point strategy = NEON/VFPv4-> ARM instruction set = ARM
    

    如下图:
    在这里插入图片描述
    2. 配置 Toolchain

    此配置项用于配置交叉编译工具链,也就是交叉编译器,这里设置为我们自己所使用的交叉编译器即可。buildroot 其实是可以自动下载交叉编译器的,但是都是从国外服务器下载的,鉴于国内的网络环境,强烈推荐大家设置成自己所使用的交叉编译器。需要配置的项目和其对应的内容如下:

     Toolchain-> Toolchain type = External toolchain-> Toolchain = Custom toolchain //用户自己的交叉编译器-> Toolchain origin = Pre-installed toolchain //预装的编译器-> Toolchain path =/usr/local/arm/gcc-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-> Toolchain prefix = $(ARCH)-linux-gnueabihf //前缀-> External toolchain gcc version = 4.9.x-> External toolchain kernel headers series = 4.1.x-> External toolchain C library = glibc/eglibc-> [] Toolchain has SSP support? (NEW) //选中-> [] Toolchain has RPC support? (NEW) //选中-> [] Toolchain has C++ support? //选中-> [] Enable MMU support (NEW) //选中
    

    Toolchain 下几个比较重要的选项需要说明一下,如下所示:

     Toolchain:设置为 Custom toolchain,表示使用用户自己的交叉编译器。Toolchain origin:设置为 Pre-installed toolchain,表示使用预装的交叉编译器。Toolchain path:设置自己安装的交叉编译器绝对路径!buildroot 要用到。Toolchain prefix:设置交叉编译器前缀,要根据自己实际所使用的交叉编译器来设置,比如我们使用的是 arm-linux-gnueabihf-gcc,因此前缀就是$(ARCH)-linux-gnueabihf,其中 ARCH我们前面已经设置为了 arm。
    

    在这里插入图片描述 3. 配置 System configuration
    此选项用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。需要配置的项目和其对应的内容如下:

    System configuration-> System hostname = fire_imx6ull //平台名字,自行设置-> System banner = Welcome to fire imx6ull //欢迎语-> Init system = BusyBox //使用 busybox-> /dev management = Dynamic using devtmpfs + mdev //使用 mdev-> [*] Enable root login with password (NEW) //使能登录密码-> Root password = 123 //登录密码为 123
    

    在 System configuration 选项中可以配置平台名字,登录密码等信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 4. 配置 Filesystem images
此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

-> Filesystem images-> [] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的话就用 ext3/ext4-> ext2/3/4 variant = ext4 //选择 ext4 格式-> [] ubi image containing an ubifs root filesystem //如果使用 NAND 的话就用 ubifs

5. 禁止译 编译 Linux 内核和 uboot

(默认没有配置,可以不用管)
buildroot 不仅仅能构建根文件系统,也可以编译 linux 内核和 uboot。当配置 buildroot,使能 linux 内核和 uboot 以后 buildroot 就会自动下载最新的 linux 内核和 uboot 源码并编译。但是我们一般都不会使用 buildroot 下载的 linux 内核和 uboot,因为 buildroot 下载的 linux 和 uboot官方源码,里面会缺少很多驱动文件,而且最新的 linux 内核和 uboot 会对编译器版本号有要求,可能导致编译失败。因此我们需要配置 buildroot,关闭 linux 内核和 uboot 的编译,只使用buildroot 来构建根文件系统,首先是禁止 Linux 内核的编译,配置如下:

-> Kernel-> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
接着禁止编译 Uboot,配置如下:

  -> Bootloaders-> [ ] U-Boot //不要选择编译 U-Boot 选项!

在这里插入图片描述

  1. 配置 Target packages
    此选项用于配置要选择的第三方库或软件,比如 alsa-utils、ffmpeg、iperf 等工具。

2. 编译buildroot

配置完成以后就可以编译 buildroot 了,编译完成以后 buildroot 就会生成编译出来的根文件系统压缩包,我们可以直接使用。输入如下命令开始编译:

sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!!

buildroot 编译过程会很耗时。

等待编译完成,编译完成以后就会在 buildroot-2023.02.8/output/images 下生成根文件系统,如图所示:
在这里插入图片描述

3. buildroot根文件系统测试

buildroot 制作出来的根文件系统已经准备好了,接下来就是对其进行测试。先将制作的根文件系统buildroot-2023.02.8/output/images/rootfs.tar 解压到nfs目录下,并改名为:rootfs_fire

tar -xvf output/images/rootfs.tar -C /home/hao/linux/nfs/rootfs_fire/

接着就可以在目录/home/hao/linux/nfs/rootfs_fire/ 看到解压的内容:
在这里插入图片描述
然后启动 uboot,修改 bootargs 环境变量,设置 nfsroot 目录为 Ubuntu 中的buildrootfs 目录命令如下:

setenv bootargs "console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.101.30:/home/hao/linux/nfs/rootfs_fire,proto=tcp rw ip=192.168.101.20:192.168.101.30:192.168.101.1:255.255.255.0::eth1:off"

设置好后重启开发板,输出信息如下:
在这里插入图片描述
登录的用户名就是:root,密码是:123,登录成功后如下:
在这里插入图片描述
可以看出的 buildroot 构建的根文件系统运行基本没有问题,但是这个根文件系统是最简单的,我们并没有在 buildroot 里面配置任何第三方的库和软件,接下来我们就配置buildroot,使能一些常见的第三方软件。

3、buildroot第三方软件和库的配置

1. 使能 alsa-lib

输入 make menuconfig,打开 buildroot 配置界面,配置路径如下:

Target packages-> Libraries-> Audio/Sound-> -*- alsa-lib —> 此配置项下的文件全部选中

在这里插入图片描述

2. 使能 alsa-utils

接下来使能 alsa-utils,路径如下:

Target packages-> Audio and video applications-> [*]alsa-utils -> 此目录下的软件全部选中

在这里插入图片描述
配置完成后,重新编译,编译好后,重新解压到目录:/home/hao/linux/nfs/rootfs_fire/

tar -xvf output/images/rootfs.tar -C /home/hao/linux/nfs/rootfs_fire/

解压完成以后就可以使用 alsa-utils 相关的软件了。

4、 buildroot下的busybox配置

当我们进入到根文件系统后,执行命令 depmod 时,会发现没有该指令,因为还需要配置一下busybox

1. busybox配置

buildroot 在构建根文件系统的时候也是要用到 busybox 的,既然用到了 busybox 那么就涉及到 busybox 的配置。buildroot 会自动下载 busybox 压缩包,buildroot 下载的源码压缩包都存放在/dl 目录下,在 dl 目录下就有一个叫做“busybox”的文件夹,此目录下保存着 busybox 压缩包,如图所示:
在这里插入图片描述 版本为:1.36.1
想要配置buildroot下的busybox的话,执行如下指令

sudo make busybox-menuconfig

输入以后就会打开 buildroot 下的 busybox 配置界面,如图所示:
在这里插入图片描述

2. 使能常用命令

执行指令:sudo make busybox-menuconfig

  1. depmod
    配置路径:
    -> Linux Module Utilities->  [*]depmod //选中
    
    在这里插入图片描述保存好配置后重新编译,重新解压到对应的目录下,启动开发板进入文件系统,就会发现添加的命令已经存在了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式开发中的总线与时钟

总线 AHB总线 AHB的全称是"Advanced High-performance Bus",中文翻译就是"高级高性能总线"。这是一种在计算机系统中用于连接不同硬件组件的总线架构,它可以帮助这些组件之间高效地传输数据和信息。这个总线架构通常用于处理速度较快且对性能要求较高的…

设计模式详解---单例模式

1. 设计模式详解 单例模式是一种创建对象的设计模式,它确保一个类只有一个实例,并提供全局访问点以获取该实例。 在单例模式中,类负责创建自己的唯一实例,并确保任何其他对象只能访问该实例。这对于需要共享状态或资源的情况非常有…

踩坑记录:java连接ssh的问题

目录 概述一、第一个问题解决 二、第二个问题分析解决 三、第三个问题分析解决 第四个问题解决 概述 手里有个CS架构的老系统,服务端要用SSH的方式传文件。没想到写了两天!遇到一堆问题,于是记录下。(老系统真恶心啊!…

浮点数float类型不能用“==” 否知if语句不起作用

浮点数float类型不能用“” 否知if语句不起作用 简介演练 简介 在许多编程语言中,包括Python,浮点数类型(float)的比较是有问题的。浮点数是近似表示的,因此在比较两个浮点数是否相等时可能会遇到精度问题。 比如&am…

Linux(23):Linux 核心编译与管理

编译前的任务:认识核心与取得核心原始码 Linux 其实指的是核心。这个【核心(kernel)】是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制、是否支持 LVM 或 Quota 等文件系统等等&a…

CMA、CNAS软件检测公司分享:压力测试应关注的指标和面临的问题

软件压力测试是容易被传统企业忽视的测试点,用户人数一旦超过预期,极易造成软件产品卡顿、崩溃的情况,不利于用户正常使用,严重影响企业公信力和盈利水平。今天卓码软件测评小编来聊聊压力测试过程中应该关注的指标和会面临的问题…

PLC、RS485、变频器通讯接线图详解

plc与变频器两者是一种包含与被包含的关系,PLC与变频器都可以完成一些特定的指令,用来控制电机马达,PLC是一种程序输入执行硬件,变频器则是其中之一。 但是PLC的涵盖范围又比变频器大,还可以用来控制更多的东西&#x…

【ProcessOn】流程图咏道图Axure自定义元件使用----含流程图案例

目录 一,ProcessOn 1.1 ProcessOn是什么 1.2 ProcessOn应用场景 1.3 流程图 1.4 泳道图简介 1.5 Process网址与界面简介 二,流程图案例 2.1 门诊流程图 2.2 住院流程图 2.3 药房药库流程图 2.4 会议OA流程图 三,Axure自定义元件 …

WEB渗透—PHP反序列化(三)

Web渗透—PHP反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩…

嵌入式培训-数据结构-day23-线性表

线性表 线性表是包含若干数据元素的一个线性序列 记为: L(a0, ...... ai-1, ai, ai1 ...... an-1) L为表名,ai (0≤i≤n-1)为数据元素; n为表长,n>0 时,线性表L为非空表,否则为空表。 线性表L可用二元组形式描述…

diffuser为pipeline设置不用的scheduler

查看默认的schedulers: 使用默认的schedulers生成数据 查看默认scheduler的默认配置,定义了采样器中的相关参数,网上关于DDPM和DDIM的文章较多,可以先去看看这两种schedulers: 修改scheduler,可以用于…

【总结】THUPC2024

队名:消灭智哥 队友:zbh,hrl 比赛前一天组的队。队名源于及其智慧的对面楼的宿管。 复赛就不用想了,就体验一下 ACM 的队伍赛制。 去年一题没切,被队友 szt 单人切 3 带飞。现在 szt 已经是高贵的华附哥了。 今年我…

Linux——进程地址空间与进程控制

进程地址空间与进程控制 文章目录 进程地址空间与进程控制1. 进程地址空间1.1 进程地址空间的引入1.1 进程地址空间的特点1.2 页表1.3 C/C的地址1.4 进程地址空间 页表的优势 2. 进程控制2.1 进程创建2.1.1 写时拷贝 2.2 进程终止2.2.1 进程退出码2.2.2 异常信号码2.2.3 errno…

前端对接 —— 周末

1.点击校验 点击校验 宇哥 记得过滤 不能校验的数据(我后端还要检验吗?) 2.前端数据对接 这个可以吗? 这种的可以吗?

go原生http开发简易blog(一)项目简介与搭建

文章目录 一、项目简介二、项目搭建前置知识三、首页- - -前端文件与后端结构体定义四、配置文件加载五、构造假数据- - -显示首页内容 代码地址:https://gitee.com/lymgoforIT/goblog 一、项目简介 使用Go原生http开发一个简易的博客系统,包含一下功能…

使用堆排序算法

使用堆排序算法&#xff08;升序&#xff0c;建大堆顶&#xff09;完善此程序。&#xff08;注&#xff1a;截图为堆排序初始化后的大堆顶结果&#xff0c;详见源代码&#xff09; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define N 10void input(int a[], …

【react.js + hooks】基于事件机制的跨组件数据共享

跨组件通信和数据共享不是一件容易的事&#xff0c;如果通过 prop 一层层传递&#xff0c;太繁琐&#xff0c;而且仅适用于从上到下的数据传递&#xff1b;建立一个全局的状态 Store&#xff0c;每个数据可能两三个组件间需要使用&#xff0c;其他地方用不着&#xff0c;挂那么…

MySQL日志管理,备份与恢复

备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 而备份、恢复中&#xff0c;日志起到了很重要的作用 MySQL日志管理是数据库管理中的一个重要方面&#xff0c;它可以用于诊断问题、监控性能、进行故障恢复等。MySQL主要有几种…

【合成数字】合成类游戏-uniapp项目开发流程详解

以前玩过2048游戏&#xff0c;从中发现规律&#xff0c;想到跟合成类游戏相似&#xff0c;知道为什么很相似吗&#xff0c;在这里&#xff0c;做一个数字合成游戏玩玩吧&#xff0c;感兴趣的话可以看看&#xff0c;这里给大家讲一讲数字合成游戏的开发过程。 文章目录 创建项目…

Pandas-DataFtame的索引与切片(第3讲)

Pandas-DataFtame的索引与切片(第3讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…