`
helloyesyes
  • 浏览: 1305827 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

ARM+LINUX移植攻略(八)基于busybox1.15.0的yaffs2文件系统移植TE2440II开发板

阅读更多

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/02/14/6184885.aspx

首先说一下各个知识点:

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

几个常用的make选项:

make clean 清除源代码树

make distclean 彻底清除源代码树

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

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

make config 基于菜单的配置工具

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

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

1)Jffs2

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

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

2)Yaffs Yet Another Flash File System

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

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

3)Cramfs

CramfsLinux的创始人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/目录下生成:binlinuxrc,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:502:Linux 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

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

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)

这样就搞定了,嘿嘿。

分享到:
评论

相关推荐

    基于S3C2440的linux操作系统内核移植和yaffs2文件系统的制作

    Linux内核移植和根文件系统制作是嵌入式系统开发中的关键步骤,特别是对于基于S3C2440这样的微处理器。S3C2440是一款由Samsung制造的ARM9架构处理器,广泛用于各种嵌入式设备,如便携式媒体播放器、路由器和嵌入式...

    Arm+Linux系统移植_(华为内部资料)

    《Arm+Linux系统移植》是华为内部的一份珍贵资料,主要面向ARM架构和Linux操作系统的开发者,旨在深入探讨和解析ARM平台上的Linux系统移植过程。这份资料详尽地阐述了从理论基础到实际操作的各个环节,对于提升...

    基于S3C2440的Linux内核移植和yaffs2文件系统制作

    基于S3C2440的Linux内核移植和yaffs2文件系统制作涉及到的是在嵌入式设备上运行Linux操作系统的关键步骤。S3C2440是一款由Samsung制造的ARM9微处理器,常用于嵌入式系统设计。在这样的硬件平台上移植Linux内核意味着...

    基于mini2440的yaffs2文件系统的移植

    【基于mini2440的yaffs2文件系统移植】知识详解 YAFFS2(Yet Another Flash File System 2)是一种专为嵌入式设备设计的文件系统,尤其适用于使用NAND Flash作为存储介质的设备。相较于早期的YAFFS,YAFFS2增加了对...

    linux在TQ2440上移植4--yaffs2文件系统制作

    总之,移植Linux到TQ2440开发板并创建基于YAFFS2的文件系统是一个综合性的工程,涉及了嵌入式Linux系统构建、 BusyBox集成、设备管理以及根文件系统的定制。这个过程需要对Linux内核、文件系统和嵌入式系统有深入的...

    arm-linux-gcc-4.4.1+Linux-2.6.31.6+busybox-1.15.1在TQ2440的移植.pdf

    在移植BusyBox 1.15.1时,虽然文档没有详细说明具体步骤,但通常涉及的流程是配置BusyBox以匹配目标硬件平台,然后使用arm-linux-gcc进行编译,最后将生成的可执行文件复制到开发板的根文件系统中。 移植过程中需要...

    ARM9开发系统上的Busybox移植

    本文将深入探讨如何在基于ARM9的开发系统上进行Busybox的移植工作,旨在帮助开发者更好地理解和实践这一过程。 首先,我们需要了解移植Busybox的基础知识。移植意味着将软件从一个平台迁移到另一个平台,对于...

    基于嵌入式ARM9的Linux系统移植的研究和实现.pdf

    本文研究了基于嵌入式ARM9的Linux系统移植的技术,涵盖了嵌入式系统的硬件平台、Linux操作系统的移植、内核裁剪、根文件系统构建、设备驱动程序开发等方面的技术细节。本文的研究成果可以为其他嵌入式平台的系统开发...

    基于S3C2440的Linux内核移植和yaffs2文件系统制作.pdf

    ### 基于S3C2440的Linux内核移植和yaffs2文件系统制作 #### 1. Linux内核基础知识 ##### 1.1 Linux版本 Linux内核版本是由一系列数字组成的,例如`2.6.29.1`。这些数字代表了不同的含义: - **主版本号**(`...

    基于S3C2440的Linux内核移植和yaffs2文件系统制作.doc

    【基于S3C2440的Linux内核移植和yaffs2文件系统制作】 在嵌入式系统开发中,Linux内核移植是至关重要的一步,尤其对于基于S3C2440这种广泛应用的微处理器。S3C2440是一款由Samsung公司设计的ARM920T内核的处理器,...

    ARM+linux新手入门手册

    通过搭建自己的ARM开发环境,比如树莓派或其它开发板,亲手进行系统移植、驱动编写和应用开发,将理论知识付诸实践,是成长为一名合格的ARM+Linux开发者的关键步骤。 总之,《ARM+Linux新手入门手册》涵盖了从硬件...

    一种制作YAFFS2嵌入式文件系统的方法

    为了在ARM处理器S3SC2440和嵌入式Linux平台上建立YAFFS2根文件系统,需要遵循一系列详细的方法步骤。这包括配置内核,使能YAFFS2文件系统的支持,以及准备文件系统的构建环境。随后,还需要将编译好的内核和文件系统...

    基于正点原子的STM32FMP157开发板的busybox根文件系统移植

    总结,基于正点原子的STM32FMP157开发板移植BusyBox根文件系统的过程包括:下载并配置BusyBox源码、创建文件系统布局、编写init脚本、打包文件系统映像以及烧录到开发板。这个过程中需要注意硬件平台的兼容性、软件...

    mini2440开发板的根文件系统busybox(root),yaffs2格式

    mini2440开发板的根文件系统busybox(root),yaffs2格式

    基于arm-linux平台的mini2440开发板的MP3项目

    1. **环境配置**:首先,你需要在Mini2440开发板上安装基于ARM的Linux发行版,例如Uboot、 BusyBox和Linux内核等。确保系统中包含了madplay的源码或者二进制包。 2. **编译madplay**:如果源码可用,需要在开发板上...

    ARM的嵌入式Linux操作系统移植

    移植Linux操作系统到ARM平台是开发这些设备的重要步骤。本文将深入探讨ARM的嵌入式Linux操作系统移植的相关知识点。 1. **ARM架构理解**: ARM(Advanced RISC Machines)是一种精简指令集计算机(RISC)架构,其...

Global site tag (gtag.js) - Google Analytics