ubifs文件系统的制作详解Word文档下载推荐.docx
《ubifs文件系统的制作详解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ubifs文件系统的制作详解Word文档下载推荐.docx(53页珍藏版)》请在冰豆网上搜索。
执行命令:
makeclean
(uboot是通用的bootloader,支持多种开发板,所以编译之前先选择使用哪种board)
makemini2440_config
注意:
我用的是mini2440开发板,所以要编译这个开发板使用的uboot,所以这里的目标为mini2440_config,表示选择的board是mini2440
(mini2440_config在Makefile标准术语称为“目标”,可以在uboot顶层Makefile找到该目标)
执行命令(开始编译uboot):
makeCROSS_COMPILE=arm-linux-
2012-04-1913:
55156人阅读(0)
1.在内核顶层目录下使用命令:
makemenuconfig,进入内核配置菜单,添加对UBIFS文件系统的支持。
(补充:
如果菜单里没有<
>
UBIFSfilesystemsupport的选项,一般以上的内核已经支持了UBIFS,所以只需把内核顶层目录下的.config文件里的#CONFIG_MTD_UBI
isnot
set
设置成:
CONFIG_MTD_UBI=y)如图:
之后退出.config文件并保存。
再次进入makemenuconfig菜单这时已经有了<
UBIFSfilesystemsupport的选项,把它设为<
*>
UBIFSfilesystemsupport
"
*"
是编译进内核的意思
2.在arch/arm/plat-s3c24xx/中,添加对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的命令)]
2012-04-1916:
23254人阅读(0)
二、制作ubifs镜像
步骤1:
将文件系统制作成ubifs镜像文件,需要使用工具,该工具可以在网址:
,下载mtd-utils工具包源码编译后获得。
在安装mtd-utils之前首先在系统中安装如下两个软件:
(因为原先我看一些博文给的地址都不可访问,只好按名称东下一个西下一个,编译后都出错没法解决,特此提醒,后来暮然回首,在我的以前做过的文件系统中找到了以下三个经编译后可成功生成ubifs命令工具,(现放我资源里,提供给大家)请放心下载)
a.安装libacl,(我资源里)下载地址:
输入命令:
rpm
-ivh
安装,(我资源里)下载地址:
执行如下命令:
#
tar
zxvf
cd
./configure
make
makeinstall
c.安装
(我资源里)下载地址:
zxvfcd
mtd-utils
#./configur
#make
#makeinstall
步骤2.使用上述安装命令后,被安装到了/usr/local/usr/sbin目录下,可使用命令:
exportPATH=$PATH:
/usr/local/usr/sbin将该路径包含进环境变量,
然后使用命令:
-m2048
-c
2048-e
126976
-r
/nfsroot/rootfs
-o
将根文件系统所在目录rootfs制作为ubifs镜像文件,将该文件拷贝到/tftpboot/目录下等待下载烧写。
(注意,你在哪执行这个命令,生成的.bin镜像就在执行此命令的当前目录下生成)
【注意点:
1.上面制作的ubifs镜像文件使用的命令参数是根据开发板所使用的NANDFlash来确定的,我的NANDFlash容量是256MB,可以适应命令:
-h来查看各个命令选项的意思,我这里只简单的介绍一下:
-r:
要制作成镜像的根文件系统的路径
-m:
最小的I/O操作的大小(也就是NANDFLASH的一个page的大小)
-e:
逻辑擦除块的大小
-p:
物理擦除块的大小
-c:
最大逻辑擦除块的数量
-o:
最终制作成的根文件镜像的文件名
注意点:
2.我原来用
制作成的镜像,启动内核时有错,我曾经的出错现象:
但是发现启动内核时打印此出错信息:
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将先烧进norflash,之后连接好串口线和网线,从norflash启动开发板。
步骤4.设定好网络相关的环境变量,重点是先设置好ipaddr和serverip(因为下面用到tftp协议下载)之后用sav命令保存环境变量;
之后用命令:
tftp
下载到内存地址处。
步骤5:
nanderase060000,将nandflash的前0x60000字节空间擦除掉。
在使用命令:
nandwrite
0
60000,将内存处的烧写到nandflash中。
步骤6:
uImage
nanderase80000
300000,将nandflash的kernel分区擦除掉,在使用命令:
nandwrite
80000
300000,将内存处的uImage烧写到nandflash中。
步骤7:
mtdpartsdefault
使用默认分区对NandFlash进行分区。
nand
eraseroot,擦除root分区。
ubipart
root
2048
,激活root分区进行ubi格式化。
最后使用命令:
ubi
create
rootfs
创建rootfs分区。
原来我用命令:
ubi
part
来激活root分区进行ubi格式化,但是启动内核时出现报错信息(看红字部分),所以按这篇博文改成:
之后就没有报错了
badVIDheaderoffset512,expected2048
cannotinitializeUBI,error-22】
步骤8:
tftp
下载rootfs到默认内存地址处,使用命令:
write
$filesize,将内存处大小为$filesize的通过ubi方式烧写到nandflash的对应分区中。
步骤9:
设置启动变量:
bootargs,(bootargs是uboot传给内核的参数,使用命令:
set
bootargs
=3
root=ubi0:
rootfs
rootfstype=ubifs
console=ttySAC0
init=/linuxrc
rw"
设置启动命令:
bootcmd,(bootcmd是uboot启动的命令,输入命令:
bootcmd
nand
read
$filesize;
bootm
最后使用sav命令保存环境变量)
步骤10:
关掉电源,让开发板重新从nand
flash启动,可以看到内核成功加载了我们只做的ubifs文件系统,如图:
[注意点1:
"
中的"
是启动内核的地址,内核启动时自动找到这个地方来启动kernel
;
而前面用过的tftp
xxx
中的"
是内存中的地址(存放在内存地址中的数据掉电后就没了)
注意点2:
如果bootm后面不跟地址,默认是到处寻在内核启动的;
如果bootcmd环境变量写成:
最终这种现象:
如图(因为它到没有找到内核,内核原来由80000的内存地址读到了地址处)
2012-04-2422:
2320人阅读(0)
1.修改晶振频率
S3C2440支持两种频率:
12MHZ和16MHZ.目前市面上出售的开发板大多使用的是12MHZ的晶振,而内核源代码采用的是16MHZ频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的比特率(正确的应该是),这样在超级终端上看到的就是乱码。
因此我们只须修改内核源代码中的晶振频率即可。
将内核顶层目录下的arch/arm/mach-s3c2440/的第180行:
s3c24xx_init_clocks();
改为:
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/文件,将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,
},
2]={
Root
filesystem"
=SZ_4M,
SZ_64M
-SZ_4M,
3]={
Extended"
=SZ_64M,
MTDPART_SIZE_FULL,
}
};
2012-04-2511:
3660人阅读(0)
一.内核构造系统简介
内核是个复杂庞大的系统,对它进行配置、裁剪、编译原本非常地复杂和困难,但现在却只需要简单的两个命令:
(1)make
menuconfig
;
(2)make
uImage就搞定了,原因是在其背后有一个设计精巧的内核构造系统帮助我们精确的完成了各项任务。
内核构造系统最关键的组成元素就是各个目录下的Kconfig文件和Makefile文件,本节将对这两类文件进行介绍,以使大家了解内核构造系统的基本情况,从而能够修改它们,以完成向内核中添加功能组件的目的。
二.Kconfig文件精解
*
Kconfig文件的作用是:
1.
控制makemenuconfig
时,出现的配置选项;
2.根据用户配置界面的选择,将配置结果保存在.config配置文件(该文件将提供给Makefile使用,用以决定要编译的内核组件以及如何编译)。
初始Kconfig文件是arch/arm/Kconfig(Kconfig文件的语法和语义,详情可查阅内核源码中的Documentation/kbuild/文件)
(一)Kconfig文件的基本要素:
config条目(entry)
config
YAFFS_FS
tristate
YAFFS2
file
system
support"
default
y
depends
on
MTD_BLOCK
select
YAFFS_YAFFS1
YAFFS_YAFFS2
help
YAFFS2,or
Yet
Another
Flash
Filing
System,is
a
filing
system
optimised
for
NAND
chips.
To
compile
the
File
support
as
amodule,
choose
Mhere:
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
为变量默认值,可被用户设置值覆盖。