- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
03U-Boot讲解
三 U-BOOT移植 三 U-BOOT移植 U-Boot启动流程之stage2 start_armboot函数是c语言的入口函数,定义在lib_arm/board.c中。 首先,初始化全局变量global_data: gd_base = CFG_UBOOT_BASE + CFG_UBOOT_SIZE - CFG_MALLOC_LEN - CFG_STACK_SIZE - sizeof(gd_t); gd = (gd_t*)gd_base; memset ((void*)gd, 0, sizeof (gd_t)); gd-bd = (bd_t*)((char*)gd - sizeof(bd_t)); memset (gd-bd, 0, sizeof (bd_t)); gd是全局变量的一个指针,始终保存在r8中。 global_data的成员大多是开发板的基本设置,如串口波特率、设备序列号、mac地址、启动参数存储地址等。 调用初始化序列: init_fnc_t *init_sequence[] = { board_init, // board/samsung/smdkc110/smdkc110.c中实现,主要BANK1 初始化、内核启动参数存放地址设置、ARCH_NUMBER设置 interrupt_init, //在cpu/s5pc11x/interrupts.c实现,初始化时钟中断 env_init, //在common/env_flash.c中实现,设置缺省环境变量 init_baudrate, //在lib_arm/board.c中实现,设置环境变量中的串口波特率 serial_init, //在common/serial.c中实现,初始化串口(硬件层面) display_banner, //在lib_arm/board.c中实现,打印U-Boot的banner dram_init, //在board/samsung/smdkc110/smdkc110.c中实现,初始化SDRAM NULL, }; U-Boot启动流程之stage2 start_armboot函数,定义在lib_arm/board.c中。 size = flash_init (); display_flash_config (size); puts (SD/MMC: ); mmc_exist = mmc_initialize(gd-bd); puts(NAND: ); nand_init(); puts(Net: ); eth_initialize(gd-bd); for (;;) { main_loop(); } /* 进入无限循环 */ U-Boot启动流程之stage2 main_loop函数是c语言的入口函数,定义在common/main.c中。 void main_loop (void) { s = getenv (bootdelay); bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY; s = getenv (bootcmd); if (bootdelay = 0 s !abortboot (bootdelay)) { run_command (s, 0); } } U-Boot启动流程之stage2 U-Boot启动Linux内核(1/3) ARM Linux Kernel Boot Requirements : 设置machine type number 定义 在include/configs/smdkv210single.h中 #define MACH_TYPE 2456 赋值(board_init函数中) gd-bd-bi_arch_number = MACH_TYPE; 把该值设置到环境变量中。 得到该值(do_bootm_linux函数中) bd_t *bd = gd-bd; int machid = bd-bi_arch_number; U-Boot启动Linux内核(2/3) do_boot_linux函数,在lib_arm/bootm.c中实现。 设置内核启动参数: setup_start_tag (bd); setup_serial_t
文档评论(0)