vivi移植的悲喜交集经过
回忆这几个晚上移植vivi的经历,真是悲喜交集!为此,写下这篇调试笔记,好让想移植vivi的人少走些弯路。更重要的目的是想想抛砖引玉。呵呵,可千万别砸砖头过来。
硬件配置:
PC : IBMT23 (P3 1.13G ,256MB+128MB)―― 经典的老战车
ARM9 Board:GEC2410 64M RAM ,64 NANDFLASH
我在虚拟机上装了个RedFlag 3.2 , linux2.4.18内核。T23差点跑起来差点喘不过气了,看来还得加条大点的条子才行。新的本本买不起,就算买得起也没用,现在的本本都没有串口和并口,对我们这类人来说真的郁闷。
RedFlag 3.2没有 arm gcc,需要自己安装。Linux 2.4.x 对应的arm gcc版本是2.95.3。将开发板光盘里的cross-2.95.3.tar.bz2 copy到WINDOWS下的一个文件夹中(这个文件夹要设置成完全共享)。然后在linux下用“网上邻居”找到这个文件夹,把cross-2.95.3.tar.bz2copy到linux下的某个目录下,我放在/home下。然后解压到/usr/local/arm/2.95.3/bin/arm/.注意:最好按照自己的系统解压到相应的目录下。企图解压到别的地方,可能会出错。我一开始就是解压到/home/下,结果编译出错。
去网上下载个纯净的vivi,最好是到官方网站下载。然后安装同样的方法移到linux下。我移动到/home/.vivi可以解压到其它地方都行,我就解压到/home/下。接下来就是要修改vivi的makefiler了。需要修改的地方有三个:
CROSS_CMPILE
LINUX_INCLUDE_DIR
ARM_GCC_LIBS
根据自己的系统,参照vivi里面的写法,修改这三个地方。我修改后变成:
CROSS_CMPILE =/usr/local/arm/2.95.3/bin/arm-linux-
LINUX-INCLUDE_DIR =/home/kernel/include
ARM_GCC_LIBS =/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3
跟着把linux2.4.18内核源码包移到linux下,我移到/home/。
下面就开始编译vivi了。
不要企图在x界面下编译,当你在x界面下编译 makemenuconfig的时候就会报错:

显示屏太小,显示不完全!!呵呵
只能在命令符下编译。启动RedFlag的时候,按F8进入下面的界面:然后选择console mode

启动linux后进入vivi所在的目录下:
执行 makedisclean -------清除之前的.o文件
Make menuconfig 执行配置,一般选择默认的就可以了。我选择了General setup àsupport reset。结果报错。
可以添加所需要的指令。
保存配置后。就可以执行 make 了。如果最后没有报错的话,说明你的vivi编译通过了。然后把编译好的vivi移到windows下的共享目录中。(因为下面在板上运行vivi需要在windows平台下操作)
在板上运行vivi
用sjf通过JTAG下载vivi到flash的0x0地址中。(我用GEC2410的BIOS下载vivi也行)。
然后用超级终端来操作vivi。
用vivi通过串口下载kernel ,和rootfs太慢了,下载光盘上的rootfs(27M)>1 hour。
最惨的是,下载kernel和rootfs后,引导不了linux。可能是地址不对。
后来用GEC2410自带的BIOS下载kernel 和rootfs到nand flash中。用USB下载就是快。
根据GEC2410的手册上地址分配的说明:

在vivi下执行命令:
boot smc 0x30000 0x1d0000
当出现
NOW,Booting Linux......-----------------------
UncompressingLinux..........................................................dox00020000 0 128k
Para
心里一阵狂喜,因为我移植的vivi算是成功了!!!
但到最后出现
NetWinderFloating Point Emulator V0.95 (c) 1998-1999 Rebel.com
VFS:Cannot open root device "bon/2" or 00:0b
Pleaseappend a correct "root=" boot option
Kernelpanic: VFS: Unable to mount root fs on 00:0b
发现加载不了系统文件。又有新的问题出现了。
后来根据GEC2410上BIOS的地址分配,作了调整。把bon分区和GEC2410上BIOS上的分区一致。
(1) bon part 0 192k 2048k 32m:m
执行 bon part info
显示:
No:offset size flags bad
---------------------------------------------
0: 0x00000000 0x00030000 00000000 0 192k
1: 0x00030000 0x001d0000 00000000 0 1M+832k
2: 0x00200000 0x01e00000 00000000 0 30M
3: 0x02000000 0x01ffc000 00000001 0 31M+1008k
其中0x~0x30000 作为 vivi bootloader
0x30000~0x200000 作为 kernel
0x200000~0x2000000 作为 rootfs
(2)load flash 0x30000 0x1d0000 x
Download 光盘上的zImage 大约化了2分钟时间
(3) load flash 0x200000 0x1e00000 x
Download 光盘上的gec2410_demo.cramfs ,27M ,所需时间>1 hour
经过漫长的等待后,终于download 完了
(4) bootsmc kernel
结果出现的提示一样,还是加载不了rootfs。
在想,是不是rootfs下载的过程中出错了。为了验证一下,就用vividownload GEC2410_BOIS_bin 到板子上。启动linux,linux能正常启动。
还待解决解决问题.......希望高手指点指点。
顺便推荐一遍文章:詹荣开的“嵌入式系统 Boot Loader 技术内幕”
相关连接:http://www-128.ibm.com/developerworks/cn/linux/l-btloader/#1