PetaLinux学习笔记 3

2023-05-16

过年回家没带开发板。终于可以搞一搞了。更新petaLinux到2019.2。重建项目,flash调整一下。启动过程中提示:

m25p80 spi0.0: found w25q256, expected n25q512a
m25p80 spi0.0: failed to read ear reg
m25p80 spi0.0: w25q256 (32768 Kbytes)

主要是flash的型号不正确。全局搜索n25q512a,上次的2018版本可以定位到build/tmp/work-shared/plnx-zynq7/kernel-source/drivers/mtd/spi-nor/spi-nor.c,这次居然找不到这个路径了。当时怎么操作的没有记录,找来找去,需要在这里开启:

petalinux-config
# → Linux Components Selection → linux-kernel(remote)
# → Linux Components Selection → Remote linux-kernel settings  ---> Remote linux-kernel git URL (https://github.com/Xilinx/linux-xlnx)
# → Linux Components Selection → Remote linux-kernel settings  ---> Remote linux-kernel git TAG/Commit ID (xlnx_rebase_v4.19)
petalinux-build

编译过程中会自动下载内核代码。
现在就可以看到文件了,这回使用了VS CODE,将build文件夹直接隐藏掉。源代码直接可以从components里找到。上次找偏了。这次在components/plnx_workspace/sources/linux-xlnx/drivers/mtd/spi-nor/spi-nor.c
这个里面有很多FLASH。找到w25q256

1661:	{ "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },

看看INFO,计算一下

{
    name: "w25q256",
    id: {0xef, 0x40, 0x19, 0, 0},
    id_len: 3,
    sector_size: 65536,
    n_sectors: 512,
    page_size: 256,
    flags: SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ
},

写到设备树里:

&flash0 {
    compatible = "w25q256";
};

另一个"micron,m25p80"在文章开头有说明,这个s个文件是基于m25p80所写的。删了编译一下。

m25p80 spi0.0: failed to read ear reg
m25p80 spi0.0: w25q256 (32768 Kbytes)

还有一个failed。这个ear reg的警告在 spi-nor.c 的函数spi_nor_scan中。前面有这么一段代码:

3453:			dev_warn(dev, "found %s, expected %s\n",
3454:				 jinfo->name, info->name);

就是一开始的那个警告。已经解决了。回到正题

3664:			int status;
3665:
3666:			nor->addr_width = 3;
3667:			set_4byte(nor, info, 0);
3668:			status = read_ear(nor, info);
3669:			if (status < 0)
3670: =>			dev_warn(dev, "failed to read ear reg\n");
3671:			else
3672:				nor->curbank = status & EAR_SEGMENT_MASK;

前面设置了addr_width 为3,这个是寻址宽度,3个字节。应该是16M,而这个芯片是32M的。
看看手册吧。

关于3bit和4bit的状态机?
有个3bit和4bit寻址模式。4bit可以支持到512M。
使用13h0Ch 来设置 4bit 和 3bit模式。一头雾水。
在这里找到一些东西:使用四字节命令读写256Mb QSPI Flash
在手册 ug821-zynq-7000-swdev.pdf 中也能找到这样一段内容:

This QSPI boot mode is for x4 mode. The BootROM searches the first 256 Mb in x8 mode. In QSPI boot mode (where the QSPI device is >128Mb), to use MultiBoot, place the multiple images in such a way that they fit in memory locations less than 128Mb. To effect this mode, the images should have only (FSBL+U-Boot) to fit in the <128Mb memory. Then, the rest of the partitions, possibly residing in a portion of memory that is >128Mb, must be handled by U-Boot. In this case, update the zynq_common.h file to add the commands to load the required partitions. You can find further details on the usage, along with an example, in the Xilinx Zynq-7000 AP SoC Solution Center。

直接找到QSPI的控制器说明上。在手册 ug585-Zynq-7000-TRM.pdf 中:

16 MB addressing per device (32 MB for two devices)

这里就是更本原因了。所以说,为什么ZYNQ就不支持4bit呢。。。。

继续往下看。有点意思,这个函数里面有个注释是专门针对这块FLASH的。

/* Enable/disable 4-byte addressing mode. */
static inline int set_4byte(struct spi_nor *nor, const struct flash_info *info,
			    int enable)
{
	int status;
	bool need_wren = false;
	u8 cmd;

	switch (JEDEC_MFR(info)) {
	case SNOR_MFR_ST:
	case SNOR_MFR_MICRON:
		/* Some Micron need WREN command; all will accept it */
		need_wren = true;
	case SNOR_MFR_MACRONIX:
	case SNOR_MFR_WINBOND:
		if (need_wren) 			// <= need_wren : false
			write_enable(nor);

		cmd = enable ? SPINOR_OP_EN4B : SPINOR_OP_EX4B;		// <= enable : 0; cmd = SPINOR_OP_EX4B
		status = nor->write_reg(nor, cmd, NULL, 0);			// SPINOR_OP_EX4B: 退出4BIT模式
		if (need_wren) 			// <= need_wren : false
			write_disable(nor);

		if (!status && !enable &&
		    JEDEC_MFR(info) == SNOR_MFR_WINBOND) {			// <= if(true)
			/*
			 * On Winbond W25Q256FV, leaving 4byte mode causes
			 * the Extended Address Register to be set to 1, so all
			 * 3-byte-address reads come from the second 16M.
			 * We must clear the register to enable normal behavior.
			 */
			write_enable(nor);
			nor->cmd_buf[0] = 0;
			nor->write_reg(nor, SPINOR_OP_WREAR, nor->cmd_buf, 1);
			write_disable(nor);
		}

		return status;
	default:
		/* Spansion style */
		nor->cmd_buf[0] = enable << 7;
		return nor->write_reg(nor, SPINOR_OP_BRWR, nor->cmd_buf, 1);
	}
}

看起来就是将FLASH设置为了3bit模式。下一段:

/**
 * read_ear - Get the extended/bank address register value
 * @nor:	Pointer to the flash control structure
 *
 * This routine reads the Extended/bank address register value
 *
 * Return:	Negative if error occured.
 */
static int read_ear(struct spi_nor *nor, struct flash_info *info)
{
	int ret;
	u8 val;
	u8 code;

	/* This is actually Spansion */
	if (JEDEC_MFR(info) == CFI_MFR_AMD)
		code = SPINOR_OP_BRRD;
	/* This is actually Micron */
	else if (JEDEC_MFR(info) == CFI_MFR_ST ||
		 JEDEC_MFR(info) == CFI_MFR_MACRONIX ||
		 JEDEC_MFR(info) == SNOR_MFR_ISSI)
		code = SPINOR_OP_RDEAR;
	else
		return -EINVAL;

	ret = nor->read_reg(nor, code, &val, 1);
	if (ret < 0)
		return ret;

	return val;
}

这里面没有支持WINBOND,给他添加上,这里是要读设置BANK的寄存器。这个指令在手册上有说明,不知为何这里不支持。后面的定义SPINOR_OP_RDEAR就是C8h,修改一下。

-		 JEDEC_MFR(info) == SNOR_MFR_ISSI)
+		 JEDEC_MFR(info) == SNOR_MFR_ISSI ||
+		 JEDEC_MFR(info) == SNOR_MFR_WINBOND)

再编译一次,跑一下。

root@ax7021:/dev# dmesg | grep spi
m25p80 spi0.0: w25q256 (32768 Kbytes)
4 fixed-partitions partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":

OK,SPI-FLASH这边就没有问题了。


中间还有这样的一个报错:

[INFO] building project
[INFO] sourcing bitbake
ERROR: Failed to source bitbake
ERROR: Failed to build project

不管使用任何petalinux的命令都是这样。
查看日志:/home/godenfreemans/FTP_Folder/project_1/project_1.petalinux/build/build.log,发现这么一段:

ERROR: No space left on device or exceeds fs.inotify.max_user_watches?
ERROR: To check max_user_watches: sysctl -n fs.inotify.max_user_watches.
ERROR: To check max_user_watches: sysctl -n fs.inotify.max_user_watches.
ERROR: To modify max_user_watches: sysctl -n -w fs.inotify.max_user_watches=<value>.
ERROR: To modify max_user_watches: sysctl -n -w fs.inotify.max_user_watches=<value>.
ERROR: Root privilege is required to modify max_user_watches.
ERROR: Root privilege is required to modify max_user_watches.

按照操作执行后得到8192,这个东西感觉像是文件的监视器??一个用户可以同时监视(比方说打开)的文件数量。
使用下面的命令把它改大一点,128000,然后就可以正常编译了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PetaLinux学习笔记 3 的相关文章

  • docker 命令详解(十八):port

    一 命令作用 列出指定的容器的端口映射 xff0c 或者查找将 PRIVATE PORT NAT 到面向公众的端口 二 命令语法 docker port OPTIONS CONTAINER PRIVATE PORT PROTO 三 使用示例
  • 在Ubuntu 20.04上面搭建嵌入式开发环境

    电脑系统盘出故障了 xff0c 重新安装了Ubunt20 04 xff08 之前用的是18 04 日常工作编译基于Rockchip和AM335x系列芯片的内核和U boot比较多 xff0c 所以先搭建它们的开发环境 包括并不限依赖的库和常
  • 自下而上和自上而下的注意力:不同的过程和重叠的神经系统 2014sci

    摘要 大脑在处理物理世界中任何时刻出现的所有感官刺激的能力是有限的 xff0c 相反 xff0c 它依赖于根据瞬间的偶然性集中神经资源的注意力的认知过程 注意可以分为两种不同的功能 自下而上的注意 xff0c 指的是单纯 由外部 驱动因素对
  • Python爬虫抓取基金数据

    Python做网络爬虫需要学习额外基本知识 xff1a 1 HTML 基金所需的数据都通过HTML网页的形式返回 xff0c 数据和HTML tag通过一定的规范组成渲染后的形成网页 了解HTML是为了有效地剥离数据 2 Python的正则
  • ASN1.c v2x开发记录

    一 工具安装及使用 Asn1c编解码器代码git xff1a https github com vlm asn1c 当前主线版本为0 9 29 发布最新版本为0 9 28 将文件解压后 xff0c 依次执行 xff08 1 xff09 te
  • 高德地图api开发记录

    1 高德地图api使用讲解 https blog csdn net Augenstern QXL article details 120488096 具体的使用可以参考高德官方提供的demo和参考手册 2 地图坐标问题 高德地图使用的地图坐
  • vsphere远程访问ESXI端口

    如果要让VM ESXI在外网供用户访问的话 xff0c 要在路由器上面设置两个端口443 902 其中443 端口 主要 负责 别名 讯息 的 传递 xff0c 而 902 端口 主要 负责 远端 控制台 画面 的 传递 vsphere版本
  • CentOS7 下源码安装MPlayer播放器

    最近学习了build源码安装软件 xff0c 老师布置的习题 xff0c 用所学过的知识安装mplayer播放器 通过上网我了解到在linux系统下 xff0c mplayer播放器十分强大好用 但是 xff0c 在安装的过程中遇到了很多问
  • centos7 安装 mariadb 及安装设置

    使用的是linode的centos7系统 xff0c 安装mysql发现已经默认的是mariadb 但是不管是使用linode官网说明还是百度搜索到的的根本安装方法无法安装成功 总是提示这一句 xff1a ERROR 2002 HY000
  • Win8.1和Centos 7双系统, 磁盘挂在问题,Unable to access “ *** Volume”

    在装好Centos7后 xff0c 打开Win8 1系统磁盘时 xff0c 会有如下提示 xff1a Unable to access 70 GB Volume Error mounting dev sda1 at run media yo
  • 编译原理 FIRST集和FOLLOW集的求法

    前几日纠结于编译原理的First 和 Follow集合的求法 xff0c 然后发现了一片不错的博文 xff0c 记于此 原文地址 xff1a http blog sina com cn s blog a1132bf901011ylj htm
  • 今天装gocoed 出现了%path没有设置,不能进行

    今天安装gocode xff0c 虽然设置了Path xff0c 但是还是因为没有设置好 path xff0c 而不能进行 最终我找到了一篇博文 xff0c 结局了这个问题 windows 用户需要 go get u ldflags H 6
  • Broadcom Corporation BCM43227,Linux下安装网卡驱动

    平时喜欢倒腾 xff0c 特别是电脑系统的安装方面 xff0c 我基本上安装过所有系统 xff0c 在我买电脑的2年时间里 但是 xff0c 一直有个问题困扰着我 xff0c 那就是在Ubuntu xff0c Linux Mint等系统下
  • 官网下载Google Chrome离线安装包

    一直在用Google Chrome浏览器 xff0c 不过安装过chrome 的朋友都知道 xff0c 从Google官方下载安装chrome xff0c 会先下载一个小的安装管理程序 xff0c 安装时再从google 下载所需的安装文件
  • VSCode安装go语言开发环境,go插件问题解决

    在安装go插件时 xff0c 会自动更新很多依赖库文件 xff0c 都是从Github更新下来 xff0c 但是因为Github的文件中 xff0c 多有应用go官网中的文件 xff0c 导致 xff0c 因为网络缘故 xff0c 不能直接
  • VNC连接Ubuntu 16.04桌面灰色的问题解决

    1 安装gnome apt get install no install recommends ubuntu desktop gnome panel gnome settings daemon metacity nautilus gnome
  • Linux用diff比较两个文件的差异

    功能 xff1a 比较两个文件的差异 xff0c 并把不同地方的信息显示出来 语法 xff1a diff options FILES FILES的格式 xff1a FILE1 FILE2 xff1a 源是一个文件 xff0c 目标也是文件
  • 基于Qt的GPS导航系统软件源代码

    博主按 xff1a 这是我当初为了学习C 43 43 而给自己定的一个项目 xff0c 基本上实现了 通过这个项目可以说基本上掌握了C 43 43 和Qt的编程 现在将源码贡献出来给初学Qt的同志一些参考 当然其中肯定有不少地方是有问题的
  • (二十)ATP应用测试平台——websocket实现微服务版在线客服聊天室实战案例

    前言 在前面的博客内容中我们介绍了如何使用websocket实现一个网页版的在线客服聊天室 xff0c 众所周知 xff0c 由于websocket是一个长连接 xff0c 要和服务端保持会话连接 xff0c 所以其本身并不适用于微服务环境
  • 启动vncserver服务,并设置开机自启

    systemctl start vncserver 64 1 service amp amp systemctl enable vncserver 64 1 service 无论你是做网站工作 xff0c 还是运行一个家庭远程服务器 xff

随机推荐

  • "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

    参考资料 xff1a https blog lmlphp com archives 437 PHP 7 3 classic error continue targeting switch 找到代码那一行 xff0c 修改 xff0c 保存即
  • SLAM学习笔记2:Kalman Filter(卡尔曼滤波) 与Least Square(最小二乘法) 的比较

    对于一个问题的解决 xff0c 最根本在于怎样对它进行数学建模 对SLAM问题的建模 xff0c 基本上是基于filter和graph两大类 xff0c 今天整理了一下 xff0c 对比两种模型的区别及共性 主要参考这篇讲解 xff1a h
  • RTC实时时钟特征与原理

    RTC定义 RTC是个独立的定时器 RTC模块拥有一个连续计数的计数器 xff0c 在相应的软件配置下 xff0c 可以提供时钟日历的功能 修改计数器的值可以重新设置当前时间和日期 RTC模块和时钟配置系统 RCC BDCR寄存器 是在后备
  • 树莓派配置,小白教程,无键盘显示屏鼠标

    树莓派配置 xff0c 小白教程 xff0c 无键盘显示屏鼠标 实验步骤 xff1a xff08 1 xff09 在树莓派官网下载树莓派的系统 树莓派官网下载地址 xff1a http www raspberrypi org downloa
  • CAN总线综述-转发一篇关于CAN总线的详细介绍文章

    CAN总线 一 原文出处 xff1a http www cnblogs com jacklu p 4729638 html 嵌入式的工程师一般都知道CAN总线广泛应用到汽车中 xff0c 其实船舰电子设备通信也广泛使用CAN xff0c 随
  • Python 安装 MaxMind GeoLite City

    1 先安装 geoip c library geoip c library gt 61 1 4 6 installed on your machine gt 61 1 4 6 installed on your machine wget h
  • 华为MA5626-8密码恢复

    设备型号 xff1a 华为MA5626 8 display version VERSION MA5626V800R308C00 PATCH SPC500 SPH505 HP5105 PRODUCT MA5626 准备工作 xff1a 超级终
  • SNMP 获取交换机端口相关信息

    我们想用snmpwalk查看网络设备的端口 xff0c MIB库中相关定义的信息如下 xff1a root 64 redcock lifeng snmpwalk v 2c c lifeng 192 168 100 100 注意后面的点 xf
  • phpMyAdmim和Yii 连接Mysql报错。

    故障 xff1a 之前phpMyAdmim和Yii连接Mysql都好着的 xff0c 某天 xff0c 同时出现如下报错 xff1a 1 linux下phpMyAdmin 出现 缺少 mysqli 扩展 xff0c 请检查 PHP 配置 2
  • linux shell 执行多个命令的方法

    xff08 1 xff09 在每个命令之间用 xff1b xff08 分号 xff09 隔开 xff08 2 xff09 在每个命令之间用 amp amp 隔开 amp amp 表示 xff1a 若前一个命令执行成功 xff0c 才会执行下
  • ARP 属于哪层协议

    教材上把ARP 协议划到网络层 xff0c 是因为 ARP 协议属于 TCP IP 协议簇 在TCP IP 模型中 xff0c 它所有定义的协议是在网际层上的 再看按照OSI 的标准 xff0c 数据在传递时每层会加上自己的信息 当网络层的
  • 什么叫一层交换机,二层交换机,三层交换机?

    转自 xff1a http blog csdn net happypolo article details 5934429 简单地说 xff1a 一层交换机 只支持物理层协议 电话程控交换机可以算一个 二层交换机 支持物理层和数据链路层协议
  • Linux Shell 脚本中字符串的连接方法

    Linux Shell 脚本中字符串的连接方法 如果想要在变量后面添加一个字符 xff0c 可以用一下方法 xff1a value1 61 home value2 61 value1 34 61 34 echo value2 把要添加的字符
  • linux 如何将路径加入环境变量

    PATH 61 PATH 后面加路径 PATH是环境变量 要大写那几个目录是你放置linux命令的目录 输入命令后系统会去PATH中寻找是否存在该命令 查看当前环境变量 echo PATH也可以用set命令看一下设置 export PATH
  • expect spawn、linux expect 用法

    使用expect实现自动登录的脚本 xff0c 网上有很多 xff0c 可是都没有一个明白的说明 xff0c 初学者一般都是照抄 收藏 可是为什么要这么写却不知其然 本文用一个最短的例子说明脚本的原理 脚本代码如下 xff1a usr bi
  • python 调用 shell python shell 间变量传递

    python gt shell xff1a 1 环境变量 python view plain copy print import os var 61 123 或var 61 123 os environ var 61 str var env
  • vSphere,ESXi和vCenter 的区别

    最近在看 VMware 一直没有搞清楚这几个产品之间的区别和联系 正好在网上搜索到一个好文 xff0c 翻译下来 本文翻译自 xff1a http www mustbegeek com difference between vsphere
  • equals和hashCode详解

    在学习的过程中 xff0c 特别是学习集合的时候 xff0c equals和hashCode一直是经常出现的方法 xff0c 而且在面试题中 xff0c 也经常出现equals和 61 61 的区别等问题 xff0c 现在我们就从底层详细的
  • NuttX的应用记录 4 (小记录)

    好久没看过NuttX了 xff0c 做个移植试一试 板子是STM32F407ZE xff0c 有两块屏幕 xff0c 蜂鸣器 xff0c FLASH xff0c E2PROM xff0c LED 先找个类似的 xff0c 复制一个副本 st
  • PetaLinux学习笔记 3

    过年回家没带开发板 终于可以搞一搞了 更新petaLinux到2019 2 重建项目 xff0c flash调整一下 启动过程中提示 xff1a m25p80 spi0 0 found w25q256 expected n25q512a m