DIY智能家居(三)UBoot命令添加方法
时间:10-02
整理:3721RD
点击:
讯为公司的资料包括源码部分,新接触就是比较吃力,上网找资料,QQ群中询问问题,磕磕绊绊的向前走,终于对uboot有了大概的了解,也学习了make编译命令,总之只是了解大概而已。
目标是智能家居,外设最重要,于是从uboot的外设控制入手:
uboot已经可以单独运行了,通过开发板的串口CON3,就是靠近边上的一个串口,(讯为的人真是缺乏规律性,查主板图和核心板图就知道CON3用的是UART2,;而中间标着的CON2用的是UART3)
闲话少说:uboot不需要我们进行移植,其实讯为已经做好了,只要运行目录中的create_uboot.sh 就会自动完成整个uboot的编译工作。
编译工作要在Ubuntu下进行,你要根据讯为资料安装一个pc机上虚拟的Ubuntu空间,uboot其实可以独立运行了,有些像pc机的dos功能了,编译中你可以增加你自己的命令到uboot命令集中。这个命令集就是uboot源码中的common文件夹。
如何添加自己的命令呢:
最简单的方法 :将自己写好的c程序源码文件放入common文件夹下。
1、将my_XXX.c文件放入common文件夹
2、添加 COBJS-y += my_xxx.o 到makefile ,让make编译的时候查找my_xxx.o所对应的my_xxx.c文件进行编译,这样在超级终端中你就可以使用这个命令了。
3、但是c文件还有些格式要求,不同与其他的c文件格式
举个例子大家就清楚了:文件名my_test.c 前面加my_是为了好区分文件名,叫什么都可以,只要在common目录下的makefile中对应就可以了。
#include <common.h>
#include <command.h> //这两个头文件指引你调用的一些参数和命令吧
int do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
//可以用int(返回整形) 也可以用void(不需要返回数据),反正也没有人接受,但要与下面内容对应起来,如果用int 最后要有return 0;命令
//do_test 函数变量名称,要与最后一行中的参数4一致,让它知道调用什么函数。
//参数3:参数个数n-1。1代表后面没有参数,因为文件名本身是第一个参数。
//参数4:是一个字符型的数组,包含所以得参数用argv[0]表示命令名,这里就是test,argv[1]代表第一个参数,以此类推
{ printf("Hello world!\n"); //打印“Hello world!”字符,\n 是转义字符串打印一个换行回车。
return 0; //与上面int对应,如果是void不需要这句
}
/* --申明命令宏---变量:命令名称、最大参数个数、重复数、命令执行函数、用法、帮助*/
U_BOOT_CMD( test, 2, 1, do_test, "u-boot command test by care", "" );
这是告诉uboot中CMD命令集中添加一个命令test。
//参数1:命令名称,就是我们编译完成运行后,在超级终端uboot命令下键入的执行命令名称,就敲这个test回车就可以执行了//参数2:最大参数个数,就是上面你键入test后所带参数最大数,一般将文件名作为第一个参数,所以不带任何参数是也要最少为1;
//参数3:重复数,就是当你执行一次test命令后,在直接敲回车就可以重复执行test命令了,如果为0,不执行。
//参数4:执行函数,与上面的函数名称一致。
//参数5、6:无所谓,没有任何影响;(用法说明,帮助信息,)
目标是智能家居,外设最重要,于是从uboot的外设控制入手:
uboot已经可以单独运行了,通过开发板的串口CON3,就是靠近边上的一个串口,(讯为的人真是缺乏规律性,查主板图和核心板图就知道CON3用的是UART2,;而中间标着的CON2用的是UART3)
闲话少说:uboot不需要我们进行移植,其实讯为已经做好了,只要运行目录中的create_uboot.sh 就会自动完成整个uboot的编译工作。
编译工作要在Ubuntu下进行,你要根据讯为资料安装一个pc机上虚拟的Ubuntu空间,uboot其实可以独立运行了,有些像pc机的dos功能了,编译中你可以增加你自己的命令到uboot命令集中。这个命令集就是uboot源码中的common文件夹。
如何添加自己的命令呢:
最简单的方法 :将自己写好的c程序源码文件放入common文件夹下。
1、将my_XXX.c文件放入common文件夹
2、添加 COBJS-y += my_xxx.o 到makefile ,让make编译的时候查找my_xxx.o所对应的my_xxx.c文件进行编译,这样在超级终端中你就可以使用这个命令了。
3、但是c文件还有些格式要求,不同与其他的c文件格式
举个例子大家就清楚了:文件名my_test.c 前面加my_是为了好区分文件名,叫什么都可以,只要在common目录下的makefile中对应就可以了。
#include <common.h>
#include <command.h> //这两个头文件指引你调用的一些参数和命令吧
int do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
//可以用int(返回整形) 也可以用void(不需要返回数据),反正也没有人接受,但要与下面内容对应起来,如果用int 最后要有return 0;命令
//do_test 函数变量名称,要与最后一行中的参数4一致,让它知道调用什么函数。
//参数3:参数个数n-1。1代表后面没有参数,因为文件名本身是第一个参数。
//参数4:是一个字符型的数组,包含所以得参数用argv[0]表示命令名,这里就是test,argv[1]代表第一个参数,以此类推
{ printf("Hello world!\n"); //打印“Hello world!”字符,\n 是转义字符串打印一个换行回车。
return 0; //与上面int对应,如果是void不需要这句
}
/* --申明命令宏---变量:命令名称、最大参数个数、重复数、命令执行函数、用法、帮助*/
U_BOOT_CMD( test, 2, 1, do_test, "u-boot command test by care", "" );
这是告诉uboot中CMD命令集中添加一个命令test。
//参数1:命令名称,就是我们编译完成运行后,在超级终端uboot命令下键入的执行命令名称,就敲这个test回车就可以执行了//参数2:最大参数个数,就是上面你键入test后所带参数最大数,一般将文件名作为第一个参数,所以不带任何参数是也要最少为1;
//参数3:重复数,就是当你执行一次test命令后,在直接敲回车就可以重复执行test命令了,如果为0,不执行。
//参数4:执行函数,与上面的函数名称一致。
//参数5、6:无所谓,没有任何影响;(用法说明,帮助信息,)
沙发
沙发
小编,期待你的下一篇分享。
期待你的下一篇分享
谢谢分享学习一下
