U-boot下的自定义命令设计

本文转载自:XILINX开发者社区

本文作者:赛灵思工程师 Terry

在开发过程中,有时候会根据一些实际情况在U-BOOT阶段完成一些外设的初始化,或者实现一些功能应用。本文给大家介绍一下如何在u-boot中通过增加自定义的command方式来达到这一目的。

在Xilinx petalinux工具开发环境下,如果是2021.1之后的版本,大家可以通过使用如下命令,直接把u-boot的源码从github上下载下来,petalinux-devtool modify u-boot-xlnx

下载下来的源码在:

/components/yocto/workspace/sources/u-boot-xlnx>目录下,可以直接进行修改,十分的方便。其他版本修改源码的方法,大家可以参考另一篇博客《Petalinux patch生成和应用方法整理》来了解详细的方法。

完成了U-BOOT源码下载后,接下来我们就可以进行U-boot自定义的command的创建了。

首先,U-boot的所有命令是存放在cmd目录下,我们可以在这个目录下创建一个我们的命令文件,以这个命令名称来命名,例如my_app.c。

接着,在文件的一开始,需要先包含一些u-boot基础的头文件。在这个部分,你可以根据你自己需要包含一些你自定义的头文件或者其他需要引用的头文件。

然后,必须加入的两个函数:

1.command执行函数

其格式如下:

static int do_xxxxx (struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])

{

         /* 执行的内容*/ 

}

其中xxxx部分是你命令的名称。例如,命令的名称是my_app

在这个执行函数中,同样可以引用或者调用更多的其他函数来完成你所需要的复杂功能,方法和开发baremetal程序一样。而且在cmd文件夹下有很多其他命令可以供你参考。

需要注意的是第一个参数是从argv[1]开始的,而且输入进来的参数格式是字符。如果你需要转换成整形的话,需要使用simple_stroul这个函数来进行转换。

2.command声明函数

其格式如下:

U_BOOT_CMD(name, maxargs, rep, cmd, usage, help)

例如:

完成了自定义命令的编写以后,接下来就是修改Makefile文件将我们的命令添加到需要编译的列表里。在cmd文件夹下,我们打开Makefile这个文件,在#command注释下方把我们的命令添加进去,格式如下, 其中xxxx为命令名称。

Obj-y += xxxxxx.o

例如:

修改完成后,用petalinux-build -c u-boot命令进行编译。

最后,在板上运行的效果如下:

最新文章

最新文章