Я бы сказал, что ты спишь. Основной проблемой будет ограниченная оперативная память.
В 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 КБ для всего остального (т. Е. Для всех динамически размещаемых структур данных в ядре).
Это просто ядро. Без необходимых вам драйверов или какого-либо пользовательского пространства.
Так что, да, вам понадобится немного больше оперативной памяти.
ИМО, ты мечтаешь. Особенно с USB, сетью и 802.11 / Wi-Fi. Я просто не думаю, что вы можете сделать это, и M3 действительно растягивается.
OpenWRT - это один из самых маленьких и наиболее встраиваемых дистрибутивов Linux, который я знаю для сетей, и его сложно получить под 2 МБ, особенно с Wifi.
Попробуйте взглянуть на высокопроизводительные чипы ARM, если это то, что вам действительно нужно, или используйте платы Broadcom или Atheros, которые в настоящее время широко распространены в маршрутизаторах.
источник
У тебя MMU на процессоре? Если вы этого не сделаете, вы можете посмотреть на: http://www.uclinux.org/, который даст вам гораздо меньший размер ядра, чем упомянуто. Он работает для некоторых чипов CortexM3 Atmel, поэтому он может работать для вас. Я не использовал это, так что это только умозрительно. До, я только что увидел, что этот вопрос был обновлен - хорошо, если у вас нет MMU (чего у вас, вероятно, нет), вы не можете использовать «нормальное» ядро, и вам нужно будет использовать ucLinux.
источник
Вы можете рассмотреть NuttX в качестве альтернативы, если вам действительно нужно соответствие POSIX на небольшой платформе, отличной от MMU.
источник
Я не помню специфику, но есть компания, которая делает платы с STM32F4 под управлением uCLinux, программное обеспечение можно загрузить, но у них есть как внешняя память, так и флэш-память на этих платах.
В качестве дополнительного примечания, цена настолько высока, что вам лучше получить Pi или Pine64, если вы не хотите использовать это в качестве обучающего опыта. Наша компания изучила этот вопрос и, учитывая стоимость разработки, решила, что если мы будем запускать что-либо на встраиваемых Linux-системах с использованием stm32f4, это будет экономически нецелесообразно, если учесть только стоимость запчастей.
источник
UCLinux, вероятно, будет работать. Однако у вас не будет защиты памяти в системе, поскольку у вас нет MMU. Это означает, что любой сбой в любом приложении может повредить всю систему. Вы также можете столкнуться с проблемами фрагментации памяти без MMU. Почему бы не посмотреть на одну из TI Sitaras? Они все еще довольно дешевы, и вы можете использовать на них полноценный Linux, который будет гораздо более гибким.
источник