U-Boot代码运行问题处理
发布时间:2021-11-23 13:28:25 所属栏目:教程 来源:互联网
导读:1、 今天才发现的问题,关于U-Boot源码的运行问题。今天在分析U-Boot源码的start_armboot 函数中的源码时,遇到了下面这几行代码,如下所示: ------------------------------------------------------------ #if defined(CONFIG_NAND) puts (NAND: ); nand_i
1、 今天才发现的问题,关于U-Boot源码的运行问题。今天在分析U-Boot源码的start_armboot 函数中的源码时,遇到了下面这几行代码,如下所示: ------------------------------------------------------------ #if defined(CONFIG_NAND) puts ("NAND: "); nand_init();/* go init the NAND */ #endif ---------------------------------------------------------------------------------------------- 于是我就追踪nand_init()这个函数的源码,在两个地方出现了: -------------------------------------------------------------------------- 1、Smdk6410.c (boardsamsungsmdk6410) void nand_init(void) 2、Nand.c (driversnand) void nand_init(void) -------------------------------------------------------------------------- 于是我就很想当然的认为应该运行 上面 1 中的nand_init(void)函数(因为我关注的是smdk6410平台,当时还有点疑惑,为什么运行第一个而不是第二个?)结果证明我是错误的。 2、错误的发现。 我打开开发板运行时停在uboot下,通过 串口看到一个现象,如下所示: -------------------------------------------------------------------------------------------------- 很明显上面打印信息中的NAND是通过下面打印的,那s3c_nand_oob_mlc_128是在那里打印的呢? ------------------------------------------------------------------------- #if defined(CONFIG_NAND) puts ("NAND: "); nand_init();/* go init the NAND */ #endif ------------------------------------------------------------------------- 于是我就追踪s3c_nand_oob_mlc_128,结果发现,按在上面第 1 种方式调用函数根本就无法输出这样的信息,只有按第2中方式调用,才能打印出上面的信息,虽然证实了是第2中调用方式,但不太明白为什么? 3、 原来我忽略了一个很重要的问题--------------条件编译,直接看代码: --------------------------------------------------------------- 1、Smdk6410.c (boardsamsungsmdk6410) void nand_init(void)中的代码: #if (CONFIG_COMMANDS & CFG_CMD_NAND) && defined(CFG_NAND_LEGACY) #include <linux/mtd/nand.h> extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE]; void nand_init(void) { nand_probe(CFG_NAND_BASE); if (nand_dev_desc[0].ChipID != NAND_ChipID_UNKNOWN) { print_size(nand_dev_desc[0].totlen, "n"); } } #endif ![]() (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |