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

相关文章

来自专栏IT笔记

rsync+inotify实现分布式集群部署

上一篇:Linux下使用ssh密钥实现无交互备份 上二篇:Linux下使用rsync实现文件备份 缘起 由于公司要对支付做压测,于是使用了公司的服务器搭建了一个...

3485
来自专栏FreeBuf

Powershell编码与混淆

在powershell中最常使用的编码就是base64编码了,今天主要说一下Invoke-Obfuscation 这个powershell混淆编码框架,这也是著...

2147
来自专栏吉浦迅科技

【用户经验分享】对不起,Jetson TX2刷机失败

1423
来自专栏源码之家

Linux VPS备份教程:数据库/网站文件自动定时备份

关于VPS备份教程方法可用的方法也很多,比如我们常规的备份直接通过FTP下载,MYSQL数据库导出也是可以操作的,但是这些都比较麻烦,而且还需要人为去执行。这篇...

753
来自专栏Linux驱动

ln命令详解

ln命令 (全称:link) ln命令用来为文件创建一个连接,类似于Windows的快捷方式,连接类型分为硬连接和软连接(符号连接)两种,默认的连接类型是硬...

2186
来自专栏Python自动化测试

postman插件的应用与实战(一)

在接口测试工具中,最好的应该是soapui,jmeter,postman,但是soapui需要安装和破解,当然也是有破解版的,但是不够灵活,jmete...

763
来自专栏pangguoming

Nodejs开发框架Express3.0开发手记–从零开始

转载请注明出处: http://blog.fens.me/nodejs-express3/ 程序代码已经上传到github有需要的同学,自行下载。 http...

37312
来自专栏人人都是极客

Linux下so动态库一些不为人知的秘密

Linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。

772
来自专栏SeanCheney的专栏

Scrapy1.4最新官方文档总结 3 命令行工具配置设置使用 scrapy 工具创建项目管理项目Scrapy 的可用命令parse

这是官方文档的命令行工具https://docs.scrapy.org/en/latest/topics/commands.html 配置设置 Scrapy 默...

3767
来自专栏小狼的世界

重新认识wget

Wget是平时经常会用到的一个工具,这个工具其实有着非常丰富的参数和配置,能够实现很强大的功能。比较常用的一个就是抓站或者为网站做镜像。

591

扫码关注云+社区