E680i 硬件规格研究以 及 虚拟内存使用研究
新买E680I手机一部,想知道其具体的硬件
E680i的硬件,很多资料上说用的是Intel xscale CPU PAX262,内存是50M等等,到底是不是真的呢?
不过据mot的网站上居然说是(PXA 270) 312MHz CPU
http://sg.motorola.com/pcs/e680i/sg/full_specs.ASP?
这儿有个概念要澄清,对于普通手机用户,所有的资料都在宣传内存有多大多大,然后还可以加SD卡扩内存,加了SD卡,是不是多大的程序都可以运行了,其实真的是这样吗?当然不是的,其实手机中有2种存储空间,1个是FLASH内存(ROM),1个是SDRAM内存(RAM),和电脑比较来说,FLASH相当于硬盘,SDRAM才是真的内存。扩SD卡,加的只是FLASH,对于系统的内存来说,没有任何的可扩充的空间。就是说,你加了SD卡,能存很多的东西,但是对于应用程序来说,如果要求内存太大,系统内存还是一样的不够的。更通俗的说法是,硬盘再大,内存不够还是不够,不会因为硬盘大而内存就够了。电脑上还好一些,因为可以用硬盘做虚拟内存,但是在手机上就不行了,因为FLASH读写太慢,如果用FLASH来虚拟内存,速度将慢到不可想象的地步,所以在嵌入式系统中都不会使用虚拟内存的。LINUX在X86上是有虚拟内存的,不过移植到了嵌入式CPU上,这个功能已经专门关闭了。
关于网上有一篇文章写如何将内存扩成270M,大意是通过换CPU达到扩展内存的目的,只能说那个作者是脑袋坏了,更本一点都不懂开发和内存概念,换个PXA263,没错,芯片是管腿兼容,但是硬件也需要底层软件来配合的,程序不去用那多出来的FLASH空间,再大又有什么用。虽然我们做底层软件一般都会把FLASH存储的做兼容,但是谁知道mot是否也这样做了。再说了,通过换cpu来增加Flash,为什么不用加SD卡的方式,简单实用,要不是脑袋坏了,真的不会这样去想的,再就是他根本不知道FLASH和内存的区别。
在手机中,使用内存状态 看到的是用户可用的FLASH空间大小,而不是内存的大小
使用任务关系器,你看到的才是真正的内存的使用率。
例如,你在手机上打开一个大的PDF文件,无论你如何加多大的SD卡,系统都是会报内存不足的。
mot在内存上的所指上,是明显在误导大家
其实看硬件的构架,最好最简单的方式是拆机,看看使用芯片的型号,就非常清楚了
E680拆机
http://tech.sina.com.cn/mobile/n/2004-10-15/1354441450.shtml
可惜由于mot的狡猾,以及为了起屏蔽作用,把使用的芯片都盖起来了,看不到了。
不过我们还是通过软件来看 :) 执行telnet
先来分析FLASH的大小
# df
Filesystem 1k-blocks Used Available Use% Mounted on
rootfs 55500 55500 0 100% /
/dev/root 55500 55500 0 100% / //根文件系统,只读
/dev/tffsa 16208 16208 0 100% /usr/language //多语言系统文件,只读
/dev/roflash2 408 408 0 100% /usr/setup //配置信息,只读,以上3部分对于手机用户是不可见的
/dev/mtdblock2 5312 1972 3340 38% /ezxlocal //本机自带程序使用空间,可写,很多程序保存的信息就在本目录
/dev/tffsb1 49034 10500 38534 22% /diska //用户空间,可写,做U盘看到的就是本目录
/dev/mmca1 993920 136496 857424 14% /mmc/mmca1 //SD卡,可写
TFFS:The Transaction Flash FileSystem
MTD:Memory Technology Device
这2种都常见的构架在FLASH上的系统
# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00008000 "Bootloader" //系统的bootloader
mtd1: 000e0000 00020000 "Kernel" //linux kenel保存地址
mtd2: 00580000 00020000 "VFM_Filesystem" //被mount成/ezxlocal
mtd3: 00020000 00020000 "Logo" //可能被用作logo保存
#
# ls /dev/ro* -l
brwxr-xr-x 1 root root 62, 0 Jul 28 03:14 /dev/roflash
brwxr-xr-x 1 root root 62, 1 Jan 1 1970 /dev/roflash1
brwxr-xr-x 1 root root 62, 2 Jan 1 1970 /dev/roflash2
# mount
rootfs on / type rootfs (rw)
/dev/root on / type cramfs (rw)
none on /ram type ramfs (rw)
proc on /ram/proc type proc (rw)
/dev/tffsa on /usr/language type cramfs (rw)
/dev/roflash2 on /usr/setup type cramfs (rw)
none on /dev/pts type devpts (rw)
/dev/mtdblock2 on /ezxlocal type vfm (rw,noatime)
/dev/tffsb1 on /diska type vfat (rw,noatime)
/dev/mmca1 on /mmc/mmca1 type vfat (rw,noatime)
从以上信息可以看到E680I的FLASH分区有4种
1、mtd 有4个分区,只mount上了一个
2、roflash 有2个分区,只mount上了一个
3、tffs 有2个分区,都mount上了
4、rootfs cramfs 1个分区,直接mount成了只读的根目录
那么E680I的FLASH大小总共是多少呢,很简单,把所有的FLASH分区加起来就可以了
MTD 0x580000+0x20000+0xe0000+0x20000=0x680000=6.5M 这儿是16进制,换算成10进制就是6.5M
tffs 16208K+49034K=15M+48M=63M 这儿单位是10进制的K,所以换算成M则需要/1024
romflash 408K+romflash1(未知大小)= 估计应该是1M
rootfs 55500=54.2M
全部加起来 大概 124.7,所以估计应该是128M Flash空间
如果使用的是PXA262,则CPU上就自带256Mx16bit的FLASH=64MB Flash,那么要达到128M ,则需要外挂一块64M FLASH。如果使用的是PXA270,则是直接外挂了一块128M FLASH
既然都要用外挂的FLASH,要我肯定会采用PXA270,这样以后芯片还可以升级成更高主频的,不知道MOT的选择如何。
INTEL的PXA CPU很有意思,通过采用的不同主频的CPU和背在背上不同的FLASH芯片来构成各种规格的PXA CPU,就是说PXA262是2颗芯片,1颗312Mhz的CPU和他背上焊接着1颗64M的FLASH。
分析内存大小
# cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 47722496 46727168 995328 0 1085440 25358336
Swap: 0 0 0
MemTotal: 46604 kB
MemFree: 972 kB
MemShared: 0 kB
Buffers: 1060 kB
Cached: 24764 kB
SwapCached: 0 kB
Active: 23052 kB
Inactive: 16764 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 46604 kB
LowFree: 972 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Committed_AS: 60948 kB
看来总共可用供使用的内存大为46604,大概45.5M左右,对比任务关系器,估计可以用的大概27M左右,很小了,大的文件都打不开 :(。不过自然界中是不存在48M的内存的,2、8、16、32、64、128、都是成倍的关系,如果是64M的内存,不知道MOT把其他内存做何用处了???
/ram和/tmp倒是要用一定内存
再来分析CPU的型号
# cat /proc/cpuinfo
Processor : Intel XScale-Bulverde rev 7 (v5l)
BogoMIPS : 291.63
Features : swp half thumb fastmult edsp
CPU implementor : 0x69
CPU architecture: 5TE
CPU variant : 0x0
CPU part : 0x411
CPU revision : 7
Cache type : undefined 5
Cache clean : undefined 5
Cache lockdown : undefined 5
Cache unified : harvard
I size : 32768
I assoc : 32
I line length : 32
I sets : 32
D size : 32768
D assoc : 32
D line length : 32
D sets : 32
Hardware : Motorola Ezx Platform
Revision : 0000
Serial : 0000000000000000
总的来说: CPU是INTEL xscale PXA270,硬盘是128M 用户可用50M 硬盘支持扩展到2G,内存64M 系统可用45.5M 用户可用27M
更正:问过INTEL的芯片代理,据他们报料说MOTO的方案用的是PXA271,CPU自带32M Flash和32M sdram。那E680I应该用是CPU(自带32M flash + 32M sdram)+64Mflash(外挂) +外挂一片sdram(16M或32M 可能多半是16M)=96M flash + 48M SDRAM
比原来推测的少了32M flash,原因是rootfs应该使用了压缩,所以按一般文件50%的压缩比来看,也是可以解释的过去的。
以上都是猜测,如果有时间,应该写个模块,读一下CPU的寄存器,那就真的是清楚了 :)
翻了一下论坛的精华贴,已经有DX使用SD卡来做虚拟内存,达到扩充RAM内存的目的
http://club.ccmove.com/topicdisp ... &TopicID=161078
顺便提一下,linux对虚拟内存支持可以用一下方式鉴别
ps aux | grep kswapd
看看是否有kswapd进程,如果有则可以支持虚拟内存,用swapon命令来启动虚拟内存
测试了一下用SD卡扩展虚拟内存,可惜 bensonwu 提供的swap文件是12M的,使用我用picsel看较大的PDF文件还是内存不够,还想扩得更大。自己用dd做了一个64M的swap文件,swapon居然不认识,晕。没有办法,还是用bensonwu 提供的吧,cp .swapfile .swapfile1,swapon .swapfile1,我想用2个swap文件达到扩24M的目的。打开PDF文件,还是内存不够,看看swap文件的使用率,
# swapon -s
Filename Type Size Used Priority
/mmc/mmca1/.swapfile file 12280 7660 1
/mmc/mmca1/.swapfile1 file 12280 12276 2
还没有满嘛,通过任务管理器看,唉,接近93%了
这样就给我们一个明确的提示,手机原有内存45.5M,可扩展的虚拟内存7660+12276=19936K=19.5M 。这样说明系统软件认定的最大内存空间为45.5+19.5=64M,这也就验证了我上面的观点,E680i用的是64M的内存,只是由于一部分内存用作他用,用户只能用45.5M,而他的软件则没有想到我们会自己把虚拟内存打开,所以他还是按硬件配置的64M来做管理内存,导致其实有更大的虚拟内存也用不了。
在这种情况下,那一部分内存用作他用的空间即使利用起来,也和使用虚拟内存一样,总量只能达到64M,好处只是这19.5M的速度要比虚拟内存要快很多很多。
如果管理内存配置是做在文件中,这个限制应该很容易去掉,如果他直接做死在程序中,那就基本上没有改的可能了。
本来手机的内存也是够大的,主要是怪picsel太傻,看PDF,你本来就是一页一页看,为什么要把所有页都load到内存中。在台式机上可以这样做,移植到手机上,就不能这样了,还当是台式机有海量内存呀。
本文 转发自 MOTOBBS
http://www.motobbs.com/index.php