搭建FPGA SOC系统(6)使用buildroot生成根文件系统并下载到SD卡中

学习主要参考https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide

1根文件系统定义

根文件系统文件系统包含在同一个划分在这上面根目录位于,它是所有其他文件系统所在的文件系统安装好的(即逻辑上连接到系统)因为系统是启动(即启动)。分区是硬盘驱动器(HDD)中逻辑上独立的部分。文件系统是目录的层次结构(也称为目录树)用于组织计算机系统上的文件。在Linux操作系统和其他类Unix 操作系统目录从根目录开始,根目录包含一系列子目录,每个子目录又包含更多的子目录,等等。此定义的一个变体是位于单个分区或磁盘上的整个目录层次结构(即目录树)的一部分。根文件系统的确切内容因计算机而异,但它们将包括引导系统和使系统达到可以挂载其他文件系统的状态所必需的文件,以及用于修复损坏的系统和从备份中恢复丢失文件的工具。内容将包括根目录以及一个最小的子目录和文件集,包括 /boot, /dev, /etc, /bin, /sbin and sometimes /tmp (for temporary files).

当系统在中启动时,只有根文件系统可用单用户模式。单用户模式是引导能力非常有限的受损系统的一种方式,以便对其进行修复。修复完成后,位于不同分区或不同介质上的其他文件系统就可以安装好的以便恢复全部系统功能。装载它们的目录称为挂载点。根文件系统通常应该很小,因为它包含关键文件,并且不经常修改的小文件系统更有可能不被损坏。损坏的根文件系统通常意味着系统变得无法登录(即,不可启动)并且必须通过特殊方式(例如,从引导软盘).文件系统可以安装在目录树中的任何位置;它不一定需要安装在根文件系统上。例如,有可能(并且非常常见)在根文件系统的一个挂载点上挂载一个文件系统,而在该文件系统包含的一个挂载点上挂载另一个文件系统。

参考链接http://www.linfo.org/root_filesystem.html

根文件系统必备内容:

  • 一个初始化系统。这个程序将是内核启动后运行的第一个应用程序。它负责建立用户空间和启动所有其他用户应用程序(比如登录提示和shell)。
  • 保存设备节点的“/dev”目录。在黑暗的日子里(在2.6内核之前),每个设备都有一个与之相关联的设备文件,需要使用创建静态设备节点命令。如今,这个过程通过各种系统中的一个(我们将选择一个)为我们实现了自动化。(设备文件是表示连接到内核的设备的文件。这只是用户空间与内核空间交互和传递数据的一种方式。检验本页了解更多信息)。
  • 任何可加载的内核模块。如果您在配置内核时将任何驱动程序设置为“可加载模块”,那么它们需要放在这个根文件系统中。通常,这些文件放在“/lib/modules//".

2.Buildroot自动化创建根文件系统

2.1.下载Buildroot

执行如下命令可以克隆buildroot

git clone http://git.buildroot.net/git/buildroot.git

但是这个方法下载不成功。可以直接进入官网下载最新的。

https://git.busybox.net/buildroot/

https://git.busybox.net/buildroot/snapshot/buildroot-2022.02.tar.bz2

https://git.busybox.net/buildroot/snapshot/buildroot-2015.08.1.tar.bz2

2.2.配置Buildroot

这里使用2022.02版本的

进入下载的buildroot目录下,输入如下指令:以进行平台与交叉编译工具的配置

make RCH=ARM BR2_TOOLCHAIN_EXTERNAL_PATH=/home/dyq/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux nconfig

也可以使用2015.08.1的版本,直接跟着官方做即可。
https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide
可以在终端显示出一个GUI界面。

 /home/dyq/software/buildroot-2022.02/.config - Buildroot 2022.02 Configuration
 ┌── Buildroot 2022.02 Configuration ─────────────────────────────────────────┐
 │                                                                            │
 │                         Target options  --->                               │
 │                         Build options  --->                                │
 │                         Toolchain  --->                                    │
 │                         System configuration  --->                         │
 │                         Kernel  --->                                       │
 │                         Target packages  --->                              │
 │                         Filesystem images  --->                            │
 │                         Bootloaders  --->                                  │
 │                         Host utilities  --->                               │
 │                         Legacy config options  --->                        │
 │                                                                            │
 │                                                                            │
 │                                                                            │
 │                                                                            │
 │                                                                            │
 └F1Help─F2SymInfo─F3Help 2─F4ShowAll─F5Back─F6Save─F7Load─F8SymSearch─F9Exit─┘

  1. 进入"Target options→Target Architecture",然后选择 “ARM (little endian)”。

  2. “Target Architecture Variant” 选择 “cortex-A9”。

  3. “Target ABI” 选择 “EABIhf” (这将支持硬浮点处理)。

  4. 勾选Enable NEON SIMD extension support(NEON是许多ARM内核中的单指令/多数据引擎)。

  5. 最后设置“Floating point strategy” 为 “NEON” 来使用我们刚刚启用的“NEON”引擎。剩余配置保持不变。

    设置结果如下:

/home/dyq/software/buildroot-2022.02/.config - Buildroot 2022.02 Configuration
 ┌── Target options ──────────────────────────────────────────────────────────┐
 │                                                                            │
 │               Target Architecture (ARM (little endian))  --->              │
 │               Target Binary Format (ELF)  --->                             │
 │               Target Architecture Variant (cortex-A9)  --->                │
 │           [*] Enable NEON SIMD extension support                           │
 │           [ ] Enable VFP extension support (NEW)                           │
 │               Target ABI (EABI)  --->                                      │
 │               Floating point strategy (NEON)  --->                         │
 │               ARM instruction set (ARM)  --->                              │
 │                                                                            │
 │                                                                            │
 └F1Help─F2SymInfo─F3Help 2─F4ShowAll─F5Back─F6Save─F7Load─F8SymSearch─F9Exit─┘

  1. 按F5退回到菜单界面。进入 “Toolchain”, 在“Toolchain type” 选择“External toolchain”.
  2. 将Toolchain设置为Custom toolchain
  3. “Toolchain origin”设置为“Pre-installed toolchain”,指定已经安装了,不让buildroot去网上下载了。
  4. toolchain path这一项可以忽视掉,因为在前面启动该GUI时已经指定过了。
  5. 使能“copy gdb server to the Target选项。

以下参考https://www.cnblogs.com/sky-heaven/p/13513198.html

  1. External toolchain gcc version选择自己的工具链的gcc版本,这里选择4.9.x。剩下默认
  2. 进入“System configuration” 按如下设置。
/home/dyq/software/buildroot-2022.02/.config - Buildroot 2022.02 Configuration
 ┌── System configuration ────────────────────────────────────────────────────┐
 │                                                                            │
 │     Root FS skeleton (default target skeleton)  --->                       │
 │     (dyq) System hostname                                                  │
 │     (Welcome to Buildroot) System banner (NEW)                             │
 │     Passwords encoding (sha-256)  --->                                     │
 │     Init system (BusyBox)  --->                                            │
 │     /dev management (Dynamic using devtmpfs only)  --->                    │
 │     (system/device_table.txt) Path to the permission tables (NEW)          │
 │ [ ] support extended attributes in device tables (NEW)                     │
 │ [ ] Use symlinks to /usr for /bin, /sbin and /lib (NEW)                    │
 │ [*] Enable root login with password (NEW)                                  │
 │     (123456) Root password                                                 │
 │     /bin/sh (busybox' default shell)  --->                                 │
 │ [*] Run a getty (login prompt) after boot  --->                            │
 │ [*] remount root filesystem read-write during boot (NEW)                   │
 │     ()  Network interface to configure through DHCP (NEW)                  │
 │     (/bin:/sbin:/usr/bin:/usr/sbin) Set the system's default PATH (NEW)    │
 │ [*] Purge unwanted locales (NEW)                                           │
 │     (C en_US) Locales to keep (NEW)                                        │
 │     *** NLS support needs a toolchain w/ wchar, dynamic library ***        │
 │ [ ] Install timezone info (NEW)                                            │
 │     ()  Path to the users tables (NEW)                                     │
 │     ()  Root filesystem overlay directories (NEW)                          │
 │     ()  Custom scripts to run before commencing the build (NEW)            │
 │     ()  Custom scripts to run before creating filesystem images (NEW)      │
 │     ()  Custom scripts to run inside the fakeroot environment (NEW)        │
 │     ()  Custom scripts to run after creating filesystem images (NEW)       │
 │                                                                            │
 └F1Help─F2SymInfo─F3Help 2─F4ShowAll─F5Back─F6Save─F7Load─F8SymSearch─F9Exit─
  1. 回到主菜单,进入“Kernel”;不要选择 [ ] Linux Kernel (NEW) ,因为已经生成了Linux内核。

  2. 退出进入 “Target packages”,这是生成大部分根文件系统的地方。

  3. “Filesystem images”是设置如何生成根文件系统的,默认配置为生成一个tar文件。

  4. 按F6保存,esc退出。

2.3.配置busybox

输入以下指令打开GUI界面。

make busybox-menuconfig

对于每个选项的设置及其意义,可以将光标放到对应位置,然后在键盘上打出"?"即可自动显示解释。
这里直接默认配置不进行改动。

make BR2_TOOLCHAIN_EXTERNAL_PATH=/home/dyq/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux all

最后会生成一个tar文件,其位置在/output/images/rootfs.tar

3.下载zImge和根文件系统到SD卡

首先确认自己的sdcard。

dyq@ubuntu:~/software/buildroot-2015.08.1$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   1  7.3G  0 disk 
├─sdb2   8:18   1  254M  0 part /media/dyq/42867f78-0b58-4fbb-918c-8d4a106ef64e
├─sdb3   8:19   1    1M  0 part 
└─sdb1   8:17   1  256M  0 part /media/dyq/1E69-3F5E
sr0     11:0    1 1024M  0 rom  
sda      8:0    0   20G  0 disk 
├─sda2   8:2    0    1K  0 part 
├─sda5   8:5    0  975M  0 part [SWAP]
└─sda1   8:1    0   19G  0 part /

发现fat分区为sdb1,其路径为/media/dyq/1E69-3F5E,ext4分区为sdb2,其路径为/media/dyq/42867f78-0b58-4fbb-918c-8d4a106ef64e

拷贝Linux映像文件到fat分区:

sudo cp /{your path}/linux-socfpga/arch/arm/boot/zImage /media/dyq/1E69-3F5E

拷贝根文件系统到ext4分区:

sudo tar -xvf /{your path}/buildroot-2015.08.1/output/images/rootfs.tar -C /media/dyq/42867f78-0b58-4fbb-918c-8d4a106ef64e

最后插到开发板即可运行。如果出现以下问题,一般是根文件系统没有被识别出来,这个一般可能与你的SD卡读卡器有关。建议:换个好点的SD卡读卡器,郁闷了一整天

Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance

### 解决Spyglass无法打开的问题 当遇到Spyglass无法正常启动的情况时,可以尝试以下几个方法来解决问题。 对于`feature could not be checked out`错误,解决方案涉及更新授权文件。具体操作是在命令行环境中使用最新的`Synopsys.dat`文件替换原有虚拟机中的同名文件[^1]: ```bash cp /path/to/new/Synopsys.dat /original/path/ ``` 之后再次尝试通过命令行启动Spyglass: ```bash spyglass ``` 如果收到 `[Error] Another session is already running or previous run had some issues` 的提示,则表明当前工作目录下存在正在运行的vc_spyglass实例或者是上次执行过程中出现了未处理的问题。此时应该先终止任何已存在的Spyglass进程,或者切换到其他路径重新开始会话[^2]: ```bash ps aux | grep spyglass # 查找并结束所有相关进程 kill -9 PID # 使用找到的PID号杀死特定进程 cd /new/directory # 或者简单地改变当前的工作目录 spyglass # 尝试重启工具 ``` 另外,在某些场景下,移除批处理模式参数也可以帮助排除因自动化脚本引起的异常情况。例如修改启动指令如下所示[^4]: ```bash spyglass –project training.prj –goals cdc/cdc_setup & ``` 尽管Lint检查并非总是必要的,但在开发流程中保持良好的实践习惯有助于提前发现潜在风险,减少后期维护成本。因此建议尽可能修复所有的警告信息而不是依赖于偶然性的成功编译结果[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值