Embedded linux SPI NOR分区和u-boot C代码的读/写

Embedded linux SPI NOR分区和u-boot C代码的读/写,embedded-linux,beagleboneblack,u-boot,Embedded Linux,Beagleboneblack,U Boot,我们有基于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.

我们有基于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”)的操作?

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


但是,没有诸如“读取/写入/擦除分区”之类的概念,它们分别存在于NAND和SPIFLASH中。因此,在SPI NOR上定义分区不是很有用,除非要创建一个通用mtd命令(mtd write、mtd read、mtd erase…)。

“是否可以执行类似fd=open的操作(“/dev/mtd0”,仅适用于WRU)从u-boot代码?”u-boot不是一个操作系统,它只是一个引导加载程序。你不能在u-boot中编写代码。@sessyargc.jp谢谢你的关注,我同意u-boot代码可能不可能,但我也想知道它是否可能。我想知道u-boot是否使用Linux mtd驱动程序,那么就不可能像Linux一样使用它了。事实上,u-boot正在使用Linux mtd驱动程序的精简版本,但u-boot不具备使用u-boot的其他要求。首先,u-boot没有完整的文件系统。我同意你的观点。感谢你的回复。目前我们用eMMC替换了整个SPI+NAND组合,因此我们不需要这些更改。从更改来看与mtd一样,分区也可以处理这些更改。
/* 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;