2012年(1008)
分类:
2012-08-01 11:39:39
原文地址:文件系统--制作 作者:luozhiyong131
嵌入式学习入门 http://blog.chinaunix.net/u3/117680/showart.php?id=2300212
, 文章——>嵌入式学习入门 全面的讲述学习嵌入式linux中的每个步骤
内核版本:
Linux-2.6.31
交叉编译器版本:
arm-linux-gcc 4.3.2
操作系统平台:
Linux -- Red Hat 9.0
开发板平台:
Arm -- TX2440A
使用的工具:
Busybox-1.15.2.tar.bz2
编译busybox
获取busybox1.15.2源码,在找到busybox-1.15.2.tar.bz2这个压缩包,下载,解压:
#tar xjvf busybox-1.15.2
进入源码目录,修改Makefile
第164行,CROSS_COMPILE = arm-linux-
第190行,ARCH = arm
执行#make menuconfig进行配置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
准备制作
创建根文件系统目录,主要包括以下目录:
/bin,/etc,/dev,/home,/lib,/mnt,/opt,/proc,/root,/sbin,/sys,/tmp,/usr,/var.
建一个名为root_2.6.31的文件夹
#mkdir root_2.6.31
rootfs目录下生成:bin、linuxrc、sbin、usr复制过来,并且在该目录下创建文件系统所需要的其他目录
#mkdir root-2.6.30.4 |
向各目录中添加文件系统所需要的目录或文件,没有提到的就不用添加。这里要注意各种文件的权限,建议都改为777,命令:#chmod 777 文件名
制作文件系统
在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 such file or directory”的错误。
修改inittab文件:
内容如下:
::sysint:/etc/init.d/rcS
console::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 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib/ -a
由于交叉编译器的库文件比较多,体积较大,所以需要裁剪一下库文件,只保留常用的库文件,具体的裁剪方法可以参考我们提供的文件系统的源码。
到这里,文件系统的框架已经做好,我们需要把文件系统制作成可以烧写进Nandflash中的yaffs2镜像文件。
使用mkyaffs2image工具,制作yaffs2镜像,这个工具是在yaffs2源码包中utils目录下的mkyaffs2image.c文件编译得到的,如果使用的是大页NAND,需要修改源码。
可以使用编译好的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中的文件系统分区中
参考
http://blog.chinaunix.net/u3/117680/showart_2294496.html
如果文件系统能正常挂载,终端会打印出:
Please press Enter to activate this console. (按回车)
Processing /etc/profile...
Done
[root@TX2440A /]#
凝问?