当前位置: 首页 > news >正文

Zynq的QSPI Flash替换为GD25Q32故障排查

zynq的qspiFlash从w25q32替换为GD25Q32ES1G产生的问题环境D:\Xilinx\Vitis\2020.2/opt/petalinux/2020.2/linux-xlnx-xlnx_rebase_v5.4_2020.2u-boot-xlnx-xilinx-v2020.1问题1Vitis无法固化BOOT.bin, 因为器件ID核查Failed to initialize SPI flash at0:0(error -2)ZynqERROR:[Xicom50-186]Errorwhiledetecting SPI flash device - unrecognized JEDECidbytes: c8,40,16Probleminrunning uboot Flash programming initialization failed. ERROR: Flash Operation Failed答案GD的zynq_qspi_x4_single.bin替换文件 D:\Xilinx\Vitis\2020.2\data\xicom\cfgmem\uboot\zynq_qspi_x4_single.bin 为GD提供的问题2u-boot 探测 spiFlash失败Zynqsf probe000Warning: SPI speed fallback to100kHz unrecognized JEDECidbytes: c8,40,16Failed to initialize SPI flash at0:0(error -2)ZynqERROR:[Xicom50-186]Errorwhiledetecting SPI flash device - unrecognized JEDECidbytes: c8,40,16答案在petalinux配置u-boot 支持 GigaDevice SPI flash supportpetalinux-config-cu-boot Device Drivers -MTD Support -SPI Flash Support[*]SPI Flash support# 总开关[*]GigaDevice SPI flash support# -- 就是这个问题3kernel 启动 探测 spiFlash失败brd: module loaded loop: module loaded spi-nor spi0.0: found gd25q32, expected w25q32 spi-nor spi0.0: gd25q32(4096Kbytes)8---cuthere --- Unable to handle kernel NULL pointer dereference at virtual address 00000000 pgd(ptrval)[00000000]*pgd00000000 Internal error: Oops - BUG:80000005[#1] PREEMPT SMP ARMModules linked in: CPU:0PID:1Comm: swapper/0 Not tainted5.4.0-xilinx-v2020.2#1Hardware name: Xilinx Zynq Platform PC is at 0x0 LR is at spi_nor_scan0x92c/0xb4c pc:[00000000]lr:[c0449394]psr:60000013sp:ef067c08ip:00000000 fp:ef6f1550 r10: ef067c88 r9:ef6f1550 r8:ef19ac00 r7:ef6f11e8 r6:00000000 r5:00000000 r4:ef193040 r3:00000001 r2:ef067c20 r1:00000081 r0:ef193040 Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 18c5387d Table: 0000404a DAC: 00000051 Process swapper/0(pid:1, stack limit0x(ptrval))Stack:(0xef067c08 to 0xef068000)7c00: 00001000 00000000 00000000 c073f43c 00000003 00000000 7c20: 000000e7 00000000 ef19ac00 c0b03c48 ef19ac00 ef000480 00000dc0 ef000480[c0449394](spi_nor_scan)from[c04496b0](spi_nor_probe0xfc/0x188)[c04496b0](spi_nor_probe)from[c044a780](spi_drv_probe0x88/0xa4)[c044a780](spi_drv_probe)from[c03f1e64](really_probe0x1d4/0x2ec)Exception stack(0xef067fb0 to 0xef067ff8)Code: bad PC value ---[end trace 27d718e35b702104]--- Kernel panic - not syncing: Attempted tokillinit!exitcode0x0000000b CPU1: stopping CPU:1PID:0Comm: swapper/1 Tainted: G D5.4.0-xilinx-v2020.2#1Hardware name: Xilinx Zynq Platform Exception stack(0xef085f68 to 0xef085fb0)5f60: 00000000 ef6e3974 00000000 c01164e0 00000000 00000000 5f80: ef084000 c0b03c68 00000002 ef085fc0 c0b03ca8 00000000 fffffff8 ef085fb8 5fa0: c0107838 c010782860000013ffffffff[c0101a8c](__irq_svc)from[c0107828](arch_cpu_idle0x1c/0x38)[c0107828](arch_cpu_idle)from[c013ffdc](do_idle0x120/0x258)[c013ffdc](do_idle)from[c0140278](cpu_startup_entry0x18/0x1c)[c0140278](cpu_startup_entry)from[0010242c](0x10242c)---[end Kernel panic - not syncing: Attempted tokillinit!exitcode0x0000000b]---答案〇. 定位外部源码生成vmlinux大概定位到spi_nor_scan在调用 spi_nor_switch_micron_octal_ddr (spi-nor.c:4980) 时崩溃的但这是美光专用的 , 直接注释掉 spi_nor_switch_micron_octal_ddr 即可一点点注释缩小崩溃位置makevmlinux-j8# 检查 vmlinux 是否真的包含调试符号arm-xilinx-linux-gnueabi-readelf-Svmlinux|grepdebug# 确保内核源码的根目录下 .config 文件中的调试选项是开启# Kernel hacking - Compile-time checks and compiler options勾选 Compile the kernel with debug infocat.config|grepCONFIG_DEBUG_INFO# CONFIG_DEBUG_INFO is not setpetalinux开启调试符号petalinux-config-ckernel Kernel hacking ---Compile-time checks and compiler options ---# 打开这个[*]Compile the kernel with debug infopetalinux默认生成了vmlinux但可能不带调试符号# 进入vmlinux目录$:cd images/linux# 查崩溃代码行号(没导出调试符号)$: arm-xilinx-linux-gnueabi-addr2line-evmlinux c0449394-fspi_nor_scan .tmp_kallsyms2.o:?# 查崩溃代码行号(导出调试符号)#/*是spi_nor_switch_micron_octal_ddr里的代码*/# 在spi_nor_scan里注释掉对spi_nor_switch_micron_octal_ddr的调用$: arm-xilinx-linux-gnueabi-addr2line-evmlinux c0449394-fspi_nor_switch_micron_octal_ddr /home/minglie/petalinux/z8/components/yocto/workspace/sources/linux-xlnx/drivers/mtd/spi-nor/spi-nor.c:4980# spi_nor_scan 的起始地址$: arm-xilinx-linux-gnueabi-nm vmlinux|grep spi_nor_scan$c0448a68 T spi_nor_scan# 汇编看崩溃那行$:arm-xilinx-linux-gnueabi-objdump-dvmlinux|grep-A10c0449394minglieminglie:~/petalinux/z8/images/linux$ arm-xilinx-linux-gnueabi-objdump-dvmlinux|grep-A10c0449394c0449394: e5d43346 ldrb r3,[r4,#838] ; 0x346c0449398: e3500000cmpr0,#0c044939c: 13a03000 movne r3,#0c04493a0: 02033001 andeq r3, r3,#1c04493a4: e3530000cmpr3,#0c04493a8: 0a00000a beq c04493d8spi_nor_scan0x970c04493ac: e5943340 ldr r3,[r4,#832] ; 0x340# 查源码位置minglieminglie:~/petalinux/z8$find./-namespi-nor.h-path*/linux/*2/dev/null|grep-vproc|head-5./components/yocto/workspace/sources/linux-xlnx/include/linux/mtd/spi-nor.h一. 修改设备树/* 改前 */qspi{u-boot,dm-pre-reloc;flash0{compatiblewinbond,w25q32,jedec,spi-nor;reg0x0;spi-max-frequency50000000;#address-cells 1;#size-cells 1;partition0{labelboot;reg0x00000000 0x00100000;/* 1MB */};partition100000{labelbootenv;reg0x00100000 0x00010000;/* 64KB */};partition110000{labelspace;reg0x00110000 0x002F0000;/* 剩余 */};};};/* 改后 */qspi{u-boot,dm-pre-reloc;flash0{compatiblejedec,spi-nor;reg0x0;spi-max-frequency50000000;#address-cells 1;#size-cells 1;partition0{labelboot;reg0x00000000 0x00100000;/* 1MB */};partition100000{labelbootenv;reg0x00100000 0x00010000;/* 64KB */};partition110000{labelspace;reg0x00110000 0x002F0000;/* 剩余 */};};};二. 改内核源码drivers/mtd/spi-nor/spi-nor.c改动1改数组 static const struct flash_info spi_nor_ids[]屏蔽掉gd25q32驱动中可能存在 Bug 的高级功能//改前{gd25q32,INFO(0xc84016,0,64*1024,64,SECT_4K|SPI_NOR_DUAL_READ|SPI_NOR_QUAD_READ|SPI_NOR_HAS_LOCK|SPI_NOR_HAS_TB)}//改后{gd25q32,INFO(0xc84016,0,64*1024,64,SECT_4K)},改动2修改 spi_nor_scan()spi_nor_switch_micron_octal_ddr() 是micron专用的// 改前if(hwcaps-mask(SNOR_HWCAPS_READ_8_8_8|SNOR_HWCAPS_PP_8_8_8)){// 改后, 或者直接把这段注释了if((JEDEC_MFR(nor-info)SNOR_MFR_MICRON)(hwcaps-mask(SNOR_HWCAPS_READ_8_8_8|SNOR_HWCAPS_PP_8_8_8))){
http://www.rkmt.cn/news/1374042.html

相关文章:

  • 问题分析-并网逆变器炸机问题
  • 别再死记硬背了!用Python代码一次性搞懂曼哈顿、欧式、切比雪夫距离的底层联系
  • 2026免费在线去水印软件推荐,手把手教你5种方法,第三种0.3秒搞定!
  • 2026保姆级免费去图片水印App教程,一键无痕去除,这4款微信小程序最省心
  • 2026最好用的图片处理工具推荐:去水印 / 抠图 / 高清化实测对比
  • Claude Code 接入 DeepSeek
  • 2026专业音响设备应用白皮书文体场馆选型剖析:ZOBO音响、舞台音响、Montarbo音响、Nettuno音响选择指南 - 优质品牌商家
  • 焊接钢格板哪个好?厂家怎么选?实用推荐来啦!
  • 保姆级教程!零代码搞定学生考勤高危群体画像分析(指标卡 + 饼图 + 仪表盘,附完整操作步骤)
  • 告别.bash_profile:在macOS Ventura/Sonoma上为Maven配置环境变量的几种新方法(含Zsh教程)
  • Win10桌面右键新建菜单丢了记事本?别慌,手把手教你用注册表找回来(附权限设置详解)
  • C51开发中寄存器变量限制与优化策略
  • VMware虚拟机里装FydeOS,给旧电脑或MacBook找个轻量‘副系统’
  • AR项目想拿高分?试试用Vuforia虚拟按钮做交互:从选图到避坑全流程
  • 别再让Ubuntu卡成PPT!手把手教你用swapfile把交换空间从1G扩容到64G(附权限修复)
  • 2026年热门的无锡污水污泥脱水机源头工厂推荐 - 品牌宣传支持者
  • GRACE水储量研究避坑指南:手把手教你处理CSR、JPL、GSFC mascon数据常见问题
  • Titanic数据集分析避坑指南:新手常犯的3个错误及如何修正
  • 从鸡尾酒会到信号分离:用Python手把手复现FastICA算法(含完整代码)
  • UE5 C++攀爬系统避坑指南:从ALS V4源码到独立组件的完整迁移实战
  • 安卓高版本APP抓包实战:破解证书校验与NetworkSecurityConfig
  • 基于PSO的多目标优化匿名化模型MO-OBAM:平衡隐私保护与数据效用的实战指南
  • Unity Audio Mixer实战:用混音器实现游戏音效的‘动态平衡’(附完整C#脚本)
  • Unity Audio Mixer实战:用混音器实现游戏音效的‘动态优先级’(附完整C#脚本)
  • 别再只会用P值了!用Python的Scipy库实战t检验(附完整代码与结果解读)
  • 2026年至今,四川园林绿化工程口碑标杆探寻:为何顺壹园林备受推崇? - 2026年企业推荐榜
  • 嵌入式开发中volatile关键字的原理与应用
  • 量子优化中的图压缩技术解析与应用
  • GLSL Uniform Location使用指南与性能优化
  • 告别美术字烦恼!Unity UGUI自定义图片字体保姆级教程(附完整工具代码)