【发布时间】:2015-03-09 14:47:56
【问题描述】:
大家好,我是 stackoverflow 的新手 我一直在研究我的项目中的 x-loader 代码,并尝试将现有的正在运行的 x-loader 移植到不同的芯片(这几乎相同,只是一些 gpios 发生了变化)。 但是我在理解这些行的 x-loader 和 u-boot 程序流程和要求方面遇到了一些问题 这是来自 lib/board.c 的行
if ((get_mem_type() == MMC_ONENAND) || (get_mem_type() == MMC_NAND)){
// First Try for NAND Boot
for (i = NAND_UBOOT_START; i < NAND_UBOOT_END; i+= NAND_BLOCK_SIZE){
if (!nand_read_block(buf, i))
buf += NAND_BLOCK_SIZE; /* advance buf ptr */
}
fio_pbias_init();
if( *((int *)CFG_LOADADDR) != 0xEA000012 ){
printf("NAND Does not have U-boot\n");
buf = (uchar*) CFG_LOADADDR;
buf += mmc_boot(buf);
}
}
什么是MMC_ONENAND,我google了一下,说也是nand,那为什么是另一个MMC_NAND
-
这些宏是什么
NAND_UBOOT_START=0x0080000 NAND_UBOOT_END=0x0100000为什么我们在x-loader中检查u-boot,它不应该先完成x-loader的任务吗?
谁能通俗地解释一下这个 nand_block_read,我不擅长内存分配之类的,因为我不明白为什么只有这个地址!!
-
这个检查的目的是什么
if( *((int *)CFG_LOADADDR) != 0xEA000012 )
这里 CFG_LOADADDR=0x80008000
我已经对所有这些进行了一些研究,但和往常一样,事情写得如此完美,以至于我无法理解。 也许这些是非常基本或愚蠢的问题,但我对此也很陌生。我需要以通俗的方式了解事物,以及为什么我们需要将这些事物作为它们在实际来源中的方式。 P.S 当我编译代码时,我在运行时从这个函数得到一些错误
omap_enable_hwecc_bch4(buf, &ecc_calc[0]);
这是在驱动程序中。我搜索了它,它说要报告 NAND 内存中的错误。这应该是什么意思,因为相同的代码在以前的芯片上运行完美,没有任何错误。
【问题讨论】:
-
您想将 U-Boot 移植到哪个部分?
-
当我编译代码时,我在运行时从这个函数得到了一些错误 这是什么意思?是你编译的时候,还是它在运行时?
标签: c linux embedded-linux boot u-boot