Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51037
  • 博文数量: 36
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 390
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-23 15:42
文章分类
文章存档

2011年(1)

2009年(35)

我的朋友
最近访客

分类: LINUX

2009-08-06 17:41:41

用busybox 制作自己的简单的根文件系统

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

交叉编译器为3.3.2

make-3.8.1

STEP 1

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

 

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

保存退出

STEP 4

# make    # make install

STEP 5

编译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

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

拷贝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

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

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

修改grouproot:x:0:root

修改shadowroot:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7::: 

STEP 8

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

# mkcramfs rootfs rootfs.cramfs

 

 

 

用BusyBox-1.1.3制作根文件系统

cross-2.95.3

STEP 1:

# mkdir rootfs

# cd rootfs

mkdir bin dev etc home lib mnt proc sbin sys tmp root usr

mkdir mnt/etc

# mkdir usr/bin usr/lib usr/sbin

STEP 2:

进入BusyBox解压后的目录,配置BusyBox

# make menuconfig

Busybox Settings >

General Configuration >

[*] Support for devfs

Build Options >

[*] Build BusyBox as a static binary (no shared libs)

/* busybox编译为静态连接,少了启动时找动态库的麻烦 */

[*] Do you want to build BusyBox with a Cross Compiler?

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

/* 指定交叉编译工具路径 */

Init Utilities >

[*] init

[*] Support reading an inittab file

/* 支持init读取/etc/inittab配置文件,一定要选上 */

Shells >

Choose your default shell (ash) >

Coreutils >

[*] cp

[*] cat

[*] ls

[*] mkdir

[*] echo (basic SuSv3 version taking no options)

[*] env

[*] mv

[*] pwd

[*] rm

[*] touch

Editors >

[*] vi

Linux System Utilities >

[*] mount

[*] Support mounting NFS file systems

[*] umount

[*] Support loopback mounts

[*] Support for the old /etc/mtab file

Networking Utilities >

[*] inetd

/*

支持inetd超级服务器

* inetd的配置文件为/etc/inetd.conf文件,

*/

# make TARGET_ARCH=arm CROSS=arm-linux-\

PREFIX=../rootfs/ all install

//执行上面的命令会把相关文件安装到我们的根文件系统rootfs

编译过程中若出现如果出现找不到内核版本号的编译错误(如:编译libb/loop.c时提示找不到 linux/version.h 文件,也可以拷贝3.3.2交叉编译器下的version.h文件。),可以把内核源码中的version.h文件拷贝到交叉编译器的包含文件的linux目录下。另外也可以用3.3.2交叉编译器,但是要修改loop.c内容,把#include 的路径写为#include sys-include/linux/version.h

# mkcramfs rootfs rootfs.cramfs

rootfs.cramfs烧写到实验箱.运行即可启动.

 

 

 

阅读(836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~