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

发布者:cloudy德德最新更新时间:2022-09-22 来源: csdn关键字:OK6410A  开发板  u-boo  命令 手机看文章 扫描二维码
随时随地手机看文章

1.命令的注册

2.命令的调用

3.命令的执行

4.命令的返回


1 命令的注册(以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 }                                                                                

 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 commandsn"                             

 27     "help command ...n"                                                         

 28     "   - print detailed usage of 'command'"                                     

 29 );                                                                               


----------------------- 以上的代码展开为以下代码

----------------------- 具体怎么注册以及怎么查找的请参考 __attribute__

----------------------- __attribute__ demo : https://github.com/lisider/attribute_sample


static 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 commandsn" "help command ...n" " - print detailed usage of 'command'", 

# 22 "../cmd/help.c" 3 4

((void *)0)

# 22 "../cmd/help.c"

, };


2 命令的调用


cmd_call  被调用的时机

1. bootcmd

2. cmdline


所有的命令的调用都是  cmd_call 调用的 // cmd_call  不直接调用 do_xxx


以help 为例 , do_help的调用堆栈为 

cmd_call

cmd_always_repeatable // 以该 字符串为关键字 在  全文搜索

do_help


common/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                                                                                  

[1] [2]
关键字:OK6410A  开发板  u-boo  命令 引用地址:OK6410A 开发板 (三) 11 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 命令的执行

上一篇:OK6410A 开发板 (三) 12 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 boot 详细解析1
下一篇:OK6410A 开发板 (三) 10 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 cmdline

推荐阅读最新更新时间:2024-11-05 08:49

迅为iTop开发板使用buildroot构建opencv文件系统
这次我们来介绍使用buildroot构建opencv开发环境,buildroot 是 Linux平台上一个构建嵌入式Linux系统的框架。整个buildroot是由 Makefile脚本和Kconfig配置文件构成的。可以和编译Linux内核一样,通过 buildroot 配置,menuconfig 修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统。 1、源码下载: buildroot官网获取源码包 http://buildroot.uclibc.org/download.html 下载好之后我们把它放在ubuntu上并解压,法师这里使用的是ubuntu12.04。 2、配置: 在buildroot源码
[单片机]
迅为iTop<font color='red'>开发板</font>使用buildroot构建opencv文件系统
OK6410A 开发板 (八) 102 linux-5.11 OK6410A glibc提供的mmap的四种用途之一
OK6410A 开发板 (八) 102 linux-5.11 OK6410A glibc提供的mmap的四种用途之一 共享匿名映射两种方式 当使用参数 fd = -1 且 flags = MAP_ANONYMOUS | MAP_SHARED 时,创建的mmap 映射是共享匿名映射. 共享匿名映射让相关进程共享一块内存区域,通常用于父子进程之间的通信. 创建共享匿名映射有如下两种方式,这两种方法最终都调用shmem 模块来创建共享匿名映射 1. fd = -1,且 使用这个文件句柄来创建mmap(lags = MAP_ANONYMOUS | MAP_SHARED) . 在这种情况下,do_mmap_pgoff()- mma
[单片机]
基于ARM开发板的车辆检测系统控制单元设计
引言 由于交通需求的不断增加,有越来越多的环形感应线圈检测器用于交通检测。这些埋设在道路表面下的线圈可以检测到车辆通过时的电磁变化进而精确地算出交通流量。交通流量是交通统计和交通规划的基本数据,通过这些检测结果可以用来计算占用率(表征交通密度),在使用双线圈模式时还可以提供速度、车辆行驶方向、车型分类等数据,这些数据对于交通管理和统计是极为重要的。通常高速公路车辆检测系统由多通道环形检测单元LD4和控制单元CCU组成,本文采用PHILIPS公司最新推出的ARM7内核微处理器LPC2114设计实现了车辆检测系统控制单元部分,并且和5个LD4环形检测器一起构成10通道高速公路车辆检测系统。 LPC2114和电子硬盘连线示意图
[单片机]
基于ARM<font color='red'>开发板</font>的车辆检测系统控制单元设计
S3C2440 开发板实战(4):外部中断
最近学了一系列的中断程序,就复习下顺便撸一篇文来分享下学习。以外部中断为例(之前单片机用的最多的) 1. ARM 工作模式 ARM体系结构(除了Cortex之外支持7种工作模式),取决于程序状态寄存器中低5位的值(在第二部分会详细讲到) • User (usr): The normal ARM program execution state (用户模式:ARM程序的正常执行状态) • FIQ (fiq): Designed to support a data transfer or channel process (快速中断模式:处理高速中断用于高速数据传输或通道传输) • IRQ
[单片机]
S3C2440 <font color='red'>开发板</font>实战(4):外部中断
迅为6818开发板Android7.1系统烧写方法
硬件平台:iTOP-6818开发板 软件系统:Android 7.1系统 OTG 烧写环境 OTG 烧写只需要在 windows 环境,OTG 烧写方式首先要安装 ADB 驱动,参考使用手册 “3.6 小节安卓 ADB 功能介绍”。 然后需要用到 fastboot 工具,该工具在光盘目录“02_编译器以及烧写工具”下。 拷贝“fastboot”文件夹到桌面,或者其他不包含中文字符的目录。 烧写 Android 烧写 Android,首先需要将 Android 的镜像拷贝到“fastboot”目录下。 在光盘中“03_镜像_Android5.1 文件系统”目录下有“1G 内存 文件夹和”2G 内存“文件夹。核心板是 1G,则烧写
[单片机]
迅为6818<font color='red'>开发板</font>Android7.1系统烧写方法
迅为4412开发板项目实战-制作支持百度AI和opencv的文件系统
项目名称;图像识别项目 硬件平台:iTOP-4412开发板 本节课我们需要使用前面编译的好库,本节课也给大家提供了编译好的库,可以直接使用。接下来我们开始制作支持opencv和百度AI的文件系统。 环境:迅为提供的ubuntu16.04 制作根文件系统大家可以参考系统编程里面的制作最小文件系统的视频,这里就不再重新制作了。 一.添加openssl到文件系统 我们把制作好的根文件系统拷贝到ubuntu,这里我拷贝到了/home/baidu/root下面,如下图所示: 输入以下命令解压并进入解压生成的目录, tar -vxf iTOP-4412-QtE5.7_4412_elite.tgz cd root/ 把编
[单片机]
迅为4412<font color='red'>开发板</font>项目实战-制作支持百度AI和opencv的文件系统
联盛德W806-KIT开发板试用评测系列之二:ADC 功能使用与测试
今天着手对W806开发板ADC功能做测试,都知道ADC在物联网应用场景中常需要用到的一个重要技术。W806手册说这款芯片支持片内ADC,介绍是这样的: 片内集成 4 路 16 比特 ADC,最高采样率 1KHz。ADC基于Sigma-Delta ADC 的采集模块,完成最多 4 路模拟信号的采集,采样率通过外部输入时钟控制,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。 其管脚定义如下: 管脚 IO口名称 功能 上下拉能力 19 PA_1 ADC_1 UP/DOWN 20 PA_2 ADC_4 UP/DOWN 21 PA_3 ADC_3 UP/DOWN 22
[单片机]
联盛德W806-KIT<font color='red'>开发板</font>试用评测系列之二:ADC 功能使用与测试
Microchip推出两款全新基于PIC32 MCU的开发板
Microchip Technology Inc.(美国微芯科技公司)宣布,推出两款基于低引脚数32位PIC32单片机(MCU)的全新数字音频混合器板。DM320014是一款USB数字音频附件板,采用标准USB 2.0 Mini-B连接。DM320413是一款数字音频混合器板,可提供Apple® 便携设备连接。该两款开发板均采用Microchip的PIC32MX250F128 32位MCU,有助于实现面向广泛应用的音频和语音设备开发。 这两款开发板的设计旨在将数字和模拟音频轻松集成到目标应用中。其主要功能包括通过USB Mini-B或AppleiOS接口的数字音频接口、能够方便连接模拟音频源(如麦克风或乐器拾音器)的线路输
[单片机]
Microchip推出两款全新基于PIC32 MCU的<font color='red'>开发板</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved