实验三 busybox 编译实验
Busybox编译及其yaffs2文件系统制作(精)
一、Busybox编译(版本busybox-1.13.01、在环境变量中设置交叉编译器的路径(版本cross-4.3.32、[*] Build Busybox as a static binary (no shared libs3、busybox settings->busybox library tuning->username completion、fancy shell prompts4、make menuconfig设置CROSS COMPILE为arm-linux-5、install optin-->[*] Don't use /usr 防止编译后生成的文件安装到主机的/usr 目录下,改变了主机的系统6、make install即可在_install目录下生成bin sbin usr(bin,sbin及其linuxrc文件(该文件链接到/bin/busybox二、yaffs2文件系统制作将_install目录下的文件拷贝至~/myroot文件夹下,按如下结构创建目录,并在相应目录下添加如下内容:目录结构/|-- bin (busybox产生|-- dev (设备名由mknod创建|-- etc| |-- init.d| `-- sysconfig|-- home (手工创建用户| |-- san (空与passwd文件对应| `-- sky (空与passwd文件对应|-- lib (从交叉编译工具路径拷贝cp -r 4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -a |-- mnt (空|-- proc (空|-- root (空|-- sbin (busybox产生|-- sys (空|-- tmp (空|-- usr (busybox产生| |-- bin (busybox产生| |-- lib (busybox产生?| `-- sbin (busybox产生`-- var (空dev目录分析dev|-- cp -a /dev/console devcp -a /dev/null devcp -a /dev/ttyS0 devcp -a /dev/ttyS1 dev(mknod -m 600 console c 5 1,这一个没有试过can't open /dev/s3c2410_serial: No such file or director/dev目录下的console没有弄好就会出现这个问题,最简单的办法就是直接复制过来,具体的机理有待进一步研究etc目录分析etc|-- fstab (指明需挂载的文件系统|-- group (用户组|-- init.d (启动文件目录| `-- rcS (存放系统启动时配置以及自启动加载的进程等|-- inittab (init进程的配置文件|-- passwd (密码文件|-- profile (用户环境配置文件`-- sysconfig`-- HOSTNAME (存放主机名【fstab】#device mount-point type options dump fsck order proc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 0var /dev tmpfs defaults 0 0【group】root:*:0:daemon:*:1:bin:*:2:sys:*:3:adm:*:4:tty:*5:disk:*:6:lp:*:7:mail:*:8:news:*:9:uucp:*:10:proxy:*:13:kmem:*:15:dialout:*:20:fax:*:21:voice:*:22:cdrom:*:24:floopy:*:25:tape:*:26:audio:*:29:ppp:x:99:500:x:500:sky501:x:501:sky【init.d/rcS】#!/bin/shPA TH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesse.mount -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -smkdir -p /var/lock/bin/hostname -F /etc/sysconfig/HOSTNAME【inittab】#/etc/inittab::sysinit:/etc/init.d/rcSconsole ::askfirst:-/bin/sh(s3c2410_serial0 ::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -rs3c2410_serial为串口设备号,名称必须与drivers/serial/samsung.c一致,或则,系统启动时无法找到串口!!/*注意s3c2410上串口的设备名称是/dev/s3c2410_serial[0..3]*/$vim drivers/serial/samsung.c879 static struct uart_driver s3c24xx_uart_drv = {880 .owner = THIS_MODULE,881 .dev_name = "s3c2410_serial",882 .nr = CONFIG_SERIAL_SAMSUNG_UARTS,883 .cons = S3C24XX_SERIAL_CONSOLE,884 .driver_name = S3C24XX_SERIAL_NAME,885 .major = S3C24XX_SERIAL_MAJOR,886 .minor = S3C24XX_SERIAL_MINOR,887 };[root@Sanux /]#ls dev/s3c2410_serial*dev/s3c2410_serial0 dev/s3c2410_serial1 dev/s3c2410_serial2 【passwd】root::0:0:root:/:/bin/shftp::14:50:FTP User:/var/ftp:bin:*:1:1:bin:/bindaemon:*:2:2:daemon:/sbin:nobody:*:99:99:Nobody:/:sky::520:502:Linux User,,,,:/home/sky:/bin/shsan::530:503:san user,,,,:/home/san:/bin/sh【profile】#Ash profile#vim:syntax=sh#No core files by default#ulimit -S -c 0>/dev/null 2>&1USER="`id -un`"LOGNAME=$USERPS1='[\u@\h \W]#'(PS1='[$USER@$HOSTNAME $PWD]#' PATH=$PATH HOSTNAME=`/bin/hostname`export USER LOGNAME PS1 PATH【sysconfig/HOSTNAME】yournamelib目录lib (cp -r 4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -a |-- ld-2.8.so |-- ld-linux.so.3 -> ld-2.8.so|-- libBrokenLocale-2.8.so|-- libBrokenLocale.so.1 -> libBrokenLocale-2.8.so|-- libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.0|-- libSDL-1.2.so.0.11.0|-- libSDL-1.2.so.0.11.2|-- libSDL.so -> libSDL-1.2.so.0.11.0|-- libSegFault.so|-- libanl-2.8.so|-- libanl.so.1 -> libanl-2.8.so|-- libc-2.8.so|-- libc.so.6 -> libc-2.8.so|-- libcidn-2.8.so|-- libcidn.so.1 -> libcidn-2.8.so |-- libcrypt-2.8.so|-- libcrypt.so.1 -> libcrypt-2.8.so |-- libdl-2.8.so|-- libdl.so.2 -> libdl-2.8.so|-- libgcc_s.so -> libgcc_s.so.1 |-- libgcc_s.so.1|-- libm-2.8.so|-- libm.so.6 -> libm-2.8.so|-- libmemusage.so|-- libnsl-2.8.so|-- libnsl.so.1 -> libnsl-2.8.so|-- libnss_compat-2.8.so|-- libnss_compat.so.2 -> libnss_compat-2.8.so |-- libnss_dns-2.8.so|-- libnss_dns.so.2 -> libnss_dns-2.8.so|-- libnss_files-2.8.so|-- libnss_files.so.2 -> libnss_files-2.8.so|-- libnss_hesiod-2.8.so|-- libnss_hesiod.so.2 -> libnss_hesiod-2.8.so |-- libnss_nis-2.8.so|-- libnss_nis.so.2 -> libnss_nis-2.8.so|-- libnss_nisplus-2.8.so|-- libnss_nisplus.so.2 -> libnss_nisplus-2.8.so |-- libpcprofile.so|-- libpthread-2.8.so|-- libpthread.so.0 -> libpthread-2.8.so|-- libresolv-2.8.so|-- libresolv.so.2 -> libresolv-2.8.so|-- librt-2.8.so|-- librt.so.1 -> librt-2.8.so|-- libsqlite3.so -> libsqlite3.so.0.8.6|-- libsqlite3.so.0 -> libsqlite3.so.0.8.6|-- libsqlite3.so.0.8.6|-- libthread_db-1.0.so|-- libthread_db.so.1 -> libthread_db-1.0.so|-- libutil-2.8.so`-- libutil.so.1 -> libutil-2.8.so说明:linuxrc执行时会依赖lib库文件1、如果将busybox编译成动态链接的形式,没有lib动态库或者缺少相应的库文件,那么linux会提示无法执行或者找不到相应的库。
文件系统实验报告
嵌入式系统实验报告(二)--嵌入式文件系统的构建138352019陈霖坤一实验目的了解嵌入式操作系统中文件系统的类型和作用了解JFFS2文件系统的优点及其在嵌入式系统中的作用掌握利用Busybox软件制作嵌入式文件系统的方法掌握嵌入式linux文件系统的挂载过程二实验内容与要求编译BusyBox,以BusyBox为基础,构建一个适合的文件系统;制作ramdisk文件系统映像,用你的文件系统启动到正常工作状态;研究NFS作为根文件系统的启动过程。
三Busybox介绍BusyBox最初是由Bruce Perens在1996年为Debian GNU/Linux安装盘编写的,其原始构想是希望在一张软盘上能放入一个开机系统,以作为急救盘和安装盘。
后来它变成了嵌入式Linux设备和系统和Linux发布版安装程序的实质标准,因为每个Linux可执行文件需要数Kb的空间,而集成两百多个程序的BusyBox可以节省大量空间。
Busybox集成了包括mini-vi编辑器、/sbin/init、文件操作、目录操作、系统配置等应用程序。
Busybox支持多种体系结构,可以选择静态或动态链接,以满足不同需要。
四linux文件系统文件系统是对一个存储设备上的数据和元数据进行组织的机制,linux文件系统接口设计为分层的体系结构,从而将用户接口层、文件系统实现层和操作存储设备的驱动程序分隔开。
在文件系统方面,linux可以算得上操作系统中的“瑞士军刀”。
Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统,而且对于使用标准的和比较奇特的文件系统以及开发文件系统来说,linux是极好的平台,这得益于linux内核中的虚拟文件系统(VFS,也称虚拟文件系统交换器)。
文件结构Windows的文件结构是多个并列的树状结构,不同的磁盘分区各对应一个树。
Linux的文件结构是单个的树,最上层是根目录,其它目录都从根目录生成。
busybox 源码编译
busybox 源码编译BusyBox是一个开源的、轻量级的Unix工具箱,它集成了许多常用的命令和实用程序,如ls、cat、grep、mount等。
它的源代码可以通过GitHub等平台获取,并且非常适合在嵌入式系统中使用。
要编译BusyBox的源码,首先需要确保系统中已经安装了所需的编译工具链,例如GCC、make等。
接下来,可以按照以下步骤进行编译:1. 下载BusyBox的源代码:可以通过Git命令克隆BusyBox的仓库,或者从官方网站上下载源码压缩包。
2. 解压源码压缩包:使用tar命令解压下载的源码压缩包。
3. 进入源码目录:使用cd命令进入解压后的源码目录。
4. 配置编译选项:运行make menuconfig命令,可以通过一个简单的文本界面配置编译选项。
在这个界面中,可以选择需要的命令和实用程序,并进行一些其他的配置,例如安装路径、编译器选项等。
5. 开始编译:运行make命令,BusyBox的源码将会被编译成可执行文件。
6. 安装BusyBox:运行make install命令,BusyBox将会被安装到之前配置的安装路径中。
编译完成后,可以在指定的安装路径中找到BusyBox的可执行文件。
可以将该文件拷贝到嵌入式系统中,并通过添加相应的软链接,使得系统中的命令可以调用BusyBox的实现。
除了以上的基本编译步骤,还可以根据需要进行一些定制化的操作。
例如,可以通过修改源码中的配置文件来增加或删除特定的命令;还可以通过修改Makefile等文件来调整编译选项。
总的来说,编译BusyBox的源码并不复杂,只需按照上述步骤进行操作即可。
通过编译BusyBox,可以在嵌入式系统中获得一个功能强大、占用空间小的Unix工具箱,从而提高系统的灵活性和效率。
用busybox做一个简单的文件系统
用busyb ox做一个简单的文件系统利用Busy Box做一个简单的根文件系统1、下载Busy Box源代码包 http://busybo /2、找个地方解压缩包,例如tar-xjvf busybo x-1.00.tar.bz23、进入busy box的文件夹,使用make menuco nfig进入设置[attach]244[/attach]4、在build option s中有一些选项要注意BuildBusyBo x as a static binary(no shared libs):如果选择了这个选项,那么Busy Box 将被静态编译,也就是不需要动态链接库的支持就能运行,但是这样会使编译后文件的体积增大。
Do you want to buildBusyBo x with a CrossCompil er:如果你的bu sybox将要运行机器与编译主机的体系结构不同,比如s3c2410是A RM,与我们的X86主机芯片系统结构不一样,那么这个一定要选上,并且在 CrossCompil er prefix中写上交叉编译器的名字,比如ARM用arm-linux-[attach]245[/attach]5、在Insta llati on Option s中 BusyBo x instal latio n prefix就是在编译完后运行m ake instal l 时,busybo x将被安装的地址。
[attach]246[/attach]6、其它的选项按照默认选项就行,当然自己也可以看看有没有需要,把其它一些命令加入到编译选项中来7、完成后保存,然后运行ma ke8、编译没有问题后运行ma ke instal l这样编译好的bus ybox就会自动安装到Busy Box instal latio n prefix中,一般是三个文件夹bin sbin usr和一个文件lin uxrc。
linux内核移植、根文件系统、busybox
/ #通过共享目录
为了方便使用 arm-linux-gcc,我们可以把它所在的目录添加到环境变量中 在 export PATH 前面插入 PATH=/arm2410/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin/:$PATH 这样一句,以后启动就可以直接使用 arm-linux-gcc 了。 要使环境变量立马生效,可以使用下面的命令。 source /etc/profile 我们可以用 arm-linux-gcc -v 来查看交叉编译器版本,如果是 4.1.1 就是正确的。 (3)设置 Nand Flash 分区信息表 设置 Nand Flash 的分区信息表是为内核启动以后加载文件系统用的,可以将 Nand Flash 看成我们 PC 机的硬盘,对 Nand Flash 的分区看成是对硬盘的分区,硬盘可以分成 C 盘,D 盘之类,而 Nand Flash 则可以分成很多块,每块有不同的名字、大小和用途。下面 是对 Super-ARM 实验箱的 Nand Flash 进行分区的情况(参考表 5-1-1): � 第 0 块命名为 "uboot" ,它用来存放 u-boot.bin 映像,起始地址是 Nand Flash 的 0x000000,最大 0x30000 个字节;
var
� �
第七行创建 var 目录下的子目录。 第八行更改 var/tmp 目录的权限。
3、创建设备文件 先了解一下 Linux 的设备:Linux 中主要有 2 种类型的设备:字符设备(无缓冲且只能顺 序存取)、块设备(有缓冲且可以随机存取)。每个设备都必须有主、次设备号,主设备号相同 的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件 的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备 ")。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查 看当前已经加载的设备驱动程序的主设备号。 你可以在你的宿主机上执行这个命令看看你的 宿主机所拥有的设备文件,可以看到,Linux 有很多很多的设备文件,在嵌入式 Linux 中并 没有这么多的设备,下面用 mknod 命令创建一些主要设备文件。 关于 Linux 的设备号:很多设备在 Linux 下已经有默认的主次设备号,如帧缓冲设备是 Linux 的标准字符设备,主设备号是 29,如果 Linux 下有多个帧缓冲设备,那么这些帧缓冲 设备的次设备号就从 0~31(Linux 最多支持 32 个帧缓冲设备)进行编号,比如 fb0 对应的 次设备号就是 0,fb1 为 1,类推。用户也可以创建自己的设备文件,比如下一篇章中我们 要讨论的 Led 设备,需要注意的是用户自己的设备号不能与一些标准的系统设备号重叠。 Linux 下创建设备节点的命令是 mknod,下面是它的命令格式: mknod Name { b | c } Major Minor Name 是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major 指定设备的主设备号,Minor 是次设备号。 下面我们来创建嵌入式 Linux 系统中一些基本的设备文件, 必须是 root 权限, 命令如下: mknod -m 600 dev/console c 5 1 #创建系统控制台设备 mknod -m 666 dev/null c 1 3 #创建空设备, 任何写入都将被丢弃, 任何读取都得到 EOF mknod dev/fb0 c 29 0 #创建第一个帧缓冲设备,显示接口 mknod dev/tty c 5 0 #创建 TTY 设备 mknod dev/tty0 c 4 0 #创建当前虚拟控制台 mknod dev/tty1 c 4 1 mknod dev/tty2 c 4 2 mknod dev/tty3 c 4 3 mknod dev/tty4 c 4 4 ln -s dev/fb0 dev/fb #创建创建 fb 到 fb0 的链接 4、准备启动配置文件 Linux 启动所需要的文件有 etc/inittab、 etc/init.d/rcS、 etc/fstab 这三个文件(以下均假定当 前路径在/arm2410/rootfs)。 下面创建 inittab 文件,命令:gedit etc/inittab, 在文件中添加如下内容: ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::respawn:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot
busybox gcc 编译
标题:从头学起——详解busybox gcc 编译一、引言在当今快速发展的科技世界,嵌入式系统编程已成为程序员们必须要面对的挑战之一。
而busybox和gcc编译,作为常见的工具之一,对编程而言显得格外重要。
本文将深入探讨busybox和gcc编译的相关知识,帮助读者更全面地理解和掌握这一主题。
二、busybox与gcc的概念和特点1. busybox的概念和特点busybox是一个集成了一百多个最常用Linux命令和一个简单的一键化配置工具的软件。
busybox具有占用空间小、执行速度快、移植性好等特点,通常用于嵌入式Linux系统。
2. gcc的概念和特点gcc是一款功能强大的开源编译器,支持多种编程语言,如C、C++、Objective-C等。
gcc具有高度可配置性、运行速度快、能够生成高效的代码等特点,被广泛应用于嵌入式系统编程中。
三、busybox和gcc编译的基础知识1. busybox编译的基础知识busybox的编译主要包括配置、编译和安装三个步骤。
在配置过程中,可通过make menuconfig命令进行交互式配置,选择需要的功能。
编译过程中,使用make命令进行编译。
完成编译后,使用make install命令进行安装。
2. gcc编译的基础知识gcc编译主要包括预处理、编译、汇编和信息四个步骤。
在编译过程中,可以通过gcc命令指定编译选项和信息库,生成可执行文件。
gcc 编译的过程需要深入理解源代码和关联的库文件。
四、深入探讨busybox和gcc编译1. busybox编译的深入探讨在busybox编译过程中,需要考虑版本选择、功能配置、交叉编译、优化选项等诸多因素。
还需要理解busybox的组成结构和功能模块之间的关联,深入研究源码并进行定制化配置。
2. gcc编译的深入探讨gcc编译需要深入理解C语言和汇编语言的特性,掌握编译选项和信息库的使用方法,理解编译优化的原理和方法。
动态编译busybox和编译并安装busybox
动态编译busybox和编译并安装busybox推荐文章mac下golang安装了windows编译环境后编译变慢怎么解决热度:Android Studio编译很慢该怎么办热度:linux的make命令热度: linux编译命令大全热度: linux编译命令之make命令热度:动态编译busybox进入Build Options时,不要选择Build Busybox as a static binary,其他所有操作步骤跟静态编译一样,你会发现这样建立的文件系统无法启动,终端上打印出如下消息:Kernel panic-not synving:No init found. Try passing init=option to kernel.为什么会出现这种问题呢?这就得回到两种编译方式的特点上来。
静态编译时是将所用到的库文件一起编译了进去,而动态编译时是在需要时才调用相应的库。
我们选择动态编译后,没有添加任何库文件就运行,显然是会出错的。
那么如何查看busybox可执行文件里使用的库呢。
ldd和Readelf都可以显示。
ldd下面是查看cat的库的结果,linux-gate.so.1是与内核通信的,不用管。
所有程序其实都是通过ld-linux.so.2来找库文件的,它就是一个中介,必不可少。
#ldd /bin/catlinux-gate.so.1 => (0x00bfe000)libc.so.6 => /lib/libc.so.6 (0x00a4a000)/lib/ld-linux.so.2 (0x00a28000)readelf下面是编译的ARM上的系统的库文件查找。
# arm-uclibc-linux-readelf -d busyboxDynamic section at offset 0xca014 contains 18 entries:标记类型名称/值0x00000001 (NEEDED) 共享库:[libm.so.0]0x00000001 (NEEDED) 共享库:[libc.so.0]0x0000000c (INIT) 0xbe240x0000000d (FINI) 0xb20540x00000004 (HASH) 0x80e80x00000005 (STRTAB) 0xa5000x00000006 (SYMTAB) 0x8b700x0000000a (STRSZ) 3259 (bytes)0x0000000b (SYMENT) 16 (bytes)0x00000015 (DEBUG) 0x00x00000003 (PLTGOT) 0xda0cc0x00000002 (PLTRELSZ) 3040 (bytes)0x00000014 (PLTREL) REL0x00000017 (JMPREL) 0xb2440x00000011 (REL) 0xb1bc0x00000012 (RELSZ) 136 (bytes)0x00000013 (RELENT) 8 (bytes)0x00000000 (NULL) 0x0从上面的结果中,我们可以看到,busybox这个程序使用到了libm.so.0和libc.so.0两个库文件,实际上这是2个符号链接,分别指向libc-0.9.28.so和libuClibc-0.9.28.so。
busybox制作根文件系统
用Busybox制作嵌入式Linux的文件系统1 busybox简介BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。
有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
简单的说BusyBox就好像是个大工具箱(只有一个可执行程序busybox,其他命令都是指向该可执行程序的连接),它集成压缩了 Linux 的许多工具和命令。
BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。
2编译busybox :#make3安装busybox:#make install执行 make install后,会生成一个_install文件夹。
进入_install目录,可以看到一共有3个目录和一个文件,分别是:bin、sbin和usr目录以及linuxrc文件。
这三个目录有很多快捷方式,都是指向了/bin/ busybox。
这就是busybox的特点,即可执行程序只有一个,其他的都是link。
●bin目录包含用户工具,其中,busybox可执行文件就在这个目录下。
●sbin目录包含操作系统工具,同样也指向busybox。
●linuxrc是一个链接文件,指向busybox。
4 其他目录首先,我们创建一个rootfs的目录,把_install目录下的内容复制过来。
此时,rootfs目录中包含3个目录和一个文件,分别是:bin、sbin和usr目录以及linuxrc文件。
但是,仅仅有上述目录还不足以构成一个可用的文件系统,必须还要手工加一些其他的目录及配置文件、启动脚本等。
下面是几个必须有的目录|___ etc / 配置文件|___ dev / 设备节点目录|___ lib / 库|___ modules / 驱动下面是最好有的几个目录|___ proc /|___ sys /|___ var /|___ tmp /|___ root /|___ opt /|___ mnt /4.1 创建etc目录下的文件etc目录里添加配置文件,是最主要的工作。
mips busybox编译
mips busybox编译【原创版】目录1.MIPS 架构简介2.busybox 的定义和作用3.编译过程详解4.编译结果和应用场景正文1.MIPS 架构简介MIPS(Microprocessor without Interlocked Pipeline Stages,无锁流水线处理器)是一种经典的处理器架构,由斯坦福大学的研究人员在20 世纪 80 年代设计。
MIPS 架构的特点是简洁、高效,其指令集易于理解和实现。
MIPS 处理器广泛应用于嵌入式系统、高性能计算机和超级计算机等领域。
2.busybox 的定义和作用busybox 是一个基于 Linux 的系统工具箱,提供了许多常用的 Unix 工具,如 shell、编辑器、压缩工具等。
它主要用于嵌入式系统或实时操作系统中,为用户提供了一个功能强大的命令行界面。
busybox 通常与内核一起编译,可以直接在内核空间中运行,无需单独的进程空间。
3.编译过程详解编译 MIPS 架构上的 busybox,需要先准备编译环境和工具链。
一般来说,可以使用交叉编译工具链进行编译。
以下是一个简单的编译过程:(1)下载 busybox 源代码和交叉编译工具链。
(2)解压 busybox 源代码,进入源代码目录。
(3)使用 make 命令进行编译。
make 命令会自动根据系统架构和编译选项,调用相应的编译器和链接器进行编译。
编译过程中,make 命令会自动处理依赖关系,生成目标文件。
(4)编译完成后,会生成一个名为“busybox”的可执行文件。
这个文件就是编译好的 busybox 工具箱。
4.编译结果和应用场景经过编译,我们可以得到一个适用于 MIPS 架构的 busybox 工具箱。
这个工具箱可以运行在 MIPS 处理器上,为用户提供丰富的系统功能。
在嵌入式系统开发中,busybox 可以帮助开发者快速实现系统功能,降低开发难度。
南华大学实验报告
竭诚为您提供优质文档/双击可除南华大学实验报告篇一:南华大学实验报告模板南华大学计算机科学与技术学院实验报告(20XX~20XX学年度第一学期)课程名称嵌入式系统原理与设计文件系统构建实验名称姓名李谟军学号20XX9350103专业软件工程班级01班地点8-212教师陈灵娜一.实验目的理解根文件系统在linux系统中的作用,了解根文件的制作过程,进一步的掌握烧写开发板的流程。
二.实验环境AT91sAm9g45-eKes开发板三.实验任务1.学会mkfs.jffs2的使用方法。
2.制作根文件系统JFFs2,了解根文件系统目录构成。
3.将根文件系统通过sam-ba工具烧写到AT91sAm9g45-eKes开发板四.实验原理4.Linux内核启动完成以后,内核将寻找一个根文件系统,在AT91sAm9g45-eKes开发板选用的根文件系统是JFFs2。
通过mkfs.jffs2工具在x86平台下制作出可以在嵌入式平台系统上运行的文件系统,并通sam.ba工具烧写到目标板上进行验证。
mkfs.jffs2命令各参数含义如下(具体使用方法可以使用-h参数查看):-r指定内含根文件系统目录。
-o指定文件系统映像的输出文件名称。
-p表示在映像的结尾用0x0补全到block-i存储格式为小端格式。
-n每个擦除的block中不添加cleanmarker。
-c擦除block的大小。
busybox是标准linux工具的一个单个可执行实现。
busybox包含了一些简单的工具,例如cat和echo,还包含了一些更大,更复杂的工具,例如grep,find,mount以及telnet。
有些人将busbox称为linux工具里的瑞士军刀。
简单地说busybox就好像是个大工具箱。
它集成压缩了linux 的许多工具和命令。
五实验步骤和过程记录(1)准备制作JFFs2根文件系统的工具mkfs.jffs2;(2)建立目录(3)编译busybox;(4)复制动态连接库到lib目录中;(5)创建/etc/init.d/rcs/etc/prodile/etc/fastab/etc/inittab文件,并且复制主机中的/etc/passwd/etc/shadow/etc/group文件到相应的目录中;(6)移植bash,将其复制到/bin目录中;(7)执行mkfs.jffs2-r.orootfs.jffs2-n-e0x20000,生成jffs2根文件系统镜像;(8)通过sam-ba工具将文件系统烧写到开发板上,进行验证。
编译并配置busybox
利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统<工控机(AMD LX处理器平台, 非ARM) Linux kernel &Busybox编译选项配置>(一) 配置并编译Busybox:说明, 此次编译的目标机不是arm板, 而是工控机(研华3355), CPU是AMD low power LX800/500 MHz and LX600/366 MHz Processor,so~, 注意与传统的移植arm平台的不同~修改Makefile,164行改成CROSS_COMPILE ?= 空189行改成ARCH ?= i386#如果是arm平台,CROSS_COMPILE ?= arm-linux-, ARCH ?= arm,这里暂用默认设置, 不修改Makefile, 执行make menuconfig,进入配置界面,General Configuration--->[*] Show verbose applet usage messages[*] Store applet usage messages in compressed form[*] Support –install [-s] to install applet links at runtime[*] Enable locale support(system needs locale for this to work)[*] Support for –long-options[*] Use the devptsfilesystem for unix98 PTYs[*] Support writing pidfiles[*] Runtime SUID/SGID configuration via /etc/busybox.config[*] Suppress warning message if /etc/busybox.conf is not readableBuild Options--->[*] Build BusyBox as a static binary(no shared libs)[*] Build with Large File Support(for accessing files>2GB)Installation Options->[]Don’t use /usrApplets links (as soft-links) --->(./_install) BusyBox installation prefixBusybox Library Tuning --->(6)Minimum password legth(2)MD5:Trade Bytes for Speed[*]Fsater /proc scanning code(+100bytes)[*]Command line editing(1024)Maximum length of input[*] vi-style line editing commands(15) History size[*] History saving[*] Tab completion[*]Fancy shell prompts(4) Copy buffer size ,in kilobytes[*]Use ioctl names rather than hex values in error mess [*]Support infiniband HW(2)、Linux Module Utilities--->(/lib/modules)Default directory containing modules (modules.dep)Default name of modules.dep[ ] Simplified modutils[*] insmod[*] rmmod[*] lsmod[*] modprobe-----options common to multiple modutils[ ] support version 2.2/2.4 Linux kernels[*]Support tainted module checking with new kernels [*]Support for module .aliases file[*] support for modules.symbols file退出make menuconfig的界面, 执行:makemake install生成busybox/_install文件夹;(二)配置并编译Kernel:解压内核源码: tar xvzf linux-2.6.32.2.tar.gz修改Makefile: vi Makefile在Vi中输入/,进入搜索,再输入CROSS_COMPILE,找到export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= $(SUBARCH)CROSS_COMPILE ?=修改为:export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= x86CROSS_COMPILE ?=如果目标机是arm平台,并且编译器前缀是arm-linux-,则:export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= armCROSS_COMPILE ?= arm-linux-然后执行make menuconfig配置选项参考:/hello_wyq/archive/2006/09/30/1312066.aspx /jh/4/16106.html/Linux/kernel_options.html/bekars/archive/2007/01/24/1492067.aspx /u3/116495/showart_2333717.html其中需要关闭的选项:General setup[]Initial RAM filesystem and RAM disk (initramfs/initrd) supportEnable the block layer[ ]Support for large (2TB+) block devices and files [ ]Block layer data integrity supportIO Schedulers-->以下全删Power management and ACPI options[ ]Power Management support[ ]CPU idle PM supportCPU Frequency scaling --->[ ] CPU Frequency scalingBus options[ ] Message Signaled Interrupts (MSI and MSI-X) [ ] ISA support[ ] MCA support<>PCCard (PCMCIA/CardBus) supportNetworking support[ ]Amateur Radio support ---><>CAN bus subsystem support ---><>IrDA (infrared) subsystem support ---><>Bluetooth subsystem support --->[ ] RxRPC dynamic debugging<> RxRPC Kerberos security<>WiMAX Wireless Broadband support ---><>RF switch subsystem support ---><>Plan 9 Resource Sharing Support (9P2000) (Experimental) ---> Networking options ---><> Packet socket<> Transformation user configuration interface<> PF_KEY sockets[ ] Security Marking[ ] Network packet filtering framework (Netfilter) ---><> The DCCP Protocol (EXPERIMENTAL) ---><> The RDS Protocol (EXPERIMENTAL)<> The TIPC Protocol (EXPERIMENTAL) ---><> Asynchronous Transfer Mode (ATM)<> 802.1d Ethernet Bridging[ ] Distributed Switch Architecture support ---><> 802.1Q VLAN Support<>DECnet Support<> ANSI/IEEE 802.2 LLC type 2 Support<M> The IPX protocol[ ] IPX: Full internal IPX network<>Appletalk protocol support<> CCITT X.25 Packet Layer (EXPERIMENTAL)<> LAPB Data Link Driver (EXPERIMENTAL)<> Acorn Econet/AUN protocols (EXPERIMENTAL)<> WAN router<>Phonet protocols family<> IEEE Std 802.15.4 Low-Rate Wireless[ ] QoS and/or fair queueing --->[ ] Data Center Bridging supportNetwork testing --->以下全删Device Drivers<*> Memory Technology Device (MTD) support ---> <> Parallel port support --->File systems//视情况删除Kernel hacking//全删Security options//全不选Cryptographic API//加密算法,视情况删除。
busybox编译详细流程
busybox编译详细流程1、建立目标板空根目录文件夹及根目录下的文件夹mkdir root解压源码包#tar jxvfbusybox-1.6.1.tar.bz2#cdbusybox-1.6.1 2、定制busybox进入到压缩文件存放的目录下,并解压。
然后进入解压后的busybox目录文件夹,随后配置busybox。
make menuconfig执行之后,将出现配置界面:每个版本的配置选项组织有所不同。
不管怎样,我们注意以下选项就行了:1)Support for devf 2)Build BusyBox as astatic binary(no shared libs)//将busybox编译成静态链接3)Do you want to build busybox with aCross Compile?(/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compile prefix//指定交叉编译器4)init 5)Support reading an inittab file//支持init读取/etc/inittab配置文件6)(X)ash选中ash//建立的rcS脚本才能执行7)ash 8)cp cat ls mkdir mv//可执行命令工具的选择,自己看着办吧,需要用到的就选上9)mount 10)umount 11)Support loopback mounts 12)Support for the old/etc/mtab file 13)insmod 14)Support version 2.2.x to 2.4.x Linux kernels 15)Support version 2.6.x Linux kernels 16)vi以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。
busybox配置
面是对1.00版本的实验。
1、文件准备解压busybox-1.00.tar.gz得到busybox-1.00目录,进入,阅读相关的README和INSTALL,没什么特别的,都是提示busybox需要经过三个步骤的操作进行安装使用。
2、配置busyboxbusybox的配置程序和linux内核菜单配置方式简直一模一样#make menuconfig下面是需要编译进busybox的功能选项,其他的可以根据需要自选,但是同样不要太贪心.General Configuration应该选的选项Show verbose applet usage messagesSupport for SUID/SGID handlingRuntime SUID/SGID configuration via /etc/busybox.confBuild OptionsBuild BusyBox as a static binary (no shared libs)这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作.Installation OptionsDon't use /usr(./_install) BusyBox installation prefix这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了.配置好后退出并保存.3,编译并安装busybox#make#make install顺利完成。
4、检查安装结果根据参考资料2,检查到编译好后在解压目录busybox-1.00目录下生成子目录_install# ll总用量8drwxr-xr-x 2 root root 4096 12月11 15:49 binlrwxrwxrwx 1 root root 11 12月11 15:49 linuxrc -> bin/busyboxdrwxr-xr-x 2 root root 4096 12月11 15:49 sbin其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接.-rwxr-xr-x 1 root root 801400 12月11 15:49 busybox可见busybox只要八百k多点。
Linux文件系统移植及编译实验
# cd .. # cp -Rfv /opt/develop/lyj/common/porting/rootfs/busybox-1.12.2/
_install/* ./ OK,以上用 busybox 创建了一个基本的文件系统。 PS: 如果编译 busybox 时选择动态库方式编译,则需要查看生成的 busybox 使用
哪些动态库,然后把它们拷贝到 rootfs/lib 目录下。 # arm-linux-readelf -d ../bin/busybox Dynamic section at offset 0xc1014 contains 21 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libm.so.6] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x0000000c (INIT) 0xc2ec 0x0000000d (FINI) 0xa96b8 0x00000004 (HASH) 0x80e8 0x00000005 (STRTAB) 0xa4c4 0x00000006 (SYMTAB) 0x8b64 0x0000000a (STRSZ) 3505 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000015 (DEBUG) 0x0 0x00000003 (PLTGOT) 0xd10e4 0x00000002 (PLTRELSZ) 3112 (bytes) 0x00000014 (PLTREL) REL 0x00000017 (JMPREL) 0xb6c4 0x00000011 (REL) 0xb674 0x00000012 (RELSZ) 80 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x6ffffffe (VERNEED) 0xb5a4 0x6fffffff (VERNEEDNUM) 2 0x6ffffff0 (VERSYM) 0xb276 0x00000000 (NULL) 0x0
BUSYBOX编译错误及解决方法总结
BUSYBOX编译错误及解决方法总结第一篇:BUSYBOX编译错误及解决方法总结编译busybox的组合:busybox-1.0.0 arm-linux-gcc-2.95.3(AT91rm9200开发板)经典参考:移植基本过程:在[build options]中选择[Build busybox as a static binary] 主要是C库的连接方式,安装目录等。
5.make 6.创建rootfs目录 7.make install编译过程可能出现以下错误,解决方法如下:可能会出现的错误:1.出现如下错误CC miscutils/taskset.o miscutils/taskset.c:17: error: parse error before '*' token miscutils/taskset.c:18: warning: function declaration isn't a prototype miscutils/taskset.c: In function `__from_cpuset':miscutils/taskset.c:22: error: `CPU_SETSIZE' undeclared(first use in this function)miscutils/taskset.c:22: error:(Each undeclared identifier is reported only once miscutils/taskset.c:22: error: for each function it appears in.)miscutils/taskset.c:26: warning: implicit declaration of function `CPU_ISSET' miscutils/taskset.c:26: error: `mask' undeclared(first use in this function)miscutils/taskset.c: In function `taskset_main': miscutils/taskset.c:47: error: `cpu_set_t' undeclared(first use in this function)miscutils/taskset.c:47: error: parse error before “mask” miscutils/taskset.c:68: warning: implicit declaration of function `CPU_ZERO' miscutils/taskset.c:68: error: `new_mask' undeclared(first use in this function)miscutils/taskset.c:69: error: `CPU_SETSIZE' undeclared(first use in this function)miscutils/taskset.c:71: warning: implicit declaration of function `CPU_SET'miscutils/taskset.c:78: error: `mask' undeclared(first use in this function)make[1]: *** [miscutils/taskset.o] Error 1make: *** [miscutils] Error 2make menuconfig 找到[Miscellaneous Utilities],去掉[task set]2.如下错误:time.c libbb/time.c:20: error: “CLOCK_MONOTONIC” undeclared(first use in this function)make menuconfig 去掉Busybox Settings->Busybox Library Tuning->[]Use clock_gettie(CLOCK_MONOTONIC)syscall3.出现如下错误:In file included from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/fs.h:12,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/capability.h:17,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/binfmts.h:5,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/sched.h:9,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/net/inetpeer.h:14,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/net/route.h:28,from /busybox-1.01/networking/route.c:42: /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/wait.h:4: warning: `WNOHANG' redefined /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/waitflags.h:26: warning: this is the location of the previous definition /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/wait.h:5: warning: `WUNTRACED' redefined /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/waitflags.h:27: warning: this is the location of the previous definition In file included from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/sched.h:77,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/net/inetpeer.h:14,from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/net/route.h:28,from /busybox-1.01/networking/route.c:42: /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/time.h:108: warning: `FD_SET' redefined /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/sys/select.h:83: warning: this is the location of the previous definition /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/time.h:109: warning: `FD_CLR' redefined /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/sys/select.h:84: warning: this is the location of the previous definition /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/time.h:110: warning: `FD_ISSET' redefined /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/sys/select.h:85: warning: this is the location of the previous definition /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/linux/time.h:111: warning: `FD_ZERO' redefined /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/sys/select.h:86: warning: this is the location of the previous definition In file included from /busybox-1.01/networking/route.c:42: /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/net/route.h:34: warning: #warning This file is not supposed to be used outside of kernel.…… ……In file included from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/netdb.h:38,from /busybox-1.01/include/libbb.h:36,from /busybox-1.01/include/busybox.h:54,from /busybox-1.01/networking/route.c:44: /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/siginfo.h:34: redefinition of `union sigval' /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/siginfo.h:37: warning: redefinition of `sigval_t' /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/asm/siginfo.h:11: warning: `sigval_t' previously declared here /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/siginfo.h:274: redefinition of `struct sigevent' /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/siginfo.h:289: warning: redefinition of `sigevent_t' /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/sys-include/asm/siginfo.h:211: warning: `sigevent_t' previously declared here /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include/bits/siginfo.h:298: parse error before `0' In file included from /busybox-1.01/include/busybox.h:54,from /busybox-1.01/networking/route.c:44: /busybox-1.01/include/libbb.h:112: warning: declaration of `flags' shadows global declaration/busybox-1.01/include/libbb.h:113: warning: declaration of `flags' shadows global declaration /busybox-1.01/include/libbb.h:135: warning: declaration of `flags' shadows global declaration /busybox-1.01/include/libbb.h:251: warning: declaration of `flags' shadows global declaration /busybox-1.01/include/libbb.h:256: redefinition of `struct sysinfo' /busybox-1.01/include/libbb.h:272: warning: declaration of `info' shadows global declaration /busybox-1.01/include/libbb.h:309: warning: declaration of `flags' shadows global declaration /busybox-1.01/include/libbb.h:440: warning: declaration of `flags' shadows global declaration /busybox-1.01/networking/route.c:475: warning: declaration of `flags' shadows global declaration /busybox-1.01/networking/route.c: In function `set_flags': /busybox-1.01/networking/route.c:476: warning: declaration of `flags' shadows global declaration /busybox-1.01/networking/route.c: In function `displayroutes': /busybox-1.01/networking/route.c:490: warning: declaration of `flags' shadows global declaration make: *** [/busybox-1.01/networking/route.o] Error 1 去掉Busybox Settings->NetWork device-->[]route4.如下错误:usr/src/armlinux/busybox-1.0.0/libbb/loop.c:32:linux/version.h:No such file or directory /usr/src/armlinux/busybox-1.0.0/libbb/loop.c:35 arse error /usr/src/armlinux/busybox-1.0.0/libbb/loop.c:37 arse error 将内核源码下的include/linux目录下的versition.h文件放到 busybox-1.0.0/include/linux下.....第二篇:ccs编译错误(定稿)1、报错如下:-------------------------tam2012112701.pjt'./Debug/test0928.out' not built1._VECSTART 是由于我没有在程序中加入中断变量vectors.s55._rcv_hMcbsp_DMAId_hDmaRcv的解决办法是我将其在AD73360.C中原来是extern申明的,当我将其的extern声明去掉后,.out文件就输出成功了。
Linux源代码及Busybox源代码制作精简可启动内核镜像技巧
基于Linux源代码及Busybox源代码制作精简可启动内核镜像技术实验方法总结熊海泉一、需要准备的东西 (1)Linux内核源代码 (1)Busybox源代码 (2)Unetbootin工具 (2)二、制作Linux内核镜像及内存虚拟盘根文件系统 (2)Linux内核镜像文件bzImage的编译制作 (2)基于Busybox的根文件系统虚拟盘initrd.gz的制作 (5)三、利用unetbootin工具制作可启动U盘 (7)unetbootin工具的获取与安装 (7)unetbootin使用 (7)四、制作可启动的光盘镜像与磁盘镜像 (9)制作一个基于grub引导的ttylinux LiveCD (9)制作一个基于grub引导的ttylinux 磁盘镜像 (10)五、基于Qemu模拟器的运行 (11)1,基于如下命令运行刚才制作的ttylinux可启动光盘镜像 (11)2,以下为启动界面 (11)3,以下为基于Qemu模拟器的ttylinux运行界面 (12)六、基于Bochs X86 PC模拟器的运行 (12)1,基于如下命令运行刚才制作的ttylinux可启动光盘镜像 (12)2,以下为在Bochs模拟器中的启动界面 (13)3,以下为基于Bochs模拟器的ttylinux运行界面 (14)一、需要准备的东西Linux内核源代码下载地址 /pub/linux/kernel/v2.6/这里下载的是linux-2.6.36.2.tar.bzBusybox源代码下载地址/这里下载的是busybox-1.18.0.tar.bz2Unetbootin工具下载地址/这里可以在Fedora 13中直接用下面的命令行安装:#yum install unetbootin二、制作Linux内核镜像及内存虚拟盘根文件系统Linux内核镜像文件bzImage的编译制作1、bzImage的制作将下载下来的内核源代码压缩包拷贝到/study/目录下,然后进入到这个目录将其解压,命令如下:#tar jxvf linux-2.6.36.2.tar.bz2然后创建一个目录,用来保存编译内核产生的目标文件#mkdir linux-2.6.36.2-objlinux-2.6.36.2-obj现在是一个空目录,在编译内核时会将目标文件输出保存到这个目录下。
busybox 详解(一篇讲busybox很详细的文章)
BusyBox 简化嵌入式Linux 系统BusyBox 最初是由Bruce Perens 在1996 年为Debian GNU/Linux 安装盘编写的。
其目标是在一张软盘上创建一个可引导的GNU/Linux 系统,这可以用作安装盘和急救盘。
一张软盘可以保存大约1.4-1.7MB 的内容,因此这里没有多少空间留给Linux 内核以及相关的用户应用程序使用。
BusyBox 揭露了这样一个事实:很多标准Linux 工具都可以共享很多共同的元素。
例如,很多基于文件的工具(比如grep 和find)都需要在目录中搜索文件的代码。
当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。
实际上,BusyBox 可以将大约3.5MB 的工具包装成大约200KB 大小。
这就为可引导的磁盘和使用Linux 的嵌入式设备提供了更多功能。
我们可以对2.4 和 2.6 版本的Linux 内核使用BusyBox。
BusyBox 源代码树BusyBox 的源代码树组织得很好。
这些工具都基于它们的用途进行了分类,并存储在单独的子目录中。
例如,网络工具和守护进程(如httpd、ifconfig 等)都在./networking 目录中;标准的模块工具(包括insmod、rmmod 和lsmod)都在./modutils 目录中;编辑器(例如vi 和流编辑器,如awk 和sed)都在./editors 目录中。
makefile 配置、编译和安装所使用的各个文档都在这个目录树的根目录中。
多体系结构支持可以简单地为BusyBox 指定交叉编译器意味着我们可以为很多体系结构编译BusyBox。
要为您的目标体系结构编译BusyBox,我们需要一个交叉编译器和一个已经为特定目标体系结构编译好的C 库(uClibc 或glibc)。
BusyBox 是如何工作的?为了让一个可执行程序看起来就像是很多可执行程序一样,BusyBox 为传递给 C 的main 函数的参数开发了一个很少使用的特性。
根文件系统制作记录
根文件系统制作记录一、所用工具Busybox-1.16.1arm-linux-gcc-4.3.2二、制作过程1.编译/安装Busybox1.1下载Busybox及其补丁从/ 下载busybox-1.16.1.tar.bz2及该版本的所有补丁。
补丁文件复制到/work/create_rootfs/busybox-1.16.1-patch目录下。
使用如下命令将busybox-1.16.1.tar.bz2解压到busybox-1.16.1目录$ tar xjf busybox-1.16.1.tar.bz21.2给Busybox打上补丁可以手工逐一给Busybox打补丁,也可以编写脚本自动帮我们完成打补丁的工作,这里采用后面一种方法。
$ gedit /work/create_rootfs/patch.sh$ cd /work/create_rootfs$ sudo chmod +x ./patch.sh$ ./patch.sh若最后输出“Patching all file is finish!”则表示所有补丁都正确的打上了。
1.3配置Busybox若忘记设定交叉编译器和目标板体系结构,则可能在内核启动末期出现下面的错误:在Busybox目录下执行如下命令进入配置界面:$ make menuconfig请使用以下的配置(红色部分表示与Busybox默认配置不同而需要修改的,其他的则需确认):(1)Busybox Settings--->General Configuration--->[*] Show verbose applet usage messages[*] Store applet usage messages in compressed form[*] Support –install [-s] to install applet links at runtime[*] Enable locale support(system needs locale for this to work)[*] Support for –long-options[*] Use the devpts filesystem for unix98 PTYs[*] Support writing pidfiles[*] Runtime SUID/SGID configuration via /etc/busybox.config[*] Suppress warning message if /etc/busybox.conf is not readableBuild Options--->[*] Build BusyBox as a static binary(no shared libs)[*] Build with Large File Support(for accessing files>2GB)Installation Options->[]Don’t use /usrApplets links (as soft-links) --->(./_install) BusyBox installation prefixBusybox Library Tuning --->(6)Minimum password legth(2)MD5:Trade Bytes for Speed[*]Fsater /proc scanning code(+100bytes)[*]Command line editing(1024)Maximum length of input[*] vi-style line editing commands(15) History size[*] History saving[*] Tab completion[*]Fancy shell prompts(4) Copy buffer size ,in kilobytes[*]Use ioctl names rather than hex values in error messages[*]Support infiniband HW(2)Linux Module Utilities--->(/lib/modules)Default directory containing modules(modules.dep)Default name of modules.dep增加对mdev的支持:(3)Linux System Utilities --->[*]Support /etc/mdev.conf[*]Support command execution at device addition/removal1.4安装Busybox将Busybox安装到/work/create_rootfs/rootfs目录下,Busybox将在该目录下创建如下几个文件和目录:2.构建根文件系统2.1创建根文件系统下必要的目录为了创建根文件系统下的其他目录与文件,我们可以采用手工敲命令创建的方式,也可以编写脚本自动完成,这里采用后一种方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三busybox编译实验
一.实验目的
1.熟悉 busybox 相关知识及应用;
2.学会使用交叉编译器定制一个busybox;
3.利用该busybox 制作一个文件系统。
二.实验设备
1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机;
2软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。
三.实验内容
1.利用交叉编译器编译busybox;
2利用已经配置好的busybox 制作一个文件系统。
四.实验原理
busybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http 服务器和一个telnet 服务器,而所有这一切功能却只有区区1M 左右的大小。
我们平时用的那些linux命令就好比是分立式的电子元件,而bsybox 就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,busybox有非常广的应用。
另外,大多数linux发行版的安装程序中都有busybox的身影,安装linux的时候按ctrl+alt+F2 就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链接。
busybox的小身材大作用的特性,给制作一张软盘的linux带来了及大方便。
busybox是标准Linux 工具的一个单个可执行实现。
busybox包含了一些简单的工具,例如cat和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount 以及telnet。
有些人将busybox称为Linux 工具里的瑞士军刀。
简单的说busybox就好像是个大工具箱,它集成压缩了Linux 的许多工具和命令,用户可以根据自己的需要定制一个busybox。
五.实验步骤
1.编译busybox
1)单击菜单应用程序->附件->终端打开终端,设置环境变量:
$ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh
$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh
2)执行命令切换到busybox实验目录下:
$ cd $SIMPLEDIR/6.3-busybox
3)解压busybox-1.1.2.tar.bz2:
$ tar jxvf busybox-1.1.2.tar.bz2
4)进入目录,并打上补丁:
$ cd busybox-1.1.2
$ patch -p1 <../1.1.2.patch
5)清除早前可能存在的配置信息:
$ make distclean
6)执行配置命令:
$ makemenuconfig
图6-3-1 busybox配置界面
选择 Load an Alternate Configuration File 选项,添加配置文件,回车。
图6-3-2 选择Load an Alternate Configuration File 界面
将弹出的窗体中的.config替换成eduk4。
图6-3-3 选择busybox配置文件
选择< ok >,回车退出。
在弹出的主配置界面中,选择< Exit >,回车。
图6-3-4 busybox配置退出保存界面
7)编译busybox:
$ make
$ make install
执行完命令后,将在busybox-1.1.2 下面生成一个_install 文件夹。
2.基于busybox生成文件系统包
1)建立root-mini 文件系统目录,并拷贝busybox生成的文件到该目录内:$ cd $SIMPLEDIR/6.3-busybox
$ mv busybox-1.1.2/_install root-mini
2)创建文件系统目录树结构,并拷贝必要的文件到文件系统目录内:
$ cd root-mini
$ mkdir -p devetc/init.d home mntproc root sys tmpvar media $ cd ..
$ cprz root-mini/bin/
$ cpflash_eraseall root-mini/sbin/
3)拷贝inittab文件到etc目录下:
$ cp busybox-1.1.2/examples/inittab root-mini/etc/
4)在etc/init.d目录下建立rcS文件,内容如下:#! /bin/sh
echo "running /etc/init.d/rcS"
# mount the /proc file system
/bin/mount -t procproc /proc
echo "mount tmpfsfilesystem to /tmp"。
/bin/hostname EDUK4
/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
#/sbin/ifconfig eth0 192.192.192.200 netmask 255.255.255.0
/sbin/ifconfig eth1 192.192.192.201 netmask 255.255.255.0
#exec /etc/init.d/rc.local
5)修改新建的文件系统文件夹属性:
$ chmod -R 777 root-mini
这样基于busybox所建立的文件系统就做好了。