воскресенье, 22 марта 2009 г.

CeBootLin - автозагрузка Linux/Android из WinCE на Loox 5XX (560/550)

Написал "bootloader" для загрузки Linux/Android из WinCE автоматически при включении КПК. Это не настоящий bootloader, так как он не имеет ничего общего с загрузочными секторами, это просто WinCE приложение, которое начинает свою работу как можно раньше, чтобы загрузить Linux. Я сделал это именно так, а не иначе, из-за того, что не хотел убить свою КПК изменением бут секторов или иметь сложный механизм перепрошивок, обновлений и т.д. Автозагрузка из WinCE мне показалась досточно неплохим решением, имеющим разве что 3-4 секундный проиграш, если сравнивать с нормальным bootloader'ом, который еще помучиться реализовать надо. Также, такая рализация позволяет достаточно легко пропустить загрузку Linux и продолжить загрузку WM5 или WM6.. Код основан на утилите Haret (спасибо им), но я удалил ненужные мне части. Так как загрузчик использует аппаратные регистры для работы с клавиатурой и подсветкой (GPIO/CPLD) Fujitsu Siemens Loox N560/C550, то без изменений кода данный загрузчик не заработает на другой модели КПК...
Когда КПК включается и начинается загрузка WinCE, то ядро WinCE читает список приложений из HKEY_LOCAL_MACHINE\init и запускает их. Таким способом загружается CeBootLin. CeBootLin начинает мигать подсветкой клавиатуры и ждет одну секунду. В то время, пока клавиатура подмигивает, пользователь может нажать и отпустить какую-нибудь кнопку КПК - это сигнал для CeBootLin не продолжать загрузку Linux. Если никакие кнопки нажаты не были, то CeBootLin попытается открыть \CeBootLin\default.txt и будет использовать его в качестве скрипта Haret для загрузки Linux'а.

Итого, чтобы поставить и настроить CeBootLin, надо проделать такие шаги:
1. Скачать CeBootLin.
2. Распаковать содержимое архива в корень основной памяти КПК. CeBootLin.exe должен быть доступен по пути \CeBootLin\CeBootLin.exe.
3. Поместить default.txt в каталог \CeBootLin. Файл default txt может например выглядеть так (для загрузки Andorid'а, например):

set MTYPE 1454
set KERNEL "\CeBootLin\zImage"
set CMDLINE "root=179:3 mem=62M rootdelay=3 boot_delay=0 init=/init console=tty0 fbcon=rotate:0 androidboot.console=tty0 android.checkjni=1"
set RAMADDR 0xA0200000
bootlinux

4. Поместить zImage в каталог \CeBootLin\.

5. Добавить в HKEY_LOCAL_MACHINE\init значение для Launch82 ="CeBootLin.exe" и Depend82 = 14 00.


6. Добавить в HKEY_LOCAL_MACHINE\Loader\SystemPath путь \CeBootLin\

7. Подождать 5 минут или типа того (WinCE нужно время, прежде чем она сохранит обновление в registry).
8. Перезагрузить КПК

Если возникнут какие-то проблемы, то первым делом стоит проверить, а грузит ли CeBootLin.exe вообще ядро... для этого достаточно просто его запустить.

В дальнейшем при желании можно сделать нормальный cab с setup'ом внутри, который, например, будет ставить андройд..

Здесь находятся исходные коды CeBootLinux. CeBootLinux лицензирован под GNU GPL.

3 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Здравствуйте.
    Сделал все по инструкции, выдает следующее:
    Cannot open root device "179:3" or unknown block(179,3)
    Please append correct "root=" boot option; here are tge available partitions:
    b300 7977472 mmcblk0 driver: mmcblk
    b301 7973376 mmcblk0p1

    Подскажите плз, как узнать, на что исправить 179:3, я в линуксе ноль.

    Стоит WM5, zImage брал отсюда:
    http://4pda.ru/forum/index.php?showtopic=80918&view=findpost&p=2765042

    ОтветитьУдалить
  3. Есть проблемма, исходники под ARM а нужны под MIPS. Могли бы помочь? Можно даже и за $$ вот моя ася 468-227-241 мыло djmorgan@mail.ru

    ОтветитьУдалить