基于busybox的根文件系统制作

合集下载

根文件系统制作记录

根文件系统制作记录

根文件系统制作记录一、所用工具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创建根文件系统下必要的目录为了创建根文件系统下的其他目录与文件,我们可以采用手工敲命令创建的方式,也可以编写脚本自动完成,这里采用后一种方式。

使用BusyBox制作linux根文件系统

使用BusyBox制作linux根文件系统

使⽤BusyBox制作linux根⽂件系统操作系统:Ubuntu9.04内核版本:linux-2.6.24.7开发板:博创arm2410s交叉编译⼯具:arm-linux-gcc-4.1.1BusyBox:busybox-1.11.1CramFS:CramFS-1.1注意:由于要制作的根⽂件系统使⽤了mdev(BusyBox简化版的udev),因此,需要内核⽀持sysfs、procfs和ramfs(tmpfs)⽂件系统以及hotplug(uevent)事件机制。

浅蓝⾊为命令,橘红⾊为代码和脚步1、准备根⽂件系统使⽤shell脚本create_rootfs.sh,建⽴根⽂件系统的⽬录框架lingd@ubuntu:~/arm2410s$ vi create_rootfs.shcreate_rootfs.sh 内容如下:#!/bin/shecho "------Create rootfs directons......"mkdir rootfscd rootfsecho "--------Create root,dev......"mkdir root dev etc bin sbin mnt sys proc lib home tmp var usrmkdir usr/sbin usr/bin usr/lib usr/modulesmkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.dmkdir lib/moduleschmod 1777 tmpcd ..echo "-------make direction done---------"为 create_rootfs.sh添加执⾏权限lingd@ubuntu:~/arm2410s$ chmod a+x create_rootfs.sh执⾏create_rootfs.sh,建⽴根⽂件系统的⽬录框架lingd@ubuntu:~/arm2410s$ ./create_rootfs.shlingd@ubuntu:~/arm2410s$ cd rootfslingd@ubuntu:~/arm2410s/rootfs$ lsbin dev etc home lib mnt proc root sbin sys tmp usr var2、创建设备⽂件mdev 是通过 init 进程来启动的,在使⽤ mdev 构造 /dev ⽬录之前,init ⾄少要⽤到设备⽂件/dev/console、/dev/null,所以需要事先建⽴这两个设备⽂件:lingd@ubuntu:~/arm2410s/rootfs$ cd devlingd@ubuntu:~/arm2410s/rootfs/dev$ sudo mknod -m 660 console c 204 64[sudo] password for lingd:lingd@ubuntu:~/arm2410s/rootfs/dev$ sudo mknod -m 660 null c 1 3lingd@ubuntu:~/arm2410s/rootfs/dev$ ls -ltotal 0crw-rw---- 1 root root 5, 1 2010-04-02 15:49 consolecrw-rw---- 1 root root 1, 3 2010-04-02 15:50 null注意:本来console的主次设备号应为5和1.但是因为init在执⾏完/etc/init.d/rcS脚本后,就会在⼀个控制台上,按照inittab的指⽰开⼀个shell(或者是开getty+login,这样⽤户就会看到提⽰输⼊⽤户名的提⽰符)。

用Busybox制作嵌入式Linux根文件系统

用Busybox制作嵌入式Linux根文件系统

用Busybox制作嵌入式Linux根文件系统Use Busybox to Make Embedded Root Filesystem(曲阜师范大学自动化研究所)邵长彬李洪亮Shao Changbin Li Hongliang 摘要:根文件系统为Linux的运行提供最基本的工具、库、脚本和一些特殊文件的支持。

Busybox是制作嵌入式Linux文件系统的快捷工具,本文通过配置、编译、安装Busybox,以及生成根文件系统映像文件,介绍了用Busybox制作嵌入式Linux根文件系统的一般方法。

关键词:嵌入式Linux,根文件系统,Busybox中图分类号: TP316.2文献标识码:AAbstract: Root filesystem affords Linux most basic tools, lib, scripts and some special files. Busybox is a key tool to make embedded Linux filesystems. This paper, through configure, compile and install Busybox, delivers a normal method to make root filesystem.Key words: embedded Linux, root filesystem, BusyboxCLC number: TP316.2 Document code: A1 根文件系统简介根文件系统是存放Linux系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以包括各种软件包。

根文件系统一般包括如下内容:1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp。

2)基本程序运行所需的库函数,如:Glibc/uC-libc。

移植busybox构建最小根文件系统的步骤详解

移植busybox构建最小根文件系统的步骤详解

移植busybox构建最⼩根⽂件系统的步骤详解Busybox:瑞⼠军⼑,⾥⾯装有很多⼩命令。

STEP 1:构建⽬录结构创建根⽂件系统⽬录,主要包括以下⽬录/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys#mkdir /home/rootfs#cd /home/rootfs#mkdir dev etc lib usr var proc tmp home root mnt sysSTEP 2: 使⽤busybox构建/bin /sbin linuxrc进⼊busybox-1.16.1⽬录,执⾏#make defconfig#make menuconfigBusybox Setting ----->Build Options ----->//1选择将busybox进⾏静态编译[*]Build BusyBox as a static binary (no shared libs)//2.指定交叉编译器为(/usr/local/arm/4.3.2/bin/arm-linux-)Cross Compiler prefixInstallation Options -----> (选择⽣成的⽂件存放⽬录,也可以直接放在rootfs下就不⽤拷贝了)//3.选择上 Don't use /usrBusybox Library Tuning--->[*]Username completion[*]Fancy shell prompts[*]Query cursor position from terminal//4.编译出的busybox的shell命令解释器⽀持显⽰当前路径及主机信息保存退出#make #make install在busybox⽬录下会看见 _install⽬录,⾥⾯有/bin /sbin linuxrc三个⽂件将这三个⽬录或⽂件拷到第⼀步所建的rootfs⽂件夹下。

根文件系统制作实验

根文件系统制作实验

嵌入式根文件系统制作一、实验目标用busybox定制一个基本的文件系统,并且运行用户编译的hello(动态链接)。

二、软件包busybox:/downloads/busybox-1.16.0.tar.bz2bash:ftp:///gnu/bash/bash-4.0.tar.gz三、实验步骤3.1、建立工作目录设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制造根文件系统的软件,下载busybox,bash到该目录;mkdir/root/build_rootfs3.2、建立根目录该目录就是我们要移植到目标板上的目录,对于嵌入式的文件系统,根目录下必要的目录包括bin,dev,etc,usr,lib,sbin,proc,sys,tmp;这里设定根目录是/root/rootfs;busybox、bash编译之后,安装到该目录下;mkdir/root/rootfsmkdir/root/rootfs/{bin,dev,etc,usr,lib,sbin,proc,sys,tmp}mkdir/root/rootfs/usr/{bin,sbin,lib}创建节点dev目录执行,创建节点(如果使用mdev设备管理工具可忽略此步骤) /root/rootfs/dev以root用户在/root/rootfs/mknod-m666null c13mknod-m600console c513.3、拷贝动态链接库交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/4.1.2/,所以链接库的目录是/usr/local/arm/4.1.2/arm-linux/lib。

#进入链接库目录cd/usr/local/arm/4.1.2/arm-linux/lib#编写一个shell文件,用于copy实际的共享链接库;主修订版本的符合链接;动态连接器及其符号链接到目标板根目录下的lib(/root/rootfs/lib)。

如何用busybox构建一个最小根文件系统

如何用busybox构建一个最小根文件系统

用busybox构建一个最小根文件系统busybox是所有命令的集合体,是一个工具集,包括了我们常用的工具。

一、一个最小根文件系统包括:(1) /dev/console/dev/null(2) init => busybox(3) /etc/inittab(4) 配置文件指定的应用程序(5) C库二、执行步骤:(一)配置编译busybox(1)下载源码:busybox-1.7.0.tar.bz2a.创建一个文件firstfs,将该文件保存其中b.解压cd firstfstar xjf busybox-1.7.0.tar.bz2执行上述命令后,解压出来busybox-1.7.0文件夹,c.配置在busybox-1.7.0目录下执行“make menuconfig”命令即可进入配置界面。

一般选择默认配置就行,现添加一个TAB补全功能:Busybox Settings------>Busybox Library Turning------>[*]Tab completion用“+/-”选好选项,输入y ,然后按tab选exit(2)编译busyboxa.修改busybox目录下的Makefile执行命令:vi Makefile ,然后输入“/CROSS”找到(“+/-”选择行)CROSS_COMPILE ?=arm-linux-输入“:wq”保存退出b.执行“make”命令编译busybox编译完成,出现如下界面:(3)安装busybox在交叉编译环境,千万不要直接执行make install,这样会破坏我们的操系统。

创建一个新文件夹first_fsmake CONFIG_PREFIX=first_fs install就会在这个文件夹下面生成bin,sbin,usr,linuxrc四个文件目录。

(二) 创建设备文件:/dev/console 和/dev/null(查看ls /dev/console /dev/null –l)mkdir devcd dev/sudo mknod console c 5 1 (创建终端字符设备主为5 次为1)sudo mknod null c 1 3(可以查看:ls –l)(三) 创建配置文件/etc/inittab (最简单基本的配置文件:标准输入、输出和错误信息定义到console)init进程根据/etc/inittab文件来创建其他子进程,etc目录下的内容取决与要运行的程序,本次只需要创建3个文件:etc/inittab, etc/init.d/rcS, etc/fstab。

busybox制作根文件系统

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目录里添加配置文件,是最主要的工作。

busybox详解制作根文件系统

busybox详解制作根文件系统

详解制作根文件系统单击,返回主页,查看更多内容一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。

该标准规定了根目录下各个子目录的名称及其存放的内容:制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。

其过程大体包括:•编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录•利用交叉编译工具链,构建/lib目录•手工构建/etc目录•手工构建最简化的/dev目录•创建其它空目录•配置系统自动生成/proc目录•利用udev构建完整的/dev目录•制作根文件系统的jffs2映像文件下面就来详细介绍这个过程。

二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。

如果要自己编写这几百个常用命令的源程序,my god,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。

1、从/下载busybox-1.7.0.tar.bz22、tar xjvf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux-4、make menuconfig配置busyboxbusybox配置主要分两部分。

第一部分是Busybox Settings,主要编译和安装busybox的一些选项。

这里主要需要配置:1)、Build Options -- Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。

busybox制作支持共享库的根文件系统

busybox制作支持共享库的根文件系统

busybox制作支持共享库的根文件系统选定busybox-1.9.2.tar.bz2 这个版本, 以静态方式编译, 即生成的busybox 不需要共享库的支持就能运行。

这样做我们就不需要布署程序库了。

缺点是自己写的arm-linux 程序在这个根文件系统中是不能运行的,因为缺少共享程序库的支持。

不过不用担心,通过在目标机里以挂接NFS 的方式, 将宿主机的arm-linux-gcc 编译器的库文件挂到arm-linux 的/lib 下, 就可完美的运行我们自己的程序了。

现在开始制作静态链接库的根文件系统。

1、准备根文件系统首先准备制作工具BusyBox1.9.2。

准备交叉编译工具arm-linux-gcc 3.3.2。

在机器上建立rootfs的文件夹#mkdir rootfs在rootfs中建立linux系统中典型的文件夹#cd rootfs#mkdir root home bin sbin etc dev usr lib tmp mnt sys proc#mkdir usr/lib usr/bin#pwd/home/su/rootfs2、解压源码包#tar xjf busybox-1.9.2.tar.bz2#cd busybox-1.9.23、修改Makefile,#vi Makefile将Makefile中的CROSS_COMPILE ?=改为CROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux-注:这个版本的busybox 用3.4.1 的arm-linux-gcc 编译有些问题, 用3.3.2 版则可顺利编译。

4、定制busybox选择busybox下全部的可执行程序#make defconfig进到配置选项#make menuconfig设置静态编译方式Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)Busybox Settings ---> Install Options ---> 中输入建立根文件系统的文件所在的路径/home/su/rootfs。

busybox制作根文件系统

busybox制作根文件系统

使用Busybox制作CRAMFS文件系统成功来源: ChinaUnix博客日期:2008.08.20 16:16(共有条评论) 我要评论这几天在使用Busybox制作FS2410开发板的CRAMFS文件系统,由于开始下载的是Busybox1.10,每次下载到开发板中,然后启动总是出现”Failed to execute /linuxrc.Attempting defaults...“的错误。

到网上查了大量的资料,并做了大量的实验,发现都不能成功。

今天下午突然发现一个能够仿真arm的软件qemu,在Ubuntu中的安装方法:sudo apt-get install qemu,Busybox编译后,可以通过arm仿真来测试:qemu-arm ./busybox ls,如果成功,则会显示当前目录下的文件列表。

我对Busybox1.10编译后的结果进行测试,发现出现错误:qemu: unhandled CPU exception 0x8 - abortingR00=001c596c R01=00000000 R02=001c5960 R03=00000001R04=000cbf94 R05=00000000 R06=00000000 R07=00000000R08=000cbfdc R09=000cbf94 R10=00000000 R11=00000000R12=ffff0fff R13=b7d6c470 R14=000d4588 R15=ffff0fa0PSR=20000010 --C- A usr32 ffff0fa0s00=00000000( 0) s01=00000000( 0) d00=0000000000000000( 0)s02=00000000( 0) s03=00000000( 0) d01=0000000000000000( 0)s04=00000000( 0) s05=00000000( 0) d02=0000000000000000( 0)s06=00000000( 0) s07=00000000( 0) d03=0000000000000000( 0)s08=00000000( 0) s09=00000000( 0) d04=0000000000000000( 0)s10=00000000( 0) s11=00000000( 0) d05=0000000000000000( 0)s12=00000000( 0) s13=00000000( 0) d06=0000000000000000( 0)s14=00000000( 0) s15=00000000( 0) d07=0000000000000000( 0)s16=00000000( 0) s17=00000000( 0) d08=0000000000000000( 0)s18=00000000( 0) s19=00000000( 0) d09=0000000000000000( 0)s20=00000000( 0) s21=00000000( 0) d10=0000000000000000( 0)s22=00000000( 0) s23=00000000( 0) d11=0000000000000000( 0)s24=00000000( 0) s25=00000000( 0) d12=0000000000000000( 0)s26=00000000( 0) s27=00000000( 0) d13=0000000000000000( 0)s28=00000000( 0) s29=00000000( 0) d14=0000000000000000( 0)s30=00000000( 0) s31=00000000( 0) d15=0000000000000000( 0)FPSCR: 00000000qemu: uncaught target signal 6 (Aborted) - exiting说明,所编译得到的busybox不能使用在arm处理器,由于时间关系就放弃了使用Buxybox1.10版本。

通过busybox制作根文件系统详细过程

通过busybox制作根文件系统详细过程

通过busybox制作根⽂件系统详细过程我在之前的中也有实现过根⽂件系统的制作,那只是在ubuntu官⽹已经做好的根⽂件基础上安装⼀些⾃⼰所需的软解⽽已。

⽽使⽤busybox 制作根⽂件系统可以⾃定义选项,加深⾃⼰对linux的系统理解,⽅便后期学习根⽂件系统的裁剪。

⼀、下载busybox制作制作⼯具⼆、编译链配置将下载的⽂件放⼊linux开发环境中进⾏解压,⽬录如下图所⽰为了以后使⽤⽅便,修改交叉⼯具链,进⼊“Makefile”⽂件sudo vim Makefile进⼊⽂件后修改“ARCH”和“CROSS_COMPILE”变量,如下图所⽰:注意:交叉编译链⼀定要是⾃⼰安装的全路径三、busybox中⽂⽀持1.修改“printable_string.c”⽂件sudo vim libbb/printable_string.c进⼊⽂件后修改内容如下图所⽰:2.修改“unicode.c”⽂件sudo vim libbb/unicode.c进⼊⽂件后修改内容如下图所⽰:四、配置busybox1.设置配置项defconfig:缺项配置,也就是默认配置选项。

allyesconfig:全选配置,也就是说选中busybox的所有功能。

allnoconfig:最⼩配置。

可以根据⾃⼰需要选择配置命令,这⾥我选⽤的是最下配置命令如下sudo make defconfig配置完成后可通过查看是否有.config⽂件,如果存在则说明配置成功,如下图所⽰:2.进⼊图形配置sudo make menuconfig进⼊图形配置界⾯后,配置库⽂件来源,配置路径如下所⽰-> Settings-> Build static binary使⽤静态库时,编译出来的⽂件很⼤,然后编译出来的DNS会出问题,所以我这⾥选⽤的是动态库,配置如下图所⽰:勾选“vi-style line editing commands”,配置路径如下-> Settings-> vi-style line editing commands取消“Simplified modutils”的勾选,配置路径如下-> Linux Module Utilities-> Simplified modutils勾选“mdev”,配置路径如下-> Linux System Utilities-> mdev如下图所⽰:勾选“Support Unicode”及其⼦选项“Check $LC_ALL, $LC_CTYPE and $LANG environment variables”-> Settings-> Support Unicode-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables到此busybox的配置基本完成,如果需要其他配置项的内容可根据⾃⼰的需求选择。

实验7 busybox 的移植与根文件系统的构建

实验7 busybox 的移植与根文件系统的构建

实验 7 busybox 的移植与根文件系统构建实验【实验目的】了解嵌入式操作系统中文件系统的类型和作用。

了解JFFS2 文件系统的优点及其在嵌入式系统中的作用。

掌握利用BusyBox 软件制作嵌入式文件系统的方法。

掌握嵌入式Linux 文件系统的的挂载过程。

【实验步骤】交叉编译工具的安装第一步:利用which命令查看交叉编译工具的位置。

【图6-1-1】第二步:如果没有安装,则将光盘中的Toolchain目录下的xscalev1_010001.tar.gz 文件复制到/usr/local目录下(具体目录可以自行指定)。

【图6-1-2】第三步:利用tar命令对xscalev1_010001.tar.gz进行解压。

【图6-1-3】第四步:利用export命令将交叉编译工具的路径加入到系统PATH环境变量中。

然后利用which命令查看交叉编译工具是否已在系统搜索路径中。

【图6-1-4】busybox 的交叉编译第五步:从网上下载BusyBox 软件包,这里下载的是busybox-1.00-pre05.tar.bz2。

首先把它放在/root/Xsbase270_Linux/Filesystem 目录下并进行解压缩。

【图6-1-5】在busybox 的顶层目录下的Makefile 中包含一些选项来控制BusyBox 的创建。

其中大部分选项是在开发busybox 时为了调试而使用的。

下图是BusyBox 的配置界面。

【图6-1-6】第六步:在Build Option 菜单下,可以选择静态库编译方式,设置如下:[*] Build BusyBox as a static binary (no shared libs)由于为ARM 系统制作文件系统,所以在交叉编译选项中需要使用带glibc 库的支持的交叉编译器arm-linux-gcc,具体配置如图5-2 所示:(假设ARM 交叉编译工具所在的目录为:/opt/xscalev1/bin)【图6-1-7】busybox 默认的安装路径为_install,用户可以根据需要在Installation Options 配置中输入自定义路径。

基于busybox制作mini2440根文件系统及使用nfs挂载

基于busybox制作mini2440根文件系统及使用nfs挂载

常见的文件系统有yaffs2, jffs2,他们是适用于根文件系统镜像存在于NAND Flash上的情况。

而传统的Linux EXT2/EXT3文件系统格式适用于传统的block设备,比如SD卡或者硬盘。

cramfs同时适用于以上两种情况。

其不管采用哪种格式,内核都必须支持它,这是根文件系统正确挂载的前提条件。

其内核支持它是指:在对内核进行编译的时候必须加入对相应文件系统的支持。

由于在内核没有加入对yaffs2的支持,因此在最后根据mkyaffs2image制作yaffs2类型的根文件系统,在加载之前,必须要对linux内核进行打yaffs2的补丁。

将yaffs文件系统编译进内核。

之后在启动linux内核时候才能识别yaffs2文件系统。

我在自己的mini2440开发板上面通过nfs来加载制作好的"根文件系统",这里的"根文件系统"指的是:没有经过像mkyaffs2image工具转化的原始的类linux目录结构的文件。

其文件包括Linux启动时所必须的目录和关键性的文件。

nfs便于加载及验证我们制作的文件系统的正确性。

其加载时文件系统不用读写flash。

*******************************第一步:下载busybox并编译********************************下载busybox-1.19.2.tar.bz2/downloads/解压并进入目录# tar jxvf busybox-1.19.2.tar.bz2# cd busybox-1.19.2修改Makefile# gedit Makefile &把164 行修改为:CROSS_COMPILE = arm-linux-把190 行修改为:ARCH = arm配置# make menuconfig 或者make xconfig(为图形化界面)在Busybox Settings->Build Options之下选择Build BusyBox as a static binary (no shared libs) (STATIC)以静态的方式来编译busybox。

使用Busybox制作根文件系统

使用Busybox制作根文件系统

使用Busybox制作根文件系统1、BusyBox简介BusyBox 是很多标准 Linux 工具的一个单个可执行实现。

BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet;有些人将 BusyBox 称为 Linux 工具里的“瑞士军刀”。

BusyBox 揭露了这样一个事实:很多标准 Linux 工具都可以共享很多共同的元素。

例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码。

当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。

实际上,BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。

这就为可引导的磁盘和使用 Linux 的嵌入式设备提供了更多功能。

我们可以对 2.4 和 2.6 版本的 Linux 内核使用 BusyBox。

我们平时用的那些Linux命令就好比是分立式的电子元件,而BusyBox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,BusyBox有非常广的应用。

2、BusyBox的用法可以这样用BusyBox#busybox ls他的功能就相当运行ls命令最常用的用法是建立指向BusyBox的链接,不同的链接名完成不同的功能.#ln -s busybox ls#ln -s busybox rm#ln -s busybox mkdir然后分别运行这三个链接:#./ls#./rm#./mkdir就可以分别完成了ls、rm和mkdir命令的功能.虽然他们都指向同一个可执行程序BusyBox,但是只要链接名不同,完成的功能就不同, BusyBox就是这么的神奇。

3、配置编译BusyBox下载首先需要下载BusyBox源代码。

用busybox做一个简单的文件系统

用busybox做一个简单的文件系统

用busybox做一个简单的文件系统利用BusyBox做一个简单的根文件系统1、下载BusyBox源代码包 /2、找个地方解压缩包,例如tar -xjvf busybox-1.00.tar.bz23、进入busybox的文件夹,使用make menuconfig进入设置[attach]244[/attach]4、在build options中有一些选项要注意Build BusyBox as a static binary (no shared libs):如果选择了这个选项,那么BusyBox 将被静态编译,也就是不需要动态链接库的支持就能运行,但是这样会使编译后文件的体积增大。

Do you want to build BusyBox with a Cross Compiler:如果你的busybox将要运行机器与编译主机的体系结构不同,比如s3c2410是ARM,与我们的X86主机芯片系统结构不一样,那么这个一定要选上,并且在 Cross Compiler prefix中写上交叉编译器的名字,比如ARM 用arm-linux-[attach]245[/attach]5、在Installation Options中 BusyBox installation prefix就是在编译完后运行make install 时,busybox将被安装的地址。

[attach]246[/attach]6、其它的选项按照默认选项就行,当然自己也可以看看有没有需要,把其它一些命令加入到编译选项中来7、完成后保存,然后运行make8、编译没有问题后运行make install这样编译好的busybox就会自动安装到BusyBox installation prefix中,一般是三个文件夹bin sbin usr和一个文件linuxrc。

这样busybox 的编译就完成了9、准备一个空文件夹将BusyBox installation prefix中的东西拷过来,另外再建几个linux 需要的文件夹libdevetchomeprocroottmpvarmnt10、在etc文件夹下建一个目录init.d,并且在其中建立一个空文件rcS,在rcS中加上以下内容#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP/bin/mount -t proc none /proc11、如果你的busybox是静态编译的,那么一个简单的能使用的根文件系统就这样完成了,但是这个文件系统中没有glibc的动态链接库,除了busybox以外的软件,如果对glibc 有依赖,但是又没有静态编译的的话就无法运行。

使用busybox制作rootfs

使用busybox制作rootfs

使⽤busybox制作rootfsBuild Busybox as a static binary(no shared libs),如果选择上,则busybox将以静态形式进⾏编译,否则将以动态⽅式编译。

此外,还需要对交叉编译环境进⾏配置,选择其中的Cross Compiler Perfix,输⼊交叉编译器的前缀,我们的嵌⼊式平台上使⽤的是arm-uclinux-linu TAG:1 获取源码解压从busybox的官⽅主页 ,下载busybox的源码,⽬前最新的版本为busybox-1.13.3.tar.bz2#tar –jvxf busybox-1.13.3.tar.bz2进⼊解压后的busybox源码⽬录#cd busybox-1.13.32 配置busybox步骤跟编译linux内核时很像#make menuconfig出现⼀个图形界⾯,选择Busybox Settings,这⾥可以对编译、安装以及调试等模式进⾏配置。

然后选择Build Options,对交叉编译器以及编译⽅式进⾏配置。

其中的第⼀项是Build Busybox as a static binary(no shared libs),如果选择上,则busybox将以静态形式进⾏编译,否则将以动态⽅式编译。

此外,还需要对交叉编译环境进⾏配置,选择其中的Cross Compiler Perfix,输⼊交叉编译器的前缀,我们的平台上使⽤的是arm-uclinux-linux的交叉编译⼯具。

这⾥我们先选择静态编译,动态⽅式的稍后再讲,注意Build with Large File Support (for accessing files > 2 GB)不要选(默认是选上的),否则编译后会出现如下错误:miscutils/lib.a(readahead.):In function ‘readahead_main’readahead.(.text.readahead_main+0×70):undefined reference to ‘readahead’collect2:ld returned 1 exit statusmake :***[busybox_unstripped ]Error 13 编译busybox#make4 安装busybox#make install可以采⽤perfix参数安装到指定⽬录下,格式为:make install prefix=xxx⽬录,如果不特别指定,将默认在busybox源码⽬录下⽣成⼀个_install⽬录。

根文件系统的制作

根文件系统的制作

根文件系统的制作文件系统的制作其实并没有想像中那么难。

一个基本的文件系统应该包括:busybox (提供 shell 命令集)、配置文件(用来初始化和布局你的文件系统)、设备文件(如果是用 devfs 的话这个就免了)、必要的库文件系统(如果 busybox 是静态编译的话,那根本不用为 busybox 用到的库文件而烦。

在我制作的文件系统里,只是为了用户程序和 qt 的运行才放置了一些库文件)。

正文一、首先说一下 busybox 的配置和编译问题其实搞好 busybox 后,可以说你的文件系统已经完成了一半了。

Busybox 之所以比较难编译,主要是 busybox 和交叉编译工具的版本搭配问题。

在文坛上不乏因为 busybox 某些命令不能编译通过而烦的人,在这里我推荐一个搭配:busybox-1.1.3+arm-linux-gcc-3.3.2 (在文坛上看到过有人说busybox-1.0.1+arm-linux-gcc-3.4.1 也可以正常编译通过,你自己看着办吧)。

Busybox 的配置很简单,详细过程可以参考《基于 S3C2410 的 Linux 全线移植文档》的文件系统部分,我刚开始的时候就是按照这个来做出一个很简单的文件系统的。

不过有一点要特别注意的 (shell 的配置问题 ) :1、要这样配置:│ │ Shells --->│ Choose your default shell (ash) --->2、如果是这样配置的话,虽然可以生成ash,但不能生成sh:│ │ Choose your default shell(none) ---> │ ││ │ [*] ash另外,按照他的这种方法做出来的文件系统,运行的时候 shell 并不好有,没有历史记录、自动补全、删除字符的功能,下面介绍如何为它添加这些功能:Shells --->--- Bourne Shell Options │ │[ ] Hide message on interactive shell startup │ │[ ] Standaloneshell │ │[*] command lineediting │ │[*] vi-style line editingcommands │ │(15) historysize │ │[*] historysaving │ │[*] tabcompletion │ │[*] usernamecompletion │ │[ ] Fancy shell prompts这是我自己试验出来的,网上没有看到过这方面的介绍,在此奉献给大家。

基于busybox的根文件系统制作

基于busybox的根文件系统制作

Computer Knowledge and Technology 电脑知识与技术软件设计开发本栏目责任编辑:谢媛媛第6卷第17期(2010年6月)ISSN 1009-3044Computer Knowledge and Technology电脑知识与技术Vol.6,No.17,June 2010,pp.4655-4656,4658E-mail:xsjl@ Tel:+86-551-56909635690964基于busybox 的根文件系统制作李飞,武金虎,石颖博(贵州大学计算机科学与信息学院,贵州贵阳550025)摘要:Busybox 是构建嵌入式Linux 文件系统的必备软件,它是所有文件和设备节点的起始点,是决定系统能否正常启动的关键。

通过busybox-1.1.3为例,进行配置、编译、安装等过程,从而形成简单的根文件系统映像文件,为以后嵌入式Linux 系统的移植打下了良好的开端。

关键词:Busybox ;嵌入式Linux ;Linux 操作系统;根文件系统;cramfs 文件系统中国分类号:TP316.81文献标识码:A 文章编号:1009-3044(2010)17-4655-02Making Root File System Based on BusyboxLI Fei,WU Jin-hu,SHI Ying-bo(College of Computer Science and Information,Guizhou University,Guiyang 550025,China)Abstract:Busybox is an essentiaL software to buiLd an embedded Linux fiLe system.It is the starting node point of aLL the fiLes and de -vices and the key whether the system can have a normaL start.Taking busybox-1.1.3for exampLe,making a simpLe root image system fiLe by configuration compiLation and instaLLation Lays a good foundation for migration of the embedded Linux system.Key words:busybox;embedded linux;Linux OS;root file system;cramfs file system1根文件系统结构根文件系统是所有文件和设备节点的起始点,包括系统所必须的各种工具软件、库文件、脚本、配置文件等一系列的文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于busybox的根文件系统制作作者:李飞,武金虎,石颖博来源:《电脑知识与技术》2010年第17期摘要:Busybox是构建嵌入式Linux文件系统的必备软件,它是所有文件和设备节点的起始点,是决定系统能否正常启动的关键。

通过busybox-1.1.3为例,进行配置、编译、安装等过程,从而形成简单的根文件系统映像文件,为以后嵌入式Linux系统的移植打下了良好的开端。

关键词:Busybox;嵌入式Linux;Linux操作系统;根文件系统;cramfs 文件系统中国分类号:TP316.81文献标识码:A文章编号:1009-3044(2010)17-4655-02Making Root File System Based on BusyboxLI Fei, WU Jin-hu, SHI Ying-bo(College of Computer Science and Information, Guizhou University, Guiyang 550025, China)Abstract: Busybox is an essentiaL software to buiLd an embedded Linux fiLe system. It is the starting node point of aLL the fiLes and devices and the key whether the system can have a normaL start. Taking busybox-1.1.3 for exampLe, making a simpLe root image system fiLe by configuration compiLation and instaLLation Lays a good foundation for migration of the embedded Linux system.Key words: busybox; embedded linux; Linux OS; root file system; cramfs file system1 根文件系统结构根文件系统是所有文件和设备节点的起始点,包括系统所必须的各种工具软件、库文件、脚本、配置文件等一系列的文件。

一个基本的Linux根文件系统包含有以下的目录:dev、proc、bin、etc、usr、Lib、temp、var、usr等等目录。

其中dev是设备文件节点目录,proc是挂载proc文件系统所用的目录,bin目录下面包含了系统的基本命令,etc目录是系统启动脚本所在的目录,Lib是系统默认的动态链接库目录,usr是用户目录,temp是临时目录,用来保存临时文件,var目录包含系统运行时要改变的数据。

以上都是根文件系统所必须的目录2 Busybox简介熟练嵌入式Linux的朋友对busybox一定不会陌生,它是标准Linux工具的一个单个可执行实现,被形象的称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX工具和命令结合到一个单独的可执行程序中。

虽然busybox中的这些工具相对于GNU常用工具功能有所简化,但对于嵌入式系统来说这已经足够了。

同时,busybox仅仅需要几百KB的空间资源就能实现大量的Linux命令(如Ls,cat,cp等),节省系统空间容量,使用简洁方便,不需裁剪就可以直接将其应用于嵌入式系统的根文件系统。

Busybox 开放源代码,遵守GPL协议,本文以虚拟机为载体,以busybox-1.1.3为例,完成的源代码可从下载,压缩包大小为1.3M左右。

3 配置busybox首先,建立交叉编译环境,使用arm-linux- 3.3.2版本,特别要主要arm-linux- 编译工具和busybox1.1.3版本的对应,不同的对应可能会出现许多意想不到的错误。

安装arm-linux-3.3.2 ,在根目录下解压即可tar –jxvf arm-linux-gcc-3.3.2.tar.bz2检查是否生成/usr/locaL/arm 目录,若生成说明安装完成。

其次,修改环境变量export PATH=$PATH:/usr/locaL/arm/3.3.2/bin/:并将busybox-1.1.3源代码解压后,进入busybox目录:#tar –jvxf busybox-1.1.3.tar.bz2#cd busybox-1.1.3#make menuconfig出现一个图形界面,如图1,选择Busybox Settings,这里可以对编译、安装以及调试等模式进行配置。

然后选择BuiLd Options,对交叉编译器以及编译方式进行配置。

其中的第一项是BuiLd Busybox as a static binary(no shared Libs),如果选择上,则busybox将以静态形式进行编译,否则将以动态方式编译。

此外,还需要对交叉编译环境进行配置,选择其中的Cross CompiLer Perfix,输入交叉编译器的前缀,我们的嵌入式平台上使用的是arm-linux-的交叉编译工具,如图2。

接下来,配置busybox过程中的几个重要选择:1)在GeneraL Configuration中,选择“Support for devfs”选项2)在Linux System UtiLities选项中,“Support Loopback mounts”和“Support for the oLd/etc/mtab fiLe”2个选项应该选中3)在SheLL选项中,应该选中默认sheLL:ash,否则不会生成sh,导致不能解释脚本文件。

最后运行命令:#make#make instaLL将默认在busybox源码目录下生成一个_instaLL目录。

到此,busybox基本上可以功成身退了。

我们需要的就是busybox编译出来的这个_instaLL目录。

进入_instaLL目录,可以看到一共有3个目录和一个文件,分别是:bin、sbin和usr目录以及linuxrc文件。

删除linuxrc文件,将其他的目录打包。

查看_instaLL目录,大约在540KB左右,由此可见,busybox的效率是非常高的。

4 配置cramfs系统一个正常的Linux系统还缺少很多文件。

我们必须建立了常见Linux 系统中包含的一些目录,虽然它们不全是必需的,但建立它们更符合标准一些。

创建一个新的文件夹:mkdir rootfscd rootfs再建立相应的文件夹,并在etc目录下建立init.d文件夹。

mkdir dev etc home Lib mnt proc sbin sys tmpvar usr准备系统启动时所需要的文件:linuxrc、rcS、inittab、fstab。

这里,我们以脚本的形式直接给出:1)linuxrc文件#!/bin/shecho "mount /etc as ramfs"/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 //bin/mount -t ramfs ramfs /var/bin/mkdir -p /var/tmp/bin/mkdir -p /var/run/bin/mkdir -p /var/Log/bin/mkdir -p /var/Lock/bin/mkdir -p /var/empty#/bin/mount -t usbdevfs none /proc/bus/usbexec /sbin/init修改其权限chmod 755 linuxrc 将其放入rootfs/的根目录下 2)rcS文件#!/bin/sh/bin/mount –a将其放入rootfs/etc/init.d/目录下3)inittab文件# This is run first except when booting::sysinit:/etc/init.d/rcS# Start an "askfirst" sheLL on the consoLe#::askfirst:-/bin/bash::askfirst:-/bin/sh# Stuff to do when restarting the init process::restart:/sbin/init# Stuff to do before rebooting::ctrLaLtdeL:/sbin/reboot::shutdown:/bin/umount -a -r4)fstab文件none/procprocdefauLts0 0none/dev/ptsdevptsmode=06220 0tmpfs/dev/shmtmpfsdefauLts0 0将inittab和fstab两个文件放到rootfs/etc/目录下。

最后,将-instaLL目录中先前打包的文件解压缩至rootfs目录中,再进入rootfs的上一级目录,使用mkcramfs制作文件系统:./mkcramfs rootfs xxxxx.cramfs。

至此,一个完整简单的根文件系统就制作成功了。

5 结论一般构建文件系统的方式是从原有的文件系统进行剪裁和修补。

但是使用最新的busybox 制作全新的文件系统并不复杂,甚至更加简便,对启动脚本的配置也更加灵活和自由。

至此,本文完整的给出了制作根文件系统的方法,对于嵌入式领域的开发和Linux系统的裁剪移植都有重要的意义。

参考文献:[1] 孙天泽,袁文菊.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M].2版.北京:电子工业出版社,2007:154-170.[2] 陈铁军.嵌入式Linux2.6在s3c2410上的移植技术探析[J].微计算机信息,2007(11).[3] 毛德操,胡希明.Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001:78-153.[4] DANLETL P B,MARCO C.深入理解Linux内核[M].陈莉君,冯锐,牛欣源,译.北京:中国电力出版社,2001:207-346.[5] 嵌入式系统接口设计与Linux驱动程序开发[M].北京:北京航空航天大学出版社,2006:213-304.[6] 熊伟,董金明.嵌入式Linux中根文件系统的实现[J].电子测量技术,2007.[7] 郑桦.嵌入式Linux文件系统的设计与实现[D].武汉理工大学,2004:66-87.。

相关文档
最新文档