基于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

 vivi

 0

 0x00020000  128k
 param  0x00020000  0x00010000  64k
 kernel  0x00030000  0x002d0000  2M+832K
 root  0x00300000  0x00300000  3M
 user  0x00600000  0x00a00000  10M
 
注意,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的分区规划,修改如下:

#ifdef CONFIG_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

#define MF_LOCKED 0x00000001
#define MF_MUSTERASE 0x00000002
#define MF_BONFS 0x00000004
#define MF_JFFS2 0x00000008
#define MF_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 lib    Makefile Rules.make scripts test util vivi vivi-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内核移植了。

你可能感兴趣的:(vi)