使用Busybox-1.2.0制作根文件系统

使用Busybox-1.2.0制作根文件系统

cross-3.3.2

make-3.8.1

 

STEP 1:

创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/usr,/sbin,/tmp

/proc,/lib. /usr下有bin, sbin, lib, local, etc   /mnt下有etc

创建多级目录可以使用mkdir –p usr/bin/ …….

 

STEP 2:

升级make到3.81版本,用RH9自己带的make 3.79会出错

进入make-3.81目录,执行:# ./configure    # make   #make install

会把make安装到/usr/local/bin目录下,要使新make立即生效,要设置环境变量

PATH=/usr/local/bin:$PATH。设置完成后,就可以编译Busybox了。

 

STEP 3:

进入busybox-1.2.0目录,执行# make defconfig

执行# make menuconfig

 

Busybox Setting -----> Build Options ----->

选择上 Build BusyBox as a static binary (no shared libs)

       Do you want to build BusyBox with a Cross Compiler?

指定交叉编译器为

(/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compiler prefix

 

Installation Options ----->

选择上 Don’t use /usr

设置Busybox installation prefix为 ../rootfs即安装目录.

 

在Shells中,选择Choose your default shell为ash.

保存退出

 

STEP 4:

# make    # make install

 

安装完后,就会把busybox拷到自己指定的rootfs 路径下,同时会生成一个linuxrc文件,这个是busybox自带的启动文件,也可以自己编写启动文件

 

Linux内核使用的是2.4.18

用3.3.2交叉编译器和1.2.0版本的busybox编译通过

我开始用1.9.2版本的,用2.95.3,3.4.1,3.3.2编译均不通过

 

STEP 5:   这个是用来启动linux时输入用户和密码的

编译tinylogin-1.4。进入tinylogin-1.4目录,修改Makefile文件如下:

DOSTATIC = true

USE_SYSTEM_PWD_GRP = false

USE_SYSTEM_SHADOW = false

CROSS = /usr/local/arm/3.3.2/bin/arm-linux-

 

STEP 6:

执行# make PREFIX=../rootfs install      安装到指定路径

 

STEP 7:

进入根文件系统rootfs的etc目录,执行如下操作:

拷贝Busybox-1.2.0/examples/bootfloopy/etc/* 到当前目录下。

# cp –r ../../busybox-1.2.0/examples/bootfloopy/etc/* ./

拷贝/etc/passwd, /etc/group, /etc/shadow到当前目录下。

# cp /etc/passwd ./

# cp /etc/group ./

# cp /etc/shadow ./

 

修改inittab,把第二项改为::respawn:-/bin/login

修改profile,加入PATH环境变量:export PATH=/bin:/sbin:/usr/bin:/usr/sbin

设置链接库:export LD_LIBRARY_PATH=/lib:/usr/lib

 

对以下三个文件修改,只保存与root相关的项,根据具体情况内容会有所不同。

修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/sh。

修改group为root:x:0:root

修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::

 

STEP 8:

制作cramfs镜像,下载到实验箱上就可以引导起来了。

# mkcramfs rootfs rootfs.cramfs

 

这个是一个基本的移植过程,下面看一下busybox的启动过程

先进入vivi, 执行param show 会在最后一行看到:

Linux command line: noinitrd root=/dev/mtdblock/1 init=/linuxrc console=ttyS0

这个是vivi传给linux的命令行参数,root=表示root根文件系统挂在哪个设备下,这里是mtd分区的,如果是bon分区的,就会是root=/dev/bon/2  init=/linuxrc这个最重要,表示初始化启动脚本为根目录下的linuxrc,console=ttyS0 初始化控制台为串口

 

BusyBox的intit命令提供了类似传统init程序的系统启动和初始化功能,init程序(如/sbin/init)只是一个指向busybox程序(/bin/busybox)的符号链接,也就是说,busybox是系统第一个执行的应用程序。Busybox由文件名识别出要执行的命令是init, 然后跳转到init例程去运行

 

Busybox init 依次执行如下任务:

设置init的信号处理函数

初始化控制台

分析/etc/inittab配置文件

执行系统初始化脚本,如/etc/init.d/rcS

 

完成初始化控制台后,busybox检查/etc/inittab文件是否存在,如果不存在,将使用一个缺省的inittab,我可可以自己写一个inittab文件,格式如下:

id:runlevel:action:process

id指定要启动的进程   runlevel是运行级别,busybox不支持运行级别,所以为空

action是要执行的动作,process指定要运行的程序和启动的命令行参数

 

Action:

sysinit   指定初始化脚本路径

respawn  当某进程结束时重启该程序

askfirst  在启动程序前提示用户按回车键

wait  等待所启动的进程结束

once  只运行进程一次,不等待进程结束

crtlaltdel 按组合键时执行的进程

shotdown 系统关闭时运行的进程

restart 重启时运行的进程,通常是init本身

 

自己写的inittab

::sysinit:/etc/init.d/rcs

::respawn:-/bin/sh

tty2:askfirst:-/bin/sh

::ctrlaltdel:/bin/umount –a –r

第一句指定执行初始化脚本为 /etc/init.d/rcS

第二句就是当进程退出,如执行exit后,又重新出现命令提示符

      如果要用帐号密码登陆,则改成-/bin/login

第三句是在启动linux后,提示要按回车才能进入

第四句是在按组合键后,执行umount,把所有文件系统umount

 

再看/etc/init.d/rcS

#!/bin/sh          //指定shell

/bin/mount –a        //mount –a 为挂载全部文件系统,详见/etc/fstab

exec /usr/etc/.rc.local   //执行rc.local

 

rcS只完成挂载全部文件系统,然后执行rc.local,进入/usr/etc,看rc.local

#!/bin/sh

ifconfig eth0 192.168.220.10   //设置板子IP

echo “Set IP = 192.168.220.10”

 

mount –t nfs –o nolock ……………..  //挂载NFS

echo “mount nfs ok”

也可以写一些其他的挂载命令

 

到这里就完成了启动过程,有时也可以在/etc下写一个profile,这个是由shell执行的,启动后,按完回车才执行,这里也可以写一些初化脚本,如初始化环境变量

 

总结:linuxrc -> /sbin/init -> /etc/inittab -> /etc/init.d/rcS -> /usr/etc/rc.local   /etc/profile

 

也可以编写自己的linuxrc

#!/bin/sh

/bin/mount –n –t ramfs ramfs /etc

/bin/cp –a /mnt/etc/* /etc

 

/bin/mount –f –ramfs ramfs /tmp

 

exec /sbin/init

 

主要就是最后一句,执行init

把/etc中的文件放到/mnt/etc/下,挂载/etc/为ramfs,然后把/mnt/etc/下的所有文件拷到/etc下,这时/etc下就为可写的了,这样可以方便修改脚本

 

最好也将/tmp挂为ramfs,因为执行QT程序时,需要tmp目录为可写

时间: 2024-11-05 15:53:08

使用Busybox-1.2.0制作根文件系统的相关文章

制作根文件系统:make[1]: *** [miscutils/ubi_tools.o] 错误 1 --来源于网络

miscutils/ubi_tools.c:63:26: error: mtd/ubi-user.h: No such file or directory miscutils/ubi_tools.c: In function 'ubi_tools_main': miscutils/ubi_tools.c:133: error: 'UBI_DEV_NUM_AUTO' undeclared (first use in this function) miscutils/ubi_tools.c:133:

TI Davinci DM6446开发攻略——根文件系统的裁剪和移植

一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windows操作系统的C.D盘这种概念机制,FLASH对应硬盘.但linux是挂载点的概念,根文件系统是一个整体,组织到一个树状的目录结构中.这种文件组织遵守文件系统科学分类标准FHS,一种国际标准.运行.维护系统所必须的各种 在开发.测试阶段,基本上都是使用NFS(网络文件系统),NFS文件系统是在你的开

linux根文件系统制作之busybox编译和系统构建【转】

转自:http://blog.chinaunix.net/uid-29401328-id-5019660.html 介绍完相关文件后我们开始构建文件系统,涉及到的文件等到具体用到的时候再讲. 一.编译busybox 首先下载busybox源码,编译busybox,得到一些初始化文件及我们需要的各种命令.关于busybox的作用请百度,这里不详细讲.我下载的是busybox-1.23.1,解压之后进入到顶层目录. 1.修改顶层Makefile 把CROSS_COMPILE和ARCH修改成你自己的交

使用BusyBox制作Linux根文件系统

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   sys   STEP 2:    使用busybox构建/bin

linux根文件系统的制作

 (一):首先linux根文件系统的制作需要的开发环境. 1:移植Linux内核版本: linux-3.0.1 (只要能用就行) 2:交叉编译工具:arm-linux-gcc 4.3.2(任选) 3:文件系统制作工具:Busybox-1.13.3(任选) 4:etc.tar.gz (二):交叉编译环境的搭建(这一步我在我的博客其他文章里面有 详细的搭建过程,很简单滴-) (三):创建根文件系统的目录 1:在主目录下面新建一个文件夹rootfs [root@localhost fs]# ls [r

FL2440根文件系统的制作(完整版)

内核版本:Linux-2.6.28.7 交叉编译器版本:arm-linux-gcc4.1.2 操作系统平台:Linux(要用选上eabi支持)  Red Hat 企业版5 开发板平台:arm FL2440 使用的工具:Busybox-1.15.2.tar.bz2 提示:FL2440根文件系统的制作网上已经有很多例子,但是你发现没有,你按照他们的做法你有可能还是实现不了,我做了两方面的改进, 一是创建设备节点的时候要多加两项 #mknod s3c2410_serial0 c 204 64    

hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

一, 安装SDK 1.Hi3531 SDK包位置     在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件, 该文件就是Hi3531的软件开发包. 2.解压缩SDK包     在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz , 解压缩该文件,可以得到一个Hi3531

【ARM】制作Linux 文件系统

1从零开始由busybox 建立文件系统 1文件系统在LINUX 中的结构图 2编译好kernel 3Uboot 状态下显示的环境设置信息 4开始busybox 生成文件系统 5完善文件系统 第一步 init 会调用etcinittab 文件并根据其做相应的操作 第二步可以手工做些设置 第三步play MP3 第四步添加Login 修改inittab 为 创造文件rcS 2Linux 文件系统结构 1ext2 文件系统的总体存储布局 11Block 12Boot block 13Block Gr

手把手教你移植根文件系统(目标平台S3C2410)

Linux内核在系统启动期间进行的最后操作之一就是安装根文件系统,根文件系统一直是所有类UNIX系统不可或缺的组件. bin      必要的用户命令(二进制文件) *boot     引导加载程序使用的静态文件 dev      设备文件及其他特殊文件 etc      系统配置文件 *home  用户主目录 lib       必要的链接库,例如:C链接库.内核模块 mnt       临时挂载的文件系统的挂载点 *opt     附加软件的安装目录 proc    提供内核和进程信息的pr