分页: 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
同意四楼的