Chinaunix首页 | 论坛 | 博客
  • 博客访问: 206854
  • 博文数量: 32
  • 博客积分: 306
  • 博客等级: 二等列兵
  • 技术积分: 337
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-15 10:02
文章分类
文章存档

2013年(21)

2011年(11)

我的朋友

分类: LINUX

2011-11-21 15:18:53

制作文件系统  

 

内核版本:

Linux-2.6.31

交叉编译器版本:

arm-linux-gcc 4.1.2

操作系统平台:

Linux -- Red Hat 9.0

开发板平台:

Arm -- TX2440A

使用的工具:

Busybox-1.15.2.tar.bz2

 mkyaffs2image

 

 制作文件系统的大概可以分成以下四个部分

一、准备制作(创建系统目录)

二、编译 busybox(制作文件系统的必备工具)

三、制作文件系统(添加必备的文件,制作镜像)

四、完善文件系统(根据需要,移植更多的应用程序)

 1: 准备制作

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

/bin,/etc,/dev,/home,/lib,/mnt,/opt,/proc,/root,/sbin,/sys,/tmp,/usr,

/var.

建一个名为 root_2.6.31 的文件夹

#mkdir root_2.6.31

在该文件夹下创建以上目录

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

2: 编译 busybox

获 取 busybox1.15.2 源 码 , 在 找 到

这个压缩包,下载,解压:

#tar xjvf  

 

进入源码目录,修改 Makefile

第 164 行,CROSS_COMPILE = arm-linux-

第 190 行,ARCH = arm

执行#make men onfig 进行配置 busybox

配置选项大部分都是保持默认的,只需要注意选择以下这几个选项,其他的选项都不用动:

Busybox Setting --->

Build Options --->

[*]Build Busybox as a static binary(no shared libs)/*表示静态的库文件*/

[*]Build with Large File Support (for accessing files > 2GB)

Installation Options --->

(./_install) Busybox installation prefix

进入这个选项,输入 busybox 的安装路径,如:../rootfs

Busybox Library Tuning --->

[*] vi-style line editing commands

[*] Fancy shell prompts

要选择这个选项:“Fancy shell prompts”,否则挂载文件系统后,无法正常显示命令提示符:“[\u@\h \W]#”

配置完后,执行#make make install

然后就会在上一级目录下生成 rootfs 文件夹,里面包含几个文件夹/bin /sbin /usr /linuxrc

把这些文件全部复制到刚建好的 root_2.6.31 目录下,

#cp –rf * ../root_2.6.31

 3: 制作文件系统

在 dev 目录下,创建两个设备节点:

#mknod console c 5 1

#mknod null c 1 3

进入 etc 目录,添加文件:

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

# cp -r ../../busybox-1.15.2/examples/bootfloopy/etc/* ./

包括文件:fstab init.d inittab profile

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

# cp /etc/passwd ./

# cp /etc/group ./

# cp /etc/shadow ./

 passwd 文件中的第一行:root:x:0:0:root:/root:/bin/bash 中的/bin/bash,改成/bin/ash

因为文件系统的 bin 目录下没有 bash 这个命令,而是用 ash 代替 bash,所以在用

用户名密码登录的时候(如 telnet),会出现“cannot run /bin/bash: No s h file or directory”的错误。

修改 inittab 文件:

内容如下:

console::sysinit:/etc/init.d/rcS

ttyS0::respawn:-/bin/sh

s3c2410_serial0::askfirst:-/bin/sh

::once:/usr/sbin/telnetd -l /bin/login

::ctrlaltdel:/bin/umount -a -r

修改 fstab 文件,内容如下:

proc   /proc proc defaults 0 0

tmpfs  /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

 tmpfs /dev tmpfs defaults 0 0

 var /dev  tmpfs defaults 0 0 

修改 init.d/rcS 文件,内容如下:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

runlevel=S

prevlevel=N

umask 022

 

export PATH runlevel prevlevel

 mount -a

mkdir /dev/pts

mount -t devpts devpts /dev/pts

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

mdev -s

mkdir -p /var/lock

/bin/hostname -F /etc/sysconfig/HOSTNAME

 

修改 profile 文件,内容如下:

# Ash profile

# vim: syntax=sh

 

# No core files by default

#ulimit -S -c 0 > /dev/null 2>&1

 

USER="`id -un`"

LOGNAME=$USER

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

PATH=$PATH

 

HOSTNAME=`/bin/hostname`

echo "Processing /etc/profile... "

echo "Done"

 

export USER LOGNAME PS1 PATH

 

 

新建 sysconfig 文件夹,在里面新建 HOSTNAME 文件,内容为:TX2440A/*这个就是在终端上显示的提示符前面的字*/

 

拷贝库文件:

进入 lib 目录,拷贝交叉编译器的库文件到 lib 目录下

#cp -f -a

/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gn?i/lib/*.so* ./

 

由于交叉编译器的库文件比较多,体积较大,所以需要裁剪一下库文件,只保

留常用的库文件,具体的裁剪方法可以参考我们提供的文件系统的源码。

到这里,文件系统的框架已经做好,我们需要把文件系统制作成可以烧写进

Nandflash 中的 yaffs2 镜像文件。

使用 mkyaffs2image 工具,制作 yaffs2 镜像,这个工具是在 yaffs2 源码包中

utils 目录下的 mkyaffs2image.c 文件编译得到的,如果使用的是大页 NAND,需要

修改源码。(cvs/utils/mkyaffs2image)

可以使用我们提供的编译好的 mkyaffs2image 工具 

 

把解压出来的可执行文件复制到/usr/bin 目录下,

#cp mkyaffs2image /usr/bin

制作文件系统镜像:

#mkyaffs2image root_2.6.31 root_2.6.31.bin

root_2.6.31.bin 就是 yaffs2 文件系统镜像,要先修改它的权限,否则该文件无法被复制:

#chmod 777 root_2.6.31.bin

把 root_2.6.31.bin 下载到 nandflash 中的文件系统分区中

如果文件系统能正常挂载,终端会打印出:

Please press Enter to activate this console. (按回车)

Processing /etc/profile...

Done

[root@TX2440A /]#

 

STEP 4: 完善文件系统

在/mnt 目录下创建以下文件夹,用来挂载 NFS,SD 卡和 U 盘

nfs sd isk1 isk2 isk3 isk4

 

设置开发板 IP 地址:在 init.d/rcS 文件中加入:

ifconfig lo 127.0.0.1

ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up

route add default gw 192.168.1.1

这样在开机时,就自己设置了 IP 地址为:192.168.1.10

 

在/etc/profile 中加入:

alias ll=`ls -l`

alias mntnfs=`mount -t nfs -o nolock`

alias mnt 1=`mount /dev/sda1 /mnt/ isk1`

alias umnt 1=`umount /mnt/ isk1`

alias 命令的作用是给一个命令取个别名,可以把较长的命令简化成简单易记的短

命令,可以根据自己的需要添加这里的内容。

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