u-boot命令的添加

u-boot分析 七 (添加u-boot命令,学习u-boot命令实现原理) u-boot分析 七(添加u-boot命令,学习u-boot命令实现原理)本文目标:理解u-boot命令的实现原理。上一篇文章分析了u-boot是如何启动kernel的,其中就涉及到bootm命令,考虑到文章主题需要,当时并没有对bootm命令做过多的解释。然而,u-boot命令行又是u-boot及其重要的一部分。这篇文章,我们就通过实战来理解u-boot命令的实现原理。我们要做的很简单,就是添加一 阅读详情
U-Boot的命令为用户提供了交互功能,并且已经实现了几十个常用的命令。如果开发板需要很特殊的操作,可以添加新的U-Boot命令。
U-Boot的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。
 
#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}
 
这样每一个U-Boot命令有一个结构体来描述。结构体包含的成员变量:命令名称、最大参数个数、重复数、命令执行函数、用法、帮助。
从控制台输入的命令是由common/command.c中的程序解释执行的。find_cmd()负责匹配输入的命令,从列表中找出对应的命令结构体。
基于U-Boot命令的基本框架,来分析一下简单的icache操作命令,就可以知道添加新命令的方法。
(1)定义CACHE命令。在include/cmd_confdefs.h中定义了所有U-Boot命令的标志位。
 
#define CFG_CMD_CACHE       0x00000010ULL   /* icache, dcache       */
 
如果有更多的命令,也要在这里添加定义。
(2)实现CACHE命令的操作函数。下面是common/cmd_cache.c文件中icache命令部分的代码。
 
#if (CONFIG_COMMANDS & CFG_CMD_CACHE)
static int on_off (const char *s)
{       //这个函数解析参数,判断是打开cache,还是关闭cache
        if (strcmp(s, "on") == 0) {  //参数为“on”
               return (1);
        } else if (strcmp(s, "off") == 0) {  //参数为“off”
               return (0);
    }
    return (-1);
}
 
int do_icache ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{     //对指令cache的操作函数
      switch (argc) {
      case 2:               /* 参数个数为1,则执行打开或者关闭指令cache操作 */
             switch (on_off(argv[1])) {
             case 0:     icache_disable();        //打开指令cache
                   break;
             case 1:     icache_enable ();        //关闭指令cache
                   break;
             }
            /* FALL TROUGH */
      case 1:           /* 参数个数为0,则获取指令cache状态*/ 
            printf ("Instruction Cache is %s/n",
                    icache_status() ? "ON" : "OFF");
            return 0;
      default:  //其他缺省情况下,打印命令使用说明
            printf ("Usage:/n%s/n", cmdtp->usage);
            return 1;
      }
      return 0;
}
……
U_Boot_CMD( //通过宏定义命令
    icache,   2,   1,     do_icache,  //命令为icache,命令执行函数为do_icache()
    "icache  - enable or disable instruction cache/n",   //帮助信息
    "[on, off]/n"
    "    - enable or disable instruction cache/n"
);
……
#endif
 
U-Boot的命令都是通过结构体__U_Boot_cmd_##name来描述的。根据U_Boot_CMD在include/command.h中的两行定义可以明白。
 
#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}
 
还有,不要忘了在common/Makefile中添加编译的目标文件。
(3)打开CONFIG_COMMANDS选项的命令标志位。这个程序文件开头有#if语句需要预处理是否包含这个命令函数。CONFIG_COMMANDS选项在开发板的配置文件中定义。例如:SMDK2410平台在include/configs/smdk2410.h中有如下定义。
 
/***********************************************************
 * Command definition
 ***********************************************************/
#define CONFIG_COMMANDS /
                 (CONFIG_CMD_DFL  | /
                 CFG_CMD_CACHE     | /
                 CFG_CMD_REGINFO    | /
                 CFG_CMD_DATE      | /
                 CFG_CMD_ELF)
 
按照这3步,就可以添加新的U-Boot命令。
深入解析MSPM0系列Keil开发中‘ti_msp_dl_config.h‘缺失问题的根源与修复 本文深入解析TI MSPM0系列Keil开发中'ti_msp_dl_config.h'文件缺失问题的根源与修复方法。该错误常见于编译时提示file not found,主要因SysConfig工具未正确生成或工程路径配置错误导致。文章提供了从环境检查、手动生成文件到工程配置调整的系统化解决方案,帮助开发者快速解决这一常见KEIL开发难题。 阅读详情

相关推荐

SPI模式下的SD卡读写,为什么你的数据总出错?详解时序与状态机避坑指南

本文深入探讨SPI模式下SD卡读写数据出错的根本原因,提供时序优化与状态机设计的实战指南。针对时钟周期计数、状态机跳转和忙检测等核心问题,详解命令时序细节、状态机同步策略及高级避坑技巧,帮助开发者提升SD卡在SPI模式下的稳定性和性能。

weixin_30514745的博客 261

四极管:u-boot运行分析(四)(转帖)

在接下来就是第二阶段C语言实现部分。。。转帖分析。。 地址http://www.cevx.com/bbs/thread-28817-1-1.html lib_arm/board.c:    start_armboot是U-Boot执行的第一个C语言函数,完成系统初始化工作,进入主循环,处理用户输入的命令。这里只简要列出了主要执行的函数流程:    void start_armboot (v

杨琦(四极管) 1274

从原理到调试:一次搞懂Camera Sensor的曝光、增益与帧率三角关系

本文深入解析Camera Sensor中曝光、增益与帧率之间的动态平衡关系,揭示低光环境下帧率下降的根本原因。通过实际调试案例和底层公式分析,帮助开发者理解如何优化相机参数设置,实现画质与流畅度的最佳平衡。

weixin_31310913的博客 429

uboot启动 及命令分析(3)

u-boot命令 先贴一个重要结构,位于uboot/include/command.h,这个结构代表每个uboot命令 structcmd_tbl_s{ char*name;/* Command Name*/ intmaxargs;/* maximum number of arguments*/ in...

asm2826的博客 377

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4066

ADC学习(3)——采样电路

第三章 采样电路

夏风喃喃的博客 3万+

UBOOT环境变量以及使用设置

看到这个标题,可能觉得这个并没有什么的,其实不然,编好了u-boot了,但是如何来使用确不是那么简单的,想当初我将uboot制作出来后以为全部都搞定了,屁颠屁颠的烧到板子上后可系统就是起不来,为什么了,折腾了很久以后才发现是u-boot的环境变量设置错误,在后来的工作中,我发现一些有一定经验的人在这方面也是模模糊糊的扯不清,所以这里要讨论一下。 u-boot...

weixin_34280237的博客 439

Python爬虫实战:使用Scrapy+Playwright高效爬取全球专利数据库

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)构建一个高效的专利数据库爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、分布式爬虫架构以及数据存储方案,最终实现一个完整的专利数据采集系统。专利数据是技术创新领域的重要信息资源,包含技术描述、权利要求、申请人信息等宝贵数据。中国国家知识产权局(CNIPA)美国专利商标局(USPTO)欧洲专利局(EPO)世界知识产权组织(WIPO)

2201_76125261的博客 1382

u-boot中config文件宏含义

DEBUG 定义是否开启Debug模式,用于输出更多log信息。 CONFIG_SYS_TEXT_BASE CONFIG_SYS_TEXT_BASE:设置系统代码段的基地址,设为 0x0;menuconfig 中已经有了此宏,可以去掉。 CONFIG_SYS_GENERIC_BOARD 使用通用架构的board.c,具体可以查看文档 doc/README.generic-board CONFIG_...

无名小卒 3101

大模型实战—通义千问大模型微调

这个参数仅针对 llama 类型的模型结构,默认勾选的是 q_proj 和 v_proj,具体的名词不容易理解,我就不多说了,可以简单的认为是对模型的理解能力进行优化,一般这两个就够了。当这个值较高时,适应新任务的能力会增强,但是对基础模型的影响会比较大,有过拟合的风险,尤其是在数据量有限的情况下。为了方便测试,我在云环境也创建了一个镜像,相关的环境都配置好了,可以直接使用几个国内开源的大语言模型,比如清华智谱的ChatGLM3-6B、零一万物的Yi-34B,还有最近阿里云开源的Qwen1.5-32B。

7万+

【异常】‘build.plugins.plugin.version‘ for org.apache.maven.plugins:maven-resources-plugin is missing

maven-compiler-plugin 插件版本信息没有指定导致了错误提示如下字面意思就是没有指定版本信息。

奶爸的编程之路,也就一周冷个三天 4599

uboot 中添加自己的命令

_BOOT_CMD ------------------------------------------- u-boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。 #ifdef  CFG_LONGHELP #define U_BOOT_CMD(name, maxargs, r

menuconfig_men的专栏 836

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

U-Boot添加命令的方法及U-Boot命令执行过程

转自:https://blog.youkuaiyun.com/yuzeze/article/details/51754541,调整段落及代码显示,方便阅读~ 以添加menu命令(启动菜单)为例讲解U-Boot添加命令的方法。 (1)建立common/cmd_menu.c 习惯上通用命令源代码放在common目录下(与开发板专有命令源代码则放在board/<board_dir>...

qiuzhikai的博客 414

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

u-boot中添加自己的命令

u-boot中添加自己的命令 整体思路 实现一个命令函数 使用U_BOOT_CMD(xxx); 进行声明 在Makefile中添加编译选项,将实现的命令函数代码编译进uboot 命令函数 U_BOOT_CMD参数定义 U_BOOT_CMD(命令名称, 最大可传入的参数数量,按回车是否可重复执行, 命令函数, 执行help命令时的打印信息,help命令 ); 示例:如下图 修改Makefile 参考: ...

mc_li的博客 1967

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

U-boot添加新命令

在函数cli_loop函数中调用parse_file_outer函数,parse_file_outer函数中调用函数 parse_stream_outer, parse_stream_outer函数负责接收命令行输入,然后解析并调用run_list函数执行相应的命令,函数 run_list 会经过一系列的函数调用,最终通过调用 cmd_process 函数来处理命令。最终定义了一个 cmd_tbl_t 类型的变量,变量名为_u_boot_list_2_cmd_2_dhcp,此变量 4。

weixin_64581379的博客 1109

U-boot 添加命令 U_BOOT_CMD

U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。 /*命令宏U_BOOT_CMD*/   #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \   cmd_tbl_t    __u_boot_cmd_##n

zhanzheng520的专栏 733

U-boot项目添加命令

一、U-BOOT源码树结构:board                      针对各个主板的源代码 common                  公用部分 net                          网络相关 include/configs         针对各个主板的配置文件二、增加命令1.修改common/cmd_net.c声明一个命令:U_BOOT_CMD(     exit,    2,    1,    do_exit,      "exit    - exit s

zwj0403的专栏 764

U-Boot添加命令的方法

原文地址:http://www.cnblogs.com/sdphome/archive/2011/08/19/2146327.html 下面以添加menu命令为例分析U-Boot添加命令的方法。     (1)在common目录下新建cmd_menu.c文件 习惯上把通用命令源代码放在common目录下,与开发板专有命令有关的源代码则放在board/目录下,命名方式只是习惯而已。为

ziyou飞翔的专栏 686

U-Boot添加menu命令的方法及U-Boot命令执行过程

转;http://chenxing777414.blog.163.com/blog/static/186567350201141791224740/ 下面以添加menu命令(启动菜单)为例讲解U-Boot添加命令的方法。 (1) 建立common/cmd_menu.c 习惯上通用命令源代码放在common目录下,与开发板专有命令源代码则放在board/<board_dir&g...

pengdonglin137的专栏 74

U-BOOT添加命令

下面以添加menu命令为例分析U-Boot添加命令的方法。 (1)    在common目录下新建cmd_menu.c文件 习惯上把通用命令源代码放在common目录下,与开发板专有命令源代码则放在board/目录下,命名方式只是习惯而已。为了方便阅读和查询习惯以“cmd_命令名>.c”为文件名。 (2)    定义“menu”命令 在cmd_menu.c中使用如下的代码定义“menu”命

SdustLiYang的专栏 2339

在u-boot中添加命令

在u-boot中添加命令 简介 U-Boot中每个命令都通过U_BOOT_CMD宏来定义,格式如下。宏U_BOOT_CMD在include/command.h中定义。 U_BOOT_CMD(name, maxargs, repeatable, command, "usage", "help") 各项参数的意义为: Øname:命令的名字,注意,它不是一...

weixin_34019929的博客 91
上一篇: u-boot/mips移植分析
下一篇: LCC使用介绍
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值