PDA

Просмотр полной версии : Linux удалось запустить на 8-битном микроконтроллере



CityAceE
31.03.2012, 13:58
Ubuntu Linux удалось запустить на 8-битном микроконтроллере

Дмитрий Гринберг, российский программист, проживающий в США, опубликовал (http://dmitry.co/index.php?p=./04.Thoughts/07.%20Linux%20on%208bit) в своем блоге интересную заметку с объяснением того, как ему удалось запустить Linux-дистрибутив Ubuntu 9.04 с ядром 2.6.34 на микроконтроллере ATmega1284p с 8-битным процессором, лишенном блока управления памятью (MMU) и общим объемом встроенной оперативной памяти 256 Кб.

Чтобы добиться запуска ядра Linux на микроконтроллере пришлось применить несколько трюков, оснастив микроконтроллер дополнительным модулем памяти и SD-картой для хранения операционной системы. В качестве дополнительной памяти использован модуль SIMM объемом 16 Мб, чтение и запись ячеек которого осуществляется с помощью программного контроллера, позволяющего добиться производительности примерно в 300 Кб/с при потере около 3% процессорного времени на обновление ячеек памяти каждые 62 мс (эта операция требуется из-за особенностей работы SIMM-памяти).

В качестве хранилища для операционной системы использована SD-карта объемом 1 Гб, которая также управляется с помощью программного SPI-контрллера (мастера), позволяющего достичь производительности в 200 Кб/с. Аппаратный SPI-контроллер, установленный в ATmega1284p Дмитрию так и не удалось заставить работать корректно.

Особого внимания заслуживает метод, примененный для запуска Linux на 8-битном процессоре. Так как портировать ядро на 8-битную архитектуру не представляется возможным, Дмитрий написал эмулятор процессорной архитектуры ARMv5TE и системы на кристалле PXA255, способный работать на процессоре ATmega1284p и реализующий, кроме всего прочего модуль MMU, также необходимый для запуска ядра Linux. По прикидкам Дмитрия, производительность эмулятора оказалась в районе 6.5 кГц, при производительности реального процессора ATmega1284p в 24 Мгц (разгон со штатных 20 Мгц). Во-многом этому поспособствовала реализация кэша инструкций с помощью встроенной в микроконтроллер оперативной памяти, производительностью 5 Мб/с.

С помощью описанных техник на получившейся системе удалось запустить Ubuntu 9.04, загрузка которого до приглашения bash (init=/bin/bash) заняла около двух часов, а загрузка полной версии ОС без X Window до приглашения входа в систему - 6 часов. При этом оказалось возможным даже запустить X-сервер и окружение GNOME, но эта операция требует значительно больше времени. Интересно, что по окончанию загрузки система оказалась вполне пригодной к использованию; на выполнение стандартных команд терминала требовалось не больше одной минуты.

Все наработки проекта находятся в публичном доступе. Список используемых компонентов перечислен в самой статье, исходный код программных компонентов можно получить по этой (http://dmitry.co/images/uARM.zip) ссылке. Также доступен полный образ диска (https://rapidshare.com/files/340265311/jaunty.rel.bz2), готовый к копированию на SD-карту. Видео-демонстрация процесса загрузки и работы опубликована (http://vimeo.com/dmitrygr/uarm1) на видео-хостинге vimeo.

Источник (http://www.opennet.ru/opennews/art.shtml?num=33487)

newart
31.03.2012, 14:09
процессора ATmega1284p в 24 Мгц (разгон со штатных 20 Мгц).
Больше не гонятся? Скажем при охлаждение азотом и т.п.?

vinxru
31.03.2012, 14:19
Можно сделать эмулятор любого процессора на любом процессоре.

bigral
01.04.2012, 20:48
Можно сделать эмулятор любого процессора на любом процессоре.

это эмулятор не процессора а целого компьютера, вот аналогичная разработка http://www.youtube.com/watch?v=5RF45uEaFlU

vinxru
01.04.2012, 21:09
это эмулятор не процессора а целого компьютера, вот аналогичная разработка http://www.youtube.com/watch?v=5RF45uEaFlU

Ага. Тут у нас на форуме то же становится популярным делать эмуляторы компьютеров на ПЛИС/МК.

костя
01.04.2012, 21:47
Вот еслиб мою дженту запустить на 580вм80 или хотябы на 1801вм2 -это была бы фантастика!

vinxru
01.04.2012, 21:50
Вот еслиб мою дженту запустить на 580вм80 или хотябы на 1801вм2 -это была бы фантастика!

Две недели запускаться будет. :)

P.S. Очень вероятно, что в ближайшие годы мы скомпилируем http://ru.wikipedia.org/wiki/Bochs (эмулятор IBM PC) под 1801вм1 для новой БК0010. Сейчас ведется разработка этой БК0010, с более быстрым процессором, с большим объемом памяти и большим разрешением. На ней можно будет запустить Windows 95 и Linux.

костя
01.04.2012, 22:12
Ну две недели -не год,подождать можно,зато какой эффект!+ аптайм =)

e2e4
07.04.2012, 06:20
Можно сделать эмулятор любого процессора на любом процессоре.
+1. Все они не более и не менее, чем машины Тьюринга, из чего по определению следует вышесказанное.

ИМХО автор проекта занимался ерундой. Ничего нового он своим программным подвигом не доказал, тем более, что в конце концов он получил чисто академический, но вовсе не практически значимый результат.

Atari
07.04.2012, 08:40
вероятно, что в ближайшие годы мы скомпилируем http://ru.wikipedia.org/wiki/Bochs
моя система под босхом не работала, висла. эмуляция PC таки кривая :(

bigral
09.04.2012, 11:08
моя система под босхом не работала, висла. эмуляция PC таки кривая :(

что за система? что она использовала такого чего нет в эмуле?

Slesar
09.04.2012, 11:53
Когда уже ждать на спеке эмулятор ПЦ с виндовозом?

Aleksei1983
21.07.2012, 14:55
Интересно, а нельзя ли таким образом установить не linux, а что-то типа Windows 3.х ?

Vitamin
21.07.2012, 15:09
Интересно, а нельзя ли таким образом установить не linux, а что-то типа Windows 3.х ?
Теоретически- можно. Но эмуляция x86 на порядок затратнее, чем arm.