基于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库。

  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.。

相关文档
最新文档