Полная версия этой страницы:
linux for at91sam9g20
Drozd2
Jan 30 2010, 23:01
Здравия, коллеги!
Спроектировали на работе плату на базе контроллера at91sam9g20. Память и периферию подключали из соображений удобства разводки печатной платы. На готовую систему, естественно, появилось желание поставить линукс. Полезли в интернет, скачали весь материал для кита at91sam9g20ek. Порты переобозначили в соответствии со своей схемой, загрузчики запустились, ядро разворачивается, файловая система не подхватывается. Принципиальное отличие от фирменного кита - оперативная память 32 Мб против их 64 Мб. Возможно файловая система не видна не по этой причине. Предстоит покопаться. На данный момент интересует, если кто через это прошел, что нужно изменить в хедерах и как порезать исходники, чтобы уместить систему в 32 Мб. Резали всю сеть и USB. USB в заголовках отрезали удачно, а сеть не вышло. Компилятор компилит всю папку net, а линкер, естественно, ругается. Больше всего интересует размещение системы в 32 Мб оперативной памяти. Заранее благодарен.
У Вас бутлодер какой, может быть сделано так, разворачивается ядро в память, передается на неё управление, ядро цепляет файловую систему находящуюся на flash, она знает априори гден она лежит или задается в командной строке ядра, а может быть разворачивается и ядро и файловая система в рам, тогда в командной строке аргументов передаваемых ядру указывается адрес памяти где лежит файловая система.
Drozd2
Jan 30 2010, 23:38
Bootloader от Atmel. Bootstrap который. Эту стадию система проходит успешно. Даже с нашими адресами. Файловая система, возможно, не видна из-за заявленной отказности ячеек nand-flash памяти. Я бы об этом сказал с уверенностью, если бы хоть один из компонентов всей системы хоть что-нибудь сказал бы мне о nand-flash памяти.
Чуть не забыл. U-boot тоже проходит успешно. Правда, он тоже не видит nand-flash. Зато ядро всю flash показывает с правильными идентификаторами. Хотя ему никто не говорил, где будет линия BUSY.
Цитата(Drozd2 @ Jan 31 2010, 02:38)

Правда, он тоже не видит nand-flash. Зато ядро всю flash показывает с правильными идентификаторами. Хотя ему никто не говорил, где будет линия BUSY.
а её может быть и не быть, статус можно прочитать. а что у Вас u-boot говорит на командочку
printenv - напечатать переменные окружения, в bootcmd команда запуска, bootargs аргументы командной строки передаваемые ядру.
U-Boot> printenv
bootargs=console=ttyS0,115200 root=/dev/mtdblock0 mtdparts=at91_nand:-(root) rw rootfstype=jffs2
bootcmd=cp.b 0xC0042000 0x22000000 0x210000; bootm
bootdelay=3
baudrate=115200
stdin=serial
stdout=serial
stderr=serial
ethact=macb0
Environment size: 230/16892 bytes
В bootcmd хоть и присутствует адрес 0х22000000, при 32Мб памяти он превращается в 0х20000000. Файловая система по указанию записывается по адресу 0х400000 в nand. Не догоняю, как ядру передать адрес файловой системы. И можно ли записать ее по нулевому адресу и передать этот адрес ядру?
Цитата(Drozd2 @ Feb 1 2010, 12:40)

mtdparts=at91_nand:-(root)
Похоже в этом ошибка, потому что вы считаете что "Файловая система по указанию записывается по адресу 0х400000 в nand" а раздел у вас начинается с нулевого адреса - задайте смещение.
mtdparts=at91_nand:размер@смещение(root)
Цитата(Drozd2 @ Feb 1 2010, 12:40)

В bootcmd хоть и присутствует адрес 0х22000000, при 32Мб памяти он превращается в 0х20000000. Файловая система по указанию записывается по адресу 0х400000 в nand. Не догоняю, как ядру передать адрес файловой системы. И можно ли записать ее по нулевому адресу и передать этот адрес ядру?
строчка
root=/dev/mtdblock0
обозначает что у Вас файловая система лежит на 0 партиции а там наверное загорузчик, а файловая в первой
а cp.b 0xC0042000 0x22000000 0x210000
это скопировать из последовательной флэш, её у Вас наверное нет
обычно при последовательной флэш если образ лежит в виде инитрд :
root=/dev/ram rw initrd=<адрес>,<размер> ramdisk_size=8000
командочкой cp.b копируется образ инитрд из последовательной в рам по <адрес>, а ядро это понимает разворачивает его в /dev/ram
Drozd2
Apr 12 2010, 23:16
Не прошло и пол-года, как я разобрался. Ответ был слишком простой, чтобы его сразу найти.
Если кому понадобится, то на самопальных платах с запчастями со своего склада, собранных по самостоятельно составленной схеме, нужно в исходниках переопределить все отличающиеся от фирменной платы подключения и пересчитать скорость работы nand flash. Это один-два файла, одноименных с названием контроллера. А теперь самое интересное. Если оперативной памяти на самодельной плате окажется меньше, чем на фирменной, то в исходниках u-boot переобозначить адрес загрузки сжатого ядра на реально существующий, в моем случае 0х21000000, а к переменной окружения bootargs добавить параметр mem=8M. Тогда появляется долгожданное приветствие login.
нет не так, mem=8M Вы специфицируете что у Вас памяти всего 8 мегобайт от 0x200 00000 до 0x208 00000, если у Вас так как Вы написали работате то скорее у Вас 32Mb памяти и Вам нужно прописать mem=32M
Drozd2
Apr 20 2010, 12:25
Согласен. 8M мало. Совет этот нашел в /Documentation/memory.txt. Но с этим параметром произошел-таки запуск системы. mem=32M приводит к куче вывода с переходом в итоге в stack overflow, в общем, то же самое, что и вообще без указания mem. Самое большое с чем нормально запускается, это mem=24M и ни грамма больше. free в любом случае показывает максимум памяти меньше, чем реально установлено. Предстоит разобраться.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.