This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux:AM437x QSPI 引导问题

Guru**** 2931100 points

Other Parts Discussed in Thread: AM4376, AM4372

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/667050/linux-am437x-qspi-boot-issue

主题中讨论的其他器件:AM4376AM4372

工具/软件:Linux

我使用的是带有 SDK 版本04.02.00.09的 am4376处理器、并解决了 QSPI 和引导问题。
我按照以下两个指南来设置 QSPI 引导。 但从 NOR 闪存加载 jffs2时出现质量警告/错误。

processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide
processors.wiki.ti.com/.../Linux_Core_QSPI_User's_Guide

从 NFS 引导时一切正常。
但是、当我切换到 qspiboot 时、在内核中转储警告消息后一切都出错了。
我还尝试跟踪 SPI-NOR.C 中的代码 但我无法判断根本原因是什么。
有人能帮我解决这个问题吗、谢谢。


SoC:am4376
SDK:04.02.00.09
NOR 闪存:MX66L51235FMI
Linux defconfig:添加了 jffs2配置的 tisdk_AM437X-EVM_defconfig
器件树源:基于 AM437X-SK-EVM.dts 和 AM437X-idk-EVM.dts。它们均不起作用

QSPI 的我的 DTS 设置(除了分区大小外、与原始 DTS 文件的设置都相同):

QSPI_PINS:QSPI_PINS{
pinctrl-single、pins =<
AM4372_IOPAD (0x87c、PIN_OUTPUT | MUX_MODE3)/* GPMC_csn0.QSPI_CSn *
AM4372_IOPAD (0x888、PIN_OUTPUT | MUX_Mode2)/* GPMC_csn3.QSPI_clk *
AM4372_IOPAD (0x890、PIN_INPUT | MUX_MODE3)/* GPMC_advn_ALe.QSPI_d0 *
AM4372_IOPAD (0x894、PIN_INPUT | MUX_MODE3)/* GPMC_oen_ren。QSPI_D1 *
AM4372_IOPAD (0x898、PIN_INPUT | MUX_MODE3)/* GPMC_WN.QSPI_D2 *
AM4372_IOPAD (0x89c、PIN_INPUT | MUX_MODE3)/* GPMC_BE0n_cle。QSPI_D3 *
>;
};

&QSPI{
状态="正常";
pinctrl-names ="default";
pinctrl-0 =<&QSPI_PINs>;

SPI-max-frequency =<48000000>;
m25p80@0{
兼容="mx66l51235l";
SPI-max-frequency =<48000000>;
reg =<0>;
SPI-cpol;
spi-cpha;
SPI-TX-bus-width =<1>;
SPI-Rx-bus-width =<4>;
#address-cells =<1>;
大小单元格=<1>;

/* MTD 分区表。
* ROM 检查第一个512KiB
*用于引导有效文件(XIP)。
*
分区@0{
标签="qspi.U_boot";
REG =<0x00000000 0x000080000>;
};
分区@1{
标签="qspi.U_boot.backup";
REG =<0x00080000 0x00080000>;
};
分区@2{
标签="QSPI.U_BOOT_ENV";
REG =<0x00100000 0x00010000>;
};
分区@3{
标签="QSPI.FDT";
REG =<0x00110000 0x00010000>;
};
分区@4{
标签="qspi.kernel";
REG =<0x00120000 0x0800000>;
};
分区@5{
label ="qspi.filesystem;
REG =<0x00920000 0x36E0000>;
};
};
}; 

内核引导消息:

正在启动内核...

[0.000000]在物理 CPU 0x0上引导 Linux
[0.000000] Linux 版本4.9.59 (用户@userUbuntu)(gcc 版本6.2.1 20161016 (Linaro GCC 6.2-2016.11))#1抢先于 CST 2018年2月23日08:44:38星期五
[0.000000] CPU:ARMv7处理器[412fc09A]修订版10 (ARMv7)、CR=10c53c7d
[0.000000] CPU:PIPT/VIPT 非混叠数据高速缓存、VIPT 别名指令高速缓存
[0.000000]、共个:FDT:机器模型:TI AM437x
[0.000000] EFI:从 FDT 获取 EFI 参数:
[0.000000] EFI:未找到 UEFI。
[0.000000] CMA:在 bbd000000处保留48 mib
[0.000000]内存策略:数据高速缓存写回
[0.000000] CPU:所有 CPU 均在 SVC 模式下启动。
[0.000000] AM437x ES1.2 (NEON)
[0.000000]在区域顺序和移动分组中构建了1个区域列表。 总页数:260416
[0.000000]内核命令行:console=ttyO0、115200n8 SPI-ti-QSPI.enable_QSPI=1 root=/dev/mtdblock5 rw rootfstype=jffs2 rootwait=1
[0.000000] PID 哈希表条目:4096 (顺序:2、16384字节)
[0.000000]条目高速缓存散列表条目:131072 (顺序:7、524288字节)
[0.000000] inode 高速缓存散列表条目:65536 (顺序:6、262144字节)
[0.000000]内存:977312K/1048576K 可用(7168K 内核代码、292K rwdata、2400K rodata、1024K init、281K BSS、 22112K 保留、49152K CMA 保留、212992K HIGHMEM)
[0.000000]虚拟内核内存布局:
[0.000000]矢量:0xff0000-0xff1000 (4KB)
[0.000000] fixmap:0xc00000 - 0xc00000 (3072 KB)
[0.000000] vmalloc:0xf0800000 - 0x800000 (240 MB)
[0.000000]低内存:0xC0000000 - 0xf0000000 (768 MB)
[0.000000] pkmap:bbfe00000 - 0xC0000000 (2 MB)
[0.000000]模块:bbf000000 - bbbfe00000 (14 MB)
[0.000000].text:0xc0008000 - 0xc0800000 (8160 KB)
[0.000000].init:0xc0b00000 - 0xc0c00000 (1024KB)
[0.000000].data:0xc0c00000 - 0xc0c49048 (293 KB)
[0.000000].bss:0xc0c49048 - 0xc0c8f834 (282 KB)
[0.000000] slub:HWalign=64、order=0-3、MinObjects=0、CPU=1、Nodes=1
[0.000000]可抢占的分层 RCU 实现。
[0.000000]叶扇出的生成时间调整为32。
[0.000000] NR_IRQ:16 nr_IRQ:16 16.
[0.000000] L2C:平台修改辅助控制寄存器:0x0e030000 -> 0x3e430000
[0.000000] L2C:DT/平台修改辅助控制寄存器:0x0e030000 -> 0x3e430000
[0.000000] L2C-310支持 Cortex-A9的早期 BRESP
[0.000000] OMAP L2C310:ROM 不支持电源控制设置
[0.000000] L2C-310动态时钟门控禁用、待机模式禁用
[0.000000]启用了 L2C-310高速缓存控制器、16路、256 KB
[0.000000] L2C-310:cache_ID 0x410000c9、AUX_CTRL 0x4e430000
[0.000000] OMAP 时钟事件源:timer2为24000000 Hz
[0.000011] sched_clock:24MHz 时为32位、分辨率为41ns、每89478484971ns 换行一次
[0.000028]时钟源:Timer1:屏蔽:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:79635851949 ns
[0.000035] OMAP 时钟源:Timer1为24000000 Hz
[0.000371]时钟源:32K_COUNTER:MASK:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:58327039986419 ns
[0.000381] OMAP 时钟源:32768Hz 时为32K_COUNTER
[0.000701]控制台:彩色虚拟设备80x30
[0.000727]警告:您的'console=ttyO0'已被'ttyS0"替代
[0.000733]这可确保您仍能看到内核消息。 请
[0.000738]更新内核命令行。
[0.000757]校准延迟环路... 1987.37茂物剪(lpj=9936896)
[0.060164] pid_max:默认值:32768最小值:301
[0.060279]安装高速缓存散列表条目:2048 (顺序:1、8192字节)
[0.060291]安装点缓存散列表条目:2048 (顺序:1、8192字节)
[0.061041] CPU:测试写入缓冲器一致性:好的
[0.061379]为0x80100000 - 0x80100060设置静态标识映射
[0.062132] EFI 服务将不可用。
[0.062913] devtmpfs:已初始化
[0.072798] VFP 支持 v0.3:实施者41架构3第30部分版本9修订版4
[0.073086]时钟源:Jiffies:MASK:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:19112604462750000 ns
[0.073108] futex 散列表条目:256 (顺序:-1、3072字节)
[0.07633] pinctrl 内核:已初始化 pinctrl 子系统
[0.077384] NET:注册协议系列16.
[0.078700] DMA:为原子相干分配预分配256 KiB 池
[0.170176]空闲:使用调速器梯
[0.200161]空闲:使用调速器菜单
[0.206966] OMAP GPIO 硬件版本0.1
[0.219054]没有 ATAG?
[0.219082]硬件断点:找到5个(+1保留)断点和1个观察点寄存器。
[0.219092]硬件断点:最大观察点大小为4字节。
[0.256458] EDMA 49000000.EDMA:TI EDMA DMA 引擎驱动程序
[0.259422] omap_i2c 44e0b000。i2c:找不到节点/OCP@44000000 / L4_wkup@44c00000/CSCM@210000/ pinmux@800/i2c0_pins 的 pctldev、延迟探针
[0.259475] omap_i2c 4802a000.i2c:找不到节点/OCP@44000000 /l4_wkup@44c00000/CSCM@210000/ pinmux@800/i2c1_pins 的 pctldev、延迟探针
[0.259556]介质:Linux 介质接口:v0.10
[0.259597] Linux 视频采集接口:v2.00
[0.259640] pps_core:LinuxPPS API 版本。 1已注册
[0.259647] pps_core:软件版本 5.3.6 -版权所有2005-2007 Rodolfo Giometti
[0.259667] PTP 时钟支持已注册
[0.259698] EDAC MC:版本:3.0.0
[0.260659] OMAP-mailbox 480c8000.mailbox:OMAP mailbox 修订版0x400
[0.260960]高级 Linux 声音架构驱动程序已初始化。
[0.262005]时钟源:切换到时钟源 Timer1
[0.269924] NET:注册协议系列2.
[0.270631] TCP 建立哈希表条目:8192 (顺序:3、32768字节)
[0.270696] TCP 绑定哈希表条目:8192 (顺序:3、32768字节)
[0.27071] TCP:配置哈希表(建立8192 BIND 8192)
[0.270912] UDP 哈希表条目:512 (顺序:1、8192字节)
[0.270934] UP-Lite 哈希表条目:512 (顺序:1、8192字节)
[0.271078] NET:注册协议系列1.
[0.271475] RPC:注册后命名的 UNIX 套接字传输模块。
[0.271486] RPC:注册的 UDP 传输模块。
[0.271492] RPC:注册的 TCP 传输模块。
[0.271497] RPC:注册的 TCP NFSv4 4.1反向通道传输模块。
[0.273723]工作集:TIMESTAMP_BITS =14 max_order=18 bucke_order=4
[0.278789] squashfs:版本4.0 (2009/01/31) Phillip Lougher
[0.279548] NFS:注册 id_resolver 密钥类型
[0.279580]注册了密钥类型 id_resolver
[0.279586]注册了密钥类型 id_legacy
[0.279631] NTFS:驱动程序2.1.32 [Flags:R/O]。
[0.279840] jffs2:版本2.2。 (NAND)Copyright2001-2006 Red Hat, Inc.
[0.281489]退回:池大小:64页
[0.281672]块层 SCSI 通用(BSG)驱动程序0.4版已加载(主要246)
[0.281684]已注册 IO 调度程序 NOP
[0.281691]已登记 IO 调度程序的截止日期
[0.281801]已注册 IO 调度程序 cfq (默认值)
[0.283305] pinctrl-single 44e10800.pinmux:在 pA f9e10800处为199个引脚、尺寸796
[0.330181]串行:8250/16550驱动程序,10个端口,禁用 IRQ 共享
[0.332667] omap8250 44e09000.serial:未指定时钟速度:使用默认值:48000000
[0.333428]在 MMIO 0x44e09000 (IRQ = 30、base_baud = 3000000)处的44e09000.serial: ttyS0是8250
[0.990589]控制台[ttyS0]已启用
[0.995570] OMAP_rng 48310000.rng:OMAP 随机数生成器版本 20.
[1.002379][DRM]已初始化
[1.018227]返修:模块已加载
[1.027101]循环:模块已加载
[1.033127] m25p80 spi0.0:mx66l51235l (65536 KB)
[1.038253]在 MTD 器件 spi0.0上找到6个器件分区
[1.043861]在"spi0.0"上创建6个 MTD 分区:
[1.048678] 0x0000000000000000 0x000000080000:"QSPI.U_BOOT"
[1.055207] 0x000000080000-0x000000100000:"QSPI.U_BOOT.backup"
[1.062206-0x000000100000-0x000000110000:"QSPI.U_BOOT_ENV"
[1.068879] 0x000000110000-0x000000120000:"QSPI.FDT"
[1.07498] 0x000000120000-0x000000920000:"QSPI.kernel"
[1.081271] 0x000000920000-0x000004000000:"QSPI.filesystem (QSPI.filesystem)"
[1.08613] libphy:固定 MDIO 总线:探测
[1.162069] DaVinci_MDIO 4a101000.MDIO:达芬奇 MDIO 修订版1.6
[1.168204] DaVinci_MDIO 4a101000.MDIO:检测到的 phy 掩码 fffff9
[1.175867] libphy: 4a101000.mdio:探测
[1.179912] DaVinci_MDIO 4a101000.MDIO:PHY[1]:器件4a101000.MDIO:01、驱动器 Micrel KSZ9031千兆位 PHY
[1.189699] DaVinci_MDIO 4a101000.MDIO:PHY[2]:器件4a101000.MDIO:02、驱动器 Micrel KSZ9031千兆位 PHY
[1.200129] cpsw 4a100000.以太网:检测到的 MACID = bc:83:85:fa:60:3d
[1.206943] cpsw 4a100000.ethernet:无法查找 pps 计时器的器件节点
[1.214024] cpsw 4a100000.以太网:CPT:溢出检查周期500 (jiffies)
[1.221985] cpsw 4a100000.以太网:cpsw:检测到的 MACID = bc:83:85:fa:60:3e
[1.230374] mousedev:PS/2鼠标设备,适用于所有鼠标
[1.236377] i2c /dev/entries 驱动程序
[1.241482] cputidle: enable-method 属性'ti,am4372'找到操作
[1.306149] ledtrig-CPU:已注册以指示 CPU 上的活动
[1.314430] NET:注册协议系列10.
[1.321405] SIT:IPv6、IPv4和 MPLS over IPv4隧道驱动程序
[1.330188] NET:注册协议系列17.
[1.334993]注册了密钥类型 DNS_旋 变传感器
[1.339542] OMAP-VOLTGE_LARD_INIT:未添加电压驱动器支持
[1.366679] mmc0:地址0001处的新高速 MMC 卡
[1.372770] mmcblk0:mmc0:0001 8GME4R 7.28 GiB
[1.377628] mmcblk0boot0:mmc0:0001 8GME4R 分区1 4.00 MIB
[1.384036] mmcblk0boot1:mmc0:0001 8GME4R 分区2 4.00 MIB
[1.391437] mmcblk0:P1 P2 P3 p4
[1.409940] at24 0-0050:8192字节24c64 EEPROM、可写、1字节/写入
[1.417084] OMAP_i2c 44e0b000。i2c:100kHz 时的总线0修订版0.12
[1.508249] random:快速初始化完成
[1.513280] omap_i2c 4802a000.i2c:总线1 rev0.12为100kHz
[1.520487] hctosys:无法打开 RTC 器件(rtc0)
[1.526297] ALSA 器件列表:
[1.529289]未找到声卡。
[2.082932] VFS:已在器件31:5上安装根(jffs2文件系统)。
[2.090413] devtmpfs:已安装
[2.095826]释放未使用的内核内存:1024K

在从这里加载或加载驱动器之前、一切看起来都很好

正在启动日志记录:确定
[2.687522]------ [在此处剪切]-----
[2.698920]警告:CPU:0 PID:97 at drivers/MTD/SPI-NOR/SPI-NOR.c:1177 SPI_NOR_WRITE+0x13c/0x1b8
[2.708287]将偏移168写入 NOR 页。 编写部分页面可能会降低可靠性并增加 NOR 闪存的磨损。[2.719874]模块链接如下:
[2.722995] CPU:0 PID:97 Comm:触摸未被污染4.9.59 #1
[2.728680]硬件名称:通用 AM43 (平展器件树)
[2.735256]回溯:
[2.737833][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
[2.745831] r7:00000009 R6:00000000 R5:c09e2b38 R4:eead9c00
[2.751736][ ](show_stack)从[ ](dump_stack+0x24/0x28)
[2.759256][ ](dump_stack)从[ ](_WARN+0xe8/0x100)
[2.766415 ][ ](__warn)从[ ](WARN_RASPH_FMt+0x40/0x48)
[2.774069] R9:00000000 R8:eead9cec r7:00000044 R6:ee954018 R5:00000000 R4:c09e2bbc
[2.781864][ ](warn_slowpath_fmt)、来自[ ](SPI_NOR_WRITE+0x13c/0x1b8)
[2.790353] R3:000000a8 R2:c09e2bbc
[2.794067] R4:000000a8.
[2.79634][ ](SPI_NOR_WRITE)从[ ](PART_WRITE+0x48/0x50)
[2.804337] R10:eead9cec R9:00000000 R8:002b97a8 r7:00000000 R6:00000000 R5:00000000
[2.812322] R4:00920000
[2.814878][ ](PART_WRITE)从[ ](MTD_WRITE+0x88/0xa0)
[2.822216] R5:00000000 R4:c056a2a0
[2.825816][ ](MTD_WRITE)从[ ](MTD_writev+0xac/0x100)
[2.833238] r7:00000001 R6:00000000 R5:00000001 R4:eead9dd0
[2.838946][ ](MTD_writev)从[ ](jffs2_flash_direct_writev+0x28/0x30)
[2.847694] R10:00000044 R9:eead9dd0 R8:002b97a8 r7:ee2a800 R6:eea90ca0 R5:00000000
[2.855677] R4:002b97a8
[2.858237][ ](jffs2_flash_direct_writev)从[ ](jffs2_flash_writev+0x454/0x4f0)
[2.867842] R5:00000000 R4:002b97a8
[2.871445][ ](jffs2_flash_writev)从[ ](jffs2_write_dnode+0xec/0x344)
[2.880301] R10:00000044 R9:00000000 R8:eeca95a0 r7:eea2A800 R6:eea90ca0 R5:eea2f100
[2.888296] R4:002b97a8
[2.890853][ ](jffs2_write_dnode)、来自[ ](jffs2_do_setattr +0x290/0x574)
[2.899592] R10:00000000 R9:ee2A800 R8:eead9ec8 r7:00000000 R6:00000000 R5:eeca95c8
[2.907577] R4:eea2f100
[2.910133][ ](jffs2_do_setattr)、从[ ](jffs2_setattr +0x2C/0x50)
[2.918345] R10:eead9ec8 R9:00000000 R8:eead9ec4 r7:eeca6aa0 R6:eead9e88 R5:eeca95c8
[2.926326] R4:eead9ec8
[2.928894][ ](jffs2_setattr)从[ ](notify_change+0x1cc/0x3e4)
[2.937020] R5:eeca95c8 R4:00020070
[2.940632][ ](notify_change)从[ ](uttimes_common+0xac/0x178)
[2.948675] R10:00000000 R9:bedf1f7a R8:ffff9c r7:00000000 R6:eead9f28 R5:eeca962c
[2.956658] R4:00000000
[2.959215][ ](uttimes_common)从[ ](do_uttime+b8/0x150)
[2.966901] r7:00000000 R6:00000000 R5:00000001 R4:00000000
[2.972726][ ](DO _ utTimes)从[ ](sys_futimesat+0xd0/0x10c)
[2.980248] R9:eead8000 R8:c0107e84 r7:0000010d R6:00000000 R5:bedf1f7a R4:ffff9c
[2.988205][ ](sys_futimat)、来自[ ](sys_uttime+0x1c/0x20)
[2.995840] R6:00000000 R5:bedf1c90 R4:bedf1e98
[3.000494][ ](sys_uttimes)从[ ](RET_FAST_SYSCALL+0x0/0x3c)
[3.008454]--[结束跟踪 cd06a67d3ed56a6 ]--
正在初始化随机数生成器... 完成。

即使转储了错误消息、系统也能够引导至文件系统。 但不知怎么说、所有驱动程序目前都无法加载。

欢迎使用 BuildRoot
BuildRoot 登录:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Archer、

    请阅读 此邮件主题。
    删除

    warn_once (page_offset、
    "正在将偏移%zu 写入 NOR 页。 编写部分页面可能会降低可靠性并增加 NOR 闪存的磨损。"、
    PAGE_OFFSET); 

    从中删除 /board-support/linux- /drivers/mtd/spi-nor/spi-nor.c、重新构建并重新刷新您的电路板。

    此致、
    Kemal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Kermal、

    非常感谢您的帮助。
    这确实解决了我的问题。

    驱动器未正确加载是另一个问题。
    我对 jffs2问题感到困惑。
    再次感谢。