Приветствую.
Прикупил тут дешевый ODM планшет на RockChip 2918, с заявленной RAM 1Gb. Начало dmesg выглядит так:
<6>[ 0.000000] Initializing cgroup subsys cpu
<5>[ 0.000000] Linux version 3.0.8+ (dong@dong) (gcc version 4.4.0 (GCC) ) #872 PREEMPT Mon May 7 09:38:14 CST 2012
<4>[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f
<4>[ 0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
<4>[ 0.000000] Machine: RK29board
<4>[ 0.000000] Memory policy: ECC disabled, Data cache writeback
<4>[ 0.000000] Boot mode: 6
<6>[ 0.000000] bootconsole [earlycon0] enabled
<4>[ 0.000000] CPU SRAM: copied sram code from c0b2f000 to fef00000 - fef01b68
<4>[ 0.000000] CPU SRAM: copied sram data from c0b30b68 to fef03000 - fef031d0
<4>[ 0.000000] clock: pll_wait_lock: wait pll bit 0x4000000 time out!
<4>[ 0.000000] clock: pll_wait_lock: wait pll bit 0x4000000 time out!
<6>[ 0.000000] Clocking rate (apll/dpll/cpll/gpll/core/aclk_cpu/hclk_cpu/pclk_cpu/aclk_periph/hclk_periph/pclk_periph): 300/135/297/288/300/150/75/37/144/144/36 MHz (20110909)
<4>[ 0.000000] DDR DEBUG: version 2.02 20120401, zqonoff
<4>[ 0.000000] DDR DEBUG: DDR3 Device
<4>[ 0.000000] DDR DEBUG: 1 CS, ROW=15, Bank=8, COL=10, Total Capability=1024MB
<4>[ 0.000000] DDR DEBUG: init success!!! freq=426MHz
<4>[ 0.000000] DDR DEBUG: CSR:0x0, RSLR0:0x249, RSLR1:0x0, RDGR0:0x55, RDGR1:0x55
<7>[ 0.000000] On node 0 totalpages: 76032
<7>[ 0.000000] free_area_init_node: node 0, pgdat c0b2d658, node_mem_map c0000000
<7>[ 0.000000] DMA zone: 594 pages used for memmap
<7>[ 0.000000] DMA zone: 0 pages reserved
<7>[ 0.000000] DMA zone: 75438 pages, LIFO batch:15
<7>[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
<7>[ 0.000000] pcpu-alloc: [0] 0
<4>[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 75438
<5>[ 0.000000] Kernel command line: console=ttyS1,115200n8n androidboot.console=ttyS1 init=/init initrd=0x62000000,0x800000 mtdparts=rk29xxnand:0x00002000@0x00002000(misc),0x00004000@0x00004000(kernel),0x00008000@0x00008000(boot),0x00008000@0x00010000(recovery),0x00078000@0x00018000(backup),0x0003a000@0x00090000(cache),0x00200000@0x000ca000(userdata),0x00002000@0x002ca000(kpanic),0x00100000@0x002cc000(system),-@0x003cc000(user) bootver=2011-09-08#2.08 firmware_ver=0.2.3
<6>[ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
<6>[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
<6>[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
<6>[ 0.000000] Memory: 297MB = 297MB total
<5>[ 0.000000] Memory: 274944k/274944k available, 29184k reserved, 0K highmem
То есть, ядро видит только 297 метров памяти. Физически гигабайт, вроде бы, распаян: http://imageshack.us/photo/my-images/215/dsc0625x.jpg/ . Модуль DDR ее видит: «Total Capability=1024MB», но затем: «On node 0 totalpages: 76032».
Строчку «Total Capability» может не искать в ванильном ядре, ее там нет. Она растет из банально огороженного arch/arm/mach-rk29/ddr.o, который есть только в rk29sdk от RockChip, и исходника этого файлика нет вообще нигде в открытом доступе.
Вот что все это значит и как так может быть? Если погуглить на тему RK29board, то можно найти еще dmesg-ы, где размер видимой ядром памяти не соответствует тому что оно говорит в «Total Capability».
Видь ядро 512 метров из этого гигабайта, было бы не так обидно, но 300 метров!… Хочу пинать продавца планшета, что бы он пинал как следует китайцев, но хочу делать это аргументировано.
Заранее большое спасибо.