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

    文章

    121

    浏览量

    38439
  • 命令
    +关注

    关注

    5

    文章

    705

    浏览量

    22215

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

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

收藏 人收藏

    评论

    相关推荐

    u-boot命令之EMMC和SD卡操作命令详解

    今天给大家详细的介绍一下u-boot命令之EMMC和SD卡操作的mmc命令使用。希望这篇文章对大家有所帮助。
    发表于 07-12 15:19 4611次阅读

    U-boot的基本介绍

    从本文开始,将陆续推送“手把手教你移植U-boot”系列文章,目标是由浅入深地讲解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默认硬件开发平台为ARM,操作系统为Linux。
    发表于 07-14 16:52 3279次阅读
    <b class='flag-5'>U-boot</b>的基本介绍

    飞凌全志T527开发板U-Boot添加自定义菜单

    , -1, 0); } #endif /* CONFIG_MENUKEY */ } 四、U-Boot添加自定义命令 难道通过 run_command() 执行menu命令后,菜单就
    发表于 07-15 09:42

    【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

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

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

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    发表于 01-25 15:45 13次下载

    u-boot简介

    U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。U-Boot从FADSROM、8xxROM、PPCBOOT
    发表于 10-14 11:17 3620次阅读

    U-Boot命令介绍

    U-Boot命令介绍 Printenv 打印环境变量。 Uboot》 printenv baudrate=115200 ipaddr=192.168.1.1 ethaddr=12:34:56:78
    发表于 11-07 15:44 0次下载

    详解U-Boot引导内核分析

    bootm命令是用来引导经过U-Boot的工具mkimage打包后的kernel image的。U-Boot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。
    的头像 发表于 04-13 15:22 5344次阅读
    详解<b class='flag-5'>U-Boot</b>引导内核分析

    u-boot常用的命令合集

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

    uboot自定义命令

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

    Linux U-Boot开发指南

    介绍 U-Boot 的编译打包、基本配置、常用命令的使用、基本调试方法等, 为 U-BOOT 的移植及应用开发提供了基础。
    的头像 发表于 03-06 10:28 1422次阅读
    Linux <b class='flag-5'>U-Boot</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和
    的头像 发表于 12-07 11:19 800次阅读