0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

cmd_tbl_t结构体变量调用命令信息

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-04 17:37 次阅读

一个cmd_tbl_t结构体变量包含了调用一条命令的所需要的信息

  • • 对于环境变量bootcmd,执行run_command(bootcmd, flag)之后,最终是将bootcmd中的参数解析为命令,海思hi3521a中默认参数是bootcmd=bootm 0x82000000
  • • 相当于执行bootm 0x82000000 命令
  • • 最终将调用do_bootm函数,do_bootm函数在cmd_bootm.c中实现

图片

在这个里面有一个函数:

int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
{
    bd_t *bd = gd- >bd;
    char *s;
    int machid = bd- >bi_arch_number;
    void (*theKernel)(int zero, int arch, uint params);
 
#ifdef CONFIG_CMDLINE_TAG
#ifdef CONFIG_HI3536_A7
    char *commandline = getenv("slave_bootargs");
#else
    char *commandline = getenv("bootargs");   //(1)
 
#endif
#endif
 
    if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
        return 1;
 
    theKernel = (void (*)(int, int, uint))images- >ep; //(2)
 
    s = getenv ("machid");       //(3)
    if (s) {
        machid = simple_strtoul (s, NULL, 16);
        printf ("Using machid 0x%x from environmentn", machid);
    }
 
    show_boot_progress (15);
 
    debug ("## Transferring control to Linux (at address %08lx) ...n",
           (ulong) theKernel);
 
 
    setup_start_tag (bd);     //(4)
 
    setup_memory_tags (bd);     
    setup_commandline_tag (bd, commandline); //(5)
 
    if (images- >rd_start && images- >rd_end)  
        setup_initrd_tag (bd, images- >rd_start, images- >rd_end);
 
    setup_eth_use_mdio_tag(bd, getenv("use_mdio"));
    setup_eth_mdiointf_tag(bd, getenv("mdio_intf"));
    setup_ethaddr_tag(bd, getenv("ethaddr"));   
 
    setup_end_tag (bd);      //(6)
 
 
    /* we assume that the kernel is in place */
    printf ("nStarting kernel ...nn");
 
#ifdef CONFIG_USB_DEVICE
    {
        extern void udc_disconnect (void);
        udc_disconnect ();
    }
#endif
 
    cleanup_before_linux ();   //(7)
 
    theKernel (0, machid, bd- >bi_boot_params); //(8)
    /* does not return */
 
    return 1;
}
  • • (1)获取环境变量bootargs中的值,该环境变量用来传递参数给kernel
  • • (2)images->ep的地址是kernel的程序的入口地址,也就是将函数指针theKernel指向kernel最先执行的地方。
  • • (3)获取环境变量machid,这个应该是机器码,海思设备没有定义在环境变量中
  • • (4)这里是建立一个链表用来存放传递给内核的参数,在board_init函数中有赋值 gd->bd->bi_boot_params = CFG_BOOT_PARAMS; CFG_BOOT_PARAMS = 0x80000000 + 0x0100 = 0x80000100
  • • (5)将commandline的值添加到链表中
  • • (6)结束参数的填充
  • • (7)启动linux内核前的一个清除操作,主要是关闭中断,关闭缓存等操作
  • • (8)由前面我们知道theKernel实际指向的是kernel的入口地址,执行这一句之后,uboot就结束了运行,kernel正式运行就从这里开始。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11196

    浏览量

    208668
  • 函数
    +关注

    关注

    3

    文章

    4276

    浏览量

    62303
  • Uboot
    +关注

    关注

    4

    文章

    125

    浏览量

    28122
  • 结构体
    +关注

    关注

    1

    文章

    129

    浏览量

    10822
收藏 人收藏

    评论

    相关推荐

    瀚海微SD NAND存储功能描述(8)专用命令CMD55 56

    应用专用命令app_cmd (CMD55) 当卡接收到这个命令时,会使卡将下面的命令解释为一个特定于应用程序的
    的头像 发表于 08-08 10:39 1049次阅读
    瀚海微SD NAND存储功能描述(8)专<b class='flag-5'>用命令</b><b class='flag-5'>CMD</b>55  56

    cmd用命令大全 cmd运行命令

    cmd用命令大全 cmd运行命令
    发表于 08-15 20:25

    【ok210试用体验】如何添加一个简单的U-boot命令

    、属性、是否可重复、名称、短帮助信息,长帮助信息。 因此,我们可以建立一个简单的命令: #include #include intdo_hello (cmd_tbl_t *cmdt
    发表于 09-23 18:11

    嵌入式Linux学习引导-Uboot移植之添加自定义命令

    cmd_tbl_t结构。然后run_command函数使用返回的cmd_tbl_t结构中的函数指针调用hello
    发表于 02-16 17:19

    U_BOOT_CMD宏将cmd_tbl_t结构放在u_boot_cmd段中的过程是以下这样的吗?

    最近在着手移植UBOOT,对于U_BOOT_CMD宏将cmd_tbl_t结构放在u_boot_cmd段中的过程不是很确定,请教下各位。对于
    发表于 09-02 05:45

    常见的CMD命令CMD命令调用步骤

    Java基础——调用CMD命令
    发表于 11-08 08:43

    批处理常用命令大全

    批处理常用命令大全: 批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系
    发表于 12-08 10:20 0次下载
    批处理常<b class='flag-5'>用命令</b>大全

    cmd用命令大全 cmd运行命令

    cmd用命令大全 2K和XP下的CMD命令 accwiz.exe > 辅助工具向导
    发表于 01-08 09:12 3.1w次阅读

    TMS320F28335_CMD命令

    TMS320F28335_CMD命令TI的TMS320F28335_CMD命令
    发表于 06-22 15:01 16次下载

    CMD命令行高级教程

    CMD命令行高级教程
    发表于 10-24 08:31 30次下载
    <b class='flag-5'>CMD</b>的<b class='flag-5'>命令</b>行高级教程

    cmd用命令大全

    Windows系统,还是离不开DOS命令的操作。学习DOS系统操作,首先了解命令提示符。先了解每个命令提示符的作用,然后才能够灵活运用。下面将详细的为大家介绍cmd
    的头像 发表于 02-07 10:55 2.5w次阅读
    <b class='flag-5'>cmd</b>常<b class='flag-5'>用命令</b>大全

    C语言常用命令设计的实验程序资料说明

    本文档的主要内容详细介绍的是C语言常用命令设计的实验程序资料说明 1. 熟悉和掌握包括顺序结构、选择结构、循环结构、函数、数组、结构
    发表于 11-02 17:18 7次下载
    C语言常<b class='flag-5'>用命令</b>设计的实验程序资料说明

    Uboot之命令行框架

    1 #include 2 #include 3 4 int do_cmdusr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) 5 { 6
    发表于 05-15 15:18 1677次阅读
    Uboot之<b class='flag-5'>命令</b>行框架

    Linux内核中Uboot命令处理

    完成。U-Boot在include/command.h中定义了一个非常重要的cmd_tbl_s结构,它在命令的实现方面起着至关重要的作用。 struct
    的头像 发表于 12-04 17:23 432次阅读

    Linux实用命令大全

    Linux实用命令大全
    的头像 发表于 10-23 13:50 154次阅读
    Linux实<b class='flag-5'>用命令</b>大全