基于busybox的嵌入式Linux根文件系统的的制作方法
嵌入式系统根文件系统制作
保存退出,直接make,make install。
可以看到如下目录3、用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。
我是用root 用户登陆的,直接创建了设备节点。
执行这个sh:创建出一个主文件夹rootfs,里面有一批文件目录:4、把busybox源码目录下的etc的内容拷贝到这里的etc下5、修改拷贝过来的profile文件三、测试注意:前提是已烧写好uboot和内核镜像烧写文件系统1.开启windows 的tftp服务器,设置环境变量,保证开发板和windows在同一网段及开发板的tftp服务器的IP为windows的IP。
[up-class2410 #] setenv serverip 192.168.1.126[up-class2410 #] setenv ipaddr 192.168.1.129[up-class2410 #] saveenvSaving Environment to NAND...Erasing Nand...Writing to Nand... done2. 下载并烧写到nand flash文件系统对应的分区中[up-class2410 #]tftp 0x30008000 root.cramfs[up-class2410 #]nand erase 0x280000 0x400000[up-class2410 #]nand write 0x30008000 0x280000 0x3000003. 设置启动参数[up-class2410 #] setenv bootcmd nand read 0x30008000 0x80000 0x200000\; bootm此项是内核自动启动的参数,如果已设置就不用再重新设置[up-class2410 #] setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200[up-class2410 #] saveenvSaving Environment to NAND...Erasing Nand...Writing to Nand... done[up-class2410 #] printenvbootdelay=5baudrate=115200ethaddr=08:00:3e:26:0a:5bbootfile="uImage"stdin=serialstdout=serialstderr=serialfilesize=26D000fileaddr=30008000netmask=255.255.255.0ipaddr=192.168.1.129serverip=192.168.1.126bootcmd=nand read 0x30008000 0x80000 0x200000; bootmbootargs=root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200Environment size: 332/16380 bytes4.重启开发板[up-class2410 #]reset。
构建嵌入式Linux的根文件系统的busybox方法
构建嵌入式Linux的根文件系统的busybox方法
胡维;张方樱
【期刊名称】《广州大学学报(自然科学版)》
【年(卷),期】2008(7)3
【摘要】根文件系统是嵌入式Linux系统的重要组成部分,因而研究嵌入式Linux 根文件系统的制作是一项有意义的工作.Busybox是构建嵌入式Linux根文件系统的软件,文章重点介绍了用最新的busybox版本1.4.0制作嵌入式Linux的根文件系统方法,其中包括busybox的配置、交叉编译和安装,以及构建嵌入式Linux文件系统所必需的其他一些脚本文件的编写方法.
【总页数】3页(P38-40)
【作者】胡维;张方樱
【作者单位】广州大学,实验中心,广东,广州,510006;广州大学,实验中心,广东,广州,510006
【正文语种】中文
【中图分类】TP316
【相关文献】
1.嵌入式Linux根文件系统的构建 [J], 鲍尚东
2.一种构建嵌入式Linux根文件系统的方法 [J], 刘二钢
3.基于busybox的根文件系统制作 [J], 李飞;武金虎;石颖博
4.使用Busybox制作Cramfs根文件系统 [J], 陈立定;杨俊辉;陈伟欣
5.用Busybox制作嵌入式Linux根文件系统 [J], 邵长彬;李洪亮
因版权原因,仅展示原文概要,查看原文内容请购买。
使用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,这样⽤户就会看到提⽰输⼊⽤户名的提⽰符)。
构建嵌入式Linux的根文件系统的busybox方法
第7卷 第3期2008年 6月广州大学学报(自然科学版)Journa l of G uang zhou U n i ve rsity(N atura l Sc i ence Editi on)V o.l 7 N o .3Jun . 2008收稿日期:2007-05-20; 修回日期:2007-12-10作者简介:胡 维(1980-),男,助理实验师,主要从事嵌入式系统开发、电子测量研究.文章编号:1671-4229(2008)03-0038-03构建嵌入式L i nux 的根文件系统的busybox 方法胡 维,张方樱(广州大学实验中心,广东广州 510006)摘 要:根文件系统是嵌入式L i nux 系统的重要组成部分,因而研究嵌入式L i nux 根文件系统的制作是一项有意义的工作.Busybox 是构建嵌入式L i nux 根文件系统的软件,文章重点介绍了用最新的busybox 版本1.4.0制作嵌入式L i nux 的根文件系统方法,其中包括busybox 的配置、交叉编译和安装,以及构建嵌入式L i nux 文件系统所必需的其他一些脚本文件的编写方法.关键词:根文件系统;busybox ;嵌入式系统中图分类号:TP 316 文献标识码:A 嵌入式L i nux 操作系统[1]越来越受到重视,应用也越来越广泛.而文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制.根文件系统一直是L i nux 系统不可或缺的组件,在嵌入式L i nux 中,内核在启动期间进行的最后操作之一就是安装根文件系统[2].Busybox 是构建嵌入式L i nux 根文件系统的软件[3],用它制作根文件系统简单,方便,而且设置灵活.本文将重点介绍如何用Busybox 来制作根文件系统.1 busybox 简介Busybox 常被很形象地称为嵌入式L inux 系统中的/瑞士军刀0,因为它将许多常用的UN I X 命令和工具结合到了一个单独的可执行程序中.虽然与相应的GNU 工具比较起来,busybox 所提供的功能和参数略少.但在比较小的系统或者嵌入式系统中,已经足够了[4].Busybox 在设计上充分考虑了硬件资源受限的特殊工作环境.它采用一种很巧妙的方法减少自己的体积;所有命令都通过/插件0的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作.例如最终生成的可执行文件为busybox,当为它建立一个符号链接l s 的时候,就可以通过执行这个新命令实现列目录的功能.采用单一执行文件的方式可以最大限度地共享程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都可共享,这对于资源比较紧张的系统来说,最适合不过了.2 环境准备本系统中,构建嵌入式L i nux 根文件系统的硬件平台上主要的芯片有:s3c2410ar m 9微控制器、64M sdram 、64M nand flash 等.系统采用了宿主机加目标板的模式,宿主机是PC ,其操作系统是debian .目标板是基于S3C2410a r m9微控制器的开发板,系统采用的内核是嵌入式L i nux2.6.11.1,boo tl oader 是v i v.i硬件平台,软件环境准备好后,为了组建根文件系统,先建立基本的目录构架.在PC 上建立一个目录,这个目录作为嵌入式系统的根目录,以后所生成的所有的文件都放在这个目录下,假定为/rootfs建立目录框架#m kd ir /rootfs #cd /roo tfs#m kd ir dev etc li b proc t mp var其中,t mp 目录需要设置sti cky 位,#ch mod 1777t m p ,这样所有的用户都对t mp 可读可写,却只有root(/t mp 属主)能删除或移动它.目录ho m e ,opt ,mnt ,root 均是可选的,如果该根文件系统要支持多用户,还需要加/ho m e 目录.由于使用dev fs ,所以不用手动建立dev 目录下的设备文件.第3期胡维等:构建嵌入式Linux的根文件系统的busybox方法3busybox的编译和安装下载busybox-1.4.0的源码包,解开并进入软件包目录运行$m ake m enuconfi g配置必要的选项:设置dev fsd选项G enera l Confi gurati on-->[*]Support for devfs设置交叉编译Bu ild Options-->[*]D o you want to bu ild BusyBox w ith a Cross Co m p iler?填入交叉编译工具然后选择保存配置编译busybox$m ake安装#make i nsta l;l复制到rootfs$cd_insta llcp-a*/roo tfsbusybox将在未来的根文件系统中建立/usr,/bi n,/ sbi n等目录.从中可以看到,编译好的busybox可执行文件和其他应用命令的符号链接.Busybox在动态链接的情况下是300KB左右,静态链接为800K B.用它实现的文件系统可以控制在1M B以内.现在还没有得到一个完整可用的文件系统,需要在它的基础上添加一些配置文件,让它可以工作.4创建其他文件4.1配置文件的创建etc文件夹是许多系统配置文件保存的地方.这些文件很重要,如果配置错误,可能影响系统启动.inittab文件是系统启动后访问的第一个脚本文件,下面是用文本编辑器创建的i n ittab文件:/rootfs/etc/inittab::sysi n it:/etc/i n i t.d/rcS(指定系统启动的脚本为/etc/i n i t.d/rcS)::as k fi rst:/bi n/sh(指定打开一个无需登陆验证的shell)::ctr l a ltde:l/sbin/reboot(指定当按下ctr l+alt+ de l时执行命令)::s hut down:/bi n/u moun-t a-r(关机时执行的操作)::restart:/sbi n/i nit(重启时执行的操作) fstab文件的编写:/rootfs/etc/fstabproc/proc proc defaults00none/v ar/sh m shm defaults004.2用户和组文件的创建/rootfs/etc/pass wdr oo:t$1$$mD5Su6d WGF/d MKd Lc Q WS O1:0:0:roo:t/:/bi n/s hb i n:x:*:1:bin:/b i n:/rootfs/etc/g rouproo t:x:0:b i n:x:1:/rootfs/etc/i n it.d/rcS#!/b i n/shPATH=/usr/sb i n:/usr/b i n:/sbi n:/b i n:expo rt PATH/bi n/m ount-t proc none/pro c/sb i n/ifcon fig l o127.0.0.1/rootfs/etc/busybox.conf[SU ID]su=ssx root.rootpass w d=ssx root.rootm ore=ssx roo t.root/rootfs/etc/pro file/rootfs/etc/hosts127.0.0.1l o ca l host192.168.0.88m atr i x44.3交叉编译连接库的创建编译动态连接库$CC=a r m-s3c2410-linux-gnu-g cc LDS HARED=/ar m-s3c2410-li nux-gnu-ld-shared0./confi gure-shared$m ake$m ake pre fi x=${TARGET_PR EF I X}i nstall$cd${TARGET_PREF I X}/lib$cp-d li bz.so*/roo tfs/li b编译静态库$CC=a r m-s3c2410-linux-gnu-g cc./confi gure$m ake$m ake pre fi x=${TARGET_PR EF I X}i nstall$cp li bz.a/roo tfs/li b至此,整个根文件系统就制作完成,通过上面制作的rootfs可以启动整个系统.5测试文件系统在开发主机上安装NFS软件包39广州大学学报(自然科学版)第7卷apt-ge t i nsta ll nfs-comm on nfs-ke rne-l se rver编辑/etc/exports为以下内容/rootfs*(r w,sync,no_roo t_squash)#/etc/i n it.d/n fs-co mmon restart#/etc/i n it.d/n fs-ke rne-l server restart安装配置m i n icom#apt-get i nsta llm i n i com lrzsz#m i n icom按A O键,设置m i n icon m选择串口设置,设置参数为/dev/tt yS01152008N1按住空格键,将开发板复位,进入v iv i输入以下内容(>后的内容)>para m set linux_c m d_li ne/console=ttyS A C0root= /dev/n fs nfsroot=192.168.0.1:/roo tfs i p=192.168.0.88: 192.168.0.1:192.168.0.1:255.255.255.0:m atri x4.ar m9. net:eth0:o ff0>par m a save重启开发板,启动后按enter键进入系统,在目标板的系统上执行命令,例如#adduser test#pass wd test或者也可以试着使用其他命令.如果系统启动失败,则可以通过内核消息查找错误的原因.如果错误信息提示不能正确挂载文件系统,问题可能出在启动引导装载程序上.文件系统比较容易出问题的是用户的验证和动态链接的加载.最简单的检测办法是把busybox编译为静态链接并设置内核参数i n it=/b i n/sh来躲开对用户登陆的验证[5,6].6结语构建嵌入式根文件系统还有其他方法,比如说从原有的文件系统进行裁减和修补.从整个文件系统的构建过程看,本文介绍的用busybox制作全新的文件系统更加简单,而且对启动脚本的设置也更加灵活.参考文献:[1]Barabanov M,Y oda i ken V.Introducing rea l ti m e L i nux[J].L inux J,1997,34:19-23.[2]W o lfW H.H ard w are so ft wa re co-desi gn of embedded syste m s[J].P roc I EEE,1994,82(7):967-989.[3]冯世奎,刘肑.L inux嵌入式系统根文件系统的选择和制作[J].成都信息工程学院学报,2006,21(4):508-512.FE NG Sh-i ku,i L I U D.i R oot file system o f L i nux embedded syste m[J].J Chengdu Inf Eng Co l,l2006,21(4):508-512. [4]卢剑翔,刘成安,胡和智,等.基于s3c2410的C ramFS根文件系统的移植[J].微计算机应用,2006,22(11):133-135.LU Ji an-x i ang,L I U Cheng-an,HU H e-zh,i et a.l T ransplan tati on o f cra m fs roo t file syste m based on S3C2410[J].M i cro-compu A pp,l2006,22(11):133-135.[5]谷丰.嵌入式L i nux系统平台的构建[J].电脑与信息技术,2003(6):54-57.GU Feng.Constructi on of embedded L i nux sy stem p l a tfor m[J].Compu Info T ech,2003(6):54-57.[6]K a ri m ya gh mour.Bu ildi ng embedded L i nux syste m[M].U SA:O.R eilly,2003.Construction root file syste m of e mbedded L i nux usi ng busyboxHU W e i,ZHANG Fang-y ing(Lab Cen ter,Guangzhou Un i versity,Guangz hou510006,Ch i na)Abst ract:Root file syste m is an i m portant co m ponent o f an e m bedded L i n ux syste m,so it i s si g nifican t thatw e research constructi o n of e m bedded L i n ux roo t file syste m.Busybox is a so ft w are o f constr uction r oot files.Th is paper m a i n ly i n troduces the m ethod of constr uction root file syste m i n the use of the ne w est busybox-1.4.0un-der e mbedded L i n ux inc l u d i n g configurati o n and insta llati o n of busybox and w riti n g scri p t files needed.K ey w ords:root file syste m;busybox;e m bedded syste m=责任编辑:刘少华> 40。
嵌入式Linux根文件系统制作
实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构掌握根文件系统的搭建过程掌握busybox、mkcramfs等工具的使用方法二. 项目主要任务使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。
分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程三. 基本概念1.文件系统基本概念Linux的一个最重要特点就是它支持许多不同的文件系统。
这使Linux非常灵活,能够与许多其他的操作系统共存。
Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
随着时间的推移, Linux支持的文件系统数还会增加。
Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。
该树形层次结构把文件系统表示成一个整个的独立实体。
无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。
该个目录被称为装配目录或装配点。
在文件系统卸载时,装配目录中原有的文件才会显露出来。
在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。
2.常见的嵌入式文件系统嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。
(1)Flash根据结构不同分为 NOR Flash和NAND Flash。
基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。
特点:可读写、支持数据压缩、支持哈希表的日志型文件系统,提供了崩溃/掉电安全保护,提供“写平衡”支持等。
最简单的嵌入式linux根文件系统制作
作者:刘溯奇地点:桂林电子科技大学机器人中心1.准备工作下载busybox工具说明:用于制作可执行命令工具集2.开发环境1)主机:RedHat 92) 交叉编译工具路径:/usr/local/arm/3.3.2/ (用于编译busybox1.2.0)把/usr/local/arm/3.3.2/bin路径添加到/etc/profile文件中3)开发板:友善之臂SBC24104)开发板分别使用的Linux2.4.18内核和Linux2.6.14内核验证文件系统3.建立目标板空根目录文件夹及根目录下的文件夹[root@190 friendly-arm]# mkdir myroots[root@190 friendly-arm]#pwd/friendly-arm/myroots[root@190 friendly-arm]#cd myroots[root@190 myroots]#[root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var [root@190 myroots]# mkdir etc/init.d进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP[root@190 myroots]# cd ../lib也就是进入lib目录,添加相应的库文件,具体操作略。
用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。
嵌入式Linux2.6根文件系统制作过程
嵌入式Linux2.6 根文件系统制作过程目录:(一):使用busybox制作Linux根文件系统(二):nfs服务器配置过程——RedHatAS5环境(三):开发板通过nfs服务挂载虚拟机指定目录(四):通过nfs服务挂载根文件系统(五):cramfs格式根文件系统制作(六):yaffs格式根文件系统制作(七):busybox自带telnet服务器(八):busybox自带的FTP服务器(九):busybox自带的tftp服务器(十):Linux下实现U盘、SD卡自动挂载功能(一):使用busybox制作Linux根文件系统构建最简单的嵌入式Linux根文件系统,下面我们一步步教大家做起。
硬件环境:S3C2440软件环境:Busybox-1.16.1 /zh-cn/files/2e477e14-c1bb-11e0-b287-0015c55 db73d/cross-4.3.2 /zh-cn/files/99e727f3-c1a5-11e0-822a-0015c55db7 3d/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 ----->//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制作嵌入式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 制作嵌入式Linux 的文件系统
序控制块等其他操作系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。
在busybox 的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。下
面就来一步步地用busybox 从无到有地建立一个全新的
的命令有Login/ Password Management Utilities 里面的getty、login 和passwd ,这些命令从前是由另外一个软件
包tinylogin 所提供的。当然,如果不需要一个交互的登录界面,这些命令也可以去掉。通过设定内核参数init
图1 busybox 的编译配置界面
用busybox 制作嵌入式Linux 的文件系统
busybox 是构建嵌入式Linux 文件系统的必备软件。本文以busybox 最新的1. 00 版本为例,介绍这个软
件的配置和安装,以及构建文件系统所必需的其他一些脚本文件的编写方法。
关键词busybox 嵌入式Linux 文件系统 启动脚本
译为静态链接并设置内核参数init = / bin/ sh 来躲开对用户登录的验证。
5 总 结
一般构建文件系统的方式是从原有的文件系统进行剪裁和修补。其实使用最新的busybox 制作全新的文件
系统并不复杂,甚至更加简便,对启动脚本的配置也更加灵活和自由。
20051 4 Microcontrollers & Embedded Systems 9 = / bin/ sh 可以在系统启动后直接得到一个shell 。
tlenetd 命令是一个远程登录服务程序,把它编译进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制作根⽂件系统详细过程我在之前的中也有实现过根⽂件系统的制作,那只是在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的配置基本完成,如果需要其他配置项的内容可根据⾃⼰的需求选择。
Linux根文件系统的详细制作过程
Linux根文件系统的详细制作过程利用busybox制作跟文件系统准备一个busybox包我这里用的是busybox-1.21.1.tar.bz2这个包可以在官方网站上下载,这里我就用百度网盘链接https:///s/10Fnc-UbcNWPLaiAnaXKTug 解压安装包 tar xf busybox-1.21.1.tar.bz2 .根文件系统的制作1、什么是文件系统文件的索引信息文件的具体数据操作索引信息的具体代码kernel/fs/ 操作索引信息的代码ext4fatjffs2: norflashyaffs2: nandflashnfs...为什么会有很多中类型的文件?1)对应硬件特性不同2)软件的处理策略不同断电保护的策略...linux启动时加载使用的第一个文件系统称作根文件系统根文件系统中存储的文件是有特定需求的2、准备根文件系统所需要具备的目录(文件)2.1 生成arm处理器能够使用命令工具使用开源软件busybox去生成需要的命令cd /home/tarena/portingcp /home/tarena/workdir/rootfs/busybox-1.23.2.tar.bz2 ./cd busybox-1.23.2/make menuconfigBusybox Settings --->Build Options --->[*] Build shared libbusybox //共享库Installation Options ("make install" behavior) --->What kind of applet links to install (as soft-links) ---> //软链接(./_install) BusyBox installation prefix (NEW) //安装路径vi Makefile164 CROSS_COMPILE ?= arm-cortex_a9-linux-gnueabi-190 ARCH ?= armmakemake installcd _install2.2 准备busybox可执行程序需要的库文件mkdir libcp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libm.so.6 lib/ -a cp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libm-2.18-2013.10.solib/ -acp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libc.so.6 lib/ -a cp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/libc-2.18-2013.10.so lib/ -acp /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/arm-cortex_a9-linux-gnueabi/sysroot/lib/ld*.so* lib/ -a2.3 配置文件的准备mkdir etc2.3.1 vi etc/inittab::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -rmkdir etc/init.d2.3.2 vi etc/init.d/rcS //系统开机自启动的程序可以放入该文件#!/bin/sh#自动挂载/etc/fstab文件中指定的分区mount -a#热插拔事件发生时执行的命令echo /sbin/mdev >/proc/sys/kernel/hotplugmdev -s手工执行:chmod +x etc/init.d/rcS2.3.3 vi etc/fstab格式要求:设备挂载点文件系统类型挂载参数是否备份格式检查device mount_point type options dump fsckproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 02.4 创建必要的目录mkdir proc tmp sys dev var opt mnt2.5 创建必要的设备文件linux内核在启动时需要使用两个设备文件/dev/console : 控制台/dev/null:黑洞文件sudo mknod dev/console c 5 1sudo mknod dev/null c 1 3sudo chown tarena:tarena dev/consolesudo chown tarena:tarena dev/null3、通过nfs方式验证以上根文件数据的有效性服务器端:sudo vi /etc/exports/home/tarena/porting/busybox-1.23.2/_install*(rw,sync,no_root_squash)sudo /etc/init.d/nfs-kernel-server restart客户端:setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/home/tarena/porting/busybox-1.23.2/_install init=/linuxrc ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0lcd=vs070cxn tp=gslx680-linux console=ttySAC0,115200 maxcpus=1saveenv------------------------------------------------------------1、使用软链接的好处所有的命令都是指向busybox可执行的软链接_install/bin 远小于 ubuntu 系统 /bin,原因在于:1)使用了软链接的方式2) _install/bin命令是对应PC版本命令的简化版2、bin/busybox可执行程序的分析arm-cortex_a9-linux-gnueabi-readelf -d bin/busybox libm.so.6libc.so.6加载器ldarm版本的库在交叉编译工具包有which arm-cortex_a9-linux-gnueabi-gcc令开一个窗口cd /opt/arm-cortex_a9-eabi-4.7-eglibc-2.18find ./ -name "libm.so.6"cp -a-a: 等价于-dR-d: 保持软链接属性3、linux自举完成后会去运行1号进程1号进程如果指定为linxurclinuxrc对应的实现代码busybox/init/init.cinit_main(...){打开,解析/etc/inittab...}inittab文件的格式<id>:<runlevel>:<action>:<process>前两项在嵌入式经常忽略-/bin/sh:-, 一个会话shell4、设备节点文件的创建mknod dev/xxx c major minorc: 字符设备文件major: 主设备号minor: 次设备号ls /dev/console -l。
嵌入式根文件系统的制作
{
printf(“Hello World\n”);
}
注意编译时要使用arm-linux-gcc,由于之前我们把编译器的库文件全部进行拷贝,可以直接动态编译。生成的可执行文件hello放入tmp文件夹。使用的命令:
rm-linux-gcc hello.c –o hello
cp –arf…/_install/tmp/
Busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。
在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。
编译busybox
Busybox的编译过程与内核的编译过程很接近都是先make menuconfig进行配置,然后在make进行编译。
【1】从/downloads/下载busybox工具。这里我们选择busybox-1.13.4.tar.bz2
如下图所示:
注意:我们这里使用的是PUTTY串口显示软件,如果用之前的DNW查看串口信息,会出现下面的错误:
可以看到第一个目录[1;34mbin [0m
会发现出现的信息除了bin目录外还有其他的内容,这并不是文件系统的问题只是DNW这款软件并不支持这些表示色彩的附加信息,换成PUTTY可以正常显示了。
用busybox搭建最简单的Linux文件系统
再执行如下挃令即可:
1. source ~/.bashrc 复制代码
第三步:填充文件系统内容 将上一步_install 目彔下 bin,sbin 目彔全部复制到文件系统目彔 rootfs_x4412, 注意在 bin 和 sbin 目彔下有很多都是软链接,复制时千万丌要丢失了文件属性:
1. make 2. make install 复制代码
这时在 busybox 根目彔会生成_install 目彔,里面存放着 bin,sbin,usr 三个目 彔以及 linuxrc 文件。这些文件构成了 busybox 癿各种挃令集。
前面我们提到,将 busybox 编译成静态文件后,丌再依赖共享库。迚入 busybox 癿根目彔,使用如下挃令查看 busybox 依赖癿共享库:
这里将 proc 和 sysfs 文件系统分别挂载到 proc 和 sys 目彔。 proc 文件系统是一个伪文件系统,它只存在内存当中,而 丌占用外存空间。它以 文件系统癿方式为访问系统内核数据癿操作提供接口。用户和应用程序可以通过 proc 得到系统癿信息,幵可以改变内核癿某些参数。由于 系统癿信息,如迚程, 是劢态改变癿,所以用户戒应用程序读取 proc 文件时,proc 文件系统是劢态从系统 内核读出所需信息幵提交癿。 sysfs 把连接在系统上癿设备和总线组织成为一个分级癿文件,它们可以被从用户 癿空间存取到。这是被设计用来处理那些以前驻留在 /proc/ 癿设备和驱劢程序挃 定癿选件以及用来处理那些以前由 devfs 提供支持癿劢态加载设备。注意一定要修 改 linuxrc 文件癿属性为 777,否则会提示 failedto execute /linuxrc 癿错诨。
利用busybox建立根文件系统实验
用busybox建立根文件系统实验指导实验目的:本实验利用busybox来为mini2440开发板搭建一个简单的根文件系统准备工作:1.交叉编译工具arm-linux-4.4.32.下载获取源代码,推荐地址/downloads/,本实验选用busybox-1.15.0实验步骤:一:编译busybox1.解压并进入busybox顶层目录# tar jxvf busybox-1.15.0.tar.bz2# cd busybox-1.15.02.修改Makfile把 164 行修改为:CROSS_COMPILE =arm-linux-把 189 行修改为:ARCH = arm3.配置# make menuconfig在原有的基础上修改配置Busybox Settings --->Build Options --->[*] Build BusyBox as a static binary (no shared libs) //实验采用静态编译busybox[*] Build with Large File Support (for accessing files > 2 GB) //系统支持大文件Busybox Library Tuning --->[*] vi-style line editing commands[*] Fancy shell promptsLinux Module Utilities ---> //添加支持模块相关的命令(配合后面驱动部分实验)[ ] Simplified modutils[*] insmod[*] rmmod[*] lsmod[*] modprobe[*] depmod4.编译执行如下命令# make# make install在busybox-1.15.0目录下可以找到_install子目录,这就是刚才的安装目录,目录中的文件是我们根文件系统的重要部分 ,在busybox-1.15.0目录的父目录建立一个rootfs目录(用于存放各类型根文件系统)# mkdir ../rootfs然后拷贝_install目录中的内容到rootfs目录下# cp _install/* ../rootfs/ -adf二:建立根文件系统中其他目录1.这里我们可以在rootfs目录下写一个脚本文件来完成其他目录的创建工作,如下:#vim mkrootfs.sh然后输入如下内容:#!/bin/shmkdir boot dev etc home lib mnt opt proc root tmp var sys wwwmkdir usr/libmkdir usr/localmkdir usr/local/libmkdir usr/local/etcmkdir usr/local/binmkdir usr/local/sbinmkdir etc/init.dtouch etc/init.d/rcStouch etc/inittabtouch etc/fstabtouch etc/profilemkdir etc/sysconfigtouch etc/sysconfig/HOSTNAMEmknod dev/console c 5 1chmod 777 dev/consolemknod dev/null c 1 3chmod 777 dev/null2.保存后退出,还需要给mkrootfs.sh添加可执行属性# chmod +x mkrootfs.sh执行脚本文件(注意这里因为mknod命令,需要使用root权限来运行)# ./mkrootfs.sh3.建立etc中与启动内核启动的init进程相关的配置文件3.1建立etc/inittab文件,这是init进程启动后将解析执行文件中的内容,添加内容如下:#etc/inittab::sysinit:/etc/init.d/rcS::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a –r3.1建立etc/init.d/rcS脚本文件,从上面可以看出,init进程启动后首先将执行该脚本文件。
构建基本的嵌入式Linux根文件系统
构建基本的嵌入式Linux根文件系统一、创建根文件系统的基本目录结构1、目录创建做成文件名为mkroot的shell脚本#! /bin/shecho "creatint rootfs dir......"mkdir rootfscd rootfsecho "making dir : bin dev etc lib proc sbin sys usr"mkdir bin dev etc lib proc sbin sys usr #必备的7个目mkdir usr/bin usr/lib usr/sbinecho "making dir :tmp var"mkdir tmp varchmod 1777 tmp注意:变更了/tmp目录的使用权,让它开启sticky位,可确保/tmp目录下建立的文件,只有建立它的用户有权删除它。
2、增加可执行权限chmod +x mkroot ,在某个目录中运行脚本mkroot.二、配置、编译和安装Busybox,构建/bin/sbin linuxrc1、修改Makefile文件:ARCH = arm CROSS_COMPILE = 交叉编译器位置或在配置Busybox指定交叉编译器Busybox 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 prefix Busybox Settings --->Installation Options --->[*] Don't use /usr(安装路径rootfs) BusyBox installation prefix#make#make installrootfs 目录下会生成目录bin、sbin、usr 和文件linuxrc 的内容2、进入busybox目录中,查看所需要的库arm-linux-readelf -d busybox直接拷贝交叉编译器中复制动态链接库(*.so.*)到rootfs/lib目录三、创建件etc目录必要的文:1、在/etc/inittab是init的初始化配置文件,需增加inittab文件#gedit inittab#etc/inittab::sysinit:/etc/init.d/rcS::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a –r2、/etc/profile为shell的全局变量配置文件,用以配置shell的环境,通常把环境变量放在这里。
使用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的根文件系统制作
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意最后还要改变它的属性使它能够执行,执行chmod+x etc/init.d/rcS命令。
4.1.3 创建etc/fstab文件
fstab文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。创建的代码如下:
文件中各字段的意义如下:1)device:要挂接的设备,如/dev/mtdblockl;2)mount-point:挂接点;3)type:文件系统类型;4)opt-ions:挂接参数,以逗号隔开;5)dump和fsck order:用来决定控制dump、fsck程序的行为。
在busybox的参考文件中控制台是ttySAC0,而在s3c24xx系列器件的串口驱动里采用s3c2410_serialx做为设备名,使用串口0作为控制台,这里使用s3c2410_serialO作为控制台。
4.1.2 创建etc/init.d/rcS文件
rcS文件是一个脚本文件,借助启动脚本可以设置各种程序开机后自动运行,也可进行其他系统设置,这有点类似于Windows系统中的Autobat自动批处理文件。创建的文件内容如下(实际内容可能与此不完全一致):
在构造根文件系统时使用动态链接的busybox,构造根文件时需要在/lib目录下面放置glibc库文件。在busybox的配置过程中大多是选择或者去除各种命令,这里不详细叙述。
3.3 编译安装busybox
在编译之前,首先需要修改busybox根目录下的Makefile,使用交叉编译器。
4.2 用户和组文件的创建
需要在etc目录下增加passwd和group两个文件。首先增加passwd文件,passwd一共由7个字段组成,6个冒号将其隔开。其含义分别为:1)用户名;2)是否有加密口令,x表示有,不填表示无,采用MD5、DES加密;3)用户ID;4)组ID;5)注释字段;6)登录目录;7)所使用的shell程序。
#mknod dev/console C 5 1
#mknod dev/null C 1 3
如果不创建这两个设备文件,在文件系统启动时会出现错误信息,不能初始化控制台。
4.4 安装glibc库
在开发板上需要加载器和动态库,执行如下几个命令:
$mkdir-p/home/work/rootby/lib
根文件系统的制作就是生成包含上述各种文件的文件系统的过程,可通过直接拷贝宿主机上交叉编译器处的文件来制作根文件系统,但是这种方法制作的根文件系统一般过于庞大。也可通过一些工具如busybox来制作根文件系统,用busybox制作的根文件系统可以做到短小精悍并且运行效率较高。
2 busybox简介
修改Makefile文件:
加入MKYAFFSSOURCES=mkyaffsimage.c yaffs_packedtagsl.C nand-ecc.c因为yaffs_packedtagsl.c和nand-ecc.c是加上去的。然后执行make命令后生成mkyaffs2image工具,复制此工具到PC机usr/local/bin目录下,利用makyaffs2image工具,执行#mkyaffsimage2 rootby/pyaffs2.img命令可生成文件系统映像文件。执行#gzip-9 pyaffs2.img最终生成嵌入式Linux根文件系统的映像文件为pyaffs2-.img.gz。至此,整个根文件系统就制作完成,最后可以通过上面制作的pyaffs2.img.gz启动整个系统。
busybox常被很形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较,busybox所提供的功能和参数略少,但在比较小的系统或者嵌入式系统中已经足够。busybox在设计上充分考虑硬件资源受限的特殊工作环境,它采用一种很巧妙的方法减少自己的体积;所有命令都通过“插件”的方式集中到一个可执行文件中,在
4.1.1 创建etc/inittab文件
init进程根据/etc/inittab文件来创建其他子进程,比如调用脚本文件配置ip地址、挂接其他文件系统,最后启动shell等。
参考busybox源码下面的“examples/inittab”文件,创建inittab代码如下:
3 busybox的编译和安装
3.1 开发环境
基于S3C2440 ARM920T的硬件平台,该系统的硬件平台上主要使用三星S3C2440,外围还包括64 M SDRAM和64 M NAND Flash,2 M NOR Flash,系统采用宿主机加目标板的模式,宿主机是PC机,其操作系统是RedHat linux,目标板是基于S3C2440微控制器的开发板,系统采用的内核是嵌入式Linux2.6.29,Boot loader是u-boot。
基于busybox的嵌入式Linux根文件系统的的制作方法
在嵌入式Linux操作系统越中文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制。根文件系统一直是Linux系统不可或缺的组件,在嵌入式Lin-ux中,内核在启动期间进行的最后操作之一就是安装根文件系统。Busybox是构建嵌入式Linux根文件系统的软件,用它制作根文件系统简单、方便,而且设置灵活。
1 根文件
Linux要在一个分区上存放系统启动所必需的文件,如内核映像文件、内核启动后运行的第一个程序、给用户提供操作界面的Shell程序、应用程序所依赖的库等,这些必需、基本的文件合称为根文件系统,它们存放在一个分区中。根文件系统一般包括:1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp;2)基本程序运行所需的库函数,如:libc/uC-libc;3)基本的系统配置文件,如:rc,inittab等脚本文件;4)必要的设备支持文件,如:/dev/hd*,/dev/tty,/dev/fdO;5)基本的应用程序,如:sh,ls,cp,mv等。
实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式可以最大限度地共享程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都可共享,这对于资源比较紧张的系统来说,最合适不过了。
#go 30008000/*启动目标板Linux*/
目标板的嵌入式Linux系统启动后在超级终端中显示的结果。可见用busybox制作的根文件系统已经正常启动。
7 结束语
对用busybox制作嵌入式Linux根文件系统的方法进行归纳和总结,给出制作嵌入式Linux根文件系统的一般方法,适用于ARM架构处理器的嵌入式系统。利用此方法制作的文件系统可在S3C2440上成功运行,意在给嵌入式系统平台的搭建有个整体把握和认识,以降低进入ARM嵌入式开发应用领域的门槛,提供的方法组建的文件系统非常简单且配置灵活。
6 下载映像文件并执行
以下命令为通过Windows的超级终端工具下载Linux内核映像和根文件系统映像到目标板(基于S3C2440微处理器的开发板)。
#tftp 30008000 zImage/*下载Linux内核映像到目标板内存*/
#fftp 30800000 pyaffs2.img.gz/*下载根文件系统映像到目标板内存*/
$cd/home/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
$cp*.SO*/home/work/rootby/lib-d
5 制作yaffs2文件系统映像文件
所谓制作文件系统映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备上去。
3.2 配置busybox
从网上下载busybox-1.13.0.tar后,使用tar xvzf busybox1.13.0.tar命令获得busybox-1.13.0目录,里面即是所有的源码。进入busybox-1.13.O目录后执行“make menuconfig”命令可进入配置界面。其配置界面。
在yaffs源码中有个utils目录,里面有mkyaffsimage和mkyaffs2image的源代码,前者可制作yaffs映像文件,后者制作yaffs2映像文件,将下载的yaffs2解压出来在目录/Development下有两个文件夹:yaffs和yaffs2,进入yaffs2/utils目录,此目录下有3个文件。在加入两个文件:nand-ecc.c和yaffs_packed-tagsl.c,具体文件这里不列出,源码可参见文献。
将189行的ARCH?=$(SUBARCH)修改为ARCH?=arm,164行的CROSS_COMPILE?=修改为CROSS_COMPILE?=arm_linux-修改后执行make命令编译busybox。然后安装busybox,将busybox安装/home/work /rootby目录下,在安装之前需要在pc机上执行“mkdir/home/work/rootby”命令建立rootby目录,然后执行“make CONFIG_PREFIX =/home/work/rootby install”命令完成安装。安装完成后生成文件、目录。
passwd的内容为root:x:0:0:root:/root:/bin/sh
增加group文件,group共由4个字段组成,3个冒号将其隔开。含义分别为:1)组名;2)是否有加密口令,同passwd;3)组ID;4)指向各用户名指针的数组。