打印

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到内存中。在台式机上可以这样做,移植到手机上,就不能这样了,还当是台式机有海量内存呀。

转自:过滤网址

[ 本帖最后由 upstolove 于 2006-10-16 21:47 编辑 ]