u-boot 启动过程 —— 基于S3C2410
时间:11-10
来源:互联网
点击:
然后在一个for循环中从init_sequence地址开始,逐个调用初始化C函数至NULL为止。这些routine函数按调用顺序分别是
- cpu_init() ——在common/main.c文件,执行初始化中断栈操作
- board_init() ——在board/neo1973/gta01/gta01.c文件中,执行板级初始化,主要是更新GPIO和PLL设置
- interrupt_init() ——在/cpu/arm920t/s3c24x0/interrupts.c文件中,执行时钟中断初始化
- env_init() ——在common/env_nand.c文件中,设置缺省环境变量
- init_baudrate() ——在lib_arm/board.c文件中,将环境变量中的baudrate存入bd_info结构bd
- serial_init() ——在common/serial.c文件中,调用驱动中真正的init()初始化串口
- console_init_f() ——在common/console.c文件中,更新global_da
ta结构gd的have_console标记为1 - display_banner() ——在lib_arm/board.c文件中,打印u-boot banner,输出版本、运行地址等信息。比如在控制台看到的
- init_func_i2c() ——在lib_arm/board.c文件中,初始化i2c总线
- dram_init() ——在board/neo1973/gta01/gta01.c文件中,填充bd->bi_dram[0]的start和size成员,用来描述u-boot可用的ram
- display_dram_config() ——在board/neo1973/gta01/gta01.c文件中,打印当前ram配置。在控制台能够看到相应的 DRAM: 128 MB
利用gdb可以清晰的看到调用过程:
DE> DE> DE>for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { DE> DE> DE> DE> DE> DE>if ((*init_fnc_ptr)() != 0) { DE> DE> DE> DE> DE> DE> DE> DE>hang (); DE> DE> DE> DE> DE> DE>} DE> DE> DE> DE>} DE>
接着是一些可选外设的初始化,如显示屏、nor、nand、dataflash、网卡等,此过程执行后全部初始化工作完成。下面仅粘贴nor代码:
DE>#ifndef CFG_NO_FLASH DE> DE> DE> DE>/* configure available FLASH banks */ DE> DE> DE> DE>size = flash_init (); DE> DE> DE> DE>display_flash_config (size); #endif /* CFG_NO_FLASH */ DE>
之后在457行进入无限循环,调用common/main.c文件的278行main_loop()函数,u-boot完成启动过程。main_loop提供一个交互式命令行,可通过串口或usb控制台操作,也可以进一步引导操作系统:
DE> DE> DE>for (;;) { DE> DE> DE> DE> DE> DE>main_loop (); DE> DE> DE> DE>} DE>
u-boot启动过程S3C241 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)