2014-11-26

vak: (Daemon)
Довел я наконец управление памятью до состояния, когда все работает вполне устойчиво. Система успешно стартует в многопользовательском режиме. Из сетевых интерфейсов, правда, имеется только lo0, да и тот почему-то не пингуется. Надо разбираться.

Чтобы заработали утилиты статуса и статистики (примеры здесь), пришлось провести одну существенную доработку. Традиционно программа пользователя получает данные из памяти ядра, читая устройство /dev/kmem. Но надо знать адреса, для этого считывается таблица символов ядреного бинарника /vmunix. Проблема в том, что во встроенной системе ядро не лежит в файловой системе, а записано в flash-память микроконтроллера, и ни таблицы символов там нет, ни доступа к нему в любом случае.

Но есть простое и эффективное решение: запрашивать адреса символов у самого ядра, тем более что список нужных имен довольно ограниченный. Для этого достаточно расширить стандартный системный вызов sysctl() нужными кодами операций. Все удовольствие - несколько десятков строчек кода в ядре. В машинно-зависимой части, конечно.
Листинг загрузки )
vak: (Daemon)
Если у вас есть плата chipKIT Wi-Fire, вы можете запустить на ней 4.4BSD Unix. Готовый бинарный пакет можно скачать здесь: http://vak.ru/pub/unix/4.4bsd-pic32mz-binaries-0.1.zip

Исходные тексты: http://vak.ru/pub/unix/4.4bsd-pic32mz-sources-0.1.zip

Файл vmunix.hex надо прошить в flash-память платы, например утилитой pic32prog:
    sudo pic32prog -d /dev/ttyUSB0 vmunix.hex
Файл sdcard.img надо записать на micro-SD карточку с помощью команды dd или утилиты Win32 Disk Imager. Например:
    sudo dd bs=32k if=sdcard.img of=/dev/sdc
Здесь /dev/sdc - имя SD-карточки на компьютере (может отличаться).

Скорость консольного порта - 115200 бит/сек. По умолчанию система стартует в многопользовательском режиме. Если нужен однопользовательский режим, держите кнопку 1 нажатой во время перезагрузки.

Да, это MIPS. Вот что значит удачная архитектура. Вы видела когда-нибудь современный Unix, работающий на памяти 512 килобайт? Попробуйте повторить на вашем любимом микроконтроллере.