У меня две платы с микроконтроллером pic32mz-da: на одной 128 мегабайт памяти, на другой 32 мегабайта. На обеих установлен Debian. В прошлый раз я тестировал плату 128Мбайт, собирая ядро Linux на ней самой. Процесс занял 10 часов 24 минуты.
Теперь я повторил ровно ту же сборку ядра на плате 32Мбайт. Удивительно, но сборка успешно завершилась, хотя процесс и длился в два с половиной раза дольше: 26 часов 25 минут. Слишком мало памяти для компилятора, чересчур много пейджинга. Но операционная система выстояла под нагрузкой, что вполне неплохо.
Возможно, другие линуксы будут более подходящими для микроконтроллеров. Скажем Void Linux, где вместо systemd применяется компактный runit, а вместо dpkg/apt - шустрый xbps.
Теперь я повторил ровно ту же сборку ядра на плате 32Мбайт. Удивительно, но сборка успешно завершилась, хотя процесс и длился в два с половиной раза дольше: 26 часов 25 минут. Слишком мало памяти для компилятора, чересчур много пейджинга. Но операционная система выстояла под нагрузкой, что вполне неплохо.
Фактически из имеющихся 32 Мбайт RAM для пользовательских программ остаются доступными только 12 мегабайт. Остальное съедают ядро, буфера обмена и компоненты systemd. Смотрите на колонку RSS: Resident Set Size, то есть фактически занимаемое количество памяти:# time make
HOSTCC scripts/basic/fixdep
HOSTCC arch/mips/tools/elf-entry
HOSTCC arch/mips/boot/tools/relocs_32.o
...
CC [M] lib/zlib_inflate/zlib_inflate.mod.o
LD [M] lib/zlib_inflate/zlib_inflate.ko
OBJCOPY arch/mips/boot/vmlinux.bin
real 1585m35.195s
user 597m0.560s
sys 136m33.740s
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDНа самом деле, 12 мегабайт это не так уж мало. Особенно в мире микроконтроллеров, где и 1 мегабайт RAM редко достигается. Просто уж больно толстую операционную систему мы сюда взгромоздили. Но ничего, вполне работает.
root 1 0.0 10.3 10064 2868 ? Ss Nov01 0:51 /sbin/init
root 48 0.0 6.6 16488 1840 ? Ss Nov01 0:13 /lib/systemd/systemd-journald
root 157 0.0 4.7 7872 1320 ? Ss Nov01 0:08 /lib/systemd/systemd-logind
root 434 0.0 4.1 7408 1136 ? Ss Nov01 0:00 /sbin/dhclient
message+ 158 0.0 2.7 6884 756 ? Ss Nov01 0:02 /usr/bin/dbus-daemon
root 166 0.0 2.7 23244 756 ? Ssl Nov01 0:02 /usr/sbin/rsyslogd
root 155 0.0 1.5 5644 424 ? Ss Nov01 0:12 /usr/sbin/cron
root 61 0.0 1.1 13132 304 ? Ss Nov01 0:05 /lib/systemd/systemd-udevd
Возможно, другие линуксы будут более подходящими для микроконтроллеров. Скажем Void Linux, где вместо systemd применяется компактный runit, а вместо dpkg/apt - шустрый xbps.