Linux第59步_“buildroot”构建根文件系统第1步_生成rootfs.tar和rootfs.ext4以及通过nfs下载测试

news2025/3/14 0:55:56

学习安装“buildroot”,通过配置构建根文件系统,编译生成rootfs.tar和rootfs.ext4,以及通过nfs下载测试。

1、了解学习目的:

1)、获取“buildroot”安装包;

2)、使用“buildroot”构建根文件系统;

3)、rootfs.tar和rootfs.ext4文件路径:

/home/zgq/linux/buildroot/buildroot-2020.02.6/output/images

nfs挂载路径:/home/zgq/linux/nfs/rootfs

挂载时,需要先删除rootfs目录下的所有文件和文件夹,然后将rootfs.tar

拷贝“/home/zgq/linux/nfs/rootfs”,再使用“tar -vxf rootfs.tar”解压得到nfs目录下的rootfs,我们就可以通过nfs将文件下载到开发板测试。

4)、设置开发板密码和取消开发板密码

buildroot不仅集成了busybox,而且还集成了各种常见的第三方库和软件

2、查找我们已经安装的交叉编译工具链的路径

打开终端

输入“cd /usr/local/arm/回车

输入“ls回车

输入“cd gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/回车

输入“ls回车

输入“cd arm-none-linux-gnueabihf/回车

输入“pwd回车”查询路径

记录交叉编译工具的路径:

/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf

关闭打开的终端。

3、获取buildroot”源码

文件路径:“程序源码\07、Buildroot源码/buildroot-2020.02.6.tar.bz2”。

1)、打开终端

输入“ls 回车

输入“cd linux/回车”,切换到“linux”目录下

输入“ls 回车”,例举“linux”目录下的所有文件和文件夹

输入“mkdir buildroot回车”,创建“buildroot”目录

输入“ls 回车”,例举“linux”目录下的所有文件和文件夹

2)、使用“FileZilla”将“buildroot-2020.02.6.tar.bz2”拷贝到“buildroot”目录。

3)、输入“cd buildroot/回车”,切换到“buildroot”目录下

输入“ls 回车”,例举“buildroot”目录下的所有文件和文件夹

输入“tar -vxjf buildroot-2020.02.6.tar.bz2回车”,解压

4)、输入“ls 回车”,例举“buildroot”目录下的所有文件和文件夹

输入“cd buildroot-2020.02.6/回车”,切换到“buildroot-2020.02.6”目录

输入“ls 回车”,例举“buildroot-2020.02.6”目录下的所有文件和文件夹

buildroot-2020.02.6”目录下的文件和文件夹就是我们需要的源码包。

4、配置Target options选项

1)、输入“make menuconfig回车”,打开“buildroot的图形化配置界面

如果出现错误,则重新启动虚拟机。

2)、按“回车键”,移动向下光标至“Target Architecture”,得到下图:

3)、按“回车键”,准备修改架构“Target Architecture”,得到下图:

4)、移动“向下光标键”至“ARM(little endian)”,按下“回车键”表示“选中”,并返回到“Target Architecture”,见下图:

5)、移动“向下光标键”至“Target Binary Format(ELF)”,见下图:

6)、按“回车键”,准备修改“ELF”,得到下图:

7)、按“回车键”,返回到“Target Binary Format

移动“向下光标键”至“Target Architecture Variant”,见下图:

8)、按“回车键”,准备修改CPU架构“Target Architecture Variant”,得到下图:

9)、移动“向下光标键”至“cortex-A7”,按下“回车键”表示“选中”,并返回到“Target Architecture Variant”,见下图:

10)、移动“向下光标键”至“Target ABI”,见下图:

11)、按“回车键”,准备修改CPU架构“Target ABI”,得到下图:

12)、移动“向下光标键”至“EABIhf ”,CPU支持硬件浮点数,按下“回车键”表示“选中”,并返回到“Target ABI (EABIhf)”,见下图:

13)、移动“向下光标键”至“Floating point strategy”,见下图:

14)、按“回车键”,准备修改浮点策略“Floating point strategy”,移动“向下光标键”至“NEON/VFPv4 ”,见下图:

15)、按下“回车键”表示“选中”,并返回到“Floating point strategy”,见下图:

16)、移动“向下光标键”至“ARM instruction set”,见下图:

17)、按“回车键”,准备修改浮点策略“ARM instruction set”,移动“向下光标键”至“ARM”,见下图:

18)、按下“回车键”表示“选中”,并返回到“ARM instruction set”,见下图:

5、配置Toolchain(工具链)

1)、按两次“ESC键”,移动向下光标键至“Toolchain”,见下图:

2)、按“回车键”,准备修改“Toolchain”,移动“向下光标键”至“Toolchain type”,见下图:

3)、按“回车键”,准备修改“Toolchain type”,移动“向下光标键”至扩展工具链“External toolchain”,见下图:

4)、按下“回车键”表示“选中”,并返回到“Toolchain type”,见下图:

5)、移动“向下光标键”至“Toolchain (Arm ARM 2019.12)”,见下图:

6)、按“回车键”,准备修改“Toolchain (Arm ARM 2019.12)”,移动“向下光标键”至客户工具链“Custom toolchain”,见下图:

7)、按下“回车键”表示“选中”,并返回到“Toolchain (Custom toolchain) ”,见下图:

8)、移动“向下光标键”至工具链下载原点“Toolchain origin”,见下图:

9)、按“回车键”,准备修改“Toolchain origin”,移动“向下光标键”至预装工具链“Pre-installed toolchain”,见下图:

10)、按下“回车键”表示“选中”,并返回到“Toolchain origin”,见下图:

11)、移动“向下光标键”至工具链下载原点“Toolchain path”,见下图:

12)、按“回车键”,

13)、输入内容如下:

/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf

见下图:

14)、移动“向下光标键”至“Ok”,按“O”键退出,见下图:

15)、移动“向下光标键”至“Toolchain prefix”,见下图:

16)、按“回车键”,得到下图:

17)、将“$(ARCH)-linux”修改为“$(ARCH)-none-linux-gnueabihf

18)、移动“向下光标键”至“Ok”,按“O”键退出,见下图:

19)、移动“向下光标键”至“External toolchain kernel headers series”,“gcc version”不用管,见下图:

20)、按“回车键”,移动“向下光标键”至“4.20.x”,见下图:

得到下图:

21)、按“回车键”选中,得到下图:

22)、移动“向下光标键”至“External toolchain C library”,见下图:

23)、按“回车键”,移动“向下光标键”至“glibc/eglibc”,见下图:

24)、按“回车键”选中,得到下图:

25)、移动“向下光标键”至“Toolchain has SSP support?”,按“Y”,见下图:

26)、移动“向下光标键”至“Toolchain has SSP strong support?”,按“Y”,见下图:

27)、移动“向下光标键”至“Toolchain has RPC support?”,按“Y”,见下图:

28)、移动“向下光标键”至“Toolchain has C++ support?”,按“Y”,见下图:

29)、移动“向下光标键”至“Toolchain has OpenMP support?”支持多核,按“Y”,见下图:

30)、移动“向下光标键”至“Enable MMU support”,按“Y”,见下图:

至此,交叉编译器配置完成了。

6、配置System configuration(系统配置)

1)、按两次“ESC键”,移动向下光标键至“System configuration”,见下图:

2)、按“回车键”选中,得到下图:

3)、移动“向下光标键”至“System hostname”,见下图:

4)、按“回车键”,得到下图:

5)、将开发板的名字“buildroot”修改“ATK-stm32mp1”,见下图:

6)、移动“向下光标键”至“Ok”,按“O”保存,得到下图:

7)、移动“向下光标键”至“System banner”,见下图:

8)、按“回车键”,得到下图:

9)、将欢迎语“Welcome to Buildroot”修改为“Welcome to alientek STM32MP157”,见下图:

10)、移动“TAB键”至“Ok”,按“O”保存,得到下图:

11)、移动“向下光标键”至“Passwords encoding”,不用修改,见下图:

12)、移动“向下光标键”至“Init system”,不用修改,使用“BusyBox”,见下图:

13)、移动“向下光标键”至“/dev management”,见下图:

14)、按“回车键”,移动向下光标键至“Dynamic using devtmpfs + mdev”,得到下图:

15)、按“回车键”,得到下图:

16)、使用buildroot配置和取消密码

①、设置密码

移动“向下光标键”至“Enable Root login with password”,按“Y”,移动向下光标键至“Root password”设置开发板启动密码为“123456”,见下图:

②、取消密码

移动“向下光标键”至“Enable Root login with password”,按“Y”,移动向下光标键至“Root password”,见下图:

按“回车键”进入设置,使用“BACKSPACE键”删除密码,再按“回车键”退出配置,这样就可以取消密码配置了。

注意:不能把光标移到“Ok”上按“O”键退出,这样做,builtroot会认为你输入了密码

7、配置Filesystem images(文件系统镜像)

1)、按两次“ESC键”,移动向下光标键至“Filesystem images”,得到下图:

2)、按“回车键”,移动向下光标键至“ext2/3/4 root filesystem”,按“Y”,得到下图:

3)、移动“向下光标键”至“ext2/3/4 variant”,得到下图:

4)、按“回车键”,移动向下光标键至“ext4”,得到下图:

5)、按“回车键”,得到下图:

6)、移动“向下光标键”至“exact size”,得到下图:

“回车键”,得到下图:

7)、设置为1G,按“TAB键”至“Ok”,再按“O”保存。

8、禁止编译Linux内核和uboot

1)、按两次“ESC键”,移动光标键至“Kernel”,见下图:

2)、按“回车键”,按“N”,见下图:

3)、按两次“ESC键”,得到下图:

9、禁止编译Uboot

1)、移动光标至“Bootloaders”,得到下图:

2)、按“回车键”,移动向下光标键至“U-Boot”,按“N”,见下图:

3)、按两次“ESC键”,得到下图:

10、配置Target packages

1)、移动“向上光标键”至“Target packages

2)、按“回车键”,移动向下光标键至“System tools”,见下图:

3)、按回车键”,移动向下光标键至“kmod”,按“Y”,见下图:

4)、按“ESC键”,直至出现下面的界面

5)、按“Y”,先保存

11、备份“buildroot配置”

文件路径“/zgq/linux/buildroot/buildroot-2020.02.6/configs/stm32mp1_atk_defconfig

1)、再次输入“make menuconfig回车

2)、移动向右光标键至“Save”,按回车键,得到下图:

3)、将“/zgq/linux/buildroot/buildroot-2020.02.6/.config”修改为

./configs/stm32mp1_atk_defconfig”,见下图:

4)、移动向下光标键至“Ok”,按“O”保存;

我们将配置项命名为“stm32mp1_atk_defconfig”,以后要重新配置buildroot的话就可以直接输入“make stm32mp1_atk_defconfig回车”,显示“configuration written to /home/zgq/linux/buildroot/buildroot-2020.02.6/.config”,表示用“stm32mp1_atk_defconfig”覆盖“.config”,再次输入“make menuconfig回车”,就可以继续配置了。

5)、输入“ls”,查看“buildroot-2020.02.6”目录下的所有文件和文件夹

输入“cd configs/回车”,切换到“configs”目录

输入“ls stm*回车”,查看“configs”目录下的所有文件和文件夹

发现保存的文件“stm32mp1_atk_defconfig

11、编译“buildroot”

1)、输入“cd ..”返回到“buildroot-2020.02.6”目录

输入“ls”,查看“buildroot-2020.02.6”目录下的所有文件和文件夹

输入“make -j8”,编译“buildroot,-j8表示采用8线程编译

注意:

如果我们是第1次安装“buildroot”,则使用sudo make -j8”编译“buildroot”,否则会告诉我们没有权限,不知到为什么会这样?重新安装,就可用“make -j8

2)、查看编译结果:

输入“ls”,查看“buildroot-2020.02.6”目录下的所有文件和文件夹

输入“cd output/”切换到“output”目录

输入“ls”,查看“output”目录下的所有文件和文件夹

输入“cd images/”切换到“images”目录

输入“ls”,查看“images”目录下的所有文件和文件夹

3)、打开第2个终端

输入“ls

输入“cd linux/”,切换到“linux”目录

输入“ls

输入“cd nfs/”,切换到“nfs”目录

输入“ls回车

输入“cd rootfs回车”,切换到“rootfs”目录

输入“ls回车

输入“sudo rm * -rf回车”,删除“rootfs”目录下所有的文件和文件夹,前面已经做了备份

输入“ls回车

输入“cd ..回车”,返回到“nfs”目录

输入“ls回车

4)、回到第1个打开的终端

输入“cp rootfs.tar /home/zgq/linux/nfs/rootfs回车”

将“/home/zgq/linux/buildroot/buildroot-2020.02.6/output/images”目录下的“rootfs.tar”拷贝到“/home/zgq/linux/nfs/rootfs”目录中

5)、回到第2个打开的终端

输入“cd rootfs/回车

输入“ls回车

输入“tar -vxf rootfs.tar”,解压

6)、输入“ls回车

输入“rm rootfs.tar回车”,删除压缩包

输入“ls回车

得到buildroot生成的根文件系统。

12、编译buildroot生成的根文件系统。

从网络启动测试

1)、设置密码运行结果

 mmcblk1: p1 p2 p3

stm32-dwmac 5800a000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx

IP-Config: Complete:

     device=eth0, hwaddr=00:04:9f:04:d2:36, ipaddr=192.168.2.178, mask=255.255.255.0, gw=192.168.2.1

     host=192.168.2.178, domain=, nis-domain=(none)

     bootserver=192.168.2.180, rootserver=192.168.2.180, rootpath=

ALSA device list:

  No soundcards found.

VFS: Mounted root (nfs filesystem) on device 0:16.

devtmpfs: mounted

Freeing unused kernel memory: 1024K

Run /sbin/init as init process

Starting syslogd: OK

Starting klogd: OK

Running sysctl: OK

Starting mdev... OK

modprobe: can't change directory to '/lib/modules': No such file or directory

Saving random seed: OK

Starting network: ip: RTNETLINK answers: File exists

FAIL

Welcome to zgq STM32MP157

ATK-stm32mp1 login:

输入“root回车

输入密码“123456回车

输入“cd /”,切换到根目录

输入“ls”,可以执行了

2)、取消密码运行结果:

 mmcblk0: p1

dwmac4: Master AXI performs any burst length

stm32-dwmac 5800a000.ethernet eth0: No Safety Features support found

stm32-dwmac 5800a000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported

stm32-dwmac 5800a000.ethernet eth0: registered PTP clock

stm32-dwmac 5800a000.ethernet eth0: configuring for phy/rgmii-id link mode

mmc1: new high speed MMC card at address 0001

mmcblk1: mmc1:0001 8GTF4R 7.28 GiB

mmcblk1boot0: mmc1:0001 8GTF4R partition 1 4.00 MiB

mmcblk1boot1: mmc1:0001 8GTF4R partition 2 4.00 MiB

mmcblk1rpmb: mmc1:0001 8GTF4R partition 3 512 KiB, chardev (242:0)

 mmcblk1: p1 p2 p3

stm32-dwmac 5800a000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx

IP-Config: Complete:

     device=eth0, hwaddr=00:04:9f:04:d2:36, ipaddr=192.168.2.178, mask=255.255.255.0, gw=192.168.2.1

     host=192.168.2.178, domain=, nis-domain=(none)

     bootserver=192.168.2.180, rootserver=192.168.2.180, rootpath=

ALSA device list:

  No soundcards found.

VFS: Mounted root (nfs filesystem) on device 0:16.

devtmpfs: mounted

Freeing unused kernel memory: 1024K

Run /sbin/init as init process

Starting syslogd: OK

Starting klogd: OK

Running sysctl: OK

Starting mdev... OK

modprobe: can't change directory to '/lib/modules': No such file or directory

Initializing random number generator: OK

Saving random seed: OK

Starting network: ip: RTNETLINK answers: File exists

FAIL

输入“root回车

输入“cd /”,切换到根目录

输入“ls”,可以执行了

还有个问题要解决:

modprobe: can't change directory to '/lib/modules': No such file or directory

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

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

相关文章

使用Apache ECharts同时绘制多个统计图表

目录 1、介绍 2、相关知识 3、代码 4、效果 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。 …

UE Get节点和源码

文章目录 概要UE Get节点有哪些常见的应用场景相关源码 概要 UE Get节点在Unreal Engine的蓝图系统中用于获取变量的值。这个节点通常用于从变量中读取数据,以便在游戏的逻辑流程中使用。 要使用Get节点,你首先需要有一个已经定义的变量。然后&#xf…

Windows环境部署nginx 文件服务器

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 在Windows环境下使用nginx部署简单的文件服务器 一、版本 1. Windows 使用版本 2. nginx 使用版本 选择Mainline Version版本 二、nginx配置 1. 下载 https://nginx.org/en/download.…

Unity 减低GC和优化

文章目录 在Unity中,垃圾收集(Garbage Collection, GC)是一项重要的内存管理机制,但过度的GC活动可能会导致性能瓶颈。优化Unity项目中的GC涉及减少不必要的对象分配和生命周期管理。以下列举了五个实例来详细说明如何降低GC负担并…

用于图像处理的Python顶级库 !!

文章目录 前言 1、OpenCV 2、Scikit-Image 3、Scipy 4、Python Image Library(Pillow / PIL) 5、Matplotlib 6、SimpleITK 7、Numpy 8、Mahotas 前言 正如IDC所指出的,数字信息将飙升至175ZB,而这些信息中的巨大一部分是图片。数…

安卓实现简单砸地鼠游戏

效果 布局 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"a…

开年炸裂-Sora/Gemini

最新人工智能消息 谷歌的新 Gemini 模型 支持多达 1M的Token&#xff0c;可以分析长达一小时的视频 1M Token可能意味着分析700,000 个单词、 30,000 行代码或11 小时的音频、总结、改写和引用内容。 Comment&#xff1a;google公司有夸大的传统&#xff0c;所以真实效果需要上…

【自然语言处理】实验3,文本情感分析

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

2024/2/17 图论 最短路入门 dijkstra 1

目录 算法思路 Dijkstra求最短路 AcWing 849. Dijkstra求最短路 I - AcWing 850. Dijkstra求最短路 II - AcWing题库 最短路 最短路 - HDU 2544 - Virtual Judge (vjudge.net) 【模板】单源最短路径&#xff08;弱化版&#xff09; P3371 【模板】单源最短路径&#xf…

文生视频提示词:故事与主题

内容创意 --故事与主题 Story & Theme 这些词汇覆盖了从基本的故事类型到特定的主题和元素&#xff0c;可用于激发创意和定义视频内容的核心主题。 Adventure 冒险 Romance 浪漫 Mystery 神秘 Fantasy 幻想 Science Fiction 科幻 Horror 恐怖 Thriller 惊悚 Comedy 喜剧 Dr…

EXCEL中不错的xlookup函数

excel中一般要经常用vlookup函数&#xff0c;但其实经常麻烦要正序&#xff0c;从左边到右边&#xff0c;还要数列&#xff0c;挺麻烦的&#xff0c;xlookup的函数还不错&#xff0c;有个不错的一套视频介绍,B站的&#xff0c;地址是&#xff1a;XLOOKUP函数基础用法&#xff0…

Python vars函数

在Python编程中&#xff0c;vars()函数是一个常用的内置函数&#xff0c;用于返回对象的__dict__属性。该属性存储了对象的命名空间&#xff0c;包括对象的所有属性和方法。本文将深入探讨Python中的vars()函数&#xff0c;包括基本用法、适用对象、返回结果、实际应用场景&…

MySQL数据库⑪_C/C++连接MySQL_发送请求

目录 1. 下载库文件 2. 使用库 3. 链接MySQL函数 4. C/C链接示例 5. 发送SQL请求 6. 获取查询结果 本篇完。 1. 下载库文件 要使用C/C连接MySQL&#xff0c;需要使用MySQL官网提供的库。 进入MySQL官网选择适合自己平台的mysql connect库&#xff0c;然后点击下载就行…

线程库接口模拟封装(使用参数包接受参数,2种方法)

目录 引入 模拟实现 思路 传递参数包 代码 thread.hpp main.cpp 示例 引入 之前我们一直使用的都是linux中的原生线程库,但c中其实是有提供封装好的线程库的 -- <thread> 下面我们也来试着封装一下线程接口 模拟实现 思路 首先,明确线程库的核心操作: 创建和销毁…

标签结构比目录结构更易用 | Obsidian实践

当我顿悟了标签结构&#xff08;标签树&#xff09;的构建逻辑&#xff0c;彻底摆脱了目录结构的限制&#xff0c;从此可按任意维度管理和检索笔记。 对于每一个新入坑Obsidian的小白菜来说&#xff0c;通过创建目录结构&#xff0c;对笔记进行管理是最符合直觉的方式。但是&am…

【AIGC】大语言模型

大型语言模型&#xff0c;也叫大语言模型、大模型&#xff08;Large Language Model&#xff0c;LLM&#xff1b;Large Language Models&#xff0c;LLMs&#xff09; 什么是大型语言模型 大型语言模型&#xff08;LLM&#xff09;是指具有数千亿&#xff08;甚至更多&#xf…

php switch、for、foreach、while、do...while

php switch 1. switch2. for循环3. foreach4. while、do...while 1. switch <?php$height 190;switch ($height) {case 160:echo 太矮了;break; //跳出本次循环case 170:echo 还行吧;break; //跳出本次循环case 180:echo 帅哥;break; //跳出本次循环default:echo 迷; }2.…

初始Git及Linux Centos下安装Git

文章目录 前言版本控制器注意Git安装 前言 不知道你⼯作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防⽌⽂档丢失&#xff0c;更改失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不复制出⼀个副本&#xff0c;⽐如…

springboot196高校教师科研管理系统

Spring Boot高校教师科研管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

(八)【Jmeter】线程(Threads(Users))之bzm - Concurrency Thread Group

简述 操作路径如下: 作用:模拟一定时间段内达到指定并发数的用户访问。配置:设置目标并发数、启动时间、持续时间等参数。使用场景:测试应用程序在达到一定并发用户数时的性能表现。优点:能够模拟实际并发访问的增长和稳定过程。缺点:主要关注并发数,可能无法模拟真实…