当前位置:文档之家› ubifs文件系统制作

ubifs文件系统制作

ubifs文件系统制作
ubifs文件系统制作

ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之一“uboot中添加对UBIFS文件系统的支持”

分类:嵌入式 2012-04-18 21:34 314人阅读评论(0) 收藏举报为了更好的理解ubifs根文件系统的制作,首先,我们简单的说一下,系统的组成:

bootloader(uboot)的作用就是用来加载操作系统;而嵌入式linux系统由linux内核和根文件系统两部分构成,两者缺一不可。

所以我们要制作一个UBIFS的根文件系统,首先必须让上面系统组成的几个部分都支持UBIFS文件系统,就得在这几个组成部分添加一些“东西”(支持UBI的配置):

(打个我自己理解的比喻吧:“娶媳妇”比作--启动系统,娶媳妇是不是要经过老爸、老妈、丈母娘、岳父的同意和支持?bootloader、parames、kernel、root Filesystem便是老爸、老妈、丈母娘、岳父...O(∩_∩)O~,而你叫"UBI")这篇博文主要是详细解析:uboot中添加对UBIFS文件系统的支持

一、移植环境

§主机:vmware-redhat5

§开发板:mini2440--256MB nandflash

§kernel:2.6.29编译器:arm-linux-gcc-4.3.2.tgz

§uboot: u-boot-2008.10

二.移植步骤

本次移植的功能为:支持UBIFS文件系统

1.在include/configs/mini2440.h中添加如下配置:(注意:不同的开发板在include/configs/目录下对应的修改的配置文件不同,我的开发板是mini2440所以修改的是mini2440.h)

#define CONFIG_MTD_DEVICE

#define CONFIG_MTD_PARTITIONS

#define CONFIG_CMD_MTDPARTS

#define CONFIG_LZO

#define CONFIG_RBTREE

#define CONFIG_CMD_UBIFS //要支持ubIfs首先得让uboot支持UBIFS的烧写命令

#define CONFIG_CMD_UBI //uboo支持的ubifs烧写命令:1.mtdparts: 用来给NAND分区;

/*2.nand erase.part:用来擦除指定分区等这些命令在“UBIFS镜像的制作&&烧写”博文理解*/

//其次要支持MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统

#define MTDIDS_DEFAULT "nand0=nandflash0" //同时要给nandlflash建立默认的分区,

#define MTDPARTS_DEFAULT

"mtdparts=nandflash0:384k(bootloader),"\ //我的分区:

"128k(params)," \

"5m(kernel),"\ "64m(root)"

/*还要修改下面几个宏,因为使用UBIFS会占用更多的堆、栈空间*/

#define CONFIG_STACKSIZE (512*1024)

#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE+1024*1024)

#define CONFIG_SYS_GBL_DATA_SIZE 512

2.回到uboot的顶层目录下

(可能拿到的uboot已被编译过,所以最好要用此命令清理中间文件)

执行命令:make clean

(uboot是通用的bootloader,支持多种开发板,所以编译之前先选择使用哪种board)

执行命令:make mini2440_config

注意:我用的是mini2440开发板,所以要编译这个开发板使用的uboot,所以这里的目标为mini2440_config,表示选择的board是mini2440

(mini2440_config在Makefile标准术语称为“目标”,可以在uboot顶层Makefile 找到该目标)

执行命令(开始编译uboot):make CROSS_COMPILE=arm-linux-

ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之二“Linux内核中添加对UBIFS文件系统的支持”

分类:嵌入式 2012-04-19 13:55 156人阅读评论(0) 收藏举报一、移植环境

§主机:vmware-redhat5

§开发板:mini2440--256MB nandflash

§kernel:2.6.29编译器:arm-linux-gcc-4.3.2.tgz

§uboot: u-boot-2008.10

二.移植步骤

1.在内核顶层目录下使用命令:make menuconfig ,进入内核配置菜单,添加对UBIFS文件系统的支持。

(补充:如果菜单里没有<>UBIFS file system support的选项,一般2.6.27以上的内核已经支持了UBIFS,所以只需把内核顶层目录下的.config文件里的#CONFIG_MTD_UBI is not set 设置成:CONFIG_MTD_UBI=y)如图:

之后退出.config文件并保存。

再次进入make menuconfig 菜单这时已经有了<>UBIFS file system support的选项,把它设为<*>UBIFS file system support "*"是编译进内核的意思

2.在 arch/arm/plat-s3c24xx/common-friendly-arm.c中,添加对NAND Flash 的MTD分区。如图:49-70行为修改部分

(注意:对应不同开发板路径和分区文件会有所不同,方正就是在

arch/arm/mach-s3c2440 或者arch/arm/plat 下面的某个文件;我原来就是因为弄错了路径和分区文件所以导致和uboot的默认分区对不上号,所以启动出错,大家可以参考我曾经的出错获得一些启示:

https://www.doczj.com/doc/c411242025.html,/read.php?tid-19717.html)

之后,退出保存;

3.回到内核顶层目录之后,

使用命令:make uImage ARCH=arm CROSS_COMPILE=arm-linux- ,编译内核,在arch/arm/boot/目录下生成内核的镜像uImage,并将生成的uImage 拷贝到/tftpboot/ 目录下等待下载烧写。

[注意:若没有生成uImage,看编译内核的提示说mkimage命令没有发现(找不到),说明你的系统中没有安装mkimage工具;

解决办法:在uboot 中我们知道mkimage是用来产生u-boot格式映像文件的,所以可以在u-boot源代码(编译之后)中把mkimage拷贝到/bin文件目录下。具体操作:我们从u-boot顶层目录下的tools目录中的mkimage拷贝到

/usr/bin中,然后重新编译一次内核(即重新执行步骤3的命令)]

ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之三“UBIFS镜像的制作&&烧写”

分类:嵌入式 2012-04-19 16:23 254人阅读评论(0) 收藏举报

一、移植环境

§主机:vmware-redhat5

§开发板:mini2440--256MB nandflash

§kernel:2.6.29编译器:arm-linux-gcc-4.3.2.tgz

§uboot: u-boot-2008.10

二、制作ubifs镜像

步骤1:将文件系统制作成 ubifs镜像文件,需要使用mkfs.ubifs工具,该工具可以在网址:https://www.doczj.com/doc/c411242025.html,/mtd-utils.git,下载mtd-utils工具包源码编译后获得。

在安装mtd-utils之前首先在系统中安装如下两个软件:

(因为原先我看一些博文给的地址都不可访问,只好按名称东下一个西下一个,编译后都出错没法解决,特此提醒,后来暮然回首,在我的以前做过的文件系统中找到了以下三个经编译后可成功生成ubifs命令工具,(现放我资源里,提供给大家)请放心下载)

a.安装libacl,(我资源里)下载地址:https://www.doczj.com/doc/c411242025.html,/detail/yx_l128125/4243336输入命令:rpm -ivh libacl-2.2.23-5.4.e14.i386.rpm

b.安装lzo-2.05, (我资源里)下载地址:

https://www.doczj.com/doc/c411242025.html,/detail/yx_l128125/4243343

执行如下命令:

# tar zxvf lzo-2.05.tar.gz

# cd lzo-2.05

# ./configure

# make

# make install

c.安装 mtd-utils.tar.gz (我资源里)下载地址:

https://www.doczj.com/doc/c411242025.html,/detail/yx_l128125/4243333

# tar zxvf mtd-utils.tar.gz

# cd mtd-utils

# ./configur

# make

# make install

步骤2.使用上述安装命令后,mkfs.ubifs被安装到了/usr/local/usr/sbin目录下,可使用命令:export PATH=$PATH:/usr/local/usr/sbin将该路径包含进环境变量,

然后使用命令:mkfs.ubifs -m 2048 -c 2048

-e 126976 -r /nfsroot/rootfs -o rootfs.bin ,将根文件系统所在目录rootfs制作为ubifs镜像文件rootfs.bin,将该文件拷贝到/tftpboot/目录下等待下载烧写。(注意,你在哪执行这个命令,生成的.bin镜像就在执行此命令的当前目录下生成)

【注意点:1.上面制作的ubifs镜像文件使用的命令参数是根据开发板所使用的NAND Flash来确定的,我的NAND Flash容量是256MB,可以适应命令:mkfs.ubifs -h 来查看各个命令选项的意思,我这里只简单的介绍一下:

-r :要制作成镜像的根文件系统的路径

-m:最小的I/O操作的大小(也就是NAND FLASH的一个page的大小)

-e : 逻辑擦除块的大小

-p :物理擦除块的大小

-c :最大逻辑擦除块的数量

-o :最终制作成的根文件镜像的文件名

注意点:2.我原来用mkfs.ubifs -m 2048 -c 2048

-e 126976 -r /nfsroot/rootfs -o rootfs.bin 制作成的镜像,启动内核时有错,我曾经的出错现象:https://www.doczj.com/doc/c411242025.html,/read.php?tid-19717.html 但是发现启动内核时打印此出错信息:

UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048

UBI error: validate_ec_hdr: bad EC header

UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556

UBI error: ubi_init: cannot attach mtd3

UBI error: ubi_init: UBI error: cannot initialize UBI, error -22

后来找到了相近的解决方案:

https://www.doczj.com/doc/c411242025.html,/space.php?uid=20632682&do=blog&id=82414 按照这篇帖子最终内核成功的启动了

我现在还不太懂为什么“-e 126976”而不是大多数制作ubifs文件系统写的“-e 129024 ”如果大家知道请通知我,不胜感激!】

步骤3.通过Jlink或者H-JTAG将u-boot.bin先烧进norflash,之后连接好串口线和网线,从norflash启动开发板。

步骤4.设定好网络相关的环境变量,重点是先设置好ipaddr和serverip(因为下面用到tftp协议下载)之后用sav命令保存环境变量;

之后用命令:tftp 31000000 u-boot.bin 下载uboot.bin到内存地址31000000处。

步骤5:使用命令:nand erase 0 60000,将nand flash的前0x60000字节空间擦除掉。在使用命令:nand write 31000000 0 60000,将内存31000000处的u-boot.bin烧写到nand flash中。

步骤6:使用命令:tftp 31000000 uImage 使用命令: nand erase 80000 300000,将nand flash的kernel分区擦除掉,在使用命令:nand write 31000000 80000 300000 ,将内存31000000处的uImage烧写到nand flash中。

步骤7:使用命令:mtdparts default 使用默认分区对Nand Flash进行分区。使用命令:

nand erase root ,擦除root分区。使用命令:ubi part root 2048 ,激活root分区进行ubi 格式化。最后使用命令:ubi create rootfs ,创建rootfs分区。

【注意点:原来我用命令: ubi part root 来激活root分区进行ubi格式化,但是启动内核时出现报错信息(看红字部分),所以按这篇博文

https://www.doczj.com/doc/c411242025.html,/space.php?uid=20632682&do=blog&id=82414改成:ubi

part root 2048 之后就没有报错了

UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048

UBI error: validate_ec_hdr: bad EC header

UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556

UBI error: ubi_init: cannot attach mtd3

UBI error: ubi_init: UBI error: cannot initialize UBI, error -22 】

步骤8:使用命令:tftp 31000000 rootfs.bin 下载rootfs到默认内存地址31000000处,使用命令:ubi write 31000000 rootfs $filesize,将内存31000000处大小为$filesize的rootfs.bin通过ubi方式烧写到nand flash的对应分区中。

步骤9:设置启动变量: bootargs ,(bootargs是uboot传给内核的参数,使用命令:

set bootargs "ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 ini t=/linuxrc rw "

设置启动命令:bootcmd,(bootcmd 是uboot启动的命令,输入命令:set bootcmd " nand read 31000000 80000 $filesize; bootm 31000000" 最后使用sav命令保存环境变量)

步骤10:关掉电源,让开发板重新从nand flash启动,可以看到内核成功加载了我们只做的ubifs 文件系统,如图:

[注意点1:set bootcmd " nand read 31000000 80000 $filesize; bootm 31000000 " 中的"31000000"是启动内核的地址,内核启动时自动找到31000000这个地方来启动kernel ;而前面用过的tftp 31000000 xxx 中的"31000000"是内存中的地址(存放在内存地址中的数据掉电后就没了)

注意点2:如果 bootm后面不跟地址,默认是到30008000处寻在内核启动的;如果bootcmd环境变量写成:set bootcmd " nand read 31000000 80000 $filesize; bootm 最终这种现象:如图(因为它到30008000没有找到内核,内核原来由80000的内存地址读到了31000000地址处)

为S3C2440移植内核

2012-04-24 22:23 20人阅读评论(0) 收藏举报

1.修改晶振频率

S3C2440支持两种频率:12MHZ 和16MHZ.目前市面上出售的开发板大多使用的是12MHZ的晶振,而内核源代码采用的是16MHZ频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的比特率(正确的应该是),这样在超级终端上看到的就是乱码。因此我们只须修改内核源代码中的晶振频率即可。

将内核顶层目录下的 arch /arm/mach-s3c2440/mach-smdk2440.c的第180行:

s3c24xx_init_clocks(16934400);

改为:s3c24xx_init_clocks(12000000);

2.修改Nand Flash分区表

这次内核正常启动,不再出现乱码,但未能成功挂载根文件系统。出现错误如下:

VFS :Mounted root (jffs2 filesystem ).

Freeing init memroy :132k

Warning : unable to open an initial console.

Kernel panic - not syncing : No init found . Try passing init

= option to kernel.

仔细查看内核出错前的输出,发现内核在Nand Flash 上创建了 8个分区:

Creating 8 MTD partition on "NAND 64MiB 3,3v 8-bit " :

0x00000000 -- 0x00004000 :"Boot Agent"

0x00000000 -- 0x00200000 :"S3C2410 flash partition 1"

0x00400000 -- 0x00800000 :"S3C2410 flash partition 2"

0x00800000 -- 0x00a00000 :"S3C2410 flash partition 3"

0x00a00000 -- 0x00e00000 :"S3C2410 flash partition 4"

0x00e00000 -- 0x01800000 :"S3C2410 flash partition 5"

0x01800000 -- 0x03000000 :"S3C2410 flash partition 6"

0x00300000 -- 0x04000000 :"S3C2410 flash partition 7"

kernel commal line : noinitrd root=/dev/mtdblock2 console = ttySAC0 rootfstype=jffs2

由上面看出,内核会到NAND Flash 的0x00400000 ~ 0x00800000 区间来挂载根文件系统,但事实上通过u-boot烧写根文件系统时,是将其烧写到Nand Flash 的0x00400000 ~ 0x04000000 这个区间。所以内核不能成功挂载根文件系统。因此,必须修改内核对Nand Flash的分区定义,让第3个分区位于0x00400000-0x04000000这个区间。

修改 arch /arm/plat-s3c24xx/common-smdk.c文件,将

static struct mtd_partition ....{}函数做如下修改,这样一来,整个Nand Flash 被划分为4个分区。

第一个分区大小1MB,存放u-boot;

第二个分区大小3MB,存放kernel;

第三个分区大小60MB,存放根文件系统;

第四个分区从第64M开始一直到Nand Flash的最后,可用于扩展。

static struct mtd_partition smdk_default_nand_part[ ]={

[ 0 ] = {

.name = " Bootloader ",

.size = SZ_1M,

. offset = 0,

},

[ 1 ] = {

.name = " kernel",

. offset = SZ_1M,

.size = SZ_2M + SZ_1M,

},

[ 2] = {

.name = " Root filesystem ", . offset = SZ_4M,

.size = SZ_64M - SZ_4M, },

[ 3 ] = {

.name = " Extended",

. offset = SZ_64M,

.size = MTDPART_SIZE_FULL, }

};

内核Kconfig 与 Makefile 文件分析

分类:嵌入式 2012-04-25 11:36 60人阅读评论(0) 收藏举报一.内核构造系统简介

内核是个复杂庞大的系统,对它进行配置、裁剪、编译原本非常地复杂和困难,但现在却只需要简单的两个命令:(1)make menuconfig ;(2)make uImage 就搞定了,原因是在其背后有一个设计精巧的内核构造系统帮助我们精确的完成了各项任务。内核构造系统最关键的组成元素就是各个目录下的Kconfig 文件和 Makefile文件,本节将对这两类文件进行介绍,以使大家了解内核构造系统的基本情况,从而能够修改它们,以完成向内核中添加功能组件的目的。

二. Kconfig 文件精解

* Kconfig 文件的作用是:

1. 控制make menuconfig 时,出现的配置选项;

2.根据用户配置界面的选择,将配置结果保存在.config 配置文件(该文件将提供给Makefile使用,用以决定要编译的内核组件以及如何编译)。

初始Kconfig文件是arch /arm/Kconfig ( Kconfig文件的语法和语义,详情可查阅内核源码中的Documentation /kbuild/kconfig-language.txt 文件 )

(一)Kconfig 文件的基本要素:config 条目(entry)

config YAFFS_FS

tristate " YAFFS2 file system support "

default y

depends on MTD_BLOCK

select YAFFS_YAFFS1

select YAFFS_YAFFS2

help

YAFFS2 , or Yet Another Flash Filing System ,

is a filing system

optimised for NAND Flash chips.

To compile the YAFFS2 File system support as a module, choose M here :the module will be called yaffs2.

If unsure , say N

上面的config 条目,各部分的含义是:

(1) YAFFS_FS为变量名,将在.config 中以CONFIG_YAFFS_FS=y 或 n 的形式出现,如图

(2)tristate 为出现在配置菜单中的文字,没有它,将使得用户不能在配置界面中显示并配置它,同时它也为变量取值的类型,可为y 、n 、m

(3)default :为变量默认值,可被用户设置值覆盖。

(4)depends on :表示该变量必须在 MTD_BLOCK被设置的情况下才能进行设置,否则取值为n ,即使default为y

(注:原来我的.config 文件中出现的形式时#CONFIG_YAFFS_FS is not set ,所以一致后来在make menuconfig菜单中找不到YAFFS2 file system support的选项,就是因为这个原因,后来设置成CONFIG_YAFFS_FS=y还是没有

YAFFS2 file system support的选项,因为没有理解depends on MTD_BLOCK ,后来理解了,再次到.config文件中设置了此选项,菜单中终于有了

"YAFFS2 file system support"的选项)

(5)select :表示它将影响到变量YAFFS_FS,使得YAFFS_FS至少应该配置为y或m(如果它最终取值为y 或 m )

(6) help :中的文字将作为配置界面中的帮助信息。

附加说明:

*** 无depends on ,default 为y :默认为y。一般用于必须要设置的选项,此时不要设置prompt 。

*** 有depends on ,default 为y :所依赖的条目己设置,则默认为y ;所依赖的条目未设置,则为n.

*** 有depends on ,default 为n :所依赖的条目己设置,则默认为n;所依赖的条目未设置,则为n.

*** 无depends on ,default 为n :在为设置prompt的情况下,此选项想要被设置,需要由其他选项来select它。

二.Kconfig 中变量的取值类型

Kconfig 中变量取值类型总共有5种。其中做常见的是tristate 和 bool ,分别对应于make meuconfig 配置界面中< > 和 [ ]选项。

(1)tristate :可取y 、n 、m。

(2)bool (其为tristate的变体) :可取 y 、n

busybox详解制作根文件系统

详解制作根文件系统 单击,返回主页,查看更多内容 一、FHS(Filesystem Hierarchy Standard)标准介绍 当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。 该标准规定了根目录下各个子目录的名称及其存放的内容: 制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括: ?编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 ?利用交叉编译工具链,构建/lib目录 ?手工构建/etc目录 ?手工构建最简化的/dev目录 ?创建其它空目录 ?配置系统自动生成/proc目录 ?利用udev构建完整的/dev目录 ?制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。 二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。 1、从https://www.doczj.com/doc/c411242025.html,/下载busybox-1.7.0.tar.bz2 2、tar xjvf busybox-1.7.0.tar.bz2解包 3、修改Makefile文件 175 ARCH ?= arm 176 CROSS_COMPILE ?= arm-linux- 4、make menuconfig配置busybox busybox配置主要分两部分。 第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:

几种Nand flash文件系统的对比

几种Nand flas文件系统的对比 1.来源:NLE-FFS: A Flash File System with PRAM for Non-linear Editing For thesedevices, NAND flash memory has became the most attractive storage medium due to outstanding characteristics such as its increased capacity, low power consumption, small size and light weight. For the efficient management of NAND flashmemory, several flash file systems have been proposed, including JFFS2, YAFFS2, CFFS and PFFS. several file systems such as MNFS,NAMU and ScaleFFS have been designed for real-time recording /playback and large-capacity storage. A. YAFFS2 YAFFS2 is the most widely employed file system for NAND flash memory. YAFFS2 essentially saves the object ID (file ID) and the chunk (page) number in the spare region to show the offset of a page and the owner file of the page. Therefore, YAFFS2 reads the spare regions and object headers to establish the metadata in memory. Although YAFFS2 is designed to support NAND flash memory, it has scalability problems. With YAFFS2, the location of the updated page is saved in NAND flash pages or spare regions, as shown in Fig. 10 (a); hence, the file system

LINUX文件系统制作详细

Linux文件系统制作流程 关键词:ARM Linux yaffs文件系统移植 Linux文件系统简介 Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。 Linux下的文件系统结构如下: Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。 不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,

SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。 >基于FLASH的文件系统 Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。 闪存主要有NOR和NAND两种技术(简单比较见附录)。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash 的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。 在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图)。使用MTD 驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。 顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。 1.jffs2 JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。 Jffs2:日志闪存文件系统版本2(Journalling Flash FileSystem v2) 主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。 目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。 jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在

liu改udhcpc配置+根文件系统制作

基于ubuntu12.06 Mini2440 256M 试验通过2013年4月8日星期一 1、获得simple.script #解压busybox tar jxvf busybox-1.5.0.tar.ba2 mv busybox-1.5.0 busybox cd busybox #添加交叉工具链 export PATH=/usr/local/arm/3.3.2/bin:$PATH make defconfig make menuconfig #配置时,我们基于默认配置,再配置它为静态编译,安装时不要/usr路径,把Miscellaneous Utilities #下的“taskset”选项去掉,不然会出错。 #如下: Busybox setting ->builds options ->[*] build busybox as a static binary ->installitation options ->[*] don’t use /usr Miscellaneous Utilities ―> [ ] taskset 保存退出。 #编译安装 make ARCH=arm CROSS_COMPILE=arm-linux- CONFIG_PREFIX=/root/build_rootfs/rootfs all install ARCH指定平台 CROSS_COMPILE指定交叉编译 CONFIG_PRRFIX指定安装的路径 或者直接修改Makefile文件 生成的udhcpc是一个链接在上面的安装目录/all/sbin 下 此时把busybox考到根文件系统的/bin下和把udhcpc拷到根文件系统的/sbin(其实原有的根文件系统里可能已经包含了udhcpc{这样该不该都行,或许吧})开机运行/sbin 下的udhcpc就可以自动获得IP。 关键点要把busybox目录下的examples/udhcp/simple.script 脚本文件做为default.script拷贝到根文件系统的/usr/share/udhcpc/default.script。没有则自己创建。

实验四 ramdisk 根文件系统的制作

实验四ramdisk根文件系统的制作 一.实验目的 1.熟悉根文件系统组织结构; 2.定制、编译ramdisk根文件系统。 二.实验设备 1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机; 2.软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。 三.实验内容 利用6.3 中的已经完成的文件系统,生成一个根文件系统镜像。 四.实验原理 ramdisk是内核初始化的时候用到的一个临时文件系统,是一个最小的linuxrootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,做为启动引导驱动,包含如下目录: bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin 目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。1.制作ramdisk根文件系统映像 1)单击菜单应用程序->附件->终端打开终端,设置环境变量: $ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh $ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh 2)执行命令切换到ramdisk实验目录下: $cd $SIMPLEDIR/6.4-ramdisk 3)运行脚本文件: $ sudosh ramdisk-install.sh shell 脚本命令说明: #!/bin/bash # # ramdisk-install.sh - Make ramdiskfilesystem. # # Copyright (C) 2002-2007

文件系统介绍

文件系统简介: 理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的。文件系统简单的说就是一种目录结构,由于linux操作系统的设备在系统中 是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统。文件系统是为用户反映系统的一种形式,为用户提供一个检测控制系统的接口。 根文件系统,就是一种特殊的文件系统。那么根文件系统和普通的文件系统有什么区别呢?由于根文件系统是内核启动时挂在的第一个文件系统,那么根文件系统就要包括Linux 启动时所必须的目录和关键性的文件,例如Linux启动时都需要有用户进程init对应的文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序,如/bin目录下的命令等。任何包括这些Linux 系统启动所必须的文件的文件系统都可以称为根文件系统。 Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、ramfs和nfs 等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS,为各类文件系统提供一个统一的操作界面和应用编程接口。下图是linux文件系统层次关系图。 MTD MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。

yaffs2文件系统制作

交叉编译器ARM-Linux-gcc4.1.2 开发板TX2440A Busybox-1.15.1.tar.bz2(在Linux中被称为瑞士军刀) mkyaffs2image工具 首先创建一个名字为root_2.6.31的文件夹,在其中创建如下文件夹 etc bin var dev home lib mnt proc root sbin sys tmp usr opt共14个文件夹 解压Busybox tar xjvf busybox 进入源目录,修改Makefile 第164行,CROSS_COMPILE=arm-linux- 第190行,ARCH=arm 执行#make men onfig进行配置 配置选项大部分都是保持默认的,只需要注意选择以下这几个选项,其他的选项都不用动:Busybox Setting---> Build Options---> [*]Build Busybox as a static binary(no shared libs) [*]Build with Large File Support(for accessing files>2GB) Installation Options--->

(./_install)Busybox installation prefix 进入这个选项,输入busybox的安装路径,如:../rootfs 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 把这些文件全部复制到刚建好的root_2.6.31目录下, #cp–rf*../root_2.6.31 在dev目录下,创建两个设备节点: #mknod console c51 #mknod null c13 然后进入自己建立的etc目录 拷贝Busybox-1.15.2/examples/bootfloopy/etc/*到当前目录下。 #cp-r../../busybox-1.15.2/examples/bootfloopy/etc/*./ 包括文件:fstab init.d inittab profile

基于busybox的根文件系统制作

龙源期刊网 https://www.doczj.com/doc/c411242025.html, 基于busybox的根文件系统制作 作者:李飞,武金虎,石颖博 来源:《电脑知识与技术》2010年第17期 摘要:Busybox是构建嵌入式Linux文件系统的必备软件,它是所有文件和设备节点的起始点,是决定系统能否正常启动的关键。通过busybox-1.1.3为例,进行配置、编译、安装等过程,从而形成简单的根文件系统映像文件,为以后嵌入式Linux系统的移植打下了良好的开端。 关键词:Busybox;嵌入式Linux;Linux操作系统;根文件系统;cramfs 文件系统 中国分类号:TP316.81文献标识码:A文章编号:1009-3044(2010)17-4655-02 Making Root File System Based on Busybox LI Fei, WU Jin-hu, SHI Ying-bo (College of Computer Science and Information, Guizhou University, Guiyang 550025, China) Abstract: Busybox is an essentiaL software to buiLd an embedded Linux fiLe system. It is the starting node point of aLL the fiLes and devices and the key whether the system can have a normaL start. Taking busybox-1.1.3 for exampLe, making a simpLe root image system fiLe by configuration compiLation and instaLLation Lays a good foundation for migration of the embedded Linux system. Key words: busybox; embedded linux; Linux OS; root file system; cramfs file system 1 根文件系统结构 根文件系统是所有文件和设备节点的起始点,包括系统所必须的各种工具软件、库文件、 脚本、配置文件等一系列的文件。一个基本的Linux根文件系统包含有以下的目录:dev、proc、bin、etc、usr、Lib、temp、var、usr等等目录。其中dev是设备文件节点目录,proc是挂载proc文件系统所用的目录,bin目录下面包含了系统的基本命令,etc目录是系统启动脚本所在的目录,Lib是系统默认的动态链接库目录,usr是用户目录,temp是临时目录,用来保存临时文 件,var目录包含系统运行时要改变的数据。以上都是根文件系统所必须的目录 2 Busybox简介 熟练嵌入式Linux的朋友对busybox一定不会陌生,它是标准Linux工具的一个单个可执行实现,被形象的称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX工具和命令 结合到一个单独的可执行程序中。虽然busybox中的这些工具相对于GNU常用工具功能有所

JFFS文件系统和YAFFS文件系统的比较

JFFS文件系统和YAFFS文件系统的比较 NAND flash文件系统JFFS2和YAFFS比较JFFS是由瑞典的Axis Communications Ab公司开发的(1999,以GNU发布),针对flash设备的特性为嵌入式设备开发的.(我边上的兄弟曾想去那里作毕业设计) JFFS1和JFFS2的设计中都考虑到了FLASH的特性特别是满足了上述3个条件,包括了垃圾回收,坏块管理等功能. 这两种文件系统属于LFS(Log-structured File System).这种文件系统的特点是一旦数据出错,容易恢复,但是系统运行是需要占用一定的内存空间,这些空间就是用来存储”log”的. JFFS的缺点就是加载时间太长,因为每次加载都需要将FLASH上的所有节点(JFFS的存储单位)到内存,这样也占用了可观的内存空间.除此之外,”circle log”设计使得在对文件数据进行所有的数据都会被重写,这样造成不必要的时间,同时也会减少FLASH的寿命. JFFS2对JFFS1作了些改进,比如所需的内存变少了,垃圾回收机制也优化了. 针对JFFS1,JFFS2的缺点,JFFS3出现了. YAFFS1 ">“Yet Another Flash File System”作者是新西兰的Charles Manning为一家名叫Alpha one 的公司(https://www.doczj.com/doc/c411242025.html,/)设计的,是第一个为NAND Flash设计的文件系统.共两个版本YAFFS1 和YAFFS2. YAFFS1支持512Bytes/Page的NAND Flash;后者YAFFS2支持2kBytes/Page的NAND Flash. YAFFS文件系统也属于LFS. 跟其他文件系统比较,它具有更好的可移植性,甚至可以使用在没有操作系统的设备上(called “YAFFS/Direct”). YAFFS采用模块化设计,虽然最初是用在linux系统上的,但是也已经移植到其他系统比如wince. 还有个突出的优点是它在mount的时候需要很少的内存.(如果是小页—512byte/page,每1MByte NAND大约需要4KBytes内存;大页需要大概1KBytes RAM/1MByte NAND) JFFS与YAFFS比较,两者各有长处. 一般来说,对于小于64MBytes的NAND Flash,可以选用JFFS;如果超过64MBytes,用YAFFS比较合适.

在硬盘上制作根文件系统.doc

在硬盘上制作根文件系统 一、实验目标: 在硬盘上建立一个根文件系统,硬盘镜像文件的名称为:hdc-0.11.new.img 二、实验环境: 1、Vmware workation, bochs虚拟机,ultraedit编辑环境 2、用到的四个重要的镜像文件:bootimage-0.11-hd,hdc-0.1.img,并将他们放到 mylinux0.11文件夹中。 3、实验环境:redhat linux 三、实验理论依据: 1、Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括以下一些子目录和文件: etc/ 目录主要含有一些系统配置文件; dev/ 含有设备特殊文件,用于使用文件操作语句操作设备; bin/ 存放系统执行程序。例如sh、mkfs、fdisk等; usr/ 存放库函数、手册和其它一些文件; usr/bin 存放用户常用的普通命令; var/ 用于存放系统运行时可变的数据或者是日志等信息。 存放文件系统的设备就是文件系统设备。Linux 0.11内核所支持的文件系统是MINIX 1.0文件系统。 2、inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬 盘、软盘、U盘... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode 值最快的找到相对应的文件。每一个文件开头都是一个inode。 做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。

Yaffs2文件系统中对NAND Flash磨损均衡的改进

Yaffs2文件系统中对NAND Flash磨损均衡的改进 摘要:针对以NAND Flash为存储介质时Yaffs2文件系统存在磨损均衡的缺陷,通过改进回收块选择机制,并在数据更新中引入冷热数据分离策略,从而改善NAND Flash的磨损均衡性能。实验借助Qemu软件建立Linux嵌入式仿真平台,从总擦除次数、最大最小擦除次数差值和块擦除次数标准差等方面进行对比。实验结果表明,在改进后的Yaffs2文件系统下NAND Flash的磨损均衡效果有明显提升,这有益于延长NAND Flash的使用寿命。 关键词: Yaffs2文件系统;NAND Flash;垃圾回收;冷热数据 0 引言 NAND Flash存储设备与传统机械磁盘相比,具有体积小、存储密度高、随机存储和读写能力强、抗震抗摔、功耗低等特点[1]。它被广泛用于智能手机、车载智能中心、平板电脑等智能终端中。近年来,以NAND Flash为存储介质的固态硬盘也得到越来越多的应用。目前Yaffs2文件系统(Yet Another Flash File System Two,Yaffs2)[1]是使用最多、可移植性最好的专用文件系统,在安卓、阿里云OS、Linux等嵌入式系统中都有使用。在Yaffs2文件系统下以NAND Flash为存储介质时存在磨损均衡的缺陷,可通过对回收块选择机制作改进和引入冷热数据分离策略来提高磨损均衡的效果。 1 Yaffs2和Nand Flash关系 这里以使用最多的Linux操作系统为实践,将Yaffs2文件系统移植到Linux操作系统中。Linux系统通常可以分为3层:应用层、内核层和设备层,其中支持NAND Flash设备的Yaffs2文件系统属于内核层,。 最上层用户应用程序通过VFS(Virtual File System)提供的统一接口,将数据更新等文件操作传递给Yaffs2。VFS代表虚拟文件系统,它为上层应用提供统一的接口。有了这些接口,应用程序只用遵循抽象后的访问规则,而不必理会底层文件系统和物理构成上的差异。然后Yaffs2通过MTD(Memory Technology Device)提供的统一访问接口对NAND Flash进行读、写和擦除操作,从而完成数据的更新或者存储操作。MTD代表内存技术设备,它为存储设备提供统一访问的接口。最终,在NAND Flash上以怎样的格式组织和存储数据由Yaffs2文件系统决定。 NAND Flash由若干块(block)组成,每个块又是由若干页(page)组成,页中含有数据区和附加区。NAND Flash的页根据状态不同,可以分为有效页、脏页、空闲页。有效页中存放有效数据,脏页中存放无效数据,空闲页是经过擦除后可以直接用于写入数据的页。NAND Flash在写入数据前需要执行擦除操作,因此数据不能直接在相同的位置更新。当一个页中数据需要更新时,必须将该页中有效数据拷贝到其他空闲页上再更新,并将原来页上的数据置为无效。随着时间的推移,许多无效页累积在存储器中使得空闲页逐渐减少。当存储器中的空闲空间不足时,启动垃圾回收操作,利用回收块选择机制从待回收块中选取满足要求的块来擦除,从而得到足够的空闲空间。NAND Flash中块的擦除次数有限,通常为10 000次~100 000次[2]。当某个块的擦除次数超过使用寿命时,该块将无法正常用于数据存储。因此,垃圾回收应利用合理的回收块选择机制,从待回收块中找到回收后能产生良好磨损均衡效果且付出较少额外代价的块来回收,从而获得足够的空闲空间用于数据更新操作。 2 Yaffs2在磨损均衡方面的缺陷 Yaffs2中回收块的选择机制[3]是从待回收块中找到有效数据最少的块来回收。回收过程中,Yaffs2能够减少有效数据的额外读和写操作。当数据更新处于均匀分布的情况下,Yaffs2表现出较好的磨损均衡效果。 但是,通常情况下数据的更新频率不同,有些数据经常更新,而有些数据很少更新。经

嵌入式Linux根文件系统制作

实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的 了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构 掌握根文件系统的搭建过程 掌握busybox、mkcramfs等工具的使用方法 二. 项目主要任务 使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。 分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程 三. 基本概念 1.文件系统基本概念 Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。随着时间的推移, Linux支持的文件系统数还会增加。Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。该树形层次结构把文件系统表示成一个整个的独立实体。无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。该个目录被称为装配目录或装配点。在文件系统卸载时,装配目录中原有的文件才会显露出来。在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。 2.常见的嵌入式文件系统 嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。 (1)Flash根据结构不同分为 NOR Flash和NAND Flash。基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。

第一次挂载jffs2文件系统,出现:Node header CRC failed at

第一次挂载jffs2文件系统,出现:Node header CRC failed at 使用的bootloader:redboot kernel版本:2.6.29 flash类型:NOR FLASH. 制作jffs2的命令: mkfs.jffs2 -U -d /mnt/winF/tet/romfs -D devtable.jffs2.txt -l -e 0x10000 -p -n -o /tftpboot/jffs2fs.img "-e":表示flash的擦除块大小为0x10000,这个值很重要,可以从datasheet中得到。 "-p": Pad output to SIZE bytes with 0xFF. If SIZE is not specified, the output is padded to the end of the final erase block. 烧写命令: load -r -v -h 172.21.73.101 -b 0x8000 kernel.lzo fis create -b 0x8000 -l 0x200000 -s 0x200000 -f 0x7F060000 -e 0x8000 kernel.lzo load -r -v -h 172.21.73.101 -b 0x100000 jffs2fs.img fis write -b 0x100000 -f 0x7F260000 -l 0x250000 fis create -f 0x7F260000 -l 0x590000 jffs2.img reset 问题描述: 第一次启动,会出现CRC错误信息,如下: Shell invoked to run file: /etc/rc Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| ADVANTECH eAutomation For further information check: https://www.doczj.com/doc/c411242025.html,/ https://www.doczj.com/doc/c411242025.html,/eAutomation/ Execution Finished, Exiting Sash command shell (version 1.1.1) /> JFFS2 notice: (164) jffs2_get_inode_nodes: Node header CRC failed at 0x06ddc8.

实验八 构建根文件系统

实验八构建根文件系统 一、实验目的 1、了解嵌入式Linux文件系统的作用和类型; 2、了解jffs2文件系统的优点和在嵌入式系统中的应用; 3、理解文件系统的挂载过程; 4、使用BusyBox制作一个根文件系统。 二、实验环境 预装redhat9.0(内核版本2.4.x)的pc机一台,XScale嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链,BusyBox软件包。 三、实验步骤 1、解压BusyBox软件包; 2、使用make menuconfig来配置BusyBox,修改交叉编译器前缀; Build Option [*] Build BusyBox as a static binary(no shared library) [*]Do you want to build BusyBox with a Cross ompile /usr/local/hybus-linux-R1.1/bin/arm-linux- Installation Option [*]Don't’t use /use Coreutils [*]ls

[*]cp [*]reboot [*]echo [*]mkdir [*]rm Editors [*]vi Login Utilities [*]getty 3、交叉编译BusyBox; make make install 4、建立BusyBox顶层目录结构 mkdir etc dev proc tmp lib var sys 5、在dev目录下创建必要的设备节点 (ram0,console,null,zero); mknod mdblock b 31 3 mknod console c 5 1 mknod null c 1 3 mknod zero c 1 5 cp –dpR /dev /_install/dev (假设busybox的安装目录为/_install)

嵌入式linux下的文件系统

嵌入式linux下常见的文件系统RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 ?RamFS:利用VFS自身结构而形成的内存文件系 统,使用系统的RAM空间 ?JFFS/JFFS2:为Flash设计的日志文件系统?Yaffs:专门为Nand Flash设计 ?proc:为内核和内核模块将信息发送给进程提 供一种机制,可以查看系统模块装载的信息?devFS:设备文件系统 Linux上的Ext2fs ?支持4 TB 存储、文件名称最长1012 字符 ?可选择逻辑块 ?快速符号链接 ?Ext2不适合flash设备 ?是为象IDE 设备那样的块设备设计的,逻辑块大小必 须是512 byte、1 KB、2KB等 ?没有提供对基于扇区的擦除/写操作的良好管理 ?如果在一个扇区中擦除单个字节,必须将整个扇区复制到RAM,然后擦除,再重写入

?在出现电源故障时,Ext2fs 是不能防止崩溃的 ?文件系统不支持损耗平衡,缩短了flash的寿命 jffs/jffs2文件系统的优缺点 ?日志文件系统 ?提供了更好的崩溃、掉电安全保护 ?jffs2支持对flash的均匀磨损 ?在扇区级别上执行闪存擦除/写/读操作要 比Ext2文件系统好 ?文件系统接近满时,JFFS2 会大大放慢运行 速度——垃圾收集 Nand上yaffs文件系统的优势 ?专门为Nand flash设计的日志文件系统 ?jffs/jffs2不适合大容量的Nand flash ?jffs的日志通过jffs_node建立在RAM中,占用RAM空间:对于128MB的Nand大概需要4MB的空间来维护节点 ?启动的时候需要扫描日志节点,不适合大容量 的Nand flash ?FAT系统没有日志 编译yaffs文件系统 ?mtd的最新补丁升级? ?接口更新,适合与yaffs

qt课程设计实验报告

程序设计课程设计实验报告 (qt实验报告) 信息科学与技术学院 软件三班 高文博 201005070309 2011年5月

实验1:计算当初存入本金的钱数。(12题) 1.实验目的、要求 目的: 1)熟悉qt中的常用属性; 2)熟悉vbox hbox模型及怎样根据需求设计控件,边框等; 3)熟悉各个槽函数的使用,准确的将c++语言转换成qt语言,将控件功 能与函数结合起来。 要求: 1)掌握对控件的文本色,背景色等常用属性的设置。 2)掌握对控件、边框尺寸与结构的设置 3)掌握对函数的设置 2.实验设备 笔记本电脑,已安装Qt 开发环境。 3.实验内容、步骤 ●先在vc++上进行编译。 ●应用qt3.38进行编译,运行。 实验步骤: 1)根据题目需求在草纸上画出结构图; 2)根据草图用代码设计整体框架和控件; 3)在qt上运行; 4)运行成功后根据功能添加函数; 5)在头文件中添加头文件。 6)将添加的功能函数与功能控件相连; 7)分别对每个函数进行测试; 8)将整个程序在qt运行调试; 9)运行通过后给每个函数写注释; 实验代码如下所示 A (1)主框架结构代码 #include"gwbsave.h"

GwbSave::GwbSave(QWidget*parent,const char*name):QWidget(parent,name) { //?? vBox=new QVBoxLayout(this); vBox->setMargin(5); vBox->setSpacing(5); label=new QLabel("Please input the lilv:",this,"label"); vBox->addWidget(label); //?? hBox=new QHBoxLayout(this); hBox->setMargin(5); hBox->setSpacing(5); vBox->addLayout(hBox); le1=new QLineEdit(this,"le1"); hBox->addWidget(le1); //?,?? hBox2=new QHBoxLayout(this); hBox2->setMargin(5); hBox2->setSpacing(5); vBox->addLayout(hBox2); leResult=new QLineEdit(this,"leResult"); leResult->setReadOnly(true); leResult->setPaletteBackgroundColor(Qt::gray); hBox->addWidget(leResult);

Ubuntu for Arm根文件系统制作

1.安装rootstock软件 rootstock是一个用来制作Ubuntu根文件系统的工具,可以使用apt-get install rootstock获取,也可以在官网直接下载:https://https://www.doczj.com/doc/c411242025.html,/project-rootstock 若选择前者:直接使用rootstock命令 若选择后者:解压下载文件rootstock-0.1.99.4.tar.gz得到rootstock可执行文件,可以将其拷贝到系统bin目录下 2.rootstock创建根文件系统 [html]view plaincopy 得到文件系统压缩文件qemu-armel-201408271515.tar.gz 创建一个空镜像: [html]view plaincopy 在镜像上创建文件系统: [html]view plaincopy 挂载镜像: [html]view plaincopy 将文件系统解压到挂载目录: [html]view plaincopy 这时可以修改挂载目录中的东西了: [html]view plaincopy 最后是得到最后的文件系统镜像: [html]view plaincopy

3.模拟器中运行根文件系统 下载模拟器qemu: [html]view plaincopy 在2中的“若干修改”中执行: [cpp]view plaincopy 在仿真环境中访问文件系统 [cpp]view plaincopy 此时在仿真环境下就可以安装SPICE了:[cpp]view plaincopy 安装完SPICE后保存文件系统: [cpp]view plaincopy

不同文件系统的比较

几种文件系统比较 嵌入式系统中比较常用的文件系统为JFFS、JFFS2、CRAMFS和YAFFS。 J f f s2:日志闪存文件系统版本2(J o u r n a l l i n g F l a s h F i l e S y s t e m v2) JFFS2主要应用于NOR Flash,可读写,支持数据压缩,安全保护等 特点。存储空间已满或接近满时,JFFS2文件系统的运行速度却由于垃 圾收集的原因而放慢。不适合用于NAND Flash,NAND Flash的容量一 般比较大,JFFS2文件系统为维护日志节点所占用的内存空间也迅速增大,因此JFFS2在挂载时需要很长时间来扫描整个FLASH的内容,用以找出所有的日志节点并建立文件结构,这样就会极大的降低系统的运行 效率。 y a f f s:Y e t A n o t h e r F l a s h F i l e S y s t e m yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的日 志型文件系统。不支持数据压缩,速度快,挂载时间很短,对内存 的占用较小。支持跨平台。yaffs/yaffs2自带NAND芯片的驱动, 并且为嵌入式系统提供了直接访问文件系统的API。yaffs仅支持 小页(512 Bytes) NAND闪存,yaffs2可支持大页(2KB) NAND闪存。 同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面 均有大幅提升。 C r a m f s C o m p r e s s e d R O M F i l e S y s t e m 是一种只读的压缩文件系统。它也基于MTD驱动程序。降低 了系统成本。以压缩方式存储,在运行时解压缩,不支持应用程序 以XIP方式运行,需要将程序拷到RAM里去运行,它的效率高,速 度快,其只读的特点保护文件系统免受破坏,提高了系统的可靠性。 R o m f s 文件系统是一种简单的只读文件系统,不支持动态擦写,按顺 序存放数据,因而支持应用程序以XIP片内运行方式运行,在系统 运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。 Ramdisk不是一个实际的文件系统,而是一种将实际的文件系 统装入内存的机制,并且可以作为根文件系统。Ramdisk将一些 经常被访问而又不会更改的文件放在内存中,用以提高系统的性能。 R a m f s 是基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,在创建时可以指定其最大能使用的内存大小,文件系统大小可随所

相关主题
文本预览
相关文档 最新文档