Самый маленький встроенный дистрибутив Linux?


19

Я хотел бы спросить экспертов там. Какой лучший встроенный дистрибутив Linux для:

  • Флэш-память ~ 700Кб
  • Рам ~ 256Кб
  • Процессор: High End Arm Cortex M3 (например, из семейства STM32)

Необходимые модули: - ядро ​​ядра - базовый набор драйверов: USB / сеть (для WiFi - нет точки доступа, только клиент, нет защиты) / SPI / Uart / I2C

Это вообще возможно или я сплю?

Идея состоит в том, чтобы использовать CortexM3 высшего класса за 5 $ и не использовать внешнюю память, чтобы я мог наслаждаться готовыми драйверами для SDIO / WiFi и т. Д.

  • Я обновил вопрос с уточнением по WiFi. Wi-Fi в том смысле, что это простой, запустить обычного клиента. Ничего особенного, возможно, плачь, если я смогу это уместить.

  • Еще одно обновление: как насчет uCLinux?

Ответы:


26

Я бы сказал, что ты спишь. Основной проблемой будет ограниченная оперативная память.

В 2004 году Эрику Байдерману удалось загрузить ядро ​​с 2,5 МБ ОЗУ , с удалением большого количества функциональных возможностей.

Однако это было на x86, а вы говорите об ARM. Поэтому я попытался собрать наименьшее возможное ядро ​​ARM для «универсальной» платформы (одной из самых простых). Я отключил все настраиваемые параметры, в том числе те, которые вы ищете (USB, WiFi, SPI, I2C), чтобы увидеть, насколько малым он станет. Теперь, я только со ссылкой на ядро здесь, и это не включает в себя любые компоненты пользовательского пространства.

Хорошая новость: она уместится в вашей вспышке. Результирующий zImage составляет 383204 байта.

Плохая новость: при 256 КБ ОЗУ она не сможет загрузиться:

$ size obj/vmlinux
  text     data     bss     dec     hex filename
734580    51360   14944  800884   c3874 obj/vmlinux

Сегмент .text больше вашей доступной оперативной памяти, поэтому ядро ​​не может распаковать, не говоря уже о выделении памяти для загрузки, не говоря уже о запуске чего-либо полезного.

Одним из обходных путей будет использование поддержки выполнения на месте (CONFIG_XIP), если ваша система поддерживает это (т. Е. Она может получать инструкции непосредственно из Flash). Тем не менее, это означает, что ваше ядро ​​должно быть разархивировано во флэш-памяти, и 734 кБ> 700 кБ. Кроме того, разделы .data и .bss занимают 66 КБ, оставляя около 190 КБ для всего остального (т. Е. Для всех динамически размещаемых структур данных в ядре).

Это просто ядро. Без необходимых вам драйверов или какого-либо пользовательского пространства.

Так что, да, вам понадобится немного больше оперативной памяти.


1
Отличный ответ ... Я удивлен, увидев, что голое ядро ​​Linux так тяжело ... У меня есть своего рода дополнительный вопрос ... Есть ли какие-нибудь обертки, которые позволяют мне использовать драйверы Linux с другими ОС? Что мне нравится в Linux, так это доступность драйверов. Каждое отдельное оборудование, к которому я прикасаюсь, имеет драйвер linux, и портировать его всегда сложно, единственная причина, по которой я интересуюсь Linux, - это действительно драйверы, поэтому вопрос.
Фрэнк

Просто заметка о загрузочной ссылке на ядро. В следующих статьях Эрика я увидел, что ему удалось получить сжатый образ ядра до 190 КБ и без сжатия около 360 К, так что теоретически вы можете поместить его в свою несжатую флэш-память. Больше информации: elinux.org/Linux_Tiny, однако я не знаю, каков статус проекта.
Михаил

5

ИМО, ты мечтаешь. Особенно с USB, сетью и 802.11 / Wi-Fi. Я просто не думаю, что вы можете сделать это, и M3 действительно растягивается.

OpenWRT - это один из самых маленьких и наиболее встраиваемых дистрибутивов Linux, который я знаю для сетей, и его сложно получить под 2 МБ, особенно с Wifi.

Попробуйте взглянуть на высокопроизводительные чипы ARM, если это то, что вам действительно нужно, или используйте платы Broadcom или Atheros, которые в настоящее время широко распространены в маршрутизаторах.


Вы вполне можете быть правы, однако я уточнил вопрос с уточнением по WiFi ... Мне не понадобятся все протоколы, dchp / ip и базовые сокеты ..
Фрэнк

4

У тебя MMU на процессоре? Если вы этого не сделаете, вы можете посмотреть на: http://www.uclinux.org/, который даст вам гораздо меньший размер ядра, чем упомянуто. Он работает для некоторых чипов CortexM3 Atmel, поэтому он может работать для вас. Я не использовал это, так что это только умозрительно. До, я только что увидел, что этот вопрос был обновлен - хорошо, если у вас нет MMU (чего у вас, вероятно, нет), вы не можете использовать «нормальное» ядро, и вам нужно будет использовать ucLinux.


@mihalo спасибо, что указал на uclinux +1 за это. Я задал вопрос об этом .. Ценю, если вы можете протянуть руку ..
Фрэнк

К сожалению, у меня нет особого опыта в этом, я посмотрел на порты ucLinux и все упомянутые там платы имеют внешнюю RAM. Наименьшее ядро ​​(без сжатия), которое я видел, было для ADI Blackfin - что-то вроде 400 КБ, но это не ARM, а для ARM могло бы быть значительно больше. Для микропроцессоров Atmels ARM это было около 1,5 МБ, и все они использовали внешнюю память.
Михаил

Михаил, спасибо, что нашли время, чтобы осмотреться ..
Фрэнк

2

Вы можете рассмотреть NuttX в качестве альтернативы, если вам действительно нужно соответствие POSIX на небольшой платформе, отличной от MMU.


3
Это выглядит довольно аккуратно, но, возможно, стоит включить некоторые плюсы и минусы по сравнению с Linux, чтобы сделать его более полным ответом.
PeterJ

2

Я не помню специфику, но есть компания, которая делает платы с STM32F4 под управлением uCLinux, программное обеспечение можно загрузить, но у них есть как внешняя память, так и флэш-память на этих платах.

В качестве дополнительного примечания, цена настолько высока, что вам лучше получить Pi или Pine64, если вы не хотите использовать это в качестве обучающего опыта. Наша компания изучила этот вопрос и, учитывая стоимость разработки, решила, что если мы будем запускать что-либо на встраиваемых Linux-системах с использованием stm32f4, это будет экономически нецелесообразно, если учесть только стоимость запчастей.


Отличная статья, включающая стоимость спецификации для запуска uClinux на M3 / M4 - electronicdesign.com/embedded/…
Скотт Сейдман

0

UCLinux, вероятно, будет работать. Однако у вас не будет защиты памяти в системе, поскольку у вас нет MMU. Это означает, что любой сбой в любом приложении может повредить всю систему. Вы также можете столкнуться с проблемами фрагментации памяти без MMU. Почему бы не посмотреть на одну из TI Sitaras? Они все еще довольно дешевы, и вы можете использовать на них полноценный Linux, который будет гораздо более гибким.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.