Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152412
  • 博文数量: 43
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-22 17:24
文章分类
文章存档

2010年(43)

我的朋友

分类: LINUX

2010-12-08 20:40:05


根文件系统的制作

                (贴在这是为了方便分析,和大家一起讨论分析,尊重原创)

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

Busybox下载地址:

交叉编译器:arm-linux-4.3.2

一、 STEP 1 创建根目录

home目录下创建/home/rootfs文件夹,用作新构建的根文件系统的根目录

#cd   /home

#mkdir  rootfs

创建根文件系统目录,主要包括以下目录

/dev  /etc  /lib  /usr  /var  /proc  /tmp  /home  /root  /mnt  /bin  /sbin

 

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

二、 STEP 构建 /bin/sbinlinuxrc

解压并进入busybox-1.16.1目录,执行

# make defconfig

# make menuconfig

Busybox Setting -----> 

Build Options ----->

[*]Build BusyBox as a static binary (no shared libs)   \\静态编译busybox

指定交叉编译器为

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

Installation Options ----->

选择上 Don’t use /usr

Busybox Library Tuning--->

[*]Username shell prompts

[*]Query  cursor  position  from  terminal

 

[*]   Fancy shell prompts (这个要是不加会出现[\u@\h \W]#ls这样的错误 

编译出的busyboxshell命令解释器支持显示当前路径及主机信息

保存退出

# make    

# make install

busybox目录下会看见 _install目录,里面有/bin  /sbin  linuxrc三个文件

三、 STEP 3  构建etc目录:

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

#cd /home/rootfs/etc

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

# cp  –r  busybox-1.16.1/examples/bootfloopy/etc/*  rootfs/etc

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

2) 拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadowrootfs/etc下。

# cp /etc/passwd    rootfs/etc

# cp /etc/group     rootfs/etc

# cp /etc/shadow    roofs/etc

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

修改passwdroot:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/ash (也就是只保留第一行)

修改grouproot:x:0:root

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

登陆开发板时需输入用户名密码,同虚拟机相同

3) 修改profile

PATH=/bin:/sbin:/usr/bin:/usr/sbin \\可执行程序 环境变量

export LD_LIBRARY_PATH=/lib:/usr/lib \\动态链接库 环境变量

USER="`id -un`"

LOGNAME=$USER

HOSTNAME='/bin/hostname'

PS1='[\u@\h \W]# '

显示主机名、当前路径等信息:

4) 修改 etc/init.d/rc.S文件

/bin/mount -n -t ramfs ramfs /var

/bin/mount -n -t ramfs ramfs /tmp

/bin/mount -n -t sysfs  none /sys

/bin/mount -n -t ramfs none /dev

/bin/mkdir /var/tmp

/bin/mkdir /var/modules

/bin/mkdir /var/run

/bin/mkdir /var/log

/bin/mkdir -p /dev/pts

/bin/mkdir -p /dev/shm

/sbin/mdev -s

/bin/mount –a

echo /sbin/mdev > /proc/sys/kernel/hotplug

5) 修改etc/fstab文件,增加以下文件

none /dev/pts devpts mode=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

四、 STEP 4 构建lib目录:

 进入 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t /lib目录

 将以下动态库拷贝到rootfs/lib

 #cp  *so*  roofs/lib  -a

进入以下目/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib

将以下动态库拷贝到rootfs/lib

 #cp ./libstdc++.so.*  rootfs/lib  -a

五、 SETP5下载验证

经过以上几步,一个最基本的linux根文件系统已经制作完毕

可以将制作好的根文件系统通过nfscramfsyaffs工具进行验证

1CRAMFS工具包主要有两个工具,分别是mkcramfscramfsck

mkcramfs工具用来创建CRAMFS文件系统

# mkcramfs dirname  outfile

cramfsck工具用来进行CRAMFS文件系统的释放和检查

# cramfsck  file -x  dir

2)Yaffs工具包yaffs.tar.gz的使用:

#tar  zxvf  yaffs.tar.gz

#cd  yaffs;

#cd  untils

#make   //会产生mkyaffsimage

mkyaffsimage制作yaffs文件系统镜像:

#mkyaffsimage usr usr.yaffs

cramfs不同,这个过程是不可逆的



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

chinaunix网友2011-06-11 16:23:42

很好!

chinaunix网友2011-06-11 16:23:38

很好!