LINUX.ORG.RU

Объем памяти

 , ,


0

2

Здравствуйте.

Есть китайский тв бокс на 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)

Кто что думает?



Последнее исправление: olegk0 (всего исправлений: 4)

инициализируется не объем а контроллер драма. драм может быть разбит на разные банки и не факт что они находятся в непрерывном линейном физическим адресном пространстве. и таки телепаты в отпуске.

exception13 ★★★★★
()
Ответ на: комментарий от exception13

т.е. вы намекаете что в коде между выводом строк 1b и 1c может происходить добавление куска памяти из другого банка ?

исходников родного ядра у меня нет, инициализация контроллера памяти в uboot, что дополнительно показать?

olegk0
() автор топика

В общем как я и предполагал это обманка, видимо есть проблемы с чипами памяти процессором или на плате. И реально используется 1G памяти.

olegk0
() автор топика

с измененным DTS(общий размер памяти выставил 2G)

показывай как ты так выставил

anonymous
()
Ответ на: комментарий от anonymous

и еще добавь в опции командной строки memblock=debug и ссылку на выхлоп.

ну и традиционный вопрос - версии ядер какие?

anonymous
()
Ответ на: комментарий от anonymous

если ядра сравнительно свежие то можно еще добавить в командную строку memtest (вроде как начиная с 4.1 доступно и для армов) и ссылку на выхлоп

anonymous
()
Ответ на: комментарий от anonymous

1. версия ядра написана в первом сообщении 3.10.33 2. размер памяти у amlogic задается параметром linux,total-memory в DTS 3. в командную строку родного ядра не могу ничего добавить, т.к. она берется из bootloader (uboot)

я еще не написал что в логе родного бутлоадела есть такая строка relocation Offset is: 2feb4000, а для 2Г конфигурации цифра должна быть раза в 2 больше (судя по логам в интернете)

также пробовал использовать другие бутлоадеры (от коробок с подобной конфигурацией) - определяет 2Г памяти и relocation Offset is: 6fec0000 , но теперь любое ядро с любой конфигурацией сваливается. В самосборном с разными активированными дебагами на память дает:

[ 0.704603@0] pagealloc: memory corruption [ 0.704637@0] e19fc097: ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................

вообщем сейчас я пытаюсь собрать бутлоадер (хитрая процедура с использованием 2х компиляторов) и буду пытаться поиграть параметрами инициализации памяти.

olegk0
() автор топика
Ответ на: комментарий от olegk0

linux,total-memory в DTS

это походу из собственное изобретение, которое они обрабатывают своими костылями. сам файл можешь зааплодить куда-нибудь?

строку родного ядра не могу ничего добавить, т.к. она берется из bootloader (uboot)

http://www.denx.de/wiki/view/DULG/LinuxKernelArgs

я пытаюсь собрать бутлоадер (хитрая процедура с использованием 2х компиляторов)

не забудь во дворе похвастать какой ты у мамы какер ;)

anonymous
()
Ответ на: комментарий от anonymous

DTS http://pastebin.com/V043iTkE

костыли тут https://github.com/codesnake/linux-amlogic/blob/master/drivers/of/fdt.c строка 863

за напоминание о возможности изменения параметров из uboot спасибо, но не актуально, родной я грохнул :(

со сборкой бутлоадера сложность что дополнительно используется старый arc компилятор http://sourceforge.net/projects/arc-linux/files/ARC GNU Toolchain, который еще нужно собрать и который не хочет это делать на debian jessie.

и собственно я тему закрыл, хотя могу и поболтать.

olegk0
() автор топика
Ответ на: комментарий от olegk0

DTS http://pastebin.com/V043iTkE

костыли тут https://github.com/codesnake/linux-amlogic/blob/master/drivers/of/fdt.c строка 863

фу какая бяка... но тем не менее если у тебя есть логи с 2-мя гигами, то в чем проблема по ним вытащить вот эти вот параметры: aml_reserved_start, aml_reserved_end, phys_offset?

и собственно я тему закрыл

гуд лак, парниша!

anonymous
()
Ответ на: комментарий от anonymous

Никакой проблемы нет в вытаскивании aml_reserved_start, aml_reserved_end, phys_offset, собственно их и вытаскивать не нужно, т.к. DTS родной (выдран из родного образа).

olegk0
() автор топика
Ответ на: комментарий от anonymous

К ядру (версия от Amlogic) как-бы нет претензий, оно рабочее (используется в частности в сборках OpenELEC).

У меня подозрения на счет ядра и бутлоадера что прошиты в коробке.

Вот конфиг, который я вытащил из родного ядра http://pastebin.com/JJKjZNc5.

Там интересная опция: CONFIG_CYX_2GDDR_ONLY=y

В оригиналах от Amlogic такого нет...

olegk0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.