rootfs 启动出错

本文详细介绍了在嵌入式设备上遇到的JFFS2文件系统问题,包括如何在mkfs.jffs2过程中通过指定参数解决Empty flash、CLEANMARKER和魔数位问题。同时强调了文件系统制作过程需要root权限,并讨论了不同情况下文件系统权限的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Q:在启动过程中出现at91sam user.warn kernel: Empty flash at 0x00f0fffc ends at 0x00f10000问题

A:在mkfs.jffs2的时候,加上-e 0x20000指定擦除块的大小。-e是指定擦除块的大小,我们使用的nandflash的块大小为128K字节,因此-e后的参数为(128*1024)10=(20000)16。

 

Q:启动的时候出现CLEANMARKER node found at 0x00f10000 has totlen 0xc != normal 0x0问题。

A:在mkfs.jffs2的时候,加上-n选项。-n, --no-cleanmarkers。指明不添加清楚标记(nand flash 有自己的校检块,存放相关的信息。)如果挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0 的警告,则加上-n 就会消失。

 

Q:解决jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01649298: 0xa25e instead问题的方法

A:在mkfs.jffs2的时候加上-s 2048(页大小,由芯片决定)以及-l(小端模式)两个选项。-s是指明页的大小,我们使用的nandflash的页的大小为2048字节。-l指明为小端模式,一般嵌入式下均为小端模式。

 

说明:

1、  在文件系统制作的过程,均需要使用root用户权限;

2、  一般嵌入式下只有root用户登录,因此文件系统中的所有文件都需要具有root可执行权限,如果用其他用户登录,请保证文件系统中文件(特别是自己添加的文件)的相应可执行权限。

### ZYNQ 启动流程概述 ZYNQ 系列芯片由 Xilinx 推出,是一款将 ARM 处理系统(Processing System, PS)与可编程逻辑(Programmable Logic, PL)紧密结合的 SoC(System on Chip),其启动过程具有高度的灵活性和复杂性。ZYNQ 的启动流程主要分为以下几个阶段: #### 1. **BootROM 阶段** ZYNQ 启动的第一步是执行固化在芯片内部的 BootROM 代码。该代码负责根据启动模式选择器(如拨码开关或配置引脚)确定启动设备(如 SD 卡、QSPI Flash、NAND Flash 或 JTAG)。BootROM 还会加载第一阶段引导程序 FSBL(First Stage Boot Loader)到片上内存 OCM(On-Chip Memory)中并执行它。 FSBL 是用户编写的第一个可执行镜像,通常使用 Xilinx SDK 工具创建。它负责初始化 PS 端的基本硬件环境,例如时钟、DDR 控制器等,并为后续阶段准备运行条件[^2]。 #### 2. **FSBL 阶段** FSBL 主要完成以下任务: - 初始化 PS 端的时钟、GPIO、串口等基本外设。 - 初始化 DDR 控制器以访问外部内存。 - 加载比特流文件(bitstream)到 PL 端,实现 FPGA 的配置。 - 加载第二阶段引导程序 SSBL(Second Stage Boot Loader),通常是 U-Boot 或裸机应用程序。 在某些应用场景下,FSBL 还可以加载 Linux 内核镜像或 RTOS 到内存中,直接跳转执行[^4]。 #### 3. **SSBL 阶段** 如果系统需要运行操作系统(如 Linux),则通常在此阶段引入 U-Boot 作为 SSBL。U-Boot 负责进一步初始化硬件环境、加载内核镜像(Image)、设备树(Device Tree Blob)以及根文件系统(rootfs),最终启动 Linux 内核。 对于裸机应用,SSBL 可能是一个简单的应用程序或测试代码,用于验证系统功能[^3]。 #### 4. **操作系统启动阶段** 当使用 Linux 操作系统时,在 U-Boot 完成加载后,Linux 内核开始接管系统控制权。内核初始化 CPU、内存管理子系统、调度器等核心组件,并挂载根文件系统,启动 init 进程,进入用户空间[^4]。 --- ### 常见 ZYNQ 启动问题及解决方法 #### 1. **无法从指定设备启动** 可能原因包括启动模式设置错误、启动设备未正确插入或格式化不当。建议检查拨码开关状态是否匹配预期启动模式,确认 SD 卡或 QSPI Flash 中存在有效的启动镜像(BOOT.bin)[^2]。 #### 2. **FSBL 执行失败** FSBL 未能正确初始化 DDR 或加载比特流可能导致启动失败。可通过串口输出查看调试信息,确认具体出错位置。此外,确保生成的 FSBL 与硬件设计一致(如 MIO 设置、时钟配置等)[^4]。 #### 3. **PL 配置失败** 若比特流加载失败,可能是由于 PL 电源未正确上电、配置引脚异常或比特流版本不兼容。建议使用 Vivado 查看 PL 配置日志,检查是否有错误提示。同时确保 FSBL 中启用了 PL 初始化流程[^1]。 #### 4. **U-Boot 无法启动** U-Boot 启动失败常见于设备树配置错误、内核镜像损坏或内存地址设置不当。应检查 U-Boot 的加载地址是否与设备树和内核镜像的链接脚本一致。此外,使用 TFTP 或 NFS 启动可快速定位问题来源[^3]。 --- ### 开发指南中的相关资源 《启明星ZYNQ之FPGA开发指南-V2.0》详细介绍了 ZYNQ 平台的启动流程,包括如何构建 FSBL、加载比特流及配置 U-Boot。该指南还提供了多个实验案例,帮助开发者逐步掌握 ZYNQ 启动过程的关键步骤[^2]。 对于希望深入了解 Linux 启动流程的开发者,《zynq Linux程序开发》文档提供了从生成 HDL 文件到最终启动 Linux 内核的完整流程说明[^4]。 --- ### 示例:生成 BOOT.bin 文件 以下是使用 Xilinx SDK 生成 BOOT.bin 文件的基本步骤: ```bash # 假设已经生成了 fsbl.elf、system.bit 和 uImage bootgen -arch zynq -image boot.bif -o BOOT.bin ``` 其中 `boot.bif` 文件内容如下: ``` the_ROM_image: { [bootloader]fsbl.elf system.bit uImage } ``` 此命令将 FSBL、比特流和 Linux 内核打包成一个完整的启动镜像文件 `BOOT.bin`,可用于烧写到 SD 卡或 QSPI Flash 中[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值