OK6410A 开发板 (三) 11 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 命令的执行

本文主要是介绍OK6410A 开发板 (三) 11 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 命令的执行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.命令的注册
2.命令的调用
3.命令的执行
4.命令的返回
  • 1 命令的注册(以help为例)
cmd/help.c10 static int do_help(struct cmd_tbl *cmdtp, int flag, int argc,                    11            char *const argv[])                                                   12 {                                                                                13 #ifdef CONFIG_CMDLINE                                                            14     struct cmd_tbl *start = ll_entry_start(struct cmd_tbl, cmd);                 15     const int len = ll_entry_count(struct cmd_tbl, cmd);                         16     return _do_help(start, len, cmdtp, flag, argc, argv);                        17 #else                                                                            18     return 0;                                                                    19 #endif                                                                           20 }                                                                                21                                                                                  22 U_BOOT_CMD(                                                                      23     help,   CONFIG_SYS_MAXARGS, 1,  do_help,                                     24     "print command description/usage",                                           25     "\n"                                                                         26     "   - print brief description of all commands\n"                             27     "help command ...\n"                                                         28     "   - print detailed usage of 'command'"                                     29 );                                                                               ----------------------- 以上的代码展开为以下代码
----------------------- 具体怎么注册以及怎么查找的请参考 __attribute__
----------------------- __attribute__ demo : https://github.com/lisider/attribute_samplestatic int do_help(struct cmd_tbl *cmdtp, int flag, int argc,char *const argv[])
{struct cmd_tbl *start = ({ static char start[0] __attribute__((__aligned__(4))) __attribute__((unused, section(".u_boot_list_2_""cmd""_1"))); (struct cmd_tbl *)&start; });const int len = ({ struct cmd_tbl *start = ({ static char start[0] __attribute__((__aligned__(4))) __attribute__((unused, section(".u_boot_list_2_""cmd""_1"))); (struct cmd_tbl *)&start; }); struct cmd_tbl *end = ({ static char end[0] __attribute__((__aligned__(4))) __attribute__((unused, section(".u_boot_list_2_""cmd""_3"))); (struct cmd_tbl *)&end; }); unsigned int _ll_result = end - start; _ll_result; });return _do_help(start, len, cmdtp, flag, argc, argv);}struct cmd_tbl _u_boot_list_2_cmd_2_help __attribute__((__aligned__(4))) __attribute__((unused, section(".u_boot_list_2_""cmd""_2_""help"))) = { "help", 16, 1 ? cmd_always_repeatable : cmd_never_repeatable, do_help, "print command description/usage", "\n" "	- print brief description of all commands\n" "help command ...\n" "	- print detailed usage of 'command'", 
# 22 "../cmd/help.c" 3 4
((void *)0)
# 22 "../cmd/help.c"
, };
  • 2 命令的调用

cmd_call  被调用的时机1. bootcmd2. cmdline所有的命令的调用都是  cmd_call 调用的 // cmd_call  不直接调用 do_xxx以help 为例 , do_help的调用堆栈为 
cmd_callcmd_always_repeatable // 以该 字符串为关键字 在  全文搜索do_helpcommon/command.c 564-585
564 /**                                                                              
565  * Call a command function. This should be the only route in U-Boot to call      
566  * a command, so that we can track whether we are waiting for input or           
567  * executing a command.                                                          
568  *                                                                               
569  * @param cmdtp     Pointer to the command to execute                            
570  * @param flag      Some flags normally 0 (see CMD_FLAG_.. above)                
571  * @param argc      Number of arguments (arg 0 must be the command text)         
572  * @param argv      Arguments                                                    
573  * @param repeatable    Can the command be repeated                              
574  * @return 0 if command succeeded, else non-zero (CMD_RET_...)                   
575  */                                                                              
576 static int cmd_call(struct cmd_tbl *cmdtp, int flag, int argc,                   
577             char *const argv[], int *repeatable)                                 
578 {                                                                                
579     int result;                                                                  
580                                                                                  
581     result = cmdtp->cmd_rep(cmdtp, flag, argc, argv, repeatable);                
582     if (result)                                                                  
583         debug("Command failed, result=%d\n", result);                            
584     return result;                                                               
585 }  
  • 3 命令的执行(以help为例)
cmd/help.c// 想怎么写,就怎么写10 static int do_help(struct cmd_tbl *cmdtp, int flag, int argc,                    11            char *const argv[])                                                   12 {                                                                                13 #ifdef CONFIG_CMDLINE                                                            14     struct cmd_tbl *start = ll_entry_start(struct cmd_tbl, cmd);                 15     const int len = ll_entry_count(struct cmd_tbl, cmd);                         16     return _do_help(start, len, cmdtp, flag, argc, argv);                        17 #else                                                                            18     return 0;                                                                    19 #endif                                                                           20 }  
  • 4 命令的返回
返回时也是 cmd_call 检查的
命令的返回值1. 正确为02. 错误为非0

这篇关于OK6410A 开发板 (三) 11 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 命令的执行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007933

相关文章

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图