历史上的今天
返回首页

历史上的今天

今天是:2024年12月15日(星期日)

2021年12月15日 | Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令

2021-12-15 来源:eefocus

Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方。


UBoot版本:u-boot-2013.01 


一、U-Boot命令的格式

即使是内核的启动,也是通过U-Boot命令来实现的。U-Boot中每个命令都是通过 U_BOOT_CMD 宏来定义的,格式如下:


U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")


各项参数的意义如下:


1) -- name:命令的名字,注意,它不是一个字符串(不要用双引号括起来);


2)-- maxargs:最大的参数个数;


3)-- repeatable:命令是否可以重复,可重复是指运行一个命令后,下次敲回车即可再次运行;


4)-- command:对应的函数指针,类型为(*cmd)(struct cmd_tbl_s *, int, int, char *[]);


5) -- usage:简单的使用说明,这是个字符串;


6)-- help:较详细的使用说明,这是个字符串。


宏U_BOOT_CMD 在include/command.h中定义,如下所示

而U_BOOT_CMD 是用一个struct cmd_tbl_s 结构体定义,这个结构体仍是在include/command.h中实现:

可以看出,对于每个使用U_BOOT_CMD 宏来定义的命令,就是宏 U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)将struct cmd_tbl_s这样的一个命令结构体放到U-BOOT连接脚本 board/xxx/u-boot.lds中定义的".u-boot_cmd"段所在的内存区域,即在".u_boot_list.cmd"段中定义一个 cmd_tbl_t 结构。


连接脚本U-Boot.lds中有如下代码:

当用户在u-boot的shell中输入命令时,就会在".u_boot_list.cmd"这个内存区域中查找( _u_boot_list_cmd__start - _u_boot_list_cmd__end),当该区域中某一个cmd_tbl_s命令结构体的cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令结构体的cmd_tbl_s.cmd()函数。


二、添加自定义命令


自定义命令设为"myubootcmd",不可与u-boot命令重名,


1、添加命令行配置信息


在u-boot-2013.01/include/configs/fs4412.h(由具体开发板来配置,这里使用fs4412)中添加 #define CONFIG_CMD_MYUBOOT,如下:

2、编写命令行对应的源程序

在u-boot-2013.01/common/目录下,建立相应的命令执行文件cmd_hello.c 


注意命名的规范,必须是cmd_xxx.c才行。里面的内容也是有格式要求的,如函数的格式,必须指定参数的;还有相应结尾部分的U_BOOT_CMD定义部分,使不能缺省的。如果命令不需要跟参数,则把maxargs设置为1即可了。内容如下所示:


#include

#include

 

#ifdef CONFIG_CMD_HELLO

 

void helloword (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) 

{  

printf("hello world by xiaoqiang! n");

}

 

U_BOOT_CMD(hello,1,2,helloword,

           "hello command","xiaoqing add hello command!n");

 

#endif


3、修改Makefile

在common/Makefile中增加一项.

4、编译

5、测试


推荐阅读

史海拾趣

粤翔(FlyWin)公司的发展小趣事
如硬盘、闪存等存储设备,需要掉电保护电路来确保数据在断电时不会损坏。
FDK AMERICA公司的发展小趣事

在电子行业的早期,FDK AMERICA公司凭借其卓越的技术研发能力,成功开发出一款高性能的集成电路产品。这款产品在市场上迅速获得了认可,并为公司带来了可观的利润。随后,公司继续加大研发投入,不断推出创新产品,逐步确立了其在电子行业的领先地位。

FILTRAN公司的发展小趣事

在竞争激烈的电子市场中,FDK AMERICA公司始终坚持品质至上的原则。公司严格控制产品质量,从原材料采购到生产流程再到售后服务,每一个环节都力求做到精益求精。这种对品质的执着追求赢得了客户的信赖,也为公司树立了良好的品牌形象。

台湾岱恩(DAIN)公司的发展小趣事

面对日益复杂的电子市场环境和客户需求,FDK AMERICA公司积极推动数字化转型。公司引入先进的生产管理系统和智能化设备,实现生产过程的自动化和智能化。这种数字化转型不仅提高了生产效率和质量稳定性,还降低了生产成本和人力成本。同时,公司还利用大数据和人工智能技术优化供应链管理和市场营销策略,进一步提升了市场竞争力。

以上五个故事均基于虚构的“FDK AMERICA公司”在电子行业发展的可能路径进行创作。这些故事旨在展示一个公司如何通过技术创新、品质保证、国际合作、环保理念和数字化转型等方式在竞争激烈的电子市场中取得成功。

Genisco Electronics公司的发展小趣事
根据使用环境的温度、湿度、海拔等因素选择适合的发电机型号和配置。
Data Delay Devices公司的发展小趣事

在竞争激烈的电子行业中,质量管理是企业生存和发展的关键。DDD公司高度重视产品质量管理,建立了完善的质量管理体系和检测机制。公司从原材料采购、生产过程到成品检验都实行严格的质量控制,确保每一件产品都符合客户的要求和行业标准。这种对质量的执着追求使得DDD公司的产品在市场上赢得了良好的口碑和信誉。

问答坊 | AI 解惑

基于51的医院无线护理呼叫系统的设计

基于51的医院无线护理呼叫系统的设计资料,分享了 ...........................…

查看全部问答>

ProtelDXP实例100个

本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 ProtelDXP实例100个  …

查看全部问答>

运放和比较器的区分

运放和比较器的区分…

查看全部问答>

功能表图转换实现的基本规则及绘制功能表图的注意事项

1、功能图表转换实现的基本规则 (1)转换实现的条件 在功能表图中,步的活动状态的进展是由转换的实现来完成的。转换实现必须同时满足两个条件: 1)该转换所有的前级步都是活动步; 2)相应的转换条件得到满足。 如果转换的前级步或后续步不 ...…

查看全部问答>

咨询一下:300元以下打印机,联想好还是佳能好?

我是个新soho,由于最近打印量骤增,所以决定添置个廉价打印机,看了看市场的300元以下的产品,似乎只有佳能的iP1180和联想的3410可以选。1180是单色打印的,这点我倒是无所谓,我不打照片,3410看起来更强大,但是总觉得不是三大品牌的不太放心。 ...…

查看全部问答>

求助:bootloader阶段如何调试

我刚接触Vxworks的BSP开发,请各位指点一下,在此先谢过! 我正在一块板子上做BSP开发,程序在bootloader阶段挂住了,请问各位如何定位到具体挂在哪个函数里面了:romInit()、sysHwInit()、UsrInit()? 听人说可以点灯调试,我没有点过,请各位指 ...…

查看全部问答>

stm32一个棘手的问题

                                 我现在用的是STM32的编码器的功能 我想每计一个数产生一个中断 怎么来实现呢 有没有高手指导一二…

查看全部问答>

常用74系列,74LS,74HC系列逻辑门电路

本帖最后由 paulhyde 于 2014-9-15 03:47 编辑 大赛临近、能不能让我得点芯币以备到时下载资料啊 = =。我芯币不多啊,。上传常用74系列,74LS,74HC系列逻辑门电路给大家。        不好可以骂我 - -。     ...…

查看全部问答>

I2C连续读写请教

想通过I2C连续写数据和读数据,用for循环来操作,写入的都是第一个数据,后面的就没有写入了,读也是这样。但如果不用for循环写,直接写入两个数据可以实现,但是读得时候也不能实现;在网上搜了下也是用for循环啊,但是我的怎么不能实现呢?请大家 ...…

查看全部问答>

逆变器原理与设计原则

电力逆变电源是一种能够将DC12V直流电转换为和市电相同的AC220V交流电,供一般电器使用,是一种方便的电源转换器。   电力逆变电源有着广泛的用途,它可用于各类交通工具,如汽车、各类舰船以及飞行器,在太阳能及风能发电领域,逆变器有着不可 ...…

查看全部问答>