内核版本: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
#mknod ttyS0 c 4 0
二是把passwd文件中的第一行:root:x:0:0:root:/root:/bin/bash中的/bin/bash,改成/bin/sh
其余的基本和其他的一样,busybox编译过程中常见的错误在下篇文章中讲解。
步骤为:
一、准备制作
创建根文件系统目录,主要包括以下目录:/bin、/etc、/dev、/home、/lib、/mnt、/opt、/proc、
/root、/sbin、/sys、/tmp、/usr、/var。
建一个名为rootfs的文件夹
在该文件夹下创建上述目录
#mkdir bin etc dev ……………
二、编译 busybox
获取busybox1.15.2源码,在http://www.busybox.net/downloads/找到busybox-1.15.2.tar.bz2这个
压缩包,下载,解压:
#tar xjvf busybox-1.15.2
进入源码目录,修改Makefile
CROSS_COMPILE = arm-linux-
ARCH = arm
执行#makemenuconfig进行配置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 --->
选择上不用usr
(./_install) Busybox installation prefix <—进入这个选项,输入busybox的安装路径,
如:../yaffs
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。把这些文件全部复制到刚建好的rootfs目录下。
#cp –rf * ../rootfs
三、制作文件系统
在dev目录下,创建两个设备节点:
#mknod console c 5 1
#mknod null c 1 3
由于后面会显示不能打开
can't open /dev/s3c2410_serial0: No such file or directory
can't open /dev/ttyS0: No such file or directory
(所以这儿还要创建两个设备节点)
#mknod s3c2410_serial0 c 204 64
#mknod ttyS0 c 4 0
进入etc目录,添加文件:
(1)拷贝Busybox-1.15.2/examples/bootfloopy/etc/*到当前目录下。
# cp-r../../busybox-1.15.2/examples/bootfloopy/etc/*./
包括的文件:fstab、init.d、inittab、profile
(2)拷贝/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/sh,因为文件
系统的bin目录下没有bash这个命令,而是用ash代替bash,所以在用用户名密码登录的时候(如
telnet),会出现“cannot run /bin/bash: No such fileor directory”的错误。
(3)修改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
(4)修改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
(5)修改init.d/rcS文件,内容如下:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
runlevel=S
prevlevel=N
umask022
exportPATHrunlevelprevlevel
mount-a
mkdir/dev/pts
mount-tdevptsdevpts/dev/pts
echo/sbin/mdev>/proc/sys/kernel/hotplug
mdev-s
mkdir-p/var/lock
/bin/hostname-F/etc/sysconfig/HOSTNAME
(6)修改profile文件,内容如下:
# Ashprofile
# vim:syntax=sh
# Nocorefilesbydefault
#ulimit-S-c0>/dev/null2>&1
USER="`id-un`"
LOGNAME=$USER
PS1='[\u@\h\W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
echo" Processing/etc/profile... "
echo"Done"
exportUSERLOGNAMEPS1PATH
(7)新建sysconfig文件夹,在里面新建HOSTNAME文件,内容为:FL2440
(8)拷贝库文件:
进入lib目录,拷贝交叉编译器的库文件到lib目录下
#cp-f-a/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib/*.so*./
由于交叉编译器的库文件比较多,体积较大,所以需要裁剪一下库文件,只保留常用的库文
件。
#cp mkyaffs2image /usr/bin
制作文件系统镜像:#mkyaffs2image root_2.6.33 root_2.6.33.bin
root_2.6.33.bin就是yaffs2文件系统镜像,要先修改它的权限,否则该文件无法被复制:
#chmod777root_2.6.33.bin把root_2.6.33.bin下载到nandflash中的文件系统分区中,如果文件系统能正常挂载,终端会打印出:
Please press Enter to activate this console. <—按回车
Processing /etc/profile...
Done