Прогресс RetroBSD
2011-07-21 18:46Юникс 2.11BSD для микроконтроллера PIC32 дозрел до запуска первых процессов. Стартует /sbin/init, запускает /bin/sh (в режиме single user). Удаётся ввести и выполнить команду /bin/date. Возврат обратно в оболочку пока не проходит - неправильно восстанавливается образ процесса из swap-области. Всё это пока на симуляторе. Живой чип будем мучить позже.
--- Start simulation: PC=0x9d006000, JIT disabled
2.11 BSD Unix for PIC32, build #523:
Compiled 2011-07-21 by sergev@ubuntu-sergev:
/home/sergev/Project/retrobsd/trunk/sys/pic32/compile
phys mem = 128 kbytes
user mem = 96 kbytes
swap dev = (0,1)
swap size = 2048 kbytes
root dev = (0,0)
init started
# date
Thu Jul 21 16:19:02 PST 2011
--- Stop simulation
no subject
Date: 2011-07-22 08:12 (UTC)no subject
Date: 2011-07-22 13:13 (UTC)no subject
Date: 2011-07-22 13:23 (UTC)no subject
Date: 2011-07-22 17:32 (UTC)Линукс для микроконтроллеров тоже существует: http://uclinux.org/.
Но он гораздо толще (от мегабайта памяти), нет защиты памяти, ограниченный мультитаскинг.
no subject
Date: 2011-07-22 17:37 (UTC)Вместе со стеком и всеми буферами. Но без TCP/IP, увы.
В качестве дисков используются flesh-карточки SD/MMC.
Сейчас пока /dev/sd0 - корневая файловая система, /dev/sd1 - своппинг.
Потом надо будет объединить их на одном диске.
no subject
Date: 2011-07-22 17:45 (UTC)Памяти хватает только на один процесс пользователя.
Поэтому системный вызов fork() записывает в swap-область копию родительского процесса.
Процесс-потомок выполняет exec("/bin/date"), выдает дату и завершается.
Родитель восстанавливается из свопа и продолжается.
Не то чтобы очень эффективно, но по нынешним временам запись-чтение 100 килобайт с SD-карточки - не особо долгая операция.
no subject
Date: 2011-07-22 21:46 (UTC)Хотя, если подумать, удивительней то, что оно вообще запускается :) Как обычную фрю 2.2.1 запустить на 8 _мегабайтах_ ОЗУ - я знаю, но БСД на 128кб - это выше моего понимания... Благоговею!
no subject
Date: 2011-07-24 05:24 (UTC)no subject
Date: 2011-07-24 14:40 (UTC)