bootloader---2.U_BOOT_CMD分析

原创 2016年08月29日 13:48:17
start_armboot
{
}
main_loop
{
1. 环境变量mtdparts, 调用mtdparts_init
2. 如果在启动过程中  无空格键按下则boot_zImage
有空格键按下则 run_command("menu",0)
3. shell过程,读取用户端输入并执行相应的命令
{
从输入端获得命令,保存在全局变量comsole_buffer中
执行 run_command();
}
}

run_command
{
1. 对\;进行解析,划分出一个个完整的命令
2. 然后对每一个完整的命令执行:
{
parse_line
{
line 是指整个的命令行字符串;
假设line = nboot 0x32000000 kernel; bootm 0x32000000
先去掉开头的空格,
然后对命令进行解析,找到空格之后将空格替换为\0,这样解析出命令和参数
}
find_cmd(argv[0])
{
从 __u_boot_cmd_start 到 __u_boot_cmd_end 的array进行遍历,
从找到的cmd_tbl_t中,字符串寻找cmdtp->name与argv[0]相同的命令
}
找到命令后,调用cmd_tbl_t->cmd调用函数
}
}

1.
U_BOOT_CMD(
    mtdparts,   6,  0,  do_jffs2_mtdparts,
    "mtdparts- define flash/nand partitions\n",
    "\n"
);

cmd_tbl_t __u_boot_cmd_mtdparts Struct_Section = {mtdparts, 6, 0, do_jffs2_mtdparts, usage, help};

以下从doc/README.command 翻译
要想在u-boot中添加命令,必须新建一个command structure。要想创建一个command structure,则首先包含 "command.h" 头文件,然后用U_BOOT_CMD宏填充 cmd_tbl_t struct。
经过宏展开后新创建的这个结构体的名字会__u_boot_cmd开头,然后连接器会把这个结构体连接到指定的section上。
这样link才能从代码中提取所有的命令,生成一个静态的array。这样就可以通过遍历一个以__u_boot_cmd_starty开头的数组找到所要的命令。

1.
struct cmd_tbl_s {
    char        *name;      /* Command Name         */
    int     maxargs;    /* maximum number of arguments  */
    int     repeatable; /* autorepeat allowed?      */
                    /* Implementation function  */
    int     (*cmd)(struct cmd_tbl_s *, int, int, char *[]);
    char        *usage;     /* Usage message    (short) */
    char        *help;      /* Help  message    (long)  */
#ifdef CONFIG_AUTO_COMPLETE
    /* do auto completion on the arguments */
    int     (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
};

#define Struct_Section  __attribute__ ((unused,section (".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, help}

typedef struct cmd_tbl_s    cmd_tbl_t;

extern cmd_tbl_t  __u_boot_cmd_start;
extern cmd_tbl_t  __u_boot_cmd_end;

这里要看的是##name和#name这两个操作.##name将字符直接跟在后面, #name会将name这个字符中以"..."的形式放置。
1. 
U_BOOT_CMD(
    tftpboot,   3,  1,  do_tftpb,
    "tftpboot- boot image via network using TFTP protocol\n",
    "[loadAddress] [bootfilename]\n"
);

usage=    "tftpboot- boot image via network using TFTP protocol\n";
help=    "[loadAddress] [bootfilename]\n";

cmd_tbl_t __u_boot_cmd_tftpboot __attribute__ ((unused,section (".u_boot_cmd"))) = {"tftpboot", 3, 1, do_tftpb,     "tftpboot- boot image via network using TFTP protocol\n",
    "[loadAddress] [bootfilename]\n"};
    
int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
    return netboot_common (TFTP, cmdtp, argc, argv);
}

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/wangcong02345/article/details/52352466

jar包的分析

jar包(Java应用):.class文件+META-INF/MANIFEST.MF   java -jar XXX 运行jar包       JAR 文件就是 Java Ar...
  • tuhuolong
  • tuhuolong
  • 2010-09-27 15:22:00
  • 1277

Oracle-表分析和索引分析解读

概述当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息。 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CBO的机制就是收集尽可能多的对象信息和系统信息,通过对这...
  • yangshangwei
  • yangshangwei
  • 2016-12-01 23:16:53
  • 8532

独立成分分析及Demo

独立成分分析
  • hit1524468
  • hit1524468
  • 2017-03-05 12:03:49
  • 1415

敏感性分析

敏感性分析是投资项目的经济评价中常用的一种研究不确定性的方法。它在确定性分析的基础上,进一步分析不确定性因素对投资项目的最终经济效果指标的影响及影响程度。...
  • u013083076
  • u013083076
  • 2014-04-24 21:38:03
  • 1811

针对Oracle大表执行表分析

报表数据库相当于一个数据仓库,数据量一般来说都比较大,这个时候性能就要特别注意。为了促使Oracle选择最优的执行计划,最好定期进行表分析,以使oracle得到正确的统计信息。一般如果数据分布和表结构...
  • anttu
  • anttu
  • 2017-05-21 17:23:49
  • 3861

道路断面CAD分析V4.30版(内业隧道分析和道路分析专业版)

  • 2011年10月28日 15:07
  • 33.65MB
  • 下载

敏感性分析 弹性系数 浅析

敏感性定义:对于因变量有多个自变量决定的因素,通过使得其他自变量不变时,查看其中一个自变量变化一定范围,因变量的变化情况。 数学理解:简单一点就是函数f(x)的相对变化率,应该是f'(x)*x /f...
  • liyanzhong
  • liyanzhong
  • 2015-11-25 14:39:36
  • 1108

cpu过高分析

cpu过高分析
  • zhaozhenzuo
  • zhaozhenzuo
  • 2015-06-16 14:30:17
  • 1300

浅谈Core文件分析

由于计算机程序问题的发生是随机的,为了给定位问题提供一个接口,一些人发明了在发生问题后将内存中的进程相关信息格式化地保存在一个文件中的手段,以便于在发生问题而中断了进程的执行后,通过内存信息转储文件得...
  • fan9511
  • fan9511
  • 2014-07-23 14:05:27
  • 1638

智能视频分析

智能视频分析目前在国际上有多种叫法,比如VCA(Video Content Analysis)、VA(Video Analysis)、IVA(Intelligent Video Analytics)等...
  • tkp2014
  • tkp2014
  • 2015-06-14 12:41:07
  • 1154
收藏助手
不良信息举报
您举报文章:bootloader---2.U_BOOT_CMD分析
举报原因:
原因补充:

(最多只允许输入30个字)