Yaffs2 文件系统移植


Yaffs2 文件系统移植 原创-ARM9 2009-10-16 16:37:01 阅读 618 评论 1 字号:大中小 订阅 一.准备工作 1、yaffs2 源代码获取 进入 http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/ ,点击“Download GNU tarball”,下载后出现 cvs-ro ot.tar.gz 压缩包。 2、busybox-1.13.3 从 http://www.busybox.net/downloads/ 下载 busybox,这里下载的是 busy busybox-1.13.3.tar.gz。 3、根文件系统制作工具 从 http://www.arm9.net/ 网站下载根文件系统制作工具 mkyaffs2image.tgz。 4、友善之臂的根文件系统 在制作根文件系统时,需要用到链接库,为保证链接库能用直接用友善之臂的根文件系统 root_qtopia 中的链接库 lib,到友善之臂网站 http://www.arm9.net/ 下载 root_qtopia.tgz。 5、 给内核打 yaffs2 文件系统的补丁 cd /opt/stdudyarm/source tar –zxvf cvs-root.tar.gz –C /opt/studyarm cd /opt/stdudyarm/cvs/yaffs2/ ./patch-ker.sh c /opt/studyarm/linux-2.6.29.1/ 上面命令完成下面三件事情: (1) 修改内核 fs/Kconfig 增加一行:source "fs/yaffs2/Kconfig" (2) 修改内核 fs/Kconfig 增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/ (3) 在内核 fs/目录下创建 yaffs2 目录 将 yaffs2 源码目录下面的 Makefile.kernel 文件复制为内核 fs/yaffs2/Makefie; 将 yaffs2 源码目录的 Kconfig 文件复制到内核 fs/yaffs2 目录下; 将 yaffs2 源码目录下的*.c *.h 文件复制到内核 fs/yaffs2 目录下. 6 配置 Linux 内核 选择支持 yaffs2 文件系统 Filesystem---> Miscellaneous filesystems---> <*>YAFFS2 file system support [*] Lets Yaffs do its own ECC Native language support <*> Codepage 437 (United States,Canada) <*>Simplified Chinese charset(GB2312) <*>Traditional Chinese charset(Big5) <*>NLS ISO 8859-1(Latin1:Western European Languages) <*>NLS UTF-8 编译内核 make zImage 二.制作根文件系统 2.1 嵌入式 Linux 中都需要构建根文件系统,构建根文件系统的规则在 FHS(Filesystem Hierarchy Standard)文档中,下面是根文件系统顶层目录。 目录 内容 bin 存放所有用户都可以使用的、基本的命令。 sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。 usr 里面存放的是共享、只读的程序和数据。 proc 这是个空目录,常作为 proc 文件系统的挂载点。 dev 该目录存放设备文件和其它特殊文件。 etc 存放系统配置文件,包括启动文件。 lib 存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。 boot 引导加载程序使用的静态文件 home 用户主目录,包括供服务账号锁使用的主目录,如 FTP mnt 用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。 opt 给主机额外安装软件所摆放的目录。 root root 用户的主目录 tmp 存放临时文件,通常是空目录。 var 存放可变的数据。 2.2、构建根文件按系统 2.2.1、建立根文件系统目录 进入到/opt/studyarm 目录,新建建立根文件系统目录的脚本文件 create_rootfs_bash,使用命令 chmod +x create_rootfs_bash 改变文件的可执行权限,./create_rootfs_bash 运行脚本,就完成了根文件 系统目录的创建。 #!/bin/sh echo "------Create rootfs directons start...--------" mkdir rootfs cd rootfs echo "--------Create root,dev....----------" mkdir root dev etc boot tmp var sys proc lib mnt home mkdir etc/init.d etc/rc.d etc/sysconfig mkdir usr/sbin usr/bin usr/lib usr/modules echo "make node in dev/console dev/null" mknod -m 600 dev/console c 5 1 mknod -m 600 dev/null c 1 3 mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/run var/tmp chmod 1777 tmp chmod 1777 var/tmp echo "-------make direction done---------" 改变了 tmp 目录的使用权,让它开启 sticky 位,为 tmp 目录的使用权开启此位,可确保 tmp 目录底 下建立的文件,只有建立它的用户有权删除。尽管嵌入式系统多半是单用户,不过有些嵌入式应用不一定 用 root 的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。 2.2.2、建立动态链接库 动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝 lib 的内容到新建的根文件目录 lib 内。 cd /mnt/hgfs/share tar –zxvf root_qtopia.tgz –C /opt/studyarm cp –rfd /opt/studyarm/root_qtopia/lib/* /opt/studyarm/rootfs/lib/* 2.2.3 交叉编译 Bosybox Bosybox 是一个遵循 GPL v2 协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统 资源有限(比如内存等)的情况,使用 Busybox 可以自动生成根文件系统所需的 bin、sbin、usr 目录和 linuxrc 文件。 1、解压 busybox cd /mnt/hgfs/share tar –zxvf busybox-1.13.3.tar.tgz –C /opt/studyarm 2、进入源码,修改 Makefile 文件: cd /opt/studyarm/busybox-1.13.3 修改: CROSS_COMPILE ?=arm-linux- //第 164 行 ARCH ?=arm //第 189 行 3、配置 busybox 输入 make menuconfig 进行配置 (1)、Busybox Settings---> General Configuration---> [*] 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.config [*] Suppress warning message if /etc/busybox.conf is not readable Build Options---> [*] Build BusyBox as a static binary(no shared libs) [*] Build with Large File Support(for accessing files>2GB) Installation Options-> []Don’t use /usr Applets links (as soft-links) ---> (./_install) BusyBox installation prefix Busybox Library Tuning ---> (6)Minimum password legth (2)MD5:Trade Bytes for Speed [*]Fsater /proc scanning code(+100bytes) [*]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 (2)、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 modules.symbols file (3)、在 busybox 中配置对 dev 下设备类型的支持 dev 的创建有三种方法: 手动创建:在制作根文件系统的时候,就在 dev 目录下创建好要使用的设备文件,系统挂接根文件 系统后,就可以使用 dev 目录下的设备文件了。 使用 devfs 文件系统:这种方法已经过时,具有不确定的设备映射、没有足够的主/次设备号、devfs 消耗大量的内存。 udev:它是个用户程序,能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、 删除等。它的操作相对复杂,但灵活性很高 mdev 是 busybox 自带的一个简化版的 udev,适合于嵌入式的应用埸合。其具有使用简单的特点。 它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以 busybox 为基础构建嵌入式 linux 的根文件系统时,使用它是最优的选择。下面的选项将增加对 mdev 的支 持。 Linux System Utilities ---> [*]Support /etc/mdev.conf [*]Support command execution at device addition/removal 4、 编译 busybox 编译 busybox 到指定目录: cd /opt/studyarm/busybox-1.13.3 make CONFIG_PREFIX=/opt/studyarm/rootfs install 在 rootfs 目录下会生成目录 bin、sbin、usr 和文件 linuxrc 的内容。 2.2.4 建立 etc 目录下的配置文件 1、etc/mdev.conf 文件,内容为空。 2、拷贝主机 etc 目录下的 passwd、group、shadow 文件到 rootfs/etc 目录下。 3、etc/sysconfig 目录下新建文件 HOSTNAME,内容为”H3-Studio”。 4、etc/inittab 文件: #etc/inittab ::sysinit:/etc/init.d/rcS s3c2410_serial0::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a –r 5、etc/init.d/rcS 文件: #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel echo "----------munt all----------------" mount -a echo /sbin/mdev>/proc/sys/kernel/hotplug mdev -s echo "***********************************************" echo "****************Studying ARM*********************" echo "Kernel version:linux-2.6.29.1" echo "Student:Huang huahai" echo "Date:2009.10.1" echo "***********************************************" /bin/hostname -F /etc/sysconfig/HOSTNAME (或者直接 /bin/hostname H3-Studio ) 使用以下命令改变 rcS 的执行权限: Chmod +x rcS 6、etc/fstab 文件: #device mount-point type option dump fsck order proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 mdev /dev ramfs defaults 0 0 7、 etc/profile 文件: #Ash profile #vim:syntax=sh #No core file by defaults #ulimit -S -c 0>/dev/null 2>&1 USER="id -un" LOGNAME=$USER PS1='[\u@\h=W]#' PATH=$PATH HOSTNAME='/bin/hostname' export USER LOGNAME PS1 PATH 2.2.5 制作根文件系统映像文件 使用以下命令安装好 yaffs 文件系统制作工具: cd /mnt/hgfs/share tar –zxvf mkyaffs2image.tgz –C / 在/opt/studyarm 目录下,使用命令 mkyaffs2image rootfs rootfs.img 生成根文件系统映像文件。 启动信息: Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done zImage magic = 0x016f2818 Setup linux parameters at 0x30000100 linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 782 NOW, Booting Linux...... Uncompressing Linux........................................................................................................................... done, booting the kernel. Linux version 2.6.29.1 (root@FriendlyARM) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #2 Thu Oct 1 16:46:24 JST 2009 CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177 CPU: VIVT data cache, VIVT instruction cache Machine: Study-S3C2440 ATAG_INITRD is deprecated; please update your bootloader. Memory policy: ECC disabled, Data cache writeback CPU S3C2440A (id 0x32440001) S3C24XX Clocks, (c) 2004 Simtec Electronics S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256 Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 irq: clearing subpending status 00000003 irq: clearing subpending status 00000002 PID hash table entries: 256 (order: 8, 1024 bytes) Console: colour dummy device 80x30 console [ttySAC0] enabled Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) Memory: 64MB = 64MB total Memory: 60828KB available (3556K code, 302K data, 156K init) Calibrating delay loop... 201.93 BogoMIPS (lpj=504832) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok net_namespace: 716 bytes NET: Registered protocol family 16 S3C2410 Power Management, (c) 2004 Simtec Electronics S3C2440: Initialising architecture S3C2440: IRQ Support S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics DMA channel 0 at c4808000, irq 33 DMA channel 1 at c4808040, irq 34 DMA channel 2 at c4808080, irq 35 DMA channel 3 at c48080c0, irq 36 S3C244X: Clock Support, DVS off bio: create slab at 0 SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 2048 (order: 2, 16384 bytes) TCP bind hash table entries: 2048 (order: 1, 8192 bytes) TCP: Hash tables configured (established 2048 bind 2048) TCP reno registered NET: Registered protocol family 1 NetWinder Floating Point Emulator V0.97 (extended precision) JFFS2 version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc. yaffs Oct 1 2009 16:45:43 Installing. msgmni has been set to 118 io scheduler noop registered io scheduler anticipatory registered (default) io scheduler deadline registered io scheduler cfq registered Console: switching to colour frame buffer device 30x40 fb0: s3c2410fb frame buffer device lp: driver loaded but no devices found ppdev: user-space parallel port driver Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440 s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440 s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440 brd: module loaded loop: module loaded dm9000 Ethernet Driver, V1.31 Uniform Multi-Platform E-IDE driver ide-gd driver 1.18 ide-cd driver 5.00 Driver 'sd' needs updating - please use bus_type methods S3C24XX NAND Driver, (c) 2004 Simtec Electronics s3c2440-nand s3c2440-nand: Tacls=1, 9ns Twrph0=4 39ns, Twrph1=1 9ns NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit) Scanning device for bad blocks Bad eraseblock 3339 at 0x00000342c000 Creating 8 MTD partitions on "NAND 64MiB 3,3V 8-bit": 0x000000000000-0x000000030000 : "bootloder" 0x000000050000-0x000000250000 : "kernel" 0x000000250000-0x000003ffc000 : "root" 0x000000800000-0x000000a00000 : "S3C2410 flash partition 3" 0x000000a00000-0x000000e00000 : "S3C2410 flash partition 4" 0x000000e00000-0x000001800000 : "S3C2410 flash partition 5" 0x000001800000-0x000003000000 : "S3C2410 flash partition 6" 0x000003000000-0x000004000000 : "S3C2410 flash partition 7" usbmon: debugfs is not available ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver s3c2410-ohci s3c2410-ohci: S3C24XX OHCI s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1 s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000 usb usb1: configuration #1 chosen from 1 choice hub 1-0:1.0: USB hub found hub 1-0:1.0: 2 ports detected usbcore: registered new interface driver libusual usbcore: registered new interface driver usbserial USB Serial support registered for generic usbcore: registered new interface driver usbserial_generic usbserial: USB Serial Driver core USB Serial support registered for FTDI USB Serial Device usbcore: registered new interface driver ftdi_sio ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver USB Serial support registered for pl2303 usbcore: registered new interface driver pl2303 pl2303: Prolific PL2303 USB to serial adaptor driver mice: PS/2 mouse device common for all mice S3C24XX RTC, (c) 2004,2006 Simtec Electronics s3c2440-i2c s3c2440-i2c: slave address 0x10 s3c2440-i2c s3c2440-i2c: bus frequency set to 98 KHz s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled TCP cubic registered NET: Registered protocol family 17 RPC: Registered udp transport module. RPC: Registered tcp transport module. drivers/rtc/hctosys.c: unable to open rtc device (rtc0) yaffs: dev is 32505858 name is "mtdblock2" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.2, "mtdblock2" yaffs: block 3191 is marked bad block 3192 is bad yaffs_read_super: isCheckpointed 0 VFS: Mounted root (yaffs filesystem) on device 31:2. Freeing init memory: 156K ------mount all------ ************************************ **********studyARM****************** Kernel version:linux-2.6.29.1 Student:Huang huahai Data:2009.10.1 *********************************** Please press Enter to activate this console. 看到了,ok!
还剩10页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

roger20

贡献于2014-02-26

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf