Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1380153
  • 博文数量: 860
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-20 19:57
个人简介

对技术执着

文章分类

全部博文(860)

文章存档

2019年(16)

2018年(12)

2015年(732)

2013年(85)

2012年(15)

我的朋友

分类: LINUX

2015-03-14 15:15:53

U-Boot的命令为用户提供了交互功能,并且已经实现了几十个常用的命令。如果开发板需要很特殊的操作,可以添加新的U-Boot命令。U-Boot的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在头文件中定义

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}

其中:

  • name:命令的名字,他不是一个字符串,不能用双引号括起来
  • maxargs:最大的参数个数
  • command:对应的函数指针
  • usage:一个字符串,简短的使用说明
  • help:一个字符串,比较详细的使用说明

对于bootm命令,其定义如下:

  1. U_BOOT_CMD(//bootm命令  
  2.     bootm,  CFG_MAXARGS,    1,  do_bootm,  
  3.     "bootm   - boot application image from memory\n",  
  4.     "[addr [arg ...]]\n    - boot application image stored in memory\n"  
  5.     "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"  
  6.     "\t'arg' can be the address of an initrd image\n"  
  7. #ifdef CONFIG_OF_FLAT_TREE  
  8.     "\tWhen booting a Linux kernel which requires a flat device-tree\n"  
  9.     "\ta third argument is required which is the address of the of the\n"  
  10.     "\tdevice-tree blob. To boot that kernel without an initrd image,\n"  
  11.     "\tuse a '-' for the second argument. If you do not pass a third\n"  
  12.     "\ta bd_info struct will be passed instead\n"  
  13. #endif  
  14. );  
U_BOOT_CMD(//bootm命令 bootm, CFG_MAXARGS, 1, do_bootm, "bootm - boot application image from memory\n", "[addr [arg ...]]\n - boot application image stored in memory\n" "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n" "\t'arg' can be the address of an initrd image\n" #ifdef CONFIG_OF_FLAT_TREE "\tWhen booting a Linux kernel which requires a flat device-tree\n" "\ta third argument is required which is the address of the of the\n" "\tdevice-tree blob. To boot that kernel without an initrd image,\n" "\tuse a '-' for the second argument. If you do not pass a third\n" "\ta bd_info struct will be passed instead\n" #endif );

bootm命令是用来引导经过U-Boot的工具mkimage打包后的kernel image的。U-Boot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。 mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么。

U-Boot正是通过bootm命令引导Linux内核的。bootm命令调用do_bootm函数,下面我们来分析一下:


do_bootm函数流程分析


do_bootm_linux函数

阅读(284) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~