Здравствуйте.
Есть китайский тв бокс на arm amlogic s812, и 2G памяти на борту (4 чипа по 4 Gbit).
Есть ядро из родной прошивки и самосборное из официальных исходников amlogic, оба одной версии 3.10.33.
Есть DTS конфиг из родной прошивки в котором размер памяти указан 1G.
1. загружаю родное ядро с родной DTS - из boot log
...
a) Total memory is 2046 MiB
...
b) Built 1 zonelists in Zone order, mobility grouping on. Total pages: 212752
...
c) Memory: 64MB 16MB 1757MB = 1837MB total
2. загружаю родное ИЛИ самосборное ядро с измененным DTS(общий размер памяти выставил 2G)
...
Total memory is 2046 MiB
...
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 474896
...
Memory: 64MB 16MB 1781MB = 1861MB total
3. самосборное ядро с оригинальным DTS
...
Total memory is 1022 MiB
...
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 212752
...
Memory: 64MB 16MB 757MB = 837MB total
В итоге случай 2 сыпется дампами и глохнет 1 и 3 нормально загружаются, и в /proc/meminfo соответственно
MemTotal: 1871872 kB
и
MemTotal: 835104 kB
Меня терзают сомнения - действительно ли в родном ядре инициализируется 2G или это обманка, т.к.:
1. строка 1a похоже статическая
2. строка 1b говорит что памяти (212752*4096) = 870 Mb, но в строке 1c уже рисует под 2G
цифра строки 1b из исходников ядра (не родного) из
nr_free_zone_pages(gfp_zone(GFP_HIGHUSER_MOVABLE));
где
#define GFP_HIGHUSER_MOVABLE
(__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | __GFP_HIGHMEM | __GFP_MOVABLE)
Кто что думает?