【问题标题】:SPI NOR Partitioning and read/write from u-boot C code从 u-boot C 代码进行 SPI NOR 分区和读/写
【发布时间】:2014-11-24 09:42:17
【问题描述】:

我们有基于 BBB 的定制板,
我们板上有 SPI NOR 闪存和 NAND 闪存,
我们能够为 NAND 制作 mtd 分区。但是 NOR 分区不起作用 :(
我们添加了以下定义来制作 mtd NOR 分区。

#define MTDIDS_DEFAULT "nand0=omap2-nand.0, nor0=omap2-nor.0"
#define MTDPARTS_DEFAULT "mtdparts=omap2-nand.0:" \
"128k(SPL)," \
"128k(SPL.backup1)," \
"128k(SPL.backup2)," \
"128k(SPL.backup3)," \
"1024k(u-boot)," \
"1024k(u-boot.backup1)," \
"128k(u-boot-env)," \
"5m(kernel)," \
"5m(kernel.backup1)," \
"512k(fdt)," \
"512k(fdt.backup1)," \
"100m(rootfs)," \
"100m(rootfs.backup1)," \
"13m(reserved)," \
";" \
"mtdparts=omap2-nor.0:" \
"128k(SPL1_nor)," \
"128k(SPL2_nor)," \
"128k(SPL3_nor)," \
"128k(SPL4_nor)," \
"512k(usr_nor)," \

另一个疑问是, 是否可以在 u-boot 中使用 mtd 设备文件进行读/写?
据我了解,u-boot 也使用 Linux 的 mtd 驱动程序,所以
是否可以从 u-boot 代码中执行类似 fd = open("/dev/mtd0",O_WRONLY) 的操作?

【问题讨论】:

  • "是否可以从 u-boot 代码中执行 fd = open("/dev/mtd0",O_WRONLY) 之类的操作?" u-boot 不是一个操作系统,它只是一个引导加载程序。您不能在 u-boot 中执行该代码。
  • @sessyargc.jp 感谢您的关注,我同意 u-boot 代码可能无法实现,但我也很想知道它是否可行。我想知道 u-boot 是否使用 Linux mtd 驱动程序,那么是否可以像 Linux 一样使用它。
  • 确实 u-boot 使用的是精简版的 Linux mtd 驱动程序,但使用 u-boot 的其他要求对于 u-boot 不可用。一方面,u-boot 没有完整的文件系统。
  • 我同意你的观点。

标签: embedded-linux beagleboneblack u-boot


【解决方案1】:

为了允许对 SPI NOR 进行分区,我在 spi_flash_probe() 的末尾添加了以下内容:

/* Release spi bus */
spi_release_bus(spi);

extern nand_info_t nand_info[];
struct mtd_info *mtd;

mtd = &nand_info[1];
mtd->name = "nor0";
mtd->size = flash->size;
mtd->erasesize = flash->erase_size;
mtd->writesize = flash->page_size;
mtd->priv = flash;
mtd->_write = sf_mtdwrite;
mtd->_read = sf_mtdread;
mtd->_erase = sf_mtderase;
#ifdef CONFIG_MTD_DEVICE
add_mtd_device(mtd);
#endif

return flash;

但是,没有“读/写/擦除分区”等概念,它们分别存在于 NAND 和 SPIFLASH 中。因此,在 SPI NOR 上定义分区并不是很有用,除非要创建通用 mtd 命令(mtd 写入、mtd 读取、mtd 擦除...)。

【讨论】:

  • 感谢您的回复。目前我们用 eMMC 替换了整个 SPI + NAND 组合,所以我们不需要这些更改。从这些变化看来,mtd 分区也适用于这些变化。
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 2012-01-25
  • 2016-11-21
  • 2022-10-20
  • 2018-11-04
  • 1970-01-01
  • 2014-09-24
  • 2022-11-04
相关资源
最近更新 更多