设为首页 加入收藏

TOP

U-Boot代码运行问题解决
2014-11-24 11:52:46 来源: 作者: 【 】 浏览:0
Tags:U-Boot 代码 运行 问题 解决

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 (board\samsung\smdk6410) void nand_init(void)


2、Nand.c (drivers\nand) 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 (board\samsung\smdk6410) void nand_init(void)中的代码:




#if (CONFIG_COMMANDS & CFG_CMD_NAND) && defined(CFG_NAND_LEGACY)
#include
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


---------------------------------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇USB摄像头到ARM下图像显示方案 下一篇在Linux中用source,dot(.)和直接..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)
·整理了250个shell脚 (2025-12-26 07:53:29)
·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)