前几天为了解决Qt 4.6.3在SkyEye 1.3.1模拟的s3c2410上运行贼慢的问题,由原先的NFS加载分别换成了NandFlash和NorFlash加载,结果发现都很慢,速度没有本质的提高。想了下速度慢的原因,可能如下:
1:Qt库文件加载过慢。我之前的尝试都是从这点出发的
2:Qt库文件太大,导致内存紧缺
3:SkyEye的硬件模拟导致速度慢
为了做最后尝试,我直接从initrd中加载Qt库文件(解决可能原因一),将s3c2410的内存变态的改成256M(解决可能原因二)。具体做法下:
1. 修改内核配置,将将Boot options->Default kernel command string改成mem=256M console=ttySAC0 root=/dev/ram initrd=0xC0800000,0x04000000 ramdisk_size=65536 rw
2. 修改内核配置,修改Device Drivers->Block devices下的几个值:
(2) Default number of RAM disks
(65536) Default RAM disk size (kbyte)
3. 重新编译内核文件,将vmlinux它拷贝到虚拟s3c2410的目录下
4. 制作新的initrd.img,将其大小设定为32M,然后将原先的BusyBox等文件拷贝过来,然后再将Qt的库文件拷贝过来。
5. 修改文件skyeye.conf,内容如下:
# skyeye config file for S3C2410X
arch: arm
cpu: arm920t
mach: s3c2410x
# physical memory
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00000024
mem_bank: map=F, type=RW, addr=0x80000000, size=0x02000000, file=./norflash.cramfs
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
# mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00108000
# mem_bank: map=M, type=RW, addr=0xc0108000, size=0x006F8000, file=./Image, boot=yes
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x04000000, file=./initrd.img
mem_bank: map=M, type=RW, addr=0xc4800000, size=0x0B800000
# all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020
mem_bank: map=I, type=RW, addr=0x19100300, size=0x00000020
net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1, state=on
lcd: type=s3c2410x, mod=gtk
touchscreen: type=s3c2410x, mod=gtk
nandflash: type=s3c2410x, name=K9F1208U0B, dump=./nand.dump
flash: type=28F128J3A, base=0x80000000, size=0x02000000
sound: type=s3c2410x, mod=pcm, channels=2, bits_per_sample=16, samples_per_sec=22050
uart:mod=term
dbct:state=on
搞定。启动SkyEye,内存识别到256M,initrd加载成功。在这个配置下运行Qt也成功。郁闷的是速度还是一样的慢!至此,问题基本上可以断定是SkyEye的硬件模拟导致Qt运行速度慢的了。