0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

创建自定义的u-boot命令

电子工程师 来源:嵌入式小生 作者: iriczhao 2022-08-08 14:46 次阅读


开篇

为什么会有这篇文章,因为小生被u-boot源码的设计所吸引了(源码对命令的处理过程)。自定义u-boot命令属于u-boot源码的开发技术啦,可能u-boot官方开发人员、芯片原厂或者硬件板卡BSP开发人员会接触到这一块。

既然被我碰着了,那就皱眉一笑轻提笔,在此一文奉上。

对于u-boot来说,其核心功能是使用命令来执行对应的操作。在u-boot源码/cmd目录下则放置了关于u-boot所支持的所有命令,如下图所示:

a6eaa4a0-16bf-11ed-ba43-dac502259ad0.png

(.o文件是编译后生成的)

一、基础

(1-1)命令定义

在实际开发中,我们可以创建新的命令结构,然后将命令添加到U-Boot中。步骤大致如下:首先在命令描述文件中包含command.h,然后再使用U_BOOT_CMD()U_BOOT_CMD_COMPLETE宏来填充struct cmd_tbl结构:

U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")
U_BOOT_CMD_COMPLETE(name,maxargs,repeatable,command,"usage,"help",comp)
  • name:命令名称。注意:这不是一个字符串。
  • maxargs:此函数接受的最大参数值,包括命令本身。
  • repeatable:0 - 不允许自动重复;1 - 允许自动重复。
  • command:指向命令函数的指针。这是在u-boot命令行下发出命令时调用的函数。
  • usage:用于描述命令的提示信息。是一个字符串。
  • help:长描述。这是一个字符串。只有定义了CONFIG_SYS_LONGHELP时,长描述才可用。
  • comp:指向补全函数的指针。可能是NULL。如果在输入命令参数以完成输入时按下TAB键,则调用此函数。命令补全仅在定义了CONFIG_AUTO_COMPLETE时可用。

(1-2)命令函数

命令函数指针声明如下:

int(*cmd)(structcmd_tbl*cmdtp,intflag,intargc,constchar*argv[]);
  • cmdtp:描述该命令的表条目。
  • flag:可以包含以下几种选项:CMD_FLAG_REPEAT - 重复执行最后一条命令;CMD_FLAG_BOOTD - 该命令由bootd命令调用;CMD_FLAG_ENV - 该命令由run命令调用。
  • argc:包括命令在内的参数的数目。
  • argv:参数。允许的返回值为:CMD_RET_SUCCESS - 标志命令执行成功;CMD_RET_FAILURE - 命令执行失败;CMD_RET_USAGE - 使用无效参数调用命令。这个值将显示用法字符串。

二、创建自定义的u-boot命令

在第一小节中,已经描述了关于u-boot命令的基础知识,本小节将来实现一个具体的u-boot命令。

这里假设这个命令命名为:showIriczhaoInfo。当我们在u-boot的命令行下输入这个命令后,将打印出“[iriczhao]:u-boot hello world!!!”。

(2-1)命令创建过程

(1)在u-boot的/cmd目录下创建一个文件,命名为command_test.c。

(2)添加头文件。在command_test.c文件中添加如下的头文件信息:

#include
#include

(3)定义showIriczhaoInfo的命令处理函数

staticintdo_showIriczhaoInfo(structcmd_tbl*cmdtp,intflag,intargc,char*constargv[])
{
printf("[iriczha]:u-boothelloworld!!!");

return0;
}

(4)使用U_BOOT_CMD关联命令和命令处理函数

U_BOOT_CMD(showIriczhaoInfo,CONFIG_SYS_MAXARGS,0,do_showIriczhaoInfo,"do_showIriczhaoInfo","command
");

(5)将command_test.c文件添加到makefile文件中,如下图所示:

a7144e04-16bf-11ed-ba43-dac502259ad0.png

(6)以Snadbox方式编译u-boot源码(注:也可以编译其他架构下的u-boot)

(7)在宿主机终端中运行u-boot snadbox,效果如下:

a7296f8c-16bf-11ed-ba43-dac502259ad0.png

从上图可见,当我们在u-boot的命令行上输入showIriczhaoInfo后,按下回车键,输出了[iriczhao]:u-boot hello world!!!信息,结果与预期效果一样。

三、总结

在u-boot的命令描述文件中,是按照模块来进行文件划分的。例如对于ext4文件系统的命令操作就会放到ext4.c文件中,在该文件中放置操作ext4的所有命令。在分析u-boot的命令源码时候,可根据该种思路来寻找具体的命令处理过程。

本文描述了u-boot命令行的定义过程,描述如何实现一个自定义命令并将其添加到u-boot中。

在u-boot源码中,其命令与命令处理函数的绑定过程是一个非常精彩的技术点,先留着点,下回分析啦!

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • u-boot
    +关注

    关注

    0

    文章

    116

    浏览量

    38044
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849

原文标题:自定义u-boot命令,有意思!

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    我的U-Boot链接脚本笔记

    以下是我学习u-boot的链接脚本时做的笔记,欢迎指正错误。/* 指明输出的可执行文件格式为elf,即小端模式的32位ARM指令 */OUTPUT_FORMAT("
    发表于 07-22 10:04

    【OK210试用体验】u-boot篇 -- u-boot初体验(续)

    u-boot版本切记是要相对较新的,早时候的u-boot是不支持S5PV210相关型号的,当然可以体验一下基于其他型号CPU的u-boot编译。 将下载好后的u-boot放到喜好的
    发表于 08-22 01:44

    【OK210试用体验】u-boot篇 -- 自定义单板

    ,还是有些差距,所以为了自定义自己的单板,就来学习一下如何定制。创建自己的板子信息 在u-boot的顶层README中,有讲到如何定制单板。 1. 首先,在u-boot顶层目录下的b
    发表于 08-25 19:54

    【OK210试用体验】u-boot篇 -- u-boot命令tab补全功能

    【OK210试用体验】u-boot篇 -- u-boot命令tab补全功能 在Ubuntu环境下,可以试用“tab”键命令来实现命令补全功能
    发表于 09-10 17:56

    嵌入式Linux学习引导-Uboot移植之添加自定义命令

    Uboot移植之添加自定义命令我们使用uboot的时候,大多数都是直接编译再移植了,很少改动里面的具体内容,特别是其中包含的命令等。虽然里面包含了一些常用的提供给用户进行交互的命令,并
    发表于 02-16 17:19

    Ecosystem v2.1中关于自定义设备树文件放置有什么变化吗?

    bitbake-st-image-weston 失败了,因为它无法创建 project.dtb,因为 project.dts 文件没有从 meta-st-stm32mp-addons 文件夹复制到 tf-a、u-boot 和核心。v2.1 中关于
    发表于 01-12 08:18

    具有自定义phy的自定义板的u-boot错误怎么解决?

    嗨,我使用的是基于 LS1046ARDB 的定制板,在我的自定义板 iam 使用不同的 phy (Marvell 88e1512),现在当我构建和创建固件映像时,我在 u-boot 日志中收到以下
    发表于 03-29 07:25

    如何用usb命令编译u-boot的文档?

    我想在s32g2的u-boot中使用usb命令,但是s32g2的u-boot中没有usb命令。 有编译好的u-boot可以解决这个问题吗?或
    发表于 06-05 09:28

    基于linux下自定义一个脚本来替代rm命令

    linux下的rm命令,功能太强,同时又没法撤消,为了避免误操作,可以自定义一个脚本来替代rm命令
    的头像 发表于 02-01 18:08 3535次阅读
    基于linux下<b class='flag-5'>自定义</b>一个脚本来替代rm<b class='flag-5'>命令</b>

    u-boot常用的命令合集

    u-boot常用的命令合集
    发表于 02-11 09:50 2次下载

    uboot自定义命令

    U-Boot命令众多,通过uboot命令可完成系统环境变量设置。U-Boot本质就是一份裸机程序,这样可以在U-Boot
    的头像 发表于 09-17 09:59 908次阅读

    在16x2 LCD显示器上创建自定义动画

    电子发烧友网站提供《在16x2 LCD显示器上创建自定义动画.zip》资料免费下载
    发表于 10-24 09:28 0次下载
    在16x2 LCD显示器上<b class='flag-5'>创建</b><b class='flag-5'>自定义</b>动画

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 03-15 19:39 0次下载
    教程 2:添加特征-<b class='flag-5'>自定义</b>配置文件<b class='flag-5'>创建</b>

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 07-06 18:50 0次下载
    教程 2:添加特征-<b class='flag-5'>自定义</b>配置文件<b class='flag-5'>创建</b>

    u-boot armv8链接脚本

    /u-boot-spl.lds进行链接,因为每个board的情况可能不同,所以u-boot可以通过Kconfig来自定义u-boot-spl.lds和u-
    的头像 发表于 12-07 11:19 245次阅读