Pull to refresh

Comments 17

UFO landed and left these words here
Из того, что «на слуху», можно запустить на некоторых моделях микроконтроллеров STM32. А на FPGA вообще можно и «нормальный» Linux с MMU запустить — главное, чтобы был соответствующий процессор с поддержкой MMU — например MIPSfpga, про который тут несколько раз писали, или OpenRISC, который вообще сложный многоядерный процессор. Вот только проблема с MIPSfpga в том, что, насколько я понял, его нельзя просто так взять и скачать, если ты не студент или преподаватель профильного учреждения.
На NIOS II вроде тоже можно было линукс запускать.
Да, можно и на NIOS2 и на MicroBlaze. Но это не открытые архитектуры и нельзя заглянуть в исходный код. Хотя многие их используют, тот же Altera QSYS позволяет создать систему на кристалле удобно кликая мышкой и не написав ни строчки кода на HDL.
Тут небольшая ремарка — AVR у автора этого проекта эмулирует 32-битный процессор ARMv5TE. Поэтому не совсем правильно считать, что Linux запускается непосредственно на AVR-процессоре. Скорее в «виртуальной машине» поверх AVR :)
ARMv2 у автора этого проекта эмулируется на FPGA, если я всё правильно понял. Но скажу больше, нельзя облечь в логическую конструкцию чёткую разницу между процессором реализованным на железе\на фпга и эмулируемом. В последнем случае операция чаще зависит от состояния регистров\кэша\памяти, но не более того.
Но для начала, надо разобраться, почему «падает» при запуске BusyBox.

первое, что в голову приходит — собрано с CONFIG_NOMMU=y?

Да, конечно. Я пока детально не разбирался, но BusyBox успевает написать в консоль «sh», после чего возникает исключение «undefined instruction», но только на реальной FPGA — в эмуляторе он так и продолжает писать «sh» до бесконечности, плюс выводится сообщение об успешной инициализации источника энтропии. Думаю, решение довольно простое будет, просто пока руки не дошли.

тогда варианты могут быть — в оптимизациях gcc под эту архитектуру и/или в типе поддержке fpu в ядре

UPD: BusyBox теперь запускается. Проблема была в не до конца и не совсем верно портированном коде обработчика асинхронного прерывания в ядре, в результате чего неправильно происходил возврат из обработчика прерывания в код, выполнявшийся до возникновения прерывания.
К сожалению, компилятор Sourcery CodeBench Lite, которым пользовался автор статей о портировании проекта на плату Марсоход, более недоступны для скачивания

Ещё как доступны! Исчезли легконаходимые ссылки, но сами файлы остались доступны.


Вот ссылка на использованный авторами marsohod.org toolchain arm-2012.03-57-arm-none-linux-gnueabi.


Ссылку я подсмотрел в исходниках buildroot: см. файл toolchain/toolchain-external/toolchain-external.mk.


Самый последний Sourcery CodeBench toolchain для ARM — arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2.


P.S. Кстати, в Debian Linux (testing) можно поставить пакет gcc-arm-linux-gnueabi — и будет вам кросскомпилятор.

В публикации указано, что для сборки ядра и bare-metal программ используется один toolchain (arm-non-eabi), а для busybox — другой (arm-buildroot-uclinux-uclibcgnueabi). Криминала большого тут нет, однако, было бы неплохо объяснить, почему сделано именно так.

Тулчейн arm-buildroot-uclinux-uclibcgnueabi по-умолчанию собирает исполняемые файлы в формате bFLT для uCLinux и линкует с uClibc-ng. А arm-none-eabi — собирает ELF и ни с чем не линкует. Можно, конечно, использовать один тулчейн. Просто я начал работу с портирования ядра и собирал его первым тулчейном, а после того, как стало ясно, что ядро работает, взялся за userspace, для которого использовал BuildRoot как некий стандарт, а он собирает свой тулчейн по-умолчанию.
Кому нафиг уперся этот DE2 в 2016 году, с выходом DE1-SoC эта плата потеряла всякую актуальность при космической цене… Единственный плюс наличие HSMC разъема, но кому он нужен есть аналог DE1SoC c ним. К слову на DE1 SoC из коробки запускается убунту.
Sign up to leave a comment.

Articles