背景

在做嵌入式开的时候,busybox无疑是非常好用的命令集,所以很多时候都喜欢把busybox移植到我们的系统里面。

说明

添加一个很简单的命令——hello_busybox,输出“Hello Husybox!”。

busybox解压出来有很多目录,每个目录几乎是一类命令,比如网络,shell等等。

为了方便举例,我们把hello_busybox这个命令添加到miscutils目录下。

步骤

1)、在miscutils目录下添加.c文件,函数名要与其它.c文件里面的函数名的格式保持一致,即命令名_main()。

vi miscutils/hello_busybox.c

使用以下内容

//#include "busybox.h"
#include "libbb.h" int hello_busybox_main(int argc, char *argv[])
{
printf("hello_busybox_main!\n"); return 0;
}

2)、修改源文件所在目录下的配置

vi miscutils/Config.src

新增以下内容

config HELLO_BUSYBOX
bool "say hello to busybox"
default y
select PLATFORM_LINUX
help
say hello to busybox

修改这里主要是使得执行“make menuconfig”命令的时候,配置界面可以出现我们新增的命令,让用户对该命令可以配置。

第一行是表示该命令的一个环境变量;第二行是出现在配置界面上的文字,是一个布尔量,取值为“Y”或者“N”;第三行是这个选项的默认值,这里默认是选中,后面两行是在配置界面的帮助信息。

注:修改上面的文件只是让配置界面出现我们的这个命令,以及根据是否选择配置环境变量“HELLO_BUSYBOX”为“Y"或”N",到目前为止,busybox还是不能编译到我们的源文件,甚至到现在为止都还不知道我们的这个源文件叫啥。

3)、修改编译源文件所在目录的Kbuild.src

vi miscutils/Kbuild.src

在INSERT之后新增一行

lib-$(CONFIG_HELLO_BUSYBOX)    += hello_busybox.o

4)、修改include/applets.src.h文件

vi include/applets.src.h

新增一行

IF_HELLO_BUSYBOX(APPLET(hello_busybox, BB_DIR_SBIN, BB_SUID_DROP))

#第一个参数:命令的名字;第二个参数:存放的路径:第三个参数:权限

5)、为命令添加帮助信息,以便使用--help的时候查阅

vi include/usage.src.h

新增下面内容

#define hello_busybox_trivial_usage \
"None" #define hello_busybox_full_usage "None" // 多行注意需要用"\" 隔开

使用make menuconfig即可看到,还有在make之前可以查看到include/autoconf.h里面有:

#define CONFIG_HELLO_BUSYBOX 1
#define ENABLE_HELLO_BUSYBOX 1

make 之后在include/config/下生成/hello/busybox.h文件:

#define CONFIG_HELLO_BUSYBOX 1

测试

本机也可以进行测试(编译成本机能够执行的语言即可)

./busybox | grep hello_busybox

或者

ln -s busybox hello_busybox && ./hello_busybox

注:此文并没有完成在自定义目录下添加小程序

BusyBox 添加 自定义命令\小程序 (applet)的更多相关文章

  1. 自定义微信小程序导航(兼容各种手机)

    详细代码请见github,请点击地址,其中有原生小程序的实现,也有wepy版本的实现 了解小程序默认导航 如上图所示,微信导航分为两部分,第一个部分为statusBarHeight,刘海屏手机(iPh ...

  2. 如何自定义微信小程序swiper轮播图面板指示点的样式

    https://www.cnblogs.com/myboogle/p/6278163.html 微信小程序的swiper组件是滑块视图容器,也就是说平常我们看到的轮播图就可以用它来做,不过这个组件有很 ...

  3. 自定义微信小程序swiper轮播图面板指示点的样式

    微信小程序的swiper组件是滑块视图容器,也就是说平常我们看到的轮播图就可以用它来做,不过这个组件有很多样式是固定的,但是,有时候我们的设计稿的面板指示点是需要个性化的,那么如何去修改swiper组 ...

  4. 实现自定义的小程序底部tabbar

    背景 诶,当然是为了实现更有温度的代码啦(背后设计师拿着刀对着我) 自带tabbar app.json中配置: tabBar: { backgroundColor: '#fff', borderSty ...

  5. 支付宝小程序自定义弹窗插件|支付宝dialog插件|model插件

    支付宝小程序自定义弹窗组件wcPop|小程序自定义对话框|actionSheet弹窗模板 支付宝小程序官方提供的alert提示框.dialog对话框.model弹窗功能比较有限,有些都不能随意自定义修 ...

  6. 微信小程序学习笔记四 自定义组件

    1. 自定义组件 类似Vue或react中的自定义组件 小程序允许我们使用自定义组件的方式来构建页面 1.1 创建自定义组件 类似于页面, 一个自定义组件由json wxml wxss js 4个文件 ...

  7. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  8. 微信小程序之生成图片分享

    通过社交软件分享的方式来进行营销小程序,是一个常用的运营途径.小程序本身支持直接将一个小程序的链接卡片分享至微信好友或微信群,然后别人就可以通过点击该卡片进入该小程序页面.但是小程序目前不支持直接分享 ...

  9. mpvue + vant + flyio 小程序项目总结

    vant 的使用 我开始是 npm 导入,然后 import,使用不了. 找了各种方法,最后还是下载文件,然后找到 dist 文件夹,复制到项目里,我是放在 static 文件夹,文件名 dist 重 ...

随机推荐

  1. c#活动目录操作

    c#活动目录操作  https://www.cnblogs.com/ahuo/archive/2007/03/16/676853.html 添加引用 System.DirectoryServices导 ...

  2. float元素上-margin的用法

    css标准,float元素上的负margin表示把下面的元素向对应方向移动,并且覆盖上一个元素(这里是指html中元素的声明顺序). 标准情况下我们用float 时候是这样的. -margin通俗点说 ...

  3. 牛客网Sql

    牛客网Sql: 1.查询最晚入职的员工信息  select * from employees where hire_date =(select max(hire_date) from employee ...

  4. 五年C语言程序员,是深耕技术还是走管理?

    从进入程序员行列开始(2013年6月),到现在为止(2019年2月),已经有五年半了.    一路波折,已经从无知菜鸟走到了意识觉醒的老鸟了.    薪资变化情况如下: 2013年:2000元/月 ( ...

  5. LockSupport源码分析

    LockSupport提供park()和unpark()方法实现线程阻塞和唤醒.底层实现是通过sun.misc.Unsafe的park和unpark. 关于sun.misc.Unsafe的说明请参见我 ...

  6. 改写画质、突破性能, Unity 全面升级!

    技术变革,时代更迭.从<神庙逃亡>.<暗影之枪>等主流手游到独立联网的大型游戏,从绚丽多彩的影视动画到具备极致体验的运输建筑制造行业,从传统的2D 到立体3D 乃至沉浸式的VR ...

  7. JavaScript图形实例:线段构图

    在“JavaScript图形实例:四瓣花型图案”和“JavaScript图形实例:蝴蝶结图案”中,我们绘制图形时,主要采用的方法是先根据给定的曲线参数方程计算出两点坐标,然后将两点用线段连接起来,线段 ...

  8. svn 回退/更新/取消某个版本命令详解

    1,取消文件: svn revert 文件名 2,取消目录 svn revert --depth=infinity 目录名 3,回退版本 方法1: 用svn merge 1) 先svn up,保证更新 ...

  9. 最大流EK板子

    #include <bits/stdc++.h> using namespace std; ; const int INF=0x7fffffff; typedef long long ll ...

  10. 时间和日期-<Date和SimpleDateFormat>

    第一步.定义一个Date //获取当前时间 Date now=new Date(); 第二步.定义一个SimpleDateFormat //规范时间格式 SimpleDateFormat date=n ...