Pull to refresh

Comments 18

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

Один чел запускал Linux на AVR. Link.

Но для начала, надо разобраться, почему «падает» при запуске 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 из коробки запускается убунту.
Only those users with full accounts are able to leave comments. Log in, please.