ubifs文件系统的制作详解Word文件下载.docx

上传人:b****7 文档编号:22760688 上传时间:2023-02-05 格式:DOCX 页数:66 大小:247.25KB
下载 相关 举报
ubifs文件系统的制作详解Word文件下载.docx_第1页
第1页 / 共66页
ubifs文件系统的制作详解Word文件下载.docx_第2页
第2页 / 共66页
ubifs文件系统的制作详解Word文件下载.docx_第3页
第3页 / 共66页
ubifs文件系统的制作详解Word文件下载.docx_第4页
第4页 / 共66页
ubifs文件系统的制作详解Word文件下载.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

ubifs文件系统的制作详解Word文件下载.docx

《ubifs文件系统的制作详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《ubifs文件系统的制作详解Word文件下载.docx(66页珍藏版)》请在冰豆网上搜索。

ubifs文件系统的制作详解Word文件下载.docx

(注意:

不同的开发板在include/configs/目录下对应的修改的配置文件不同,我的开发板是mini2440所以修改的是mini2440.h)

#defineCONFIG_MTD_DEVICE

#defineCONFIG_MTD_PARTITIONS

#defineCONFIG_CMD_MTDPARTS

#defineCONFIG_LZO

#defineCONFIG_RBTREE

#defineCONFIG_CMD_UBIFS 

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

#defineCONFIG_CMD_UBI 

//uboo支持的ubifs烧写命令:

1.mtdparts:

用来给NAND分区;

/*2.nanderase.part:

用来擦除指定分区 

等这些命令在“UBIFS镜像的制作&

烧写”博文理解*/

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

#defineMTDIDS_DEFAULT"

nand0=nandflash0"

//同时要给nandlflash建立默认的分区,

#defineMTDPARTS_DEFAULT"

mtdparts=nandflash0:

384k(bootloader),"

//我的分区:

"

128k(params),"

\

 

"

5m(kernel),"

64m(root)"

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

#defineCONFIG_STACKSIZE(512*1024)

#defineCONFIG_SYS_MALLOC_LEN 

(CONFIG_ENV_SIZE+1024*1024)

#defineCONFIG_SYS_GBL_DATA_SIZE 

512

2.回到uboot的顶层目录下

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

执行命令:

makeclean 

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

makemini2440_config 

注意:

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

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

执行命令(开始编译uboot):

makeCROSS_COMPILE=arm-linux- 

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

嵌入式2012-04-1913:

55156人阅读评论(0)收藏举报

1.在内核顶层目录下使用命令:

makemenuconfig,进入内核配置菜单,添加对UBIFS文件系统的支持。

(补充:

如果菜单里没有<

>

UBIFSfilesystemsupport的选项,一般2.6.27以上的内核已经支持了UBIFS,所以只需把内核顶层目录下的.config文件里的#CONFIG_MTD_UBI 

isnot 

set 

设置成:

CONFIG_MTD_UBI=y)如图:

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

再次进入makemenuconfig菜单这时已经有了<

UBIFSfilesystemsupport的选项,把它设为<

*>

UBIFSfilesystemsupport 

*"

是编译进内核的意思

2.在arch/arm/plat-s3c24xx/common-friendly-arm.c中,添加对NANDFlash的MTD分区。

如图:

49-70行为修改部分

(注意:

对应不同开发板路径和分区文件会有所不同,方正就是在arch/arm/mach-s3c2440或者arch/arm/plat下面的某个文件;

我原来就是因为弄错了路径和分区文件所以导致和uboot的默认分区对不上号,所以启动出错,大家可以参考我曾经的出错获得一些启示:

之后,退出保存;

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

使用命令:

makeuImage 

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镜像的制作&

烧写”

嵌入式2012-04-1916:

23254人阅读评论(0)收藏举报

二、制作ubifs镜像

步骤1:

将文件系统制作成ubifs镜像文件,需要使用mkfs.ubifs工具,该工具可以在网址:

http:

//git.infradead.org/mtd-utils.git 

,下载mtd-utils工具包源码编译后获得。

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

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

a.安装libacl,(我资源里)下载地址:

输入命令:

rpm 

-ivh 

libacl-2.2.23-5.4.e14.i386.rpm

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

执行如下命令:

tar 

zxvf 

lzo-2.05.tar.gz

cd 

lzo-2.05

./configure

make

makeinstall

c.安装mtd-utils.tar.gz 

(我资源里)下载地址:

zxvfmtd-utils.tar.gz

#cd 

mtd-utils

#./configur

#make

#makeinstall

步骤2.使用上述安装命令后,mkfs.ubifs被安装到了/usr/local/usr/sbin目录下,可使用命令:

exportPATH=$PATH:

/usr/local/usr/sbin将该路径包含进环境变量,

然后使用命令:

mkfs.ubifs 

-m2048 

-c 

2048-e 

126976 

-r 

/nfsroot/rootfs 

-o 

rootfs.bin,将根文件系统所在目录rootfs制作为ubifs镜像文件rootfs.bin,将该文件拷贝到/tftpboot/目录下等待下载烧写。

(注意,你在哪执行这个命令,生成的.bin镜像就在执行此命令的当前目录下生成)

【注意点:

1.上面制作的ubifs镜像文件使用的命令参数是根据开发板所使用的NANDFlash来确定的,我的NANDFlash容量是256MB,可以适应命令:

-h来查看各个命令选项的意思,我这里只简单的介绍一下:

-r:

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

-m:

最小的I/O操作的大小(也就是NANDFLASH的一个page的大小)

-e:

逻辑擦除块的大小

-p:

物理擦除块的大小

-c:

最大逻辑擦除块的数量

-o:

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

注意点:

2.我原来用mkfs.ubifs 

rootfs.bin制作成的镜像,启动内核时有错,我曾经的出错现象:

但是发现启动内核时打印此出错信息:

UBIerror:

validate_ec_hdr:

badVIDheaderoffset512,expected2048

badECheader

ubi_io_read_ec_hdr:

validationfailedforPEB556

ubi_init:

cannotattachmtd3

UBIerror:

cannotinitializeUBI,error-22

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

按照这篇帖子最终内核成功的启动了

我现在还不太懂为什么“-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:

nanderase060000,将nandflash的前0x60000字节空间擦除掉。

在使用命令:

nandwrite31000000 

60000,将内存31000000处的u-boot.bin烧写到nandflash中。

步骤6:

31000000uImage 

nanderase80000 

300000,将nandflash的kernel分区擦除掉,在使用命令:

nandwrite 

3100000080000 

300000,将内存31000000处的uImage烧写到nandflash中。

步骤7:

mtdpartsdefault 

使用默认分区对NandFlash进行分区。

nand 

eraseroot,擦除root分区。

ubipart 

root 

2048 

,激活root分区进行ubi格式化。

最后使用命令:

ubi 

create 

rootfs 

创建rootfs分区。

原来我用命令:

ubi 

part 

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

之后就没有报错了

badVIDheaderoffset512,expected2048

cannotinitializeUBI,error-22】

步骤8:

tftp31000000 

rootfs.bin 

下载rootfs到默认内存地址31000000处,使用命令:

write31000000 

$filesize,将内存31000000处大小为$filesize的rootfs.bin通过ubi方式烧写到nandflash的对应分区中。

步骤9:

设置启动变量:

bootargs,(bootargs是uboot传给内核的参数,使用命令:

set 

bootargs 

ubi.mtd=3 

root=ubi0:

rootfs 

rootfstype=ubifs 

console=ttySAC0 

init=/linuxrc 

rw"

设置启动命令:

bootcmd,(bootcmd是uboot启动的命令,输入命令:

bootcmd 

nand 

read31000000 

80000 

$filesize;

bootm 

31000000"

最后使用sav命令保存环境变量)

步骤10:

关掉电源,让开发板重新从nand 

flash启动,可以看到内核成功加载了我们只做的ubifs文件系统,如图:

[注意点1:

中的"

31000000"

是启动内核的地址,内核启动时自动找到31000000这个地方来启动kernel 

而前面用过的tftp 

xxx 

中的"

是内存中的地址(存放在内存地址中的数据掉电后就没了)

注意点2:

如果bootm后面不跟地址,默认是到30008000处寻在内核启动的;

如果bootcmd环境变量写成:

最终这种现象:

如图(因为它到30008000没有找到内核,内核原来由80000的内存地址读到了31000000地址处)

为S3C2440移植内核

2012-04-2422:

2320人阅读评论(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.修改NandFlash分区表

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

出现错误如下:

VFS:

Mountedroot 

(jffs2filesystem).

Freeing 

init 

memroy 

132k

Warning:

unable 

to 

openan 

initial 

console.

Kernelpanic 

not 

syncing 

Noinit 

found 

Try 

passing 

init= 

option 

kernel.

仔细查看内核出错前的输出,发现内核在Nand 

Flash上创建了 

8个分区 

Creating 

8MTD 

partitionon 

NAND 

64MiB3,3v 

8-bit"

0x00000000--0x00004000:

Boot 

Agent"

0x00000000-- 

0x00200000 

S3C2410 

flash 

partition 

1"

0x00400000-- 

0x00800000 

2"

0x00800000-- 

0x00a00000 

3"

0x00a00000-- 

0x00e00000 

4"

0x00e00000-- 

0x01800000 

5"

0x01800000-- 

0x03000000 

6"

0x00300000-- 

0x04000000 

7"

kernelcommalline:

noinitrd 

root=/dev/mtdblock2 

console=ttySAC0 

rootfstype=jffs2

由上面看出,内核会到NANDFlash的0x00400000~0x00800000区间来挂载根文件系统,但事实上通过u-boot烧写根文件系统时,是将其烧写到Nand 

Flash的0x00400000~0x04000000这个区间。

所以内核不能成功挂载根文件系统。

因此,必须修改内核对NandFlash的分区定义,让第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 

smdk_default_nand_part[]={

[0]={

.name 

Bootloader"

.size 

SZ_1M,

offset 

=0, 

},

1]={

kernel"

=SZ_1M, 

SZ_2M+SZ_1M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1