- 2022-08-30 发布 |
- 37.5 KB |
- 7页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
[计算机]busybox配置
面是对1.00版本的实验。 1、文件准备 解压busybox-1.00.tar.gz得到busybox-1.00目录,进入,阅读相关的README和INSTALL,没什么特别的,都是提示busybox需要经过三个步骤的操作进行安装使用。 2、配置busybox busybox的配置程序和linux内核菜单配置方式简直一模一样 #makemenuconfig 下面是需要编译进busybox的功能选项,其他的可以根据需要自选,但是同样不要太贪心. GeneralConfiguration应该选的选项 Showverboseappletusagemessages SupportforSUID/SGIDhandling RuntimeSUID/SGIDconfigurationvia/etc/busybox.conf BuildOptions BuildBusyBoxasastaticbinary(nosharedlibs) 这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作. InstallationOptions Don'tuse/usr (./_install)BusyBoxinstallationprefix 这个选项也一定要选,否则makeinstall后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,makeinstall后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接. 其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了. 配置好后退出并保存. 3,编译并安装busybox #make #make\ninstall 顺利完成。 4、检查安装结果 根据参考资料2,检查到编译好后在解压目录busybox-1.00目录下生成子目录_install #ll 总用量8 drwxr-xr-x2rootroot409612月1115:49bin lrwxrwxrwx1rootroot1112月1115:49linuxrc->bin/busybox drwxr-xr-x2rootroot409612月1115:49sbin 其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接. -rwxr-xr-x1rootroot80140012月1115:49busybox 可见busybox只要八百k多点。根据配置选择的不同,编译出来的busybox大小也会有差别。根据其他资料所述,典型的busybox文件大小在动态链接的情况下是300KB左右,静态链接为800KB左右,用它实现的文件系统完全可以控制在1MB以下 在bin/下面有: #ll 总用量788 lrwxrwxrwx1rootroot712月1115:49[->busybox lrwxrwxrwx1rootroot712月1115:49ash->busybox lrwxrwxrwx1rootroot712月1115:49basename->busybox lrwxrwxrwx1rootroot712月1115:49bunzip2->busybox -rwxr-xr-x1rootroot80140012月1115:49busybox lrwxrwxrwx1rootroot712月1115:49bzcat->busybox lrwxrwxrwx1rootroot712月1115:49cat->busybox lrwxrwxrwx1rootroot712月1115:49chgrp->busybox lrwxrwxrwx1rootroot712月1115:49chmod->busybox lrwxrwxrwx1rootroot712月1115:49chown->busybox lrwxrwxrwx1rootroot712月1115:49chvt->busybox lrwxrwxrwx1rootroot712月1115:49clear->busybox lrwxrwxrwx1rootroot712月1115:49cmp->busybox lrwxrwxrwx1rootroot712月1115:49cp->busybox lrwxrwxrwx1rootroot712月1115:49cut->busybox lrwxrwxrwx1rootroot712月1115:49date->\nbusybox lrwxrwxrwx1rootroot712月1115:49dd->busybox lrwxrwxrwx1rootroot712月1115:49deallocvt->busybox lrwxrwxrwx1rootroot712月1115:49df->busybox lrwxrwxrwx1rootroot712月1115:49dirname->busybox lrwxrwxrwx1rootroot712月1115:49dmesg->busybox lrwxrwxrwx1rootroot712月1115:49du->busybox lrwxrwxrwx1rootroot712月1115:49echo->busybox lrwxrwxrwx1rootroot712月1115:49egrep->busybox lrwxrwxrwx1rootroot712月1115:49env->busybox lrwxrwxrwx1rootroot712月1115:49expr->busybox lrwxrwxrwx1rootroot712月1115:49false->busybox lrwxrwxrwx1rootroot712月1115:49fgrep->busybox lrwxrwxrwx1rootroot712月1115:49find->busybox lrwxrwxrwx1rootroot712月1115:49free->busybox lrwxrwxrwx1rootroot712月1115:49grep->busybox lrwxrwxrwx1rootroot712月1115:49gunzip->busybox lrwxrwxrwx1rootroot712月1115:49gzip->busybox lrwxrwxrwx1rootroot712月1115:49head->busybox lrwxrwxrwx1rootroot712月1115:49hexdump->busybox lrwxrwxrwx1rootroot712月1115:49hostname->busybox lrwxrwxrwx1rootroot712月1115:49id->busybox lrwxrwxrwx1rootroot712月1115:49install->busybox lrwxrwxrwx1rootroot712月1115:49kill->busybox lrwxrwxrwx1rootroot712月1115:49killall->busybox lrwxrwxrwx1rootroot712月1115:49ln->busybox lrwxrwxrwx1rootroot712月1115:49logger->busybox lrwxrwxrwx1rootroot712月1115:49ls->busybox lrwxrwxrwx1rootroot712月1115:49mkdir->busybox lrwxrwxrwx1rootroot712月1115:49mknod->busybox lrwxrwxrwx1rootroot712月1115:49mktemp->busybox lrwxrwxrwx1rootroot712月1115:49more->busybox lrwxrwxrwx1rootroot712月1115:49mount->\nbusybox lrwxrwxrwx1rootroot712月1115:49mv->busybox lrwxrwxrwx1rootroot712月1115:49openvt->busybox lrwxrwxrwx1rootroot712月1115:49pidof->busybox lrwxrwxrwx1rootroot712月1115:49ping->busybox lrwxrwxrwx1rootroot712月1115:49ps->busybox lrwxrwxrwx1rootroot712月1115:49pwd->busybox lrwxrwxrwx1rootroot712月1115:49readlink->busybox lrwxrwxrwx1rootroot712月1115:49reset->busybox lrwxrwxrwx1rootroot712月1115:49rm->busybox lrwxrwxrwx1rootroot712月1115:49rmdir->busybox lrwxrwxrwx1rootroot712月1115:49sed->busybox lrwxrwxrwx1rootroot712月1115:49sh->busybox lrwxrwxrwx1rootroot712月1115:49sleep->busybox lrwxrwxrwx1rootroot712月1115:49sort->busybox lrwxrwxrwx1rootroot712月1115:49strings->busybox lrwxrwxrwx1rootroot712月1115:49sync->busybox lrwxrwxrwx1rootroot712月1115:49tail->busybox lrwxrwxrwx1rootroot712月1115:49tar->busybox lrwxrwxrwx1rootroot712月1115:49tee->busybox lrwxrwxrwx1rootroot712月1115:49test->busybox lrwxrwxrwx1rootroot712月1115:49time->busybox lrwxrwxrwx1rootroot712月1115:49touch->busybox lrwxrwxrwx1rootroot712月1115:49tr->busybox lrwxrwxrwx1rootroot712月1115:49true->busybox lrwxrwxrwx1rootroot712月1115:49tty->busybox lrwxrwxrwx1rootroot712月1115:49umount->busybox lrwxrwxrwx1rootroot712月1115:49uname->busybox lrwxrwxrwx1rootroot712月1115:49uniq->busybox lrwxrwxrwx1rootroot712月1115:49unzip->busybox lrwxrwxrwx1rootroot712月1115:49uptime->busybox lrwxrwxrwx1rootroot712月1115:49usleep->busybox lrwxrwxrwx1rootroot712月1115:49vi->\nbusybox lrwxrwxrwx1rootroot712月1115:49wc->busybox lrwxrwxrwx1rootroot712月1115:49wget->busybox lrwxrwxrwx1rootroot712月1115:49which->busybox lrwxrwxrwx1rootroot712月1115:49whoami->busybox lrwxrwxrwx1rootroot712月1115:49xargs->busybox lrwxrwxrwx1rootroot712月1115:49yes->busybox lrwxrwxrwx1rootroot712月1115:49zcat->busybox 根据资料,可以这样用busybox #busyboxls 他的功能就相当运行ls命令 实验如下: 在bin/目录下 #busyboxls [chgrpcutdufindhostnamelsopenvtrmsynctruptimexargs…… 实际就是把原先的命令加一个busybox的前缀就是了~ 最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能. #ln-sbusyboxls #ln-sbusyboxrm #ln-sbusyboxmkdir 然后分别运行这三个链接: #./ls #./rm #./mkdir 就可以分别完成了lsrm和mkdir命令的功能.虽然他们都指向同一个可执行程序busybox 但是只要链接名不同,完成的功能就不同。 实际上可以看到安装结果已经包含了这些基本命令但符号链接。实验如下: #./ls Usingfallbacksuidmethod [chgrpcutdufindhostnamelsopenvtrmsynctruptimexargs…… #./echo$PATH Usingfallbacksuid\nmethod /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin #./mkdir Usingfallbacksuidmethod BusyBoxv1.00(2006.12.11-07:42+0000)multi-callbinary Usage:mkdir[OPTION]DIRECTORY... …… #busyboxmkdir BusyBoxv0.60.5(2003.01.24-22:43+0000)multi-callbinary Usage:mkdir[OPTION]DIRECTORY... …… 可以看到,使用busybox的ls命令会多输出一个左括符号,并会多出Usingfallbacksuidmethod或BusyBoxv1.00(2006.12.11-07:42+0000)multi-callbinary的提示 5、反思与总结 实际上最麻烦的工作是配置,其中动态/静态库,安装位置,是否使用交叉编译工具等几个问题在上面操作中并没有深入涉及。 参考资料3中提到配置时的选项: 下面三个目录是很多人都会感兴趣的: BuildOptions---> InstallationOptions---> Login/PasswordManagementUtilities---> 在BuildOptions里面有是否使用交叉编译的选项(DoyouwanttobuildBusyBoxwithaCrossCompiler)。如果要对其他平台进行编译就要选择它并设置相应的编译程序前缀。 在InstallationOptions里面可以设置安装的路径,即设置为新文件系统的根目录。当然也可以用缺省的_install目录,安装之后再复制到新文件系统中去。 在设置Login/PasswordManagementUtilities的时候,为了免去配置glibc的麻烦,最好设置使用busybox自己的password和shadow文件的功能(Useinternalpasswordandgroupfunctionsratherthansystemfunctions)。 busybox提供的命令无疑比较全面,但它的缺省配置还不能构成一个功能比较完备的文件系统。必须要添加的命令有Login/PasswordManagement\nUtilities里面的getty、login和passwd,这些命令从前是由另外一个软件包tinylogin所提供的。当然,如果不需要一个交互的登录界面,这些命令也可以去掉。通过设定内核参数init=/bin/sh可以在系统启图1busybox的编译配置界面动后直接得到一个shell。 tlenetd命令是一个远程登录服务程序,把它编译进busybox中会为将来的调试提供很多的方便。当然也可以通过串口终端的方式管理嵌入式设备,但网络登录的方式却更为方便。 [遗留问题] 1、Showverboseappletusagemessages RuntimeSUID/SGIDconfigurationvia/etc/busybox.conf是什么意思? [参考资料] 1、《源码开放的嵌入式系统软件分析与实践——基于skyeye和arm开发平台》陈渝李明杨晔等编著北京航空航天大学出版社 2、编译busybox 实际上这个资料只不过是另一篇文章“ BabyLinux制作过程详解 ”中的一个片段~ 3、Busybox制作嵌入式Linux的文件系统(王朝网络wangchao.net.cn)-查看更多