Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112990
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-23 17:29
文章分类
文章存档

2014年(39)

2013年(10)

我的朋友

分类: 嵌入式

2014-02-07 13:34:05

原文地址:uboot 初始化循环体 作者:changyongID

第二阶段
lib_arm/board.c 中.直接进入 void start_armboot(void)

1. init_fnc_t **init_fnc_ptr;

typedef int (init_fnc_t) (void);


其中 init_fnc_t 如下,它是一个函数类型,该类型的函数参数都为空(void),且都返回整型值(int)

init_fnc_t *init_sequence[] = {
    //这里是一些函数名,即这个数组的成员
    NULL,
};



init_fnc_t **init_fnc_ptr;

那么这里就定义了变量init_fnc_ptr,它是一个指针变量,其中存的是另一个变量B的地址,而变量B也是一个指针变量,其中存的是init_fnc_t类型的函数的地址.


for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
        if ((*init_fnc_ptr)() != 0) {
            hang ();
        }
}


上面这个for语句,表可以用图来表示

init_fnc_ptr     数组,每个成员是某函数的地址
+---------+       +----------+
|         | ----->|          |  ---------------> int fun1(void)
+---------+       +----------+
                  |          |  ---------------> int fun2(void)
                  +----------+
                  |          |  ---------------> int fun3(void)
                  +----------+
                  |          |  ---------------> int fun4(void)
                  +----------+
++init_fnc_ptr 便指向了数组内的下一个成员。

//来看下初始化都执行的各个函数,其中除去了一些不会用到的函数

init_fnc_t *init_sequence[] = {

    cpu_init,       // cpu/arm920t/cpu.c 这里实际上是个空函数
    board_init,     // board/smdk2410/smdk2410.c 初始化时钟,初始各GPIO,

                    // 初始bd->bi_arch_number 、bd->bi_boot_params
    interrupt_init, // cpu/arm920t/s3c24x0/interrupts.c

                    // 这里初始2410的定时器
    env_init,       // common/env_nand.c

                    // 这里环境变量存储在nand中,初始gd中环境相关成员
    init_baudrate,  // lib_arm/board.c,初始bd_t结构中的波特率成员
    serial_init,    // cpu/arm920t/s3c24x0/serial.c 初始串口
    console_init_f, // common/console.c 初始gd_t中有关终端的成员
    display_banner, // lib_arm/board.c 打印一些板级的信息
    dram_init,      //
board/smdk2410/smdk2410.c

                    //初始化内存,即初始bd_t结构中有关内存的成员
    display_dram_config, //lib_arm/board.c 打印内存信息
    NULL,
};


紧接着对上述函数体做一一的分析。
阅读(984) | 评论(0) | 转发(0) |
0

上一篇:2. nand初始化

下一篇:2. interrupt_init

给主人留下些什么吧!~~