分页: 1 / 1

[讨论]关于UBOOT的初始化函数跳转

发表于 : 2007-12-16 2:03
SUPERFIGHT

代码: 全选

 
    typedef int (init_fnc_t) (void);

    init_fnc_t *init_sequence[] = {
    cpu_init,       /* basic cpu dependent setup */
    board_init,     /* basic board dependent setup */
    interrupt_init,     /* set up exceptions */
    env_init,       /* initialize environment */
    init_baudrate,      /* initialze baudrate settings */
    serial_init,        /* serial communications setup */
    console_init_f,     /* stage 1 init of console */
    display_banner,     /* say that we are here */
    dram_init,      /* configure available RAM banks */
    display_dram_config,  

    #if defined(CONFIG_VCMA9)
    checkboard, 
    #endif

    NULL,

    };

代码: 全选

 
    for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
        if ((*init_fnc_ptr)() != 0) {
              hang ();
         }
    }
如何知道跳转到相应的主板和CPU的初始化函数?~ 是不是还有个连接文件之类的用来指明跳转路径? ~

我看不大明白~ 谢谢大家~

发表于 : 2007-12-16 2:08
晶晶守护神
应该是中断不是函数 。。是固定值 ~~ 我只是推测不做这个不清楚

发表于 : 2007-12-16 2:18
SUPERFIGHT
我的理解是 这是个指针数组 里面的每个指针都是 int (init_fnc_t) (void) 型的~

然后通过不断读取来跳转到初始化函数~

不过怎么跳转的不大清楚~

Re: [讨论]关于UBOOT的初始化函数跳转

发表于 : 2007-12-17 1:26
yuefengleeU
SUPERFIGHT 写了:

代码: 全选

 
    typedef int (init_fnc_t) (void);

    init_fnc_t *init_sequence[] = {
    cpu_init,       /* basic cpu dependent setup */
    board_init,     /* basic board dependent setup */
    interrupt_init,     /* set up exceptions */
    env_init,       /* initialize environment */
    init_baudrate,      /* initialze baudrate settings */
    serial_init,        /* serial communications setup */
    console_init_f,     /* stage 1 init of console */
    display_banner,     /* say that we are here */
    dram_init,      /* configure available RAM banks */
    display_dram_config,  

    #if defined(CONFIG_VCMA9)
    checkboard, 
    #endif

    NULL,

    };

代码: 全选

 
    for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
        if ((*init_fnc_ptr)() != 0) {
              hang ();
         }
    }
如何知道跳转到相应的主板和CPU的初始化函数?~ 是不是还有个连接文件之类的用来指明跳转路径? ~

我看不大明白~ 谢谢大家~
In my opinion,

代码: 全选

/ *        定义个函数指针类型 init_fnc_t         */
typedef int (init_fnc_t) (void);  

代码: 全选

/*以下定义一个函数指针数组init_sequence[],并用'硬件初始化函数名'来初始化此数组。*/
init_fnc_t *init_sequence[] = {
    cpu_init,       /* basic cpu dependent setup */
    board_init,     /* basic board dependent setup */
    interrupt_init,     /* set up exceptions */
    env_init,       /* initialize environment */
    init_baudrate,      /* initialze baudrate settings */
    serial_init,        /* serial communications setup */
    console_init_f,     /* stage 1 init of console */
    display_banner,     /* say that we are here */
    dram_init,      /* configure available RAM banks */
    display_dram_config,  

    #if defined(CONFIG_VCMA9)
    checkboard, 
    #endif

    NULL,

    };

代码: 全选

 
/*使用循环分别调用’硬件初始化函数‘,  直到  数组init_sequence[] 的最后一个元素NULL 结束 循环。*/
    for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
        if ((*init_fnc_ptr)() != 0) {  /*当非成功返回(0),跳转至hang()*/
              hang ();
         }
    }

That's all.

发表于 : 2007-12-17 1:48
晶晶守护神
SUPERFIGHT 写了:我的理解是 这是个指针数组 里面的每个指针都是 int (init_fnc_t) (void) 型的~

然后通过不断读取来跳转到初始化函数~

不过怎么跳转的不大清楚~
爱一个意思就是中断 怎么跳转的可以看一下相关的cpu体系结构~~不半说来都差不多~~
现场保护 中断 恢复现场 返回 ~~

发表于 : 2008-01-02 13:08
cherry4
make xxx_config时指定了体系结构和处理器类型,
编译时就去指定的目录下去编译。

Re: [讨论]关于UBOOT的初始化函数跳转

发表于 : 2008-01-02 22:51
wiseman
就是一组函数指针,有的需要自己写具体的函数实现,跟中断没有什么关系

Re: [讨论]关于UBOOT的初始化函数跳转

发表于 : 2008-10-21 11:33
fghgje
wiseman 写了:就是一组函数指针,有的需要自己写具体的函数实现,跟中断没有什么关系
同样观点

Re: [讨论]关于UBOOT的初始化函数跳转

发表于 : 2009-03-06 22:47
jeffzhou
同意四楼的