



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
U-Boot启动引导内核分析(二) 2011-03-23 09:20:00| 分类: 默认分类 | 标签: |字号大中小 订阅也许细心的你会问:我在用UBoot的时候并没有直接进入用户命令界面呀,而是在倒计时结束后自动引导kernel。这是怎么回事呢?在 main_loop()函数当中有如下一段代码:#if defined(CONFIG_BOOTDELAY) & (CONFIG_BOOTDELAY = 0) ? ? ?s = getenv (bootcmd); /*获取bootcmd 的内容*/ /*bootcmd=nand read 0x22000000 0xB0000 0x200000; bootm */ ? ?# ifndef CFG_HUSH_PARSER run_command (s, 0); /*运行s包含的命令*/ /*运行nand read 0x22000000 0xB0000 0x200000表示将NANDFLASH 0xB0000处数据读取放于0x22000000处,读取长度为0x200000 */ /*运行bootm命令,引导内核启动*/# else parse_string_outer(s, FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP);# endif ? ? ?#endif /* CONFIG_BOOTDELAY */bootm命令是什么?它是怎样引导内核的?要知道想解决这个问题,就要分析common/cmd_bootm.c中的函数do_bootm,因为引导kernel就是bootm这条命令的工作,do_bootm是命令bootm的执行函数。现在我们来分析一下common/cmd_bootm.c中的函数do_bootm,这是bootm命令的处理函数。int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv) ulong iflag; const char *type_name; uint unc_len = CFG_BOOTM_LEN; uint8_t comp, type, os; void *os_hdr; ulong os_data, os_len; ulong image_start, image_end; ulong load_start, load_end; ulong mem_start; phys_size_t mem_size; struct lmb lmb; memset (void *)&images, 0, sizeof (images); images.verify = getenv_yesno (verify); images.lmb = &lmb; lmb_init(&lmb); mem_start = getenv_bootm_low(); mem_size = getenv_bootm_size(); lmb_add(&lmb, (phys_addr_t)mem_start, mem_size); board_lmb_reserve(&lmb); /* get kernel image header, start address and length */ /* 获取内核镜像头信息 */ /* 打印 “# Booting kernel from Legacy Image at 22000000 . Image Name: Linux-2.6.30 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1507760 Bytes = 1.4 MB Load Address: 20008000 Entry Point: 20008000 Verifying Checksum . OK”*/ os_hdr = boot_get_kernel (cmdtp, flag, argc, argv, &images, &os_data, &os_len); if (os_len = 0) puts (ERROR: cant get kernel image!n); return 1; /* get image parameters */ /* 获取内核镜像格式 */ switch (genimg_get_format (os_hdr) case IMAGE_FORMAT_LEGACY: /* 获取内核镜像参数 */ type = image_get_type (os_hdr); comp = image_get_comp (os_hdr); os = image_get_os (os_hdr); image_end = image_get_image_end (os_hdr); load_start = image_get_load (os_hdr); break; image_start = (ulong)os_hdr; load_end = 0; type_name = genimg_get_type_name (type); /* 禁止所有中断 */ iflag = disable_interrupts();#ifdef CONFIG_AMIGAONEG3SE /* * Weve possible left the caches enabled during * bios emulation, so turn them off again */ icache_disable(); invalidate_l1_instruction_cache(); flush_data_cache(); dcache_disable();#endif switch (comp) case IH_COMP_NONE: /* 加载内核镜像 */ /* 打印“Loading Kernel Image . OK” */ if (load_start = (ulong)os_hdr) printf ( XIP %s . , type_name); else printf ( Loading %s . , type_name); memmove_wd (void *)load_start, (void *)os_data, os_len, CHUNKSZ); load_end = load_start + os_len; puts(OKn); break; puts (OKn); debug ( kernel loaded at 0x%08lx, end = 0x%08lxn, load_start, load_end); show_boot_progress (7); /* 加载错误 */ if (load_start image_start) debug (image_start = 0x%lX, image_end = 0x%lxn, image_start, image_end); debug (load_start = 0x%lx, load_end = 0x%lxn, load_start, load_end); if (images.legacy_hdr_valid) if (image_get_type (&images.legacy_hdr_os_copy) = IH_TYPE_MULTI) puts (WARNING: legacy format multi component image overwrittenn); else puts (ERROR: new format image overwritten - must RESET the board to recovern); show_boot_progress (-113); do_reset (cmdtp, flag, argc, argv); show_boot_progress (8); lmb_reserve(&lmb, load_start, (load_end - load_start); switch (os) default: /* handled by (original) Linux case */ case IH_OS_LINUX:#ifdef CONFIG_SILENT_CONSOLE fixup_silent_linux();#endif /* 引导内核启动函数 */ do_bootm_linux (cmdtp, flag, argc, argv, &images); break; show_boot_progress (-9);#ifdef DEBUG p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保险专业知识培训课件
- 传染病知识培训课件
- 2025-2026学年西藏自治区拉萨市拉萨那曲第二高级中学高三物理第一学期期末教学质量检测试题
- 项目管理办法与罚款
- 项目部节约管理办法
- 高收益投资管理办法
- 企业高层安全培训课件
- 企业领导班子安全培训课件
- 2025年中央一号文件测试题(含答案)
- 2025年西藏高考文科综合考试卷及答案
- 2025新疆天泽和达水务科技有限公司部分岗位社会招聘28人笔试备考试题及答案解析
- 《生成式人工智能基础与应用》高职AIGC应用基础课程全套教学课件
- 2《中国人首次进入自己的空间站》课件【知识精研】统编版语文八年级上册
- 文档简谱视唱
- 实验动物遗传学及质量控制课件
- 新能源概论全解课件
- 《中国的行政区划》- 完整版课件
- 《中国公民科学素质基准》题库500题(精品)
- 机器视觉技术及应用全套课件完整版电子教案最新板
- Minitab教程源数据及六西格玛绿带手册相关工作表 鱼骨图
- 35KV集电线路铁塔组立专项方案
评论
0/150
提交评论