Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux на демоплате SBC8140 c OMAP3730
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Сигнальные процессоры и их программирование - DSP
Gleb80
Приветствую уважаемые, некоторое время назад у меня возникла необходимость познакомиться с Ebedded Linux. Под руки попалась демоплата SBC8140 с мезонином Mini8510, несущим на себе, в свою очередь, микроконтроллер OMAP3730 c DSP и ARM ядрами. Некоторое время я повозился с данной аппаратурой, результатами чего желаю поделиться, вдруг кому-то (такому же чайнику как я sm.gif ) окажется полезным.
Плата поставляется с предустановленными в NANDFLASH загрузчиком 1-го уровня, U-Boot, ядром Linux и rootfs. Естественно, толком не почитав документацию с прилагаемого к плате CD, я сразу же в ходе своих экспериментов затер NAND. Вобщем-то это не страшно, в юзер мануале имеются инструкции по восстановлению, однако, тут кроется один маленький нюанс. Для восстановления содержимого NAND используется SD карта, которую нужно предварительно отформатировать в FAT32 утилитой, указанной в мануале, так вот, версия утилиты должна быть строго та самая, которая указана в документе, иначе (не знаю почему), загрузчик не может стартовать с SD карты. Если что, утилитка у меня есть, могу поделиться.
У меня оказался свободный ноут, который решено было использовать как Host. На ноут поставил Ubuntu 14.04 LTS и по инструкциям из мануала установил toolchain. На этом шаге никаких проблем не возникло.
Далее, перед тем как скомпилить свой первый хело-ворлд, я озадачился связью между host-PC(мой ноут) и демоплатой.
Желательно, чтобы скомпилированный с помощью кросс-платформенного компилятора на host-PC файл (например helloworld), сразу же оказывался доступным для запуска на демоплате. Знающие люди посоветовали использовать NFS. Делал так:
0. Подключаем host-PC и демоплату к локальной сети (я для надежности воткнул их в один свич)
1. Запускаем на host-PC NFS-сервер. Для этого его надо скачать и установить:
Код
sudo apt-get install nfs-kernel-server nfs-common

2. В файл /etc/exports добавляем строчку
Код
/MyDir 192.168.88.230/255.255.255.0(rw,insecure,nohide,all_squash,anonuid=1000,anongid=1000,no_subtree_check)

это значит открыть доступ к папке MyDir (заменить на Ваш путь) клиенту, расположенному по адресу 192.168.88.230 Назначил этот адрес демоплате вручную (как показано ниже). Выбрал именно этот, т.к. команда ifconfig на host-PC сказала, что его адрес 192.168.88.235, ну я решил демоплату поселить поблизости. Заранее в MyDir накидайте несколько файлов в тестовых целях.
3. Подсоединяем демоплату по RS-232 к какому-нибудь компу где запущено консольное приложение, включаем ее и дожидаемся пока загрузится ядро. Чтобы смонтировать удаленную папку выполняем такие действия:
4.
Код
mkdir /target

(например /target, а можете куда Вам больше нравится)
5.
Код
sudo chmod 777 /target

не уверен, что эта команда необходима, но пока все настроил, много раз сталкивался с тем, что не работает именно из-за отсутствия прав.
6.
Код
ifconfig eth0 192.168.88.230

В результате должно появиться сообщение, что link up т.д. Кстати, в ходе загрузки ядра появляется сообщение link down и сети, соответственно сразу после загрузки нет, как это исправить пока не разобрался, может кто подскажет.
7.
Код
mount -o port=2049,nolock,proto=tcp -t nfs 192.168.88.235:/MyDir

адрес Вашего host-PC и полный путь к экспортируемой папке, кстати, без "-o port=2049,nolock,proto=tcp" не работает, может кто-нибудь знает почему?
Теперь проверяем:
9.
Код
ls -la /target

должны стать видимыми файлы, к-рые были накиданы на host-PC в папку MyDir
Для удобства написал маленький скрипт mounthost (опять таки, проверьте права у этого файла) с командами ifconfig и mount и добавил его в /etc/init.d с соответствующими ссылками на него: /etc/rc5.d/S19mounthost и /etc/rc5.d/K19mounthost (ссылки создавать ln -s, без ключа -s скрипт не запустится)

Пока не разобрался как с помощью nfs смонтировать rootfs, вероятно, плохо искал, кто знает где, ткните носом.
BaN
1. Чтобы каждый раз после перезагрузки не выполнять ifconfig добавьте в файл /etc/network/interfaces строки:
auto eth0
iface eth0 inet static
address 192.168.88.230
netmask 255.255.255.0

2. Чтобы каждый раз после перезагрузки не выполнять mount выполните:
sudo echo "192.168.88.235:/MyDir /target nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1800 0 0" >> /etc/fstab

3. По поводу сетевой загрузки, попробуйте так:
Настроить NFS-сервер разрешив доступ к папке с rootfs.
Грузимся в U-Boot и выполняем команды (подправить нужное):
setenv bootargs consoleblank=0 mem=256M console=ttyS0,115200n8 mpurate=1000 vram=12M omapdss.def_disp=lcd omapfb.mode=lcd:4.3inch_LCD root=/dev/nfs rw rootwait earlyprintk noinitrd ip=192.168.88.230:192.168.88.235:192.168.88.1:255.255.255.0:uspd:eth0 nfsroot=192.168.88.235:/rootfs_dir,nolock
boot

PS: А вообще, лучше тему перенести в раздел Linux.
Gleb80
BaN, очень признателен, ценные сведения! Как до работы доберусь, попробую применить.
А сейчас попробую понять как перенести тему... я тут на форуме больше читатель, чем писатель sm.gif
BaN
Цитата(Gleb80 @ Feb 21 2015, 22:59) *
BaN, очень признателен, ценные сведения! Как до работы доберусь, попробую применить.
А сейчас попробую понять как перенести тему... я тут на форуме больше читатель, чем писатель sm.gif

Для переноса темы можете написать в личку кому-нибудь из модераторов, которые сейчас находятся на форуме.
Список модераторов:
http://electronix.ru/forum/index.php?act=S...mp;CODE=leaders
Кто онлайн можно посмотреть в самом конце страницы:
http://electronix.ru/forum/
Gleb80
Спустя время потребовалось проделать ту же процедуру с другой платой - TerAsic DE1-SoC. Собственный пост оказался полезен, так как я уже забыл как это делается. На всякий случай, дописываю сюда один нюанс, на преодоление которого ушло несколько часов, чтобы в последствии снова можно было вспомнить. Небольшое отличие заключалось в том, что в качестве Host-PC выступал ноутбук с Win7, в которой запускалась виртуальная машина VirtualBox, а в ней Ubuntu. Так вот, в настройках сети виртуальной машины по умолчанию стоит NAT, а для того, чтобы можно было подключиться извне по NFS, должно быть установлено "Сетевой мост". Тогда гостевая ОС, в моем слу чае Ubuntu, получит правильный физический IP адрес. Так кажется... sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.