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-19 17:46

51单片机学习总结系列(0)之单片机最小系统
学习51单片机接近两年了,最近总结一下51单片机学习,加上明年3月报了蓝桥杯大赛单片机类,也算是对比赛的准备。后续主要以蓝桥杯配的板子CT107D更新,还会加上平时遇到板子的模块以及自己做的一些小项目,每周保持更新,如果以下内容有问题,欢迎指正。(782373034@qq.com) 对于一个初学者来说,我个人认为第一个要了解的就是单片机最小系统,任何开发板也是在此基础上外加一系列外围电路模块。所以足以说明它的重要性。 下面先贴出51单片机最小系统图。 如图中所示,51单片机最小系统包括复位电路、时钟电路、EA拉高。图中P0口接了一个10K上拉电阻,主要是P0口驱动能力比较弱。下面分析最小系统各个部分。 时钟电路:单
[单片机]
51单片机学习总结系列(0)之单片机最小系统
u-boot-2011.06在基于s3c2440开发板的移植之编译配置
在移植之前,我们还需要安装、配置eldk,用于编译u-boot。下面我们就先介绍一下eldk的安装与配置: 1.下载eldk 在这里选择任一版本的eldk并下载,我选择的是eldk4.2版本的arm-2008-11-24.iso文件。把该文件下载到/home/zhaocj/download/目录下。 2.在root权限下安装eldk 创建挂载点: mkdir /mnt/dvdrom 挂载光驱: mount –o loop /home/zhaocj/download/arm-2008-11-24.iso/mnt/dvdrom 安装eldk: cd /mnt/dvdrom ./install –d /opt/eldk4.2/ 这样
[单片机]
OK6410A 开发板 (八) 54 linux-5.11 OK6410A 缺页异常实例分析
abort 异常解读(Prefetch Abort & Data Abort) instruction fetch memory abort data access memory abort 中止 在 内存访问流程中 ,ARM处理器可能会发生异常 异常的原因是中止(异常的访问),中止分为三种: MMU faults(4种) MMU检测到限制并向处理器发送信号。 Debug abort 监视器调试模式已启用,并且检测到断点或监视点。 External abort(三种) 外部内存系统发出非法或错误的内存访问信号。 中止产生了什么异常 MMU faults 如果中止的内存请
[单片机]
Centos上搭建能用于ok6410开发板的tftp服务器
用rpm -qa | grep tftp 检查是否安装tftp服务器 如果没有。tftp:yum install tftp*(yum install xinetd tftp tftp-server) Tftp的配置文件在 vi /etc/xinetd.d/tftp 修改tftpboot 的属性 chmod 777 -R tftpboot 修改下载路径; 重启:/etc/init.d/xinetd restart 检查tftp是否启动成功:netstat -a | grep tftp 在光盘上安装tftp服务器: 在centos的安装光盘中有RPM安装包,挂在光盘后进入到文件夹,找到相应的安装包。 ]# cd /media/ #
[单片机]
移植SSH到ARM Linux开发板成功
在移植到友善2440的时候很容易,因为他4.3.2交叉编译器等库文件做等好。但是在移植到天漠devkit8000时,遇到非常多的问题。一个月之前遇到问题没有找到-lgcc_s的问题一直没有解决,以致后来非常影响开发进度。最近决心解决这个问题,在google上查到没有找到lxx其实时没有找到libxxx.so,然后与友善2440比较了下,发现果真是arm-none-linux-gnueabi/libc/lib下缺少libgcc_s.so。最后一步问题总结是我编译的时候遇到等所有问题,后一一化解,成功移植。所以,如果你在编译等时候出错,查看最后的问题总结,应该可以找到答案。 步骤: 1.下载源码包,地址如下: openssh ht
[单片机]
MC9S12XS128多功能开发板学习笔记
#时钟的设置 时钟主要为三个寄存器的设置: SYNR; REFDV; POSTDIV; 使用的公式为: FVOC=2OSCCLK((SYNR+1)/(REFDV+1)) PLLCLK=FVCO/(2*POSTDIV) BusClock=PLLCLK/2 BusClock为总线频率(单片机实际运行频率); 首先默认两个数值 REFDV=1;POSTDIV=0;(POSTDIV为0时, PLLCLK=FVCO); FOSC为外部晶振频率 根据上图计算出REFCLK的范围确定REFDV的值,例如外部晶振为12MHZ; 我们需要48MHZ的频率,那么REFFRQ=01;REFDV=0x40|0x01; SYNR=7; 初
[单片机]
MC9S12XS128多功能<font color='red'>开发板</font>学习笔记
STM32F03开发板--系统时钟设置SysTick
首先我先分析下startup_stm32f0xx.s启动代码,其中 /* Call the clock system intitialization function.*/ bl SystemInit /* Call the application's entry point.*/ bl main 发现开发板上电启动过程中,先调用了SystemInit()函数,再进入main()函数。 SystemInit()函数在文件system_stm32f0xx.c中,它的作用是设置系统时钟SYSCLK。 下面是SystemInit()源码: void SystemInit (void) { /* Set HSION bi
[单片机]
STM32F03<font color='red'>开发板</font>--系统时钟设置SysTick
Boa Web服务器在PC和S3C2440开发板上移植
  boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。下面我们讲解以下boa如何在PC机(虚拟机RedHatAS5环境)完成移植修改工作。 一、下载Boa源码 下载地址: http://www.boa.org/或 http://labs.nevion.com/open-source/ 目前最新发行版本:0.94.13(05年更新版本)   下载 boa-0.94.13.tar.gz(注意:若从boa上下载的是boa-0.94.13.tar.tar,解压方式
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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