04 busybox添加新命令

源码: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))
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BusyBox 是一个精简的 Linux 工具集合,它包含了大量的常用命令,如 ls、cp、mv、rm 等,它可以运行在嵌入式系统和资源有限的环境中。虽然 BusyBox 已经包含了大部分常用的命令,但是有时候我们可能需要添加一些额外的命令。 要添加命令BusyBox,我们首先需要获取 BusyBox 的源代码。然后,在源代码中找到命令的配置文件,这通常是一个以 .config 结尾的文件。在这个配置文件中,我们可以找到已经包含的命令列表。要添加一个命令,我们可以简单地在配置文件中添加命令的选项,并将其设置为 "y" 或 "m",表示该命令是开启的。如果所需的命令相关的依赖也没有包含在 BusyBox 中,我们还需要将依赖的选项也设置为 "y" 或 "m"。 接下来,我们需要重编译 BusyBox。在终端中进入 BusyBox 源代码目录,运行 make 命令以重编译该工具集合。编译完成后,我们就可以在输出目录中找到BusyBox 可执行文件。 最后,我们可以将BusyBox 可执行文件拷贝到目标系统中,替换原有的 BusyBox 可执行文件即可。现在,我们就可以使用我们刚刚添加命令了。 总的来说,虽然 BusyBox 已经包含了大量的常用命令,但添加命令也是相对简单的。只需获取源代码,修改配置文件,重编译,替换原有的可执行文件,就可以轻松地扩展 BusyBox 的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值