ubuntu busybox 开机黑屏出现busybox
ubuntu 12.0.4编译busybox出错,求解答
#我解压tarball后,在目录下建立了build文件夹,我在build目录里开始编译。
make KBUILD_SRC=../-f../Makefile defconfig
sed-e's/.*FEATURE_PREFER_APPLETS.*/CONFIG_FEATURE_PREFER_APPLETS=y/'-i.config
sed-e's/.*FEATURE_SH_STANDALONE.*/CONFIG_FEATURE_SH_STANDALONE=y/'-i.config
make
make install#我没有执行这个安装命令,因为我不需要这个软件。
#检测一下编译好的busybox
PATH=./busybox ash#这条命令的作用是清空PATH系统环境变量,防止执行系统目录(/bin/usr/bin等)下的可执行文件如 ls rm等。
这样,下面的ls命令,是来自busybox的 ash shell,而非来自系统的bash shell。
/busybox/busybox-1.21.1/build$ ls
Makefile busybox_unstripped.out editors
applets console-tools findutils
archival coreutils include
busybox debianutils include2
busybox_unstripped docs init
busybox_unstripped.map e2fsprogs libbb
make过程的部分屏幕输出:
CC networking/ifplugd.o
CC networking/ifupdown.o
CC networking/inetd.o#编译 networking/inetd.o可以正常通过
CC networking/interface.o
......
CC util-linux/volume_id/sysv.o
CC util-linux/volume_id/udf.o
CC util-linux/volume_id/util.o
CC util-linux/volume_id/volume_id.o
CC util-linux/volume_id/xfs.o
AR util-linux/volume_id/lib.a
LINK busybox_unstripped
Trying libraries: crypt m
Library crypt is not needed, excluding it
Library m is needed, can't exclude it(yet)
Final link with: m
DOC busybox.pod
DOC BusyBox.txt
DOC busybox.1
DOC BusyBox.html
你的问题是找不到头文件,那首先,你检查一下 gcc的默认头文件搜索目录
echo""| gcc--xc-v-E
看输出是否包含/usr/include
#include<...>搜索从这里开始:
/usr/lib/gcc/i686-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/4.6/include-fixed
/usr/include/i386-linux-gnu
/usr/include
根据结果再做下一步判断。
如何使用busybox编译和生成最简lin
在ubuntu系统下创建一个rootfs目录,用于存放busybox生成的根文件系统,也可设置为nfs的挂载目录,直接通过网络文件系统进行挂载,便于开发。我自己就将该目录创建在/opt/FriendlyARM/mini2440/rootfs处。并在该目录下创建一些必备的子目录:
leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ mkdir bin dev etc proc sbin sys tmp usr leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ ls bin dev etc proc sbin sys tmp usr
1、修改Makefile配置
进入busybox目录,修改Makefile文件,在文件头处加入内容如下:
ARCH?= arm CROSS_COMPILE?= arm-linux-
2、修改配置文件
make menuconfig
选择Busybox Settings—>
1、Build Options—>,选择[*] Build Busybox as a static binary(no shared libs); 2、Installtion Options,在busybox instantlltionprefix一栏中,输入你想要创建rootfs的目录。比如我的是/opt/FriendlyARM/mini2440/rootfs。
3、去掉Coreutils—>sync选项;
4、去掉Linux System Utilities—>nsenter选项;
保存,退出。
3、编译源码
输入make,进行编译;这其中估计会遇到一些错误,可参见我的另外一篇博客(linux(ubuntu)编译busybox遇到的问题处理办法)。编译成功后,会给出以下提示:
LINK busybox_unstripped Static linking against glibc, can't use--gc-sections Trying libraries: crypt m Library crypt is not needed, excluding it Library m is needed, can't exclude it(yet) Final link with: m DOC busybox.pod DOC BusyBox.txt DOC busybox.1 DOC BusyBox.html
编译通过之后,输入make install命令进行安装,busybox会自动将rootfs根文件系统安装到之前设置的目录下。
busybox能做什么
根文件系统的构建是Linux移植过程中的关键步骤,它构成了一个基础的、可以运行的最小系统。本文将深入探讨根文件系统的内容与BusyBox在构建根文件系统中的应用。
根文件系统,又称rootfs,是Linux系统的核心,包含了运行Linux所必需的各种文件,如库文件、常用软件和命令、设备文件、配置文件等。根目录下的子目录和文件为Linux提供了运行的必要条件。没有根文件系统,其他文件系统和软件将无法正常工作。
构建根文件系统前,先了解其内部结构。以Ubuntu为例,根文件系统目录结构包括但不限于/bin、/dev、/etc、/lib、/mnt、/proc、/usr、/sbin、/sys和/opt等。这些目录分别存放了系统命令、设备文件、配置文件、库文件、临时挂载目录、系统信息文件、软件资源、管理文件、设备管理文件和可选文件或软件存放区。
BusyBox是一个集成大量Linux命令和工具的软件,通过配置和编译,可以方便构建嵌入Linux平台所需的根文件系统。通过访问BusyBox官网,下载源码进行编译,可以实现根文件系统的构建。在编译过程中,通过修改Makefile添加编译器,对中文字符支持进行优化,并根据需要选择静态或动态编译选项。配置选项还包括vi-style线编辑命令、简化modutils、Linux系统工具等,并使能BusyBox的Unicode编码以支持中文。
编译完成后,BusyBox工具和文件将被安装到rootfs目录中,包括bin、sbin和usr三个目录,以及linuxrc文件。Linux内核linit进程将查找用户空间的init程序,运行此程序实现切换到用户态。如果bootargs设置init=/linuxrc,则linuxrc可作为用户空间的init程序。
构建根文件系统后,还需添加动态库文件。首先在rootfs中创建lib目录,将交叉编译器中的.so和.a文件拷贝到rootfs/lib目录中。接着在rootfs/usr目录下创建lib目录,将交叉编译器的.so和.a库文件拷贝到rootfs/usr/lib目录中。至此,根文件系统的库文件全部添加完成。
构建完毕后,创建其他文件夹如dev、proc、mnt、sys、tmp和root等。在根文件系统中进行初步测试时,使用NFS挂载方式测试构建的rootfs,设置bootargs环境变量,启动Linux内核,进入根文件系统。输入“ls”命令进行测试,验证文件系统基本功能。此时rootfs仍存在不足,如无法运行'/etc/init.d/rcS'文件,需进一步完善。
本文仅简要介绍了根文件系统的构建与BusyBox的应用,后续文章将深入探讨根文件系统的完善与优化。关注公众号,了解更多关于BusyBox的相关资料。