分类: LINUX
2008-05-05 23:39:08
一.下载一个纯净版的vivi主要修改几个地方
1.LINUX_INCLUDE_DIR = /kernel/include/(改成你存放linux kernel源代码的地址,因为编译vivi需要用到kernel源代码的部分头文件)----我本来是要把内核升级成2.6的,但是包含2.6的 include就是有问题,只好把他改成2.4的,我的linux就是2.4的,不过这个关系不大.
2.CROSS_COMPILE = arm-linux-(改成你存放交叉编译工具的路径,通常交叉编译工具的路径都已经在profile文件中声明,所以一般直接写arm-linux-)
3.ARM_GCC_LIBS =/usr/local/2.95.3/arm-linux/lib/gcc-lib/arm-linux/2.95.3(改成你安装交叉编译工具的相应路径)- ---用
二.我移植到了开发版里的vivi的版本为1.4.现在讲一下具体修改的过程.
1.首先是拷贝vivi源代码到/home目录,解压缩.然后是修改makefile,具体是:
a. 修改为“LINUX-INCLUDE-DIR = /kernel/include/(改成你存放linux kernel源代码的地址,因为编译vivi需要用到kernel源代码的部分头文件)----我本来是要把内核升级成2.6的,但是包含2.6的 include就是有问题,只好把他改成2.4的,我的linux就是2.4的,不过这个关系不大.
b. 修改为“CROSS-COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-”
c. 修改为"ARM_GCC_LIBS =/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3"
在这里我遇到一个问题,我用
2. 然后是修改arch/s
我将要移植的内核是linux-
古在此将smdk2410.c修改为
#ifdef CONFIG_S
mtd_partition_t default_mtd_partitions[] = {
{
name: "vivi",
offset: 0x00000000,
size: 0x00020000,
flag: 0
}, {
name: "param",
offset: 0x00020000,
size: 0x0010000,
flag: 0
}, {
name: "kernel",
offset: 0x0030000,
size: 0x001c0000,
flag: 0
}, {
name: "root",
offset: 0x00200000,
size: 0x00200000,
flag: 0
//flag: MF_BONFS
}, {
name: "user",
offset: 0x00400000,
size: 0x03ef8000,
flag: 0
}
};
#endif
3. 修改cmd_line,因为我是用linux2.6的内核,还想使用ramdisk,所以设置为:
“char linux_cmd[] = "initrd root=/dev/mtdblock/3
init=/linuxrc console=ttySAC0,115200 mem=
你也可以设为:
“char linux_cmd[] = "initrd root=/dev/mtdblock/3 init=/linuxrc console=ttySAC
4. 然后make menuconfig,主要是去掉ecc。其他的设置就不细说了。
5. 最后,make vivi 就可以的到一个名为vivi的文件,烧到nandflash里
当把vivi烧进去后,可以通过输入part show查看MTD分区情况,这个分区表应该和后面kernel中的MTD分区保持一致,但现在并不是一致的,为什么呢?这是因为刚才你修改的只是vivi第一次启动时候默认的分区设置。具体分区情况要使用bon part命令来分。重新bon分区flash,这是十分必要的,相当于重新分区并格式化了整个flash区,当bon分区后flash里面的数据将全部丢失,所以要再把前面 新生成的vivi烧入目标板上,当然现在就可以只通过串口把vivi烧写进去,不用像第1步那样操作烧写vivi,但是注意bon命令重新分区后千万不要 断电了再烧写vivi,否则就不能通过串口烧vivi了,具体步骤如下:
(1)这里将flash分成4个区(vivi和param只占一个区),输入bon分区命令:
#bon part 0 192K
注:一开始我按网上提供的#bon part 0 192K
解释一下上面的命令:
第1个分区从0开始;
第2个分区从0x30000(即192K)开始;
第3个分区从0x200000(即
第4个分区从0x400000(即
(2)分区成功后,可以通过命令bon part info或者part show来查看bon分区信息,接下来不要断电,直接通过串口下载vivi,但是要注意的是,在linux下用xmodem协议下载文件很有可能出现传输过程中断线或者连不上的情况,但是在windowsXP的附件中的超级终端下通过xmodem传输文件过程却是十分的理想,所以我建议从前面的第3步一开 始就都在windowsXP环境下的超级终端里进行操作(不过我是在linux下操作的),输入命令:
#load flash vivi x
然后点击终端窗口中的传送下的发送文件,采用xmodem协议,选择要下载的vivi码即可.
(3)等待文件传输完毕后,输入boot重启目标板,并按住空格键重新进入vivi模式下,输入命令:
#part show
即可看到重新的分区表:
vivi> part show
mtdpart info. (5 partitions)
name offset size flag
------------------------------------------------
Vivi正常启动后输出信息如下:
此至,VIVI移植圆满完成,在引导内核时我们将根据须要通过param set 命令重新设置内核引导参数。
注:
1.这次修改成功后,下次再烧写vivi时只要烧写这次修改后编译成功的vivi目标代码就可以了,无须再对烧进后的vivi更新了。
2.将kernel烧到nandflash里的时候出现invalid mtd info.信息,就是在使用vivi的load命令的时候出现的问题.用param save也会出现问题.总之就是不能往flash里写东西.看了一下vivi的启动信息,并且和网上人的启动信息比较了一下,发现在memory mapping的时候都是正常的,但是我的启动信息里没有nandflash的id,厂商等信息.于是在windows下用sourceinsight这 个软件将vivi添加到一个工程里,查看main.c(里面可以看出了vivi的启动过程),发现对mtd的初始化等依赖于smc功能,然而我在编译的时 候是把smc掉的.重新编译vivi,make menuconfig,选中smc支持.编译,出错,说什么在mtd.o里什么mtd_nand_ecc没有定义之类的,抱着瞎试的态度,把smc支持下 的关于ecc的项选中,编译通过.然后烧到板子上,启动,果然出现了nandflash的厂商信息,load命令也可以正常使用了