基于S3C2410的VIVI移植
扫描二维码
随时随地手机看文章
主机:UBUNTU10.04LTS,交叉工具链为:arm-linux-gcc 2.95,安装目录:/usr/local/arm/2.95.3/bin
目标板:Edukit-III,S3c2410子板
问题描述:由于英蓓特公司的Edukit-III实验箱自带的LINUX为2.4版本,鉴于现在LINUX2.6的内核比较流行,因此想在Edukit-III上面移植LINUX2.6.18,在移植LINUX内核之前,首先应该移植VIVI,移植后的VIVI支持在NAND FLASH中启动LINUX,下面把移植过程简单记录一下。
【1.获得VIVI源码】
由于MIZI公司被WIND RIVER收购,因此网上以前提供的VIVI源码下载链接已经无效,FTP下载站点也找不到了VIVI的源码,所以这次就利用了Edukit-III实验箱上提供的VIVI源码来做移植。
【2.NAND FLASH分区划分】
一般情况下,NAND FLASH分为4个区,分别烧写vivi,param,kernel,root,其中vivi为编译好的vivi二进制文件;param为传递到linux kernel的参数,kernel为Linux内核,root为根文件系统,一般情况下这种文件系统为只读的cramfs文件系统,由于该系统不能写,因此这样的文件系统不太方便往开发板下载应用程序,所以希望在NAND FLASH分区中增加一个jffs2文件系统(该分区名字user),这样就可以往jffs2文件系统中写入自己开发的应用程序了。最终NAND FLASH被分为了5个区,分别为:vivi,param,kernel,root,user,这5个区在NAND FLASH中的起始地址和大小如下表所示
Name
offset
size
size
vivi0
0x00020000128kparam0x000200000x0001000064kkernel0x000300000x002d00002M+832Kroot0x003000000x003000003Muser0x006000000x00a0000010M注意,Edukit-III使用的NAND FLASH类型为K9F5608U0,使用Edukit-III提供的Embest Onlie Flash Programmer,打开NAND FLASH烧写时的vivi配置文档(S3C2410&NandFLash_vivi.cfg),可以看到,该NAND FLASH一共有1025个sector,每个sector大小为16K,因此在规划NAND FLASH分区大小的时候,分区尺寸应该为16K的整数倍。按照这样的分区规划,如果制作出来的linux kernel或者文件系统比这个分区的尺寸要大,那么就要对该分区做出调整,重新编译vivi,或者对linux kernel、文件系统进行调整,使得能够适合分区大小。
每个分区的大小是这样考虑的,vivi编译出来一般70K大小,所以第一个vivi分区设置为128K,足够放得下vivi了,param为向LINUX内核传递参数,这个分区64K大小应该够用,kernel分区为存放linux2.6.18内核,该内核编译出来一般2M左右,所以用2M+832K的大小,足够放得下LINUX2.6.18内核,root存放cramfS文件系统,cramfs文件系统为高压缩文件系统,制作出来后一般为2M左右,剩下的分区就全部给user的jffs2文件系统。
【3.VIVI移植过程】
首先把VIVI源码(vivi-20030929.tar.bz2)解压到/usr/src目录下
root@VMUBUNTU:/usr/src# tar xjvf vivi-20030929.tar.bz2
进入到vivi源码目录
root@VMUBUNTU:/usr/src# cd vivi
root@VMUBUNTU:/usr/src/vivi#
(1)修改该目录下的Makefile文件,
第17行改为:LINUX_INCLUDE_DIR= /usr/local/arm/2.95.3/include,该路径为交叉编译工具链的Include目录
第25行改为:CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-,该路径为交叉编译工具链的路径
第88行改为:ARM_GCC_LIBS= /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3,该路径为交叉编译工具链的库所在的目录.保存退出
(2)修改arch/s3c2410/smdk.c,设置NAND FLASH的分区信息,依照上表对NAND FLASH的分区规划,修改如下:
#ifdefCONFIG_S3C2410_NAND_BOOT
mtd_partition_t default_mtd_partitions[]={
{
name:"vivi",
offset:0,
size:0x00020000,
flag:0
},{
name:"param",
offset:0x00020000,
size:0x00010000,
flag:0
},{
name:"kernel",
offset:0x00030000,
size:0x002d0000,
flag:0
},{
name:"root",
offset:0x00300000,
size:0x00300000,
flag:MF_BONFS
},{
name:"user",
offset:0x00600000,
size:0x00a00000,
flag:MF_JFFS2
}
};
其中这里的flash表示分区的标志,这个标志表示了这个分区的用途。通过source insight可以看到,这些标志定义在vivi/include/Priv_data.h
#defineMF_LOCKED 0x00000001
#defineMF_MUSTERASE 0x00000002
#defineMF_BONFS 0x00000004
#defineMF_JFFS2 0x00000008
#defineMF_ISRAM 0x00000010
【4.配置编译运行vivi】
移植完成后,在vivi目录下执行配置编译vivi命令,会在vivi目录下生成vivi二进制文件
root@VMUBUNTU:/usr/src/vivi#make distclean
root@VMUBUNTU:/usr/src/vivi#make menuconfig
root@VMUBUNTU:/usr/src/vivi#make
会在vivi目录下生成vivi二进制文件,通过ls命令查看
root@VMUBUNTU:/usr/src/vivi# ls
arch COPYING CVS Documentation drivers include init libMakefile Rules.make scripts test utilvivivivi-elf vivi.map
打开Euukit-III配套的FLASH烧写程序Embest Online Flash Programmer,先载入烧写VIVI的FLASH配置文档(S3C2410&NandFLash_vivi.cfg),把vivi烧写到NAND FLASH中。注意,烧写之前,一定要把s3c2410子板的SW104跳线短接。烧写完成,重新启动开发板,可以在Windows的超级终端中看到VIVI的如下启动信息
VIVI version 0.1.4 (root@VMUBUNTU) (gcc version 2.95.3 20010315 (release)) #0.1.
4 Sat Oct 23 15:33:59 CST 2010
MMU table base address=0x33DFC000
Succeed memory mapping.
NAND device: Manufacture ID: 0xec, Chip ID: 0x75 (Samsung KM29U256T)
Could not found stored vivi parameters. Use default vivi parameters.
Press Return to start the LINUX now, any other key for vivi
type"help"for help.
在vivi提示符下,输入part show命令,可以看到Flash的分区信息如下
vivi> part show
mtdpart info. (5 partitions)
name offset size flag
------------------------------------------------
vivi : 0x00000000 0x00020000 0 128k
param : 0x00020000 0x00010000 0 64k
kernel : 0x00030000 0x002d0000 0 2M+832k
root : 0x00300000 0x00300000 4 3M
user : 0x00600000 0x00a00000 8 10M
vivi>
表示VIVI移植成功,下一步就要做LINUX2.6.18内核移植了。