第1阶段——uboot分析之仿照bootm制作hello命令(7)

仿照bootm命令生成来制作一个hello命令,功能:打印出hello,world!和参数值

1.点击New File ,创建cmd_hello.c 将./common/cmd_bootm.c的头文件复制到 cmd_hello.c中 (因为cmd_bootm.c的头文件都是包括的命令相关的文件):

#include <common.h> #include <watchdog.h> #include <command.h> #include <image.h> #include <malloc.h> #include <zlib.h> #include <bzlib.h> #include <environment.h> #include <asm/byteorder.h>

2.点击保存: 保存在./common文件下,(命令文件都存在common文件里)

3.写执行命令需要调用的函数: 复制./common/cmd_bootm.c里 int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { } 改成: int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) //执行命令需要调用的函数 { int i; printf ("hello,world!,arg_numble=%d\n",argc); //打印"hello,world!"和参数个数arg_numble for(i=0;i<argc;i++) printf("argv[i]=%s",i,arg[i]); //打印命令名字和参数值 return 0; }

4. 添加U_BOOT_CMD宏(实现:通过U_BOOT_CMD宏来将命令保存在.u_boot_cmd段里): U_BOOT_CMD( hello, //命令名 CFG_MAXARGS, //参数最大值 1, //支持重复使用命令 do_hello, //函数指针,用于命令执行时需要调用什么函数,就是第2节的do_hello函数 "hello - just for help...", //短的使用说明 "hello - long help... ..." //长的使用说明,敲打"help hello"命令,就会出现这段字符串 #endif ); 5.将cmd_hello.c复制到虚拟机中u-boot-1.1.6/common目录下。 6.进入common目录,输入"vi mkfine" 修改conmon目录下mkfine,在mkefine第54行,COBJS里添加cmd_hello.o文件 7.输入"make",生成u-boot.bin文件重新下载就可以使用hello命令了.

cmd_hello.C源码:

#include <common.h>
#include <watchdog.h>
#include <command.h>
#include <image.h>
#include <malloc.h>
#include <zlib.h>
#include <bzlib.h>
#include <environment.h>
#include <asm/byteorder.h>

int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) //执行命令需要调用的函数
{
int i;
printf ("hello,world!,arg_numble=%d\n",argc); //打印"hello,world!"和参数个数arg_numble 
for(i=0;i<argc;i++)
printf("argv[i]=%s",i,arg[i]); //打印参数

return 0;
}
U_BOOT_CMD(
hello,    //命令名
CFG_MAXARGS, //参数最大值
1,    //支持重复使用命令
do_hello, //函数指针,用于命令执行时需要调用什么函数,就是第2节的do_hello函数
"hello - just for help...\n", //短的使用说明
"hello - long help... ...\n" //长的使用说明,敲打"help hello"命令,就会出现这段字符串 
#endif
);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

YII使用命令行模式

入口文件:shell.php run(); 数据库配置文件console.php可以参考main.php 演示protected/commands/TestCo...

3203
来自专栏海天一树

小朋友学Python(27):全局变量的引用和修改

一、引用 例1 a = 1 def func(): if 1 == a: print("a = %d" % a) if __name__...

2737
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 插件接口IModule

  我们知道,要基于平台(容器)+插件的这种模式进行开发,我们必须定义一组契约,用于约束模块插件开发,也就是说,模块插件需要遵守一定的标准进行开发,才能正常被容...

2197
来自专栏iOS Developer

Bison眼中的iOS开发多线程是这样的(二)

1293
来自专栏游戏开发那些事

【Linux程序设计】之进程控制&守护进程

这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的。

1402
来自专栏锦小年的博客

python学习笔记5.3-包的创建

包,也可以称为库,是具有很多功能的一个集合体。本文主要介绍如何自己创建一个包,以及介绍一些在包的创建过程中的技巧。 1. 包的创建 本文的例子将使用最复杂的情况...

2368
来自专栏电光石火

给博客添加节日雪花

二话不说先上效果图: ? 需要的朋友请看下面的说明,对JQ比较了解的朋友可以直接下载。 下载地址:jQuery圣诞下雪花.rar 注意事项 ...

2047
来自专栏大前端_Web

NodeJS学习二CommonJS规范

Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。

1042
来自专栏软件开发 -- 分享 互助 成长

java入门

一、java的运行机制 高级语言的运行机制主要有编译型和解释型两种。 C/C++属于编译型语言,由专门的编译器针对特定的操作系统平台进行翻译,生成可执行代码,特...

18810
来自专栏hbbliyong

Python类、模块、包的区别

模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。一般...

1152

扫码关注云+社区