busybox学习笔记

一、什么是busybox

BusyBox 是很多标准 Linux® 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet(不过它的选项比传统 的版本要少);有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。

原理是:很多标准 Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。

特点是:

1.BusyBox利用Linux实用工具中代码大量重复的事实,将重复的代码重新整理,放

到一个文件中,减少了多次包含。

2.BusyBox通过简化非必要的复杂功能,减少占用的空间。

3.BusyBox的完全可定制性,提供了非常灵活,宜于扩展的结构。

二、用法:

1.busybox [arguments...]  # or

比如运行echo命令:

$./busybox echo “This is busybox”

This is busybox

2. [arguments...]            # if symlinked

这种用法的前提是建立了符号连接。比如:

$ ln -s busybox ls

$ ./ls /

bin  cdrom  etc  lib  media   opt   root   selinux  sys  var

boot  dev  home  lost+found  mnt   proc    sbin  srv   tmp  usr

BusyBox 中的命令并不支持所有可用选项,不过这些命令都包含了常用的选项。如果我们需要知道一个命令可以支持哪些选项,可以使用 –help 选项来调用这个命令

三、配置并编译 BusyBox

(一)默认配置

1.下载最新源代码:http://www.busybox.net/downloads/,我下载的版本是

busybox-1.13.4。

2.不用说都要解压源码包:$ tar jxvf busybox-1.13.4.tar.bz2

3.在解压后的源码包中配置:

$ make defconfig  #使用默认的配置

$ make  #编译源码

4.到这一步已经生成了一个相当大的busybox的映像,此时就可以使用busybox程序了,用法上面已经提到过,比如:

$ ./busybox echo “this is a busybox”

this is a busybox

(二)手工配置:

配置成嵌入式Linux使用的busybox,主机Ubuntu9.04,目标板smartarm3250,目标板系统Linux2.6.27,交叉编译器是

/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-gcc

1.在源码目录下(前提是你下载了源码并解压),执行命令:$ make menuconfig

其中 — Applets  下是对不同种类命令的配置,可以配置是否加入到busybox程序中去。

2.交叉编译:

$make CROSS_COMPILE=

/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-

其中的CROSS_COMPILE指的是你交叉编译器gcc的路径。也可以通过第一步的配置

界面进入到Busybox Settings  —> Build Options  —>

()  Cross Compiler prefix选择此项,

然后填入“/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-”,然后再

make即可。

3.到此已经编译为目标板可运行的程序,通过命令

$ file busybox

busybox: ELF 32-bit LSB executable, ARM, version 1, dynamically linked

(uses shared libs), stripped

4.可知编译成功。只需将此程序下载到板子即可运行。

四、扩展BusyBox的功能:添加自己的命令

请参考docs/new_applet-HOWTO.txt文档

a)在适当的目录编写applet代码,在这里我的代码是myls.c,将此代码文件放到coreutils目录下(因为ls.c在此目录)。

b)在所在目录的 Config.in文件中,增加applet的图形配置

config MYLS

bool “myls”

default y

help

myls is used to list the contents of directories.

c)在所在目录的Kbuild文件中,增加相应的 applet编译选项

lib-$(CONFIG_MYLS)      += myls.o

d)在include/usage.h中增加相应的usage说明

#define myls_trivial_usage “myls truvial help”

#define myls_full_usage    ”myls full usage”

e)在 inlucde/applets.h中增加相应的applet

USE_MYLS(APPLET_NOEXEC(myls, myls, _BB_DIR_BIN, _BB_SUID_NEVER, myls))

经过上面的步骤以后,再make menuconfig进入到Coreutils  —> 就会发现有

[*] myls

* 号表明默认配置到busybox中去,默认值在Config.in文件中,可以配置为无。编译成功后就可以像其他命令一样来使用此命令了。

0
0
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
快速回复 TOP
    个人资料

    sunyubo458
    • 访问:408067次
    • 积分:5464
    • 等级:
    • 排名:第2693名
    • 原创:102篇
    • 转载:224篇
    • 译文:7篇
    • 评论:83条
    文章分类
  • Android(5)
  • C/C++(100)
  • G10(2)
  • iphone(4)
  • Python(1)
  • Unix / Linux(129)
  • Windows(27)
  • 健康生活(38)
  • 嵌入式开发(2)
  • 数字电视(12)
  • 职业生涯(12)
  • 英语学习(22)
  • 计算机体系结构(2)
  • 日语(6)
  • Java(5)
    文章存档
  • 2012年10月(4)
  • 2012年09月(5)
  • 2012年08月(12)
  • 2012年07月(4)
  • 2012年06月(9)
  • 2012年05月(12)
  • 2012年04月(6)
  • 2012年03月(12)
  • 2012年02月(2)
  • 2012年01月(3)
  • 2011年12月(7)
  • 2011年11月(4)
  • 2011年10月(1)
  • 2011年09月(8)
  • 2011年08月(3)
  • 2011年07月(3)
  • 2011年06月(1)
  • 2011年05月(3)
  • 2011年03月(4)
  • 2011年02月(3)
  • 2011年01月(4)
  • 2010年12月(13)
  • 2010年11月(11)
  • 2010年10月(12)
  • 2010年09月(13)
  • 2010年08月(23)
  • 2010年07月(15)
  • 2010年06月(4)
  • 2010年05月(11)
  • 2010年04月(9)
  • 2010年03月(5)
  • 2010年02月(2)
  • 2010年01月(13)
  • 2009年12月(16)
  • 2009年11月(19)
  • 2009年10月(2)
  • 2009年09月(8)
  • 2009年08月(8)
  • 2009年07月(38)
  • 2008年11月(1)
    阅读排行
  • 摘录:Linux打Patch的方法(16924)
  • 中国各省的简称及简称的由来(11396)
  • [游泳] 学习蛙泳过程用到的一些资料(7286)
  • vim 删除每行开头结尾空格(6725)
  • 载噪比C/N和信噪比S/N(6585)
  • 源代码查看工具 Source Navigator 使用心得(6558)
  • 鼓节奏的知识(6384)
  • [Android] "Failed to find Java version for 'C:\Windows\system32\java.exe"问题的解决方法(5955)
  • Kona---哥们我来了!(作者系国内业余铁三顶尖爱好者党旗)(5774)
  • Excel2007中数据有效性的序列来源怎样引用其他工作表单元格内的数据?(5409)
    评论排行
  • 外语学习的真实方法及误区_读后感——方法、愿望、自律(47)
  • 摘录:Linux打Patch的方法(4)
  • [Android] "Failed to find Java version for 'C:\Windows\system32\java.exe"问题的解决方法(3)
  • 计算一个无符整数中1Bit的个数(2)
  • OSD的主要实现方法和类型(2)
  • iPhone/iTouch开发技术介绍(2)
  • iPhone开发入门(2)
  • 中国地址英文翻译,英文网站注册(1)
  • '践踏堆栈'[C语言编程] (1)
  • linux使用libtool(1)
    推荐文章
    • *源码解析Android中AsyncTask的工作原理
    • * python绘制非常漂亮的图表
    • * 数据库性能优化之SQL语句优化
    • *Animation动画详解(七)——ObjectAnimator基本使用
    • * Chromium网页URL加载过程分析
    • * JavaScript “跑马灯”抽奖活动代码解析与优化(一)
    最新评论
  • 如何背日语单词

    u013546077: 蛮有意思的呢~

  • 为什么在方法中定义的内部类只能访问方法中的final类型的局部变量?

    u014426398: 没有解释到本质

  • 破解eclipse vi插件(新旧版本都有)

    lijinchaowin: 学习

  • 摘录:Linux打Patch的方法

    lookat119: Good~

  • Svn常见问题

    u011607174: 有个关于SVN的问题,想咨询你,能不能留一个联系方式

  • vim 删除每行开头结尾空格

    zzz_Mraz: 我试了下,好像行末空格和行首空格也可表示为:行首空格:^\s行末空格:\s$中间加个“+”号好蛋疼哈...

  • How to fix Rosetta stone error 2123 -- "This was an error in the application"

    qweqazzzz: It does not work.

  • [游泳] Sun Yang 1500 Swimming Stroke Analysis London 2012

    powerman007: 写博客、英语学习.....嗯。这种方式不错!楼主其实可以去译言网或者163公开课又或者OSCHINA...

  • 关于Ubuntu10.04安装KDevelop的方法

    limuscle: 谢了,第一种可以,第二种也是提示在使用sudo apt-get install kdevelop时没...

  • 计算一个无符整数中1Bit的个数

    Elisa0812: 非常好!!谢谢啦

你可能感兴趣的:(linux,扩展,工具,compiler,applet,编译器)