tag:blogger.com,1999:blog-68273632805925329572024-02-08T08:24:51.703+02:00cat **/* | grep яAkshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-6827363280592532957.post-23963477900823888672009-03-22T15:22:00.002+02:002009-03-22T15:48:40.596+02:00CeBootLin - автозагрузка 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, то без изменений кода данный загрузчик не заработает на другой модели КПК...<br />Когда КПК включается и начинается загрузка WinCE, то ядро WinCE читает список приложений из HKEY_LOCAL_MACHINE\init и запускает их. Таким способом загружается CeBootLin. CeBootLin начинает мигать подсветкой клавиатуры и ждет одну секунду. В то время, пока клавиатура подмигивает, пользователь может нажать и отпустить какую-нибудь кнопку КПК - это сигнал для CeBootLin не продолжать загрузку Linux. Если никакие кнопки нажаты не были, то CeBootLin попытается открыть \CeBootLin\default.txt и будет использовать его в качестве скрипта Haret для загрузки Linux'а.<br /><br />Итого, чтобы поставить и настроить CeBootLin, надо проделать такие шаги:<br />1. <a href="http://downloads.akshaal.info/linux-n560-c550/CeBootLin-1.zip?attredirects=0">Скачать</a> CeBootLin.<ad2></ad2><br />2. Распаковать содержимое архива в корень основной памяти КПК. CeBootLin.exe должен быть доступен по пути \CeBootLin\CeBootLin.exe.<br />3. Поместить default.txt в каталог \CeBootLin. Файл default txt может например выглядеть так (для загрузки Andorid'а, например):<pre><br />set MTYPE 1454<br />set KERNEL "\CeBootLin\zImage"<br />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"<br />set RAMADDR 0xA0200000<br />bootlinux<br /></pre><br />4. Поместить zImage в каталог \CeBootLin\.<br /><a href="http://picasaweb.google.com/lh/photo/11wJSVlZKWbWAN3DhaJXSw?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibMt1fqjMm9uy6EMLPY4mwHyfLCOW185T9ijHbvRoLy8Tie-w2iGxszcs56nBWhFItjaSQrtHOE3QU12YELZ74f5LkatyqTaZAScb2U-scZwwV-38A8-2hp8p93up16fgbuqGxGlvoesYb/s400/CeBootEdit-1.png" /></a><br />5. Добавить в HKEY_LOCAL_MACHINE\init значение для Launch82 ="CeBootLin.exe" и Depend82 = 14 00.<br /><a href="http://picasaweb.google.com/lh/photo/00DSupXz9qiOXs43h5f5cA?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA9oV7TAoWKEU_GCw6OXVRJ1BK9hnUP69xa-WuhYHXtKmWV9GY2JCefQgcwiKWIu47XplDAwIOoXSaL9e-R2LxHO7QtgdDxeHcrp0hKaYMT-l436PcYqDbS8anEKXGXnqUqC2gLfGdgFq_/s400/CeBootEdit-3.png" /></a><br /><a href="http://picasaweb.google.com/lh/photo/0Rc2C1G2xiQKk5R0RmvaZg?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKsra4QotvdaOFNtqhXwTExBB-6IzxtGbNG8k_5wEhLbub444YRB3SwXYALep1YHUJIKiHW0QP0JQhOGh46UAY-QDl3DEREPLrKaVHqYCSZawYbzzMOF8364TZ8tK2e9Ng10CO4jEqgmYj/s400/CeBootEdit-4.png" /></a><br />6. Добавить в HKEY_LOCAL_MACHINE\Loader\SystemPath путь \CeBootLin\<br /><a href="http://picasaweb.google.com/lh/photo/hbLfmcNrlr6RpUPvLX_-5A?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhecsc4aDa4i188OdbQynB4cMKKWsC0NBX7w_e2xk_xhGfYBNFqDdAd1U09x7brqDSKQxtPdW-v1-H6HrzWhSZJ6mmcdSaVaCdmDU-icOJBm9vu99JhQ6iDiNAkFEyaLR6c7qnXgrHTHq_K/s400/CeBootEdit-2.png" /></a><br />7. Подождать 5 минут или типа того (WinCE нужно время, прежде чем она сохранит обновление в registry).<br />8. Перезагрузить КПК<br /><br />Если возникнут какие-то проблемы, то первым делом стоит проверить, а грузит ли CeBootLin.exe вообще ядро... для этого достаточно просто его запустить.<br /><br />В дальнейшем при желании можно сделать нормальный cab с setup'ом внутри, который, например, будет ставить андройд..<br /><br /><a href="http://downloads.akshaal.info/linux-n560-c550/CeBootLin-1.tar.gz?attredirects=0">Здесь</a> находятся исходные коды CeBootLinux. CeBootLinux лицензирован под GNU GPL.<ad></ad>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com3tag:blogger.com,1999:blog-6827363280592532957.post-43833809951685196992009-03-15T16:06:00.002+02:002009-03-15T16:09:43.071+02:00Фотографии Android и Linux на Fujitsu-Siemens Loox N560<a href="http://picasaweb.google.com/lh/photo/CUrNwUv_XICGqKQKeMx6rA?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYTyWCI0G04tQ2C5IB7hMG8hB8xxTS9R4Wqzh2l5gUz1SxqrACiQnHKXEkK1oniuJe7DVPy7lb3atRpOTaJf2sVqxp3b_UTCk0K3FBi4L5SKtHutDlSUJTMy3Mg6i73mJ2Irg3Q3JQKwtN/s400/n560-1s.jpg" /></a><br />Сегодня судьба WM5 - загрузить Linux<br /><br /><a href="http://picasaweb.google.com/lh/photo/Wdt450DQpEcjKa1aIu3iUA?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKLGJW-BwuQJWgtqbHTt_mgBxtwqwcAkLNUIYXz5HE6l3SRO51kY0jTCwsBOUCS5wYb4MFXt-ioMlLUlMnbZFjCvV-zwPOweGrWUVtYGVhpyK_8kE4rbI7_SxbNdYI5AwAUaUBIYvhxJCU/s400/n560-2s.jpg" /></a><br />Haret.. все что нужно - нажать Run<br /><br /><a href="http://picasaweb.google.com/lh/photo/LQ7LXZhb1hXw6cwFARC4pg?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoAhm1XwOODQ7HJVbEqCZKUpubw8hFU3wqcZR-J2TkJ6Y4CoLBwQv8yBJoLDMptwc_bb1siIfqb8v5Eal2KEIZLlhxpBmsIZY068X3KPBSL-o1GVEp_8HA2i9QGKnu-Pgugxw5yK-krTOz/s400/n560-3s.jpg" /></a><br />Android на Loox N560<br /><br /><a href="http://picasaweb.google.com/lh/photo/K2EytIW2FJWybumV11UTRg?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfPExtvRBTFgBGjrq8_5nVNThzgVPma48WWa0yeTET00SrhbQahYqiHcnYNqr54nrmAVvVzJ7nHF5736a4Ca0xFut8SLpJgW8Gj1JjqEzXExv_viafVVvSyPGthxhvTye8zaVI1IeZ3nJz/s400/n560-4s.jpg" /></a><br /><a href="http://rus.akshaal.info/2009/03/emdebian-pda-c550n560.html">Установка Debian'а</a> на Loox N560<br /><br /><a href="http://picasaweb.google.com/lh/photo/ReuuEUcxhZ4y-Es7lRGneQ?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDSxbzLLIncA482Nd5wTtRvYB0AyYMcHu3-V9Yayr5Ja8XtilIhk2u0mQ5lmEr-Cws_tXK-Qf_x2AJp5EKqvn4N1ac3vqeuUZgAh3gM0T8LBoXzBzj5IWMr3g1BdF3rB0zrdpb-uow69Xw/s400/n560-5s.jpg" /></a><br /><a href="http://rus.akshaal.info/2009/03/emdebian-pda-c550n560.html">Установка Debian'а</a> на Loox N560Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com6tag:blogger.com,1999:blog-6827363280592532957.post-6141997722341529132009-03-14T19:49:00.003+02:002009-03-14T20:36:07.533+02:00Ядро linux для Loox N560/C550 с рабочим CPLD и светодиодамиДобавил поддержку CPLD и светодиодов. Для CPLD был заюзан драйвер htc-gpio с перечислением адресов регистров CPLD на Fujitsu-Siemens Loox 5XX (N560/C550). Теперь CPLD доступен для других драйверов.<br /><br />Примечательно, как в Linux'е реализована работа с CPLD. По сути, CPLD это чип, содержащий очень простую логику (за счет чего он очень быстр по сравнению с CPU), имеющий входные и выходные "ножки" (pins). Входные и выходные ножки - регистры - проецируются на определенную область памяти CPU. С логической точки зрения работа с CPLD заключается в переключении битов в регистрах CPLD в 0 или 1 (можно еще и читать оттуда, но я об этом тут не буду рассказывать..). Таким же образом выглядит работа с GPIO - общим вводом/выводом CPU: биты регистров CPU таким же образом принимают значение 0 или 1. В ядре Linux уже имеется драйвер GPIO, предоставляющий функции для работы с GPIO разработчикам платформенных драйверов. Также драйвер GPIO имеет механизм расширения, позволяющий другим драйверам/модулям проецировать заданные интервалы портов GPIO таким образом, что при обращении к такому порту произойдет вызов указанных при проецировании функций. Этот механизм используется CPLD драйвером htc-egpio для проецирования CPLD регистров на GPIO порты. Таким образом работа с CPLD идет через обыкновенные методы типа gpio_set_value.<ad2></ad2><br />На основе работающиго CPLD драйвера для Loox N560/C550 реализовал драйвер управления светодиодами КПК. Драйвер экспортирует методы и константы которые другие драйвера (wifi, gps, bluetooth, pm, ...) должны использовать для управления светодиодами. Также драйвер позволяет контролировать светодиоды из userspace пространства путем манипуляций с файлами sysfs. <br /><br />Ниже перечисленны файлы и значения которые могут находиться:<br /><b>/sys/devices/platform/loox5xx-leds.1/keyboard</b>: on, off, any<br />- подсветка клавиатуры<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/left_green</b>: on, off, any<br />- зеленый светодиод с левой стороны. WM5 использует для индикации активности WiFi<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/left_blue</b>: on, off, any<br />- голубой светодиод с левой стороны. WM5 использует для индикации активности Bluetooth<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/left_orange</b>: on, off, any<br />- оранжевый светодиод с левой стороны. WM5 использует для индикации активности GPS на Loox N560<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/right_green</b>: on, off, any<br />- зеленый светодиод на правой стороне КПК. WM5 использует как светодиод доступный приложениям (нотификации и т.д.)<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/right_orange</b>: on, off, blink, any<br />- оранжевый светодиод с правой стороны КПК. WM5 использует для индикации процесса зарядки<br /><br />Где:<br /><b>on</b> - светодиод включен независимо от желаний ядра,<br /><b>off</b> - светодиод выключен независимо от желаний ядра,<br /><b>blink</b> - светодиод мигает независимо от желаний ядра,<br /><b>any</b> - светодиод контролируется ядром.<br /><br />Например, если установить right_orange в состояние on, то светодиод зарядки будет гореть независимо от того, заряжается КПК или нет. Это будет продолжаться до тех пор, пока в файл right_orange не будет записано значение any. После чего, первое же событие (установка КПК в крэдл и т.д.) переключит светодиод в соответствующее состояние. Sysfs интерфейс для светодиодов позволяет использовать светодиоды из программ для нотификации о событиях (пришла почта, кончается заряд и т.д.) с помощью всех доступных на устройстве светодиодов - насколько хватит фантазии. Например следующий shell код мигает подсветкой клавиатуры:<pre><br />while true;<br /> do echo on > /sys/devices/platform/loox5xx-leds.1/keyboard;<br /> sleep 0.1;<br /> echo off > /sys/devices/platform/loox5xx-leds.1/keyboard;<br /> sleep 0.1;<br /> # Condition for break...<br />done<br />echo any > /sys/devices/platform/loox5xx-leds.1/keyboard;</pre><br /><br />Актуальный патч на cupcake ядро андройда качать <a href="http://downloads.akshaal.info/linux-n560-c550/c550-android-kernel-2009-03-14.patch.gz?attredirects=0">здесь</a>.<br /><ad></ad>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com6tag:blogger.com,1999:blog-6827363280592532957.post-72887756924752396952009-03-07T22:51:00.005+02:002009-03-08T12:49:32.445+02:00Ядро linux для Loox N560/C550 с рабочим usbnet'омПосле 3х дней мучений все-таки собрал ядро linux для Fujitsu-Siemens Loox N560/C550. Ядро брал с <a href="http://www.asm32.ru">http://www.asm32.ru</a>. Потратив еще несколько часов разобрался как запустить usbnet (сеть через обычный usb шнурок). Для этого пришлось дополнительно пропатчить pxa27x_udc.c. Сделал diff между текущей версией ядра андройда и теми исходниками (за 02-03-09), что выложены на asm32. В дальнейшем при обновлении ядра в cupcake'овской ветке можно будет просто накладывать этот патч сверху имея в результате и изменения под c550/n560 и исправления/дополнения внесенные в cupcake ветку. <a href="http://downloads.akshaal.info/linux-n560-c550/c550-android-kernel-2009-03-07.patch.gz?attredirects=0">Вот итоговый патч</a> в который также включены изменения для работы usbnet. В патче уже имеется .config, но там не включена поддержка usbnet. <a href="http://downloads.akshaal.info/linux-n560-c550/linux-config-2009-03-07?attredirects=0">Вот другой config</a>, он отличается от того, что в патче (а там тот, что выложен на asm32) поддержкой usbnet, выключенной power management (зачем не знаю, потом надо будет включить обратно), и настройкой для более крупного шрифта в консоли.. может еще чем-то.<br /><br />Собирать ядро можно с помощью любого toolchain'а. Я пробовал собирать с помощью: crosstool-ng, emdebian, а также того, что идет вместе с ядром андройда. Остановился на emdebian'е. Для сборки ядра emdebian'ом необходимо выполнить:<pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-</pre>Предварительно emdebian конечно же нужно установить, например так:<pre><br />apt-get install emdebian-tool<br />emsetup --arch arm</pre>Добавить:<pre><br />deb http://www.emdebian.org/debian/ unstable main</pre><br />в /etc/apt/sources.list и выполнить:<br /><pre>apt-get install linux-kernel-headers-arm-cross gcc-4.2-arm-linux-gnu</pre><br /><br />Готовое ядро запускается haret'ом с конфигом:<pre><br />set MTYPE 1454<br />set KERNEL zImage<br />set CMDLINE "root=179:2 mem=60M rootdelay=3 boot_delay=0 init=/init console=tty0 fbcon=rotate:0 androidboot.console=tty0 android.checkjni=1"<br />set RAMADDR 0xA0200000<br />bootlinux</pre><ad></ad><br />И самое главное! После того, как ядро закинуто на sd карточку, эту sd карточку нужно вставить в КПК и ребутнуть КПК. А уже только после этого грузить haret'ом ядро! Ибо ядро не грузится (либо грузится с вероятностью 10%), если:<br />1. КПК заснула, а потом ее разбудили.<br />2. Вы только что вставили в КПК карточку.<br />Наверное это бага драйвера wince...<br /><br />P.S. Cupcake на который накладывается выложенный патч качается отсюда <a href="http://source.android.com/download"> http://source.android.com/download</a><br /><br />P.P.S. При сборке с поддержкой usbnet опцию CONFIG_USB_ETH_RNDIS<br /> включать не следует! Ибо в этом случае ПК не может нормально соеденится с КПК.. ни cdc_ether ни cdc_subset не видят usb устройство.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0