arm linux 根文件系统,yaffs2文件系统,reboot后修改的文件内容恢复?

博客访问: 16717
博文数量: 15
博客积分: 0
博客等级: 民兵
技术积分: 14
注册时间:
分类: 嵌入式 23:33:01
原文地址: 作者:
&& 上一篇文章移植的Linux内核,不过还不能正常的启动Linux操作系统,这需要根文件系统的支持。这篇文章就是关于如何制作根文件系统的。&& 现在大部分开发板都可以支持yaffs2 文件系统,它是专门针对嵌入式设备,特别是使用 nand flash作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs 仅支持小页(512byte/page)的nand flash,,使用 yaffs2 就可以支持大页的 nand flash。&& 所谓的根文件系统,就是创建各个目录,并且在里面创建各种文件,比如在/bin,/sbin/目录下存放各种可执行的程序,在/etc目录下存放配置文件,在/lib目录下存放库文件,下面就可以文件系统的移植。一、准备工作1、&Yaffs2源代码的获取 在 http://www.yaffs.net/node/346 可以下载到最新的yaffs2 源代码, 如果使用git工具,在命令行输入:
#git clone git://www.aleph1.co.uk/yaffs2 就可以下载到yaffs2的源代码,到当前目录下。2、下载Busybox-1.13.3& 可以从http://www.busybox.net/downloads/下载Busybox-1.13.33、下载Yaffs2的制作工具&&& 可以到友善之臂的网站下载,mkyaffs2image.tgz,其中解压出来有两个可执行的文件,一个是针对小页的,一个是针对NandFlash为128MB,大页的,其名字为mkyaffs2image-128M,一开始在这里犯了错误,我的NandFlash是128MB的,可以按照网上用的是mkyaffs2image文件,所以老是出来假坏块的提示,仔细一分析,NandFlash不可能一下子出来这么多的坏块,而且我用他们公司提供的根文件系统却没有任何的问题,所以问题处在了制作Yaffs2的工具上面。因为这两种大小NandFlash的ECC校验是不一样的,也就是spare区的大小是不一样的,造成了ECC校验出错。4、链接库& 制作根文件系统时,要使用到链接库,这里直接使用友善之臂根文件系统中的链接库。从网站下载root_qtopia.tgz。 使用lib目录下的链接库。5、给内核打上YAffs2补丁&&& 然后进入 yaffs2 源代码目录执行:
#cd yaffs2&#./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32.2
此时进入 linux-2.6.32.2/fs 目录,可以看到已经多了一个 yaffs2 目录。 上面命令完成下面三件事情:(1) 修改内核fs/Kconfig&&& 增加一行:source "fs/yaffs2/Kconfig"(2) 修改内核fs/Kconfig&&& 增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/(3) 在内核fs/目录下创建yaffs2目录&&& 将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/M&& 将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下;&&& 将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.6、配置内核以支持Yaffs2文件系统&&& 在 Linux内核源代码根目录运行:make xconfig,找到 File Systems如图,再找到“Miscellaneous filesystems”菜单项,找到“YAFFS2 file system support” ,并选中它,这样我们就在内核中添加了yaffs2 文件系统的支持,保存退出。然后在命令行中,执行make zImage,这时不要在执行mage mini2440_defconfig 了,如果再执行的话,前面的配置就失效了,在这我也犯了一个低级的错误。
500)this.width=500;">
二、&构建根文件系统& 1、根文件系统的目录结构&&&& bin 存放所有用户都可以使用的、基本的命令。sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。usr 里面存放的是共享、只读的程序和数据。proc 这是个空目录,常作为proc文件系统的挂载点。dev 该目录存放设备文件和其它特殊文件。etc 存放系统配置文件,包括启动文件。lib 存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。boot 引导加载程序使用的静态文件home 用户主目录,包括供服务账号锁使用的主目录,如FTPmnt 用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。opt 给主机额外安装软件所摆放的目录。root root用户的主目录tmp 存放临时文件,通常是空目录。var 存放可变的数据。 2、建立根文件系统的目录,&&& 进入opt/kernel,创建一个shell的脚本用于构建根文件系统的各个目录。create_rootfs_bash,平且改变执行的权限。
sudo chmod +x create_rootfs_bash在kernel目录下,运行./create_rootfs_bash,其脚本的内容如下:
#!/bin/shecho "------Create rootfs directons start...--------"mkdir rootfscd rootfsecho "--------Create root,dev....----------"mkdir root dev etc boot tmp var sys proc lib mnt homemkdir etc/init.d etc/rc.d etc/sysconfigmkdir usr/sbin usr/bin usr/lib usr/modulesecho "make node in dev/console dev/null"mknod -m 600 dev/console c 5 1mknod -m 600 dev/null c 1 3mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/tempmkdir var/lib var/lock var/run var/tmpchmod 1777 tmpchmod 1777 var/tmpecho "-------make direction done---------" 改变了tmp目录的使用权,让它开启sticky位,为tmp目录的使用权开启此位,可确保tmp目录底下建立的文件,,只有建立它的用户有权删除。3、建立动态的链接库&&& 动态链接库直接使用友善之臂的,首先,下载友善之臂的根文件系统解压后得到root_qtopia,把该文件下的Lib下的文件全部复制到我们自己建立的lib/文件夹下。4、编译和安装Busybox&& Bosybox 是一个遵循 GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用 Busybox 可以自动生成根文件系统所需的bin、sbin、usr 目录和 linuxrc 文件。& 解压Busybox,然后
cd busybox-1.13.3
//修改该目录下的makefile文件,修改平台为arm平台,修改编译器为默认的交叉编译器
CROSS_COMPILE ?=arm-linux-&& //大约在164行
ARCH ?=arm&&&&&&&&&&&&&& //大约在189行
配置busybox,在busybox-1.13.3目录下,这里我们只关心改动的地方。执行make xconfig,其各个选项的配置界面如下。
500)this.width=500;">
500)this.width=500;">
500)this.width=500;">
下图配置Linux Modeul Utilities
500)this.width=500;">
3、在busybox中配置对dev下设备类型的支持 dev的创建有三种方法: (1)手动创建:在制作根文件系统的时候,就在 dev目录下创建好要使用的设备文件,系统挂接根文件系统后,就可以使用 dev目录下的设备文件了。& (2)使用 devfs 文件系统:这种方法已经过时,具有不确定的设备映射、没有足够的主/次设备号、devfs 消耗大量的内存。& (3)udev:它是个用户程序,(u是指user space ,dev 是指device)能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、删除等。使用udev机制也不需要/dev目录下创建设备节点,它需要一些用户程序的支持,并且内核要支持sysfs文件系统。它的操作相对复杂,但灵活性很高& && mdev 是 busybox 自带的一个简化版的 udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox 为基础构建嵌入式linux 的根文件系统时,使用它是最优的选择。下面的选项将增加对 mdev的支持。& 4、编译busybox&& 编译 busybox 到指定目录:& cd /opt/kernel/busybox-1.13.3& make CONFIG_PREFIX=/opt/kernel/rootfs install& 在 rootfs 目录下会生成目录 bin、sbin、usr 和文件 linuxrc 的内容。5、 建立etc目录&init进程根据/etc/inittab文件来创建其他的子进程,比如调用脚本文件配置IP地址,挂载其他的文件系统,最后启动shell等。(1)、拷贝主机 etc 目录下的passwd、group、shadow文件到 rootfs/etc目录下。(2) etc/sysconfig目录下新建文件HOSTNAME,内容为”frank” 。& (3) etc/inittab文件:& & 仿照Busybox的examples/inittab文件,在etc/目录下创建一个inittab文件.开发板上通过mdev生成胡/dev目录中,S3C2440的串口名是s3c2410_serial0、s3c2410_serial1、s3c2410_serial2,而不是ttySAC0 ttySAC1 ttySAC2.
#etc/inittab::sysinit:/etc/init.d/rcSs3c2410_serial0::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r6、创建etc/init.d/rcS文件:这是一个脚本文件,可以在里面添加自动执行的命令,
#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=S&&&&& //运行的级别prevlevel=Numask 022&& //文件夹的掩码export PATH runlevel prevlevelecho"--------- munt all--------"mount -a&&&& //挂载/etc/fstab/文件指定的所有的文件系统echo /sbin/mdev>/proc/sys/kernel/hotplugmdev -secho "*************************"echo "**********************frank ARM**************"echo "Kernel version:linux-2.32.2"echo "Author:frank"echo "Data:"echo "***********************"/bin/hostname -F /etc/sysconfig/HOSTNAME //主机的名字最后,还要改变它的属性,使它能够运行
sudo chmod +x etc/init.d/rcS7、创建etc/fstab文件: & 内容如下,表示执行完,“mount -a”命令后将挂载proc,tmpfs 等包含在该文件中的所有的文件系统。
#device mount-point type option dump fsck orderproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0none /tmp ramfs defaults 0 0sysfs /sys sysfs defaults 0 0mdev /dev ramfs defaults 0 0/etc/fstab/文件被用来定义文件系统的“静态信息”,这些信息被用来控制mount命令的行为,各个字段的寒酸以如下:device: 要挂载的设备&& 比如/dev/hda2 /dev/mtdblock1 等设备文件,也可以是其他格式的,比如对于proc文件系统这个字段就没有意义,可以就任意的值,对于NFS文件系统,这个字段是,:.mount-point: 挂载点type 文件系统类型&& 比如 proc,jffs2,yaffs,ext2 ,nfs等,也可以是auto,表示自动检测文件系统类型options: 挂接参数,以逗号隔开/etc/fstab的作用不仅仅是用来控制'mount -a'的行为,即使是一般的mount命令,也受它的控制,常用的取值还有 auto noauto user 只允许普通用户挂载设备 nouser exec 允许运行所挂载设备上的程序 noexec Ro 只读方式 rw 以读写的方式 sync 修改文件是,它会同步写入设备中 async 不同步& defaults rw suid dev exec auto nouser async 等的组合。& dump 和fsck order:用来控制dump fsck程序的行为dump是一个用来备份的文件的程序,fsck是一个用来检查磁盘的程序,8、&创建etc/profile文件:
#Ash profile#vim:syntax=sh#No core file by defaults#ulimit -S -c 0>/dev/null 2>&1USER="id -un"LOGNAME=$USERPS1='[\u@\h=W]#'PATH=$PATHHOSTNAME='/bin/hostname'export USER LOGNAME PS1 PATH三、&制作根文件系统映像文件&&& 在前面也已经讲过,我的NandFlash是128MB的,所以要使用,友善之臂的mkyaffs2image-128这个可执行的文件生成映像文件 使用命令mkyaffs2image&rootfs&rootfs.img生成根文件系统映像文件。把生成的rootsfs.img文件下载到nandFlash中的根文件系统区。然后从NANDFlash启动可以看到的信息如下:
load Image of Linux...Uncompressing Linux.................Linux version 2.6.32.2 (zfz@zfz) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-70CPU: ARM920T [] revision 0 (ARMv4T), cr=c0007177 CPU: VIVT data cache, VIVT instruction cache Machine: FriendlyARM MINI2440 development board ATAG_INITRD is deprecated; please update your bootloader. Memory policy: ECC disabled, Data cache writeback CPU S3C2440A (id 0x) 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/mtdblock3 init=/linuxrc console=ttySAC0 PID hash table entries: 256 (order: -2, 1024 bytes) 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: 60500KB available (3672K code, 418K data, 132K init, 0K highmem) SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 Hierarchical RCU implementation. NR_IRQS:85 irq: clearing subpending status
Console: colour dummy device 80x30 console [ttySAC0] enabled Calibrating delay loop... 201.93 BogoMIPS (lpj=504832) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok NET: Registered protocol family 16 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 <bio-0> at 0 usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb s3c-i2c s3c2440-i2c: slave address 0x10 s3c-i2c s3c2440-i2c: bus frequency set to 98 KHz s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter 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 RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. JFFS2 version 2.2. (NAND) ?&#169; 2001-2006 Red Hat, Inc. ROMFS MTD (C) 2007 Red Hat, Inc. yaffs Apr 20 2010 11:10:26 Installing. msgmni has been set to 118 alg: No test for stdrng (krng) io scheduler noop registered io scheduler anticipatory registered (default) io scheduler deadline registered io scheduler cfq registered s3c2410-lcd s3c2410-lcd: no platform data for lcd, cannot attach s3c2410-lcd: probe of s3c2410-lcd failed with error -22 s3c2440-uart.0: s3c2410_serial0 at MMIO 0x (irq = 70) is a S3C2440 s3c2440-uart.1: s3c2410_serial1 at MMIO 0x (irq = 73) is a S3C2440 s3c2440-uart.2: s3c2410_serial2 at MMIO 0x (irq = 76) is a S3C2440 brd: module loaded S3C24XX NAND Driver, (c) 2004 Simtec Electronics s3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns s3c24xx-nand s3c2440-nand: NAND soft ECC NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-b)Scanning device for bad blocks Creating 5 MTD partitions on "NAND 128MiB 3,3V 8-bit": 0x-0x : "U-boot" 0x-0x : "param" ftl_cs: FTL header not found. 0x-0x : "Kernel" uncorrectable error : 0x-0x : "root" mtd: partition "root" extends beyond the end of device "NAND 128MiB 3,3V 8-bit"0ftl_cs: FTL header not found. 0x-0x : "nand" mtd: partition "nand" extends beyond the end of device "NAND 128MiB 3,3V 8-bit"0dm9000 Ethernet Driver, V1.31 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 0x 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 mice: PS/2 mouse device common for all mice S3C24XX RTC, (c) 2004,2006 Simtec Electronics i2c /dev entries driver S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled cpuidle: using governor ladder sdhci: Secure Digital Host Controller Interface driver sdhci: Copyright(c) Pierre Ossman usbcore: registered new interface driver hiddev usbcore: registered new interface driver usbhid usbhid: v2.6:USB HID core driver Advanced Linux Sound Architecture Driver Version 1.0.21. No device for DAI UDA134X No device for DAI s3c24xx-i2s ALSA device list: &&No soundcards found. TCP cubic registered NET: Registered protocol family 17 drivers/rtc/hctosys.c: unable to open rtc device (rtc0) yaffs: dev is
name is "mtdblock3" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.3, "mtdblock3" yaffs: auto selecting yaffs2 yaffs_read_super: isCheckpointed 0 VFS: Mounted root (yaffs filesystem) on device 31:3. Freeing init memory: 132K /etc/init.d/rcS: line 7: echo--------- munt all--------: not found ************************* **********************Frankzfz ARM************** Kernel version:linux-2.32.2 Student:zfz Data:2010,4,19 *********************** &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Please press Enter to activate this console. [root@"Frankzfz"=W]#
现在终于可以看到激动人心的下面这句话了,表明你有Linux系统已经可以正常的启动了。
Please press Enter to activate this console.&不过现在只是一个最基本的Linux系统,里面的驱动程序还没有,网上驱动,LCD驱动等等,所以还有很多的东西要移植呢。这也是下一步的任务。
阅读(443) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。页脚----网易公司版权所有 &
杭州康宁光缆有限公司,是一家大型的光缆生产企业,注册资金5000万人民币,主要销售GYTA光缆,GYTS光缆,GYTA53光缆,GYFTA53光缆,GYXTW光缆等,销售区域辐射全国。随着近年来的电子商务兴起,公司逐渐向着工厂直销模式转变,让利于广大客户,欢迎大家光临选购。
TEL:136-ADD:浙江省杭州市余杭区临平大道633号没有更多推荐了,
不良信息举报
举报内容:
yaffs2文件系统移植
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!linux在TQ2440上移植4--yaffs2文件系统制作pdf下载_爱问共享资料
linux在TQ2440上移植4--yaffs2文件系统制作.pdf
linux在TQ2440上移植4--yaffs2文件系统制作.pdf
linux在TQ2440上移植4--yaffs2文件系统制作.…
简介:本文档为《linux在TQ2440上移植4--yaffs2文件系统制作pdf》,可适用于IT/计算机领域,主题内容包含联系方式:QQ,danpianjikaifaqqcom个人提供单片机嵌入式培训PLC学习视频电子元件销售PLC销售以及PLC和DCS周边产品开发、m符等。
侵权或盗版
*若权利人发现爱问平台上用户上传内容侵犯了其作品的信息网络传播权等合法权益时,请按照平台要求书面通知爱问!
赌博犯罪类
121人已下载
在此可输入您对该资料的评论~
添加成功至
资料评价:}

我要回帖

更多关于 arm linux 根文件系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信