реклама на сайте
подробности

 
 
> linux for at91sam9g20, маленькая память
Drozd2
сообщение Jan 30 2010, 23:01
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Здравия, коллеги!
Спроектировали на работе плату на базе контроллера at91sam9g20. Память и периферию подключали из соображений удобства разводки печатной платы. На готовую систему, естественно, появилось желание поставить линукс. Полезли в интернет, скачали весь материал для кита at91sam9g20ek. Порты переобозначили в соответствии со своей схемой, загрузчики запустились, ядро разворачивается, файловая система не подхватывается. Принципиальное отличие от фирменного кита - оперативная память 32 Мб против их 64 Мб. Возможно файловая система не видна не по этой причине. Предстоит покопаться. На данный момент интересует, если кто через это прошел, что нужно изменить в хедерах и как порезать исходники, чтобы уместить систему в 32 Мб. Резали всю сеть и USB. USB в заголовках отрезали удачно, а сеть не вышло. Компилятор компилит всю папку net, а линкер, естественно, ругается. Больше всего интересует размещение системы в 32 Мб оперативной памяти. Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
dch
сообщение Jan 30 2010, 23:29
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



У Вас бутлодер какой, может быть сделано так, разворачивается ядро в память, передается на неё управление, ядро цепляет файловую систему находящуюся на flash, она знает априори гден она лежит или задается в командной строке ядра, а может быть разворачивается и ядро и файловая система в рам, тогда в командной строке аргументов передаваемых ядру указывается адрес памяти где лежит файловая система.
Go to the top of the page
 
+Quote Post
Drozd2
сообщение Jan 30 2010, 23:38
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Bootloader от Atmel. Bootstrap который. Эту стадию система проходит успешно. Даже с нашими адресами. Файловая система, возможно, не видна из-за заявленной отказности ячеек nand-flash памяти. Я бы об этом сказал с уверенностью, если бы хоть один из компонентов всей системы хоть что-нибудь сказал бы мне о nand-flash памяти.
Чуть не забыл. U-boot тоже проходит успешно. Правда, он тоже не видит nand-flash. Зато ядро всю flash показывает с правильными идентификаторами. Хотя ему никто не говорил, где будет линия BUSY.

Сообщение отредактировал Drozd2 - Jan 30 2010, 23:41
Go to the top of the page
 
+Quote Post
dch
сообщение Jan 31 2010, 00:39
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(Drozd2 @ Jan 31 2010, 02:38) *
Правда, он тоже не видит nand-flash. Зато ядро всю flash показывает с правильными идентификаторами. Хотя ему никто не говорил, где будет линия BUSY.

а её может быть и не быть, статус можно прочитать. а что у Вас u-boot говорит на командочку
printenv - напечатать переменные окружения, в bootcmd команда запуска, bootargs аргументы командной строки передаваемые ядру.
Go to the top of the page
 
+Quote Post
Drozd2
сообщение Feb 1 2010, 09:40
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



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. Не догоняю, как ядру передать адрес файловой системы. И можно ли записать ее по нулевому адресу и передать этот адрес ядру?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 1 2010, 14:39
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(Drozd2 @ Feb 1 2010, 12:40) *
mtdparts=at91_nand:-(root)


Похоже в этом ошибка, потому что вы считаете что "Файловая система по указанию записывается по адресу 0х400000 в nand" а раздел у вас начинается с нулевого адреса - задайте смещение.

mtdparts=at91_nand:размер@смещение(root)

Сообщение отредактировал sasamy - Feb 1 2010, 14:39
Go to the top of the page
 
+Quote Post
dch
сообщение Feb 2 2010, 04:38
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(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
Go to the top of the page
 
+Quote Post
Drozd2
сообщение Apr 12 2010, 23:16
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Не прошло и пол-года, как я разобрался. Ответ был слишком простой, чтобы его сразу найти.
Если кому понадобится, то на самопальных платах с запчастями со своего склада, собранных по самостоятельно составленной схеме, нужно в исходниках переопределить все отличающиеся от фирменной платы подключения и пересчитать скорость работы nand flash. Это один-два файла, одноименных с названием контроллера. А теперь самое интересное. Если оперативной памяти на самодельной плате окажется меньше, чем на фирменной, то в исходниках u-boot переобозначить адрес загрузки сжатого ядра на реально существующий, в моем случае 0х21000000, а к переменной окружения bootargs добавить параметр mem=8M. Тогда появляется долгожданное приветствие login.
Go to the top of the page
 
+Quote Post
dch
сообщение Apr 18 2010, 00:10
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



нет не так, mem=8M Вы специфицируете что у Вас памяти всего 8 мегобайт от 0x200 00000 до 0x208 00000, если у Вас так как Вы написали работате то скорее у Вас 32Mb памяти и Вам нужно прописать mem=32M
Go to the top of the page
 
+Quote Post
Drozd2
сообщение Apr 20 2010, 12:25
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Согласен. 8M мало. Совет этот нашел в /Documentation/memory.txt. Но с этим параметром произошел-таки запуск системы. mem=32M приводит к куче вывода с переходом в итоге в stack overflow, в общем, то же самое, что и вообще без указания mem. Самое большое с чем нормально запускается, это mem=24M и ни грамма больше. free в любом случае показывает максимум памяти меньше, чем реально установлено. Предстоит разобраться.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016