源码:https://gitee.com/latme/tiny6410.busybox commit:b1154aaea
修改的文件:
M Config.in
M Makefile
A fisheep/Config.src
A fisheep/Kbuild.src
A fisheep/latmus.c
M include/applets.src.h
1. 创建命令文件,实现命令功能
新建目录fisheep,参考其他目录(例如coreutils)创建命令源码文件latmus.c, Config.src, Kbuild.src
(1)添加命令主函数(入口函数)
/* file: fisheep/latmus.c */
#include "libbb.h /* 包含busybox公共头文件 */
/* 命令入口函数,函数名格式:<命令名>_main
* UNUSED_PARAM用于消除编译时的变量未使用告警,如果有用到argc则移除该修饰符。
*/
int latmus_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int latmus_main(int argc UNUSED_PARAM, char **argv)
{
printf("test by latmus from fisheep.\n");
for(i=0; argv[i] != NULL; i++)
{
printf(" [%u] %s\n", i, argv[i]);
}
return 0;
}
(2)添加编译配置选项(用于make menuconfig
)
# file: fisheep/Config.src
menu "Fisheep Utilities"
# INSERT将在编译时被脚本scripts/gen_build_files.sh替换为,同级目录下*.c中以//conifg:打头的内容。
INSERT
# 以下内容的另一种写法是,移到latmus.c文件中,每行行首添加//config:
config FISHEEP_LATMUS
bool "fisheep_latmus"
default y
help
fisheep_latmus is a test program.
endmenu
(3)添加编译目标文件(用于make
时生成*.o文件)
# file: fisheep/Kbuild.src
lib-y:=
# INSERT将在编译时被脚本scripts/gen_build_files.sh替换为,同级目录下*.c中以//kbuild:打头的内容。
INSERT
# 以下内容的另一种写法是,移到latmus.c文件中,每行行首添加//kbuild:
lib-$(CONFIG_FISHEEP_LATMUS) += latmus.o
(4)添加命令用法说明(用于<命令> --help
)
/* file: include/usage.src.h */
/* INSERT将在编译时被脚本scripts/gen_build_files.sh替换为,同级目录下*.c中以//usage:打头的内容。
* 由于该文件是公共的,为尽可能避免修改公共文件,通常采这种形式,将用法宏定义到命令源码文件。
*/
INSERT
/* 必须定义如下三个宏,宏值将在查看命令用法时输出。
* <命令>_trivial_usage
* <命令>_full_usage
* <命令>_example_usage
*/
#define latmus_trivial_usage \
"[options] TEST"
#define latmus_full_usage "\n\n" \
"Latmus Test\n" \
"\n -h Print this help"
#define latmus_example_usage \
"$latmus -h\n"
2. 修改公共文件,将新命令加入busybox。
(1)Config.in
修改,将新的编译配置集成到make menuconfig
source fisheep/Config.in
(2)Makefile
修改,指定链接时包含fisheep目录
libs-y := \
fisheep/ \
(3)include/applets.src.h
修改,将latmus命令集成到busybox命令列表
IF_FISHEEP_LATMUS(APPLET(latmus, BB_DIR_USR_BIN, BB_SUID_DROP))