基于busybox1.15.0的yaffs2文件系统移植TE2440II开发板

发布时间:2011-3-23 13:41    发布者:techshare
关键词: busybox , TE2440II , YAFFS2 , 文件系统 , 移植
首先说一下各个知识点:

使用的busybox是1.15.0。什么是busybox呢,busybox是很多标准linux一个单个可执行实现,很多标准linux工具都可以共享很多共同的元素。例如,很多基于文件的元素(比如grep和find)都需要在文件中搜索文件的代码。当这些工具被合并到一个可执行程序中时,他们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,busybox可以将大约3.5M的工具包装成大约200KB大小。这就为引导盘和嵌入式linux设备提供了更多的工具。我们可以对2.4或2.6版本的linux内核使用这个工具。

几个常用的make选项:

make clean 清除源代码树

make distclean 彻底清除源代码树

make menuconfig N-curses(基于菜单的)配置工具

make defconfig 启用默认的(通用)配置

make config 基于菜单的配置工具

uClibc与glibc。CC的标准就是glibc这个库,里边有GCC各种标准函数的实现,使用uClibc,这是一个对大小进行优化过的C库,它为嵌入式系统开发。

根文件系统前面加一个“根”字,说明它是加载其他文件系统的根,既然是根,那么如果没有这个根,其他文件系统就没法加载。他包括系统引导和其他文件系统挂载所必须的文件,根文件系统包括Linux启动所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找到/etc/fstab这个挂载文件等,根文件系统还包括了应用程序bin目录等。

1)Jffs2

JFFS嵌入式系统文件系统最早是由瑞典 Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS也可以用于Linux,uCLinux中。

Jffs2:日志闪存嵌入式系统文件系统版本2(Journalling Flash FileSystem v2)主要用于NOR型闪存,基于MTD驱动层,特点是,可读写的,支持数据压缩的,基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已经满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。

2)Yaffs Yet Another Flash File System

Yaffs/yaffs2是专门为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少一些功能(例如不支持数据压缩),所以速度更快,挂载时间更短,对内存的占用较小。另外他是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。

Yaffs/yaffs自带NAND芯片驱动,并且为嵌入式提供了直接访问文件系统的API,用于可以不使用Linux中的MTD与VFS,直接对文件系统操作。

3)Cramfs

Cramfs是Linux的创始人Linux Torvalds参与开发的一种只读的压缩文件系统。他也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省了大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩。

4)NFS

NFS是由Sun开发并发展起来的一项不同机器,不同操作系统之间通过网络共享文件的技术



然后开始操作:

一.

给内核打上补丁,使内核对yaffs2文件系统支持。
下载最新的驱动http://www.aleph1.co.uk/cgi-bin/ ... fs2.tar.gz?view=tar

解压:

tar zxvf yaffs2.tar.gz

cd yaffs2

./patch-ker.shc/home/hacker/linux-2.6.30.4

成功后打印信息:

1. Updating /file/fl/linux-2.6.33/fs/Kconfig

2. Updating /file/fl/linux-2.6.33/fs/Makefile

进入linux-2.6.30.4目录,把s3c2410的默认配置写入config文件。

1. make s3c2410_defconfig

配置文件系统选项
配置yaffs2文件系统
修改配置如下:

1. File systems--->

2.    Miscellaneous filesystems--->

3.   <*> YAFFS2 file system support

4.     -*- 512 byte / page devices

5.     -*- 2048 byte (or larger) / page devices

6.          Autoselect yaffs2 format

7.        Cache short names in RAM

二:

编译busybox生成文件系统所需要的应用程序

1.解压busybox源码,修改Makefile使之编译成ARM平台:

#tar-jxvf busybox-1.15.0.tar.tar
#cdbusybox-1.15.0
#gedit Makefile

修改CROSS_COMPILE ?= arm-linux- ARCH = arm

2.配置busybox,下面是一个人配置的busybox 1.13.0,借来参考,基本差不多。

make menuconfig

Busybox Settings --->
General Configuration --->
Buffer allocation policy (Allocate with Malloc) --->
Show verbose applet usage messages
Store applet usage messages in compressed form
Support --install [-s] to install applet links at runtime
Enable locale support (system needs locale for this to work)
Support for --long-options
Use the devpts filesystem for Unix98 PTYs
Support writing pidfiles
Runtime SUID/SGID configuration via /etc/busybox.conf
Suppress warning message if /etc/busybox.conf is not readable
(/proc/self/exe) Path to BusyBox executable
Build Options --->
Build BusyBox as a static binary (no shared libs)
Build with Large File Support (for accessingfiles> 2 GB)
Installation Options --->
[ ] Don't use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
(6) Minimum password length
(2) MD5: Trade Bytes for Speed
Faster /proc scanning code (+100 bytes)
Command line editing
(1024) Maximum length of input
vi-style line editing commands
(15) History size
History saving
Tab completion
Fancy shell prompts
(4) Copy buffer size, in kilobytes
Use ioctl names rather than hex values in error messages
Support infiniband HW
Linux Module Utilities --->
(/lib/modules) Default directory containing modules
(modules.dep) Default name of modules.dep
insmod
rmmod
lsmod
modprobe
--- Options common to multiple modutils
[ ] Support version 2.2/2.4 Linux kernels
Support tainted module checking with new kernels
Support for module.aliases file
Support for module.symbols fileLinux System Utilities --->

3.编译和安装busybox:

make;make install

安装好后会在busybox-1.15.0/_install/目录下生成:bin,linuxrc,sbin,usr。

4.开始构建文件系统

1)创建一个root_2.6.30.4目录,把busybox-1.15.0/_install/目录下的复制过来,并在该目录下创建文件系统所需要的其他目录。

#mkdir root-2.6.30.4
#cp-rf busybox-1.15.0/_install/*root-2.6.30.4/
#cdroot-2.6.30.4/
#mkdir dev etc home lib mnt opt proc tmp var

2)添加必须的文件,文件和文件夹都用chmod 777 xxx,修改权限

"dev"目录,创建两个设备文件:

#mknodconsolec 5 1
#mknod null c 1 3

etc"目录,创建各种配置文件并向里面添加内容,没有列出的就不用添加:

group: 系统用户组配置文件,内容如下:

root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:lp
mail:*:8:
news:*:9:
uucp:*:10:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sudo:*:27:
audio:*:29:
ppp:x:99:
500:x:500:plg
501:x:501:fa

inittab: 系统init进程配置文件,内容如下:

# /etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r

passwd: 系统密码文件,内容如下:

root::0:0:root:/:/bin/sh
ftp::14:50:FTP User:/var/ftp:
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
hacker::502:502inux User,,,:/home/hacker:/bin/sh

sysconfig/HOSTNAME: 主机名称文件,内容如下:

TE2440II

注意HOSTNAME是文件名,TE2440II是文件中的内容。

fstab: 系统挂载文件系统列表,内容如下:




# device mount-point type options dump fsck order
none/proc proc defaults0 0
none/dev/pts devptsmode=06220 0
tmpfs/dev/shm tmpfsdefaults0 0
[/table]


init.d/rcS: 系统启动加载项,内容如下:




#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel

#
#Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
/bin/mount -t proc none /proc
/bin/mount -t tmpfs none /tmp
/bin/mount -t tmpfs none /var

/bin/mkdir -p /var/log

/bin/hostname -F /etc/sysconfig/HOSTNAME
[table]



profile: 用户环境配置文件,内容如下:

# Ash profile
# vim: syntax=sh
# No corefilesby default
#ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH:/usr/local/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATHLD_LIBRARY_PATH

resolv.conf: DNS配置文件,内容如下:

nameserver 61.144.56.100

"home"目录:创建一个hacker目录,与etc目录passwd文件中的hacker相对应

"lib"目录:这个里面放的都是库文件,直接从交叉编译器的库文件目录中拷贝过来:

#cp -f /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib/ -a

6. 使用yaffs制作工具编译构建好的文件系统。使用mkyaffs2image,复制到/usr/sbin/目录下,给予777权限。

然后mkyaffs2image root-2.6.30.4 root-2.6.30.4.bin

注意一个路径是这样的 /etc/init.d/rcS, rcS是文件

Kernel panic - not syncing: Attempted to kill init!
上网搜索了一些相关信息,找到了解决问题的途径。 原因在于:编译内核和busybox使用的编译器是arm-linux-gcc 4.3.2,而这个编译器默认是打开“EABI选项”的,这样编译出来的busybox就是EABI的。但是内核编译的时候,默认是把“EABI选项”关掉的。所以busybox和内核无法正常配合。把“EABI选项”打开,重新编译内核后,一切正常。
Kernel Features --->
Use the ARM EABI to compile the kernel
Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)

这样就搞定了,嘿嘿。


李万鹏
本文地址:https://www.eechina.com/thread-59523-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表