第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 条评论
登录 后参与评论

相关文章

来自专栏LIN_ZONE

Shell编程基础

请参考:菜鸟教程参数传递 在执行脚本的时候可以向脚本传递参数,脚本获取参数的格式为:$n

532
来自专栏机器学习算法与Python学习

python基础-字符串与编码

转载于:廖雪峰的官方网站-python教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字...

43911
来自专栏架构说

C++调用C函数

今天遇到的问题; 自己定义a.h文件 里面有一个方法 c实现的方法 然后有定义了一个b.h b.cpp文件 我引入了a.h 在b.cpp文件使用 c的方...

2474
来自专栏小狼的世界

NameError: name 'reduce' is not defined

原来自 Python3 之后,这个函数从全局命名空间中移除,放在了 functools模块,因为如果想正确执行,必须这样

482
来自专栏林德熙的博客

win10 UWP 单元测试 WPF 单元测试异步测试

单元测试和重构都是在做完一个小小函数一般就要进行一次,越早做就越好,可以比较早发现问题,这时我们还记得我们写的内容,不过比重构好的是,重构我们经常不知道要叫什么...

482
来自专栏编程

《5》python字符串和编码

「5」python字符串和编码 ? 字符编码 最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大...

17710
来自专栏python3

习题17:更多文件操作

import了又一个很好用的命令exists,这个命令将文件名字符串作为参数,如果文件存在的话,它将返回True,否则将返回False

531
来自专栏Android群英传

Gradle函数复用的一点实践

731
来自专栏liulun

Nim语言的模块化编程

前言 Nim支持把一大段程序分成若干个模块 一个模块就是一个源代码文件 每个模块都拥有它自己的名称空间 模块化可以起到封装(信息隐藏)和分步编译的作用 一个模块...

2617
来自专栏小樱的经验随笔

【Java学习笔记之十八】Javadoc注释的用法

Javadoc注释的用法 Java 文档 // 注释一行 /* ...... */ 注释若干行 /** ...... */ 注释若干行,并写入 javado...

3074

扫码关注云+社区