Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MicroWindows
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Johny
Начал заниматься embedded системами. Выбрал в качестве аппаратной платформы Kontron Xboard на PXA255 с TFT - панелькой 640х480. Портированный Kontron'ом Linux 2.4.19 заработал, но там нет MicroWindows (ради графики все и затевалось). Взял скомпилированную microwindows-arm_tag-0.90-6.arm.rpm из комплекта ELDK, проставил в загрузочный root на development машине вместе с glibc из того же ELDK (загрузка по сети bootp/tftp/nfs). Пытаюсь запустить на taget:
# nano-X
cannot bind to named socket
Хорошо в faq'ах нашел, что nano-X не может создать/удалить named socket "/tmp/.nano-X". У меня каталога /tmp просто не было. Создал.
Дальше поругалась на отсутствие fb0 и tty0
Создал символические ссылки:
# ln -s /dev/fb/0 /dev/fb0
# ln -s/dev/tty /dev/tty0

Теперь при запуске nano-X чистится экран и ничего. А при запуске с терминала на development машине пишет:
# nano-X
Error setting graphics mode: Invalid argument
Cannot initialiase screen

На сайте www.wicrowindows.org куча описаний API, но как запустить nano-X - практически ничего не нашел. Описаний ключей для запуска - нет, как установить режим - нет. Более того, скаченный оттуда сорц не захотел компилироваться - нет файла assert.h, string.h и так далее, куча ошибок при компиляции fblin8.c. Что интересно, это драйвер для 8bpp, а я в конфигурации указывал MWPF_TRUECOLOR565 для 16bpp. Получается скомпилированный microwindows может переключать режимы?

Помогите кто чем может. Заранее благодарен.
Johny
Посмотрел по исходникам. Похоже nano-X при запуске опрашивает fb0 для определения разрешения/глубины цвета. Ошибка Error setting graphics mode: Invalid argument выскакивает на удаленной консоли при попытке перевести ее в графический режим.
Говорят к X-серверу надо ставить диспетчер окон. Какой обычно используется с nano-X?
Harbour
1. Прежде чем пускать что-либо на embedded платформе следует отработать это на host'е.
2. Если nano-x работает поверх fb, то следует для начала настроить/проверить fb, например с помощью fbset
3. диспетчер окон можно поставить любой - вопрос только в количестве свободной памяти и мощности cpu, самый мелкий обычно - twm.
Johny
Цитата
1. Прежде чем пускать что-либо на embedded платформе следует отработать это на host'е.

На Embedded намного проще. Иначе замучаешься host перенастраивать.

Удалось перекомпилировать microwindows. Почему-то компилируется только GCC из ELDK, причем где у него прописаны пути к системным хедерам, я не понял. Лежат они почему-то в /opt/eldk/arm/usr/lib/include.
Кроме того, в config пришлось установить SCREEN_PIXTYPE = MWPF_PALETTE (8bpp), иначе линкер выдавал ошибку линковки макросов PIXELVALTOCOLORVAL и COLORVALTOPIXELVAL в /engine/devdraw.c.
Еще в config пришлось отключить все функции, использующие libz.a, ибо линковщик не захотел линковать /usr/lib/libz.a хост-машины. А при попытке указать путь к /opt/eldk/usr/bin/libz.a, компилятор захотел ее собрать, но не нашел правил.
Путем вставления printf-ов в разные места srvmain.c, с перенаправлением вывода на ttS0, удалось выяснить, что не инициализируется мышь. Почему-то родной EPRINTF("Cannot initialise mouse\n") ничего не выводил.
Отключил мышь в конфигурации - вроде заработало. По крайней мере при запуске примера:
#nan0-X & sleep 1 ; mdemo
рисуются голубые пингвины (палитра 8bpp вместо 16bpp?), окно и органы управления. Но клавиатурный ввод идет непонятно куда. Программа mterm ругается, что не может создать ptyp0.
Что скажете?
Harbour
Проверить включена ли в ядре поддержка ptys и есть ли файл /dev/ptmx и директория /dev/pts
ryhor
Что то вы не с того начали - на мой взгляд.
microwindows замечателеная вещь - там есть чудный документ на несколько страниц с описанием его архитектуры. там в частности сказано:
- наврех он поставляет два набора API на выбор
- снузу ему надо поставить 5 (вроде) функций для рисования - смысла PutPixel GetPixel DrawLine FillRect - уже могу что то напутать. На базе этих функций он сам рисует все остальное.

Т.е. если вы подсуните ему файл в котором реализованы требуемые ему фукнции (правильно прописав его в конфиграции) то он соберется и начнет рисовать.

т.е. конструкция такая

[примитивы] ->[микровиндовс] ->[API] -> [app]

Далее - в наборе поставляется несколько разных [примитивов] - в частности для fb0 - для работы над фреймбуфером. Эти [примитивы] могут облечить вам жизнь - так как, например, фреймбуфер есть много где. Но зато они и не оптимальны.

Т.е. у вас есть варианты
- поиметь нормальный фреймбуфер - такой какой ждет готовая уже прослойка [примитивов] в комплекте микровиндовса
- написать свою прослойку для него с этими 5 функциями.

что лучше и легче - зависит от вашего окружения. в свое время я делал свою прослойку - работало на ура. А затем для другой платы уже пускал на фреймбуфере.
кстати пока я колдовал с железякой - народ писал приложение на Хосте - где был развернут этот же микровиндовс - очень удобная штука.

Итак вам надо
- понять архитектуру микровиндовса - там все просто, но документ то прочитать придется
- разобраться с его конфиг файлом - рекомендую править его в редакторе, а не через гуи что там есть
- разобраться чего микровиндовс от вас ждет
- дать ему это
- по ходу разберетесь и с вводом выводом - как ему сказать что у него есть мышка.

Рекомендую придерживаться данного плана
Если есть вопросы - спрашивайте, но сейчас у меня не развернуто ничего реального.
Johny
Посоветуйте, какой API применять? APIW (Win32) как-то привычнее.

А мышка мне без надобности - в устройстве только кнопки будут.

Посмотрел по исходникам - такое впечатление, что управление окнами с клавиатуры не предусмотрено, кроме ESC - выход. Так ли это?
ryhor
Цитата(Johny @ Apr 19 2006, 17:02) *
Посоветуйте, какой API применять? APIW (Win32) как-то привычнее.

А мышка мне без надобности - в устройстве только кнопки будут.

Посмотрел по исходникам - такое впечатление, что управление окнами с клавиатуры не предусмотрено, кроме ESC - выход. Так ли это?


если win32 привычнее - конечно его и берите. у нас он же был - потому что программист с винловса был - он ловка освоил и начал на микровиндовсе колбасить.
по верхнему API много не могу сказать - я с ним практически не разбирался

кнопки... не помню уже - нокнопки были точно - причем была система окон... там вроде как то информировалось система что нажималась внопка - а слой работающий с самими кнопками сам писал. что то там простое было - вот и не запомнилось.
в том же документе должно быть как ввод нажатий/курсора обслуживать.
grigorybold
Цитата
Что то вы не с того начали - на мой взгляд.
microwindows замечателеная вещь - там есть чудный документ на несколько страниц с описанием его архитектуры. там в частности сказано:
- наврех он поставляет два набора API на выбор
- снузу ему надо поставить 5 (вроде) функций для рисования - смысла PutPixel GetPixel DrawLine FillRect - уже могу что то напутать. На базе этих функций он сам рисует все остальное.

Цитата
Итак вам надо
- понять архитектуру микровиндовса - там все просто, но документ то прочитать придется
- разобраться с его конфиг файлом - рекомендую править его в редакторе, а не через гуи что там есть
- разобраться чего микровиндовс от вас ждет
- дать ему это
- по ходу разберетесь и с вводом выводом - как ему сказать что у него есть мышка.


Никто не пробовал, скажем в СBuilder6 для конвы написать PutPixel GetPixel DrawLine FillRect, прикрутить исходники микровиндоус и файлы примерчика и компильнуть всё это.
Может посоветуете более лёгкий способ разобраться какой исходник к чему относится.
Просто когда я открыл проект микровиндоус то увидел кучу исходников и make- файлов к ним. Кок известно под виндой make- файлы не популярны.
unichorn
Народ, это у меня только неполучается зайти на этот сайт
http://www.wicrowindows.org/ или у других тоже sad.gif
может ктонибудь сбросит nano-x на мой адрес. unichorn [ тузик ] rambler тчк ru.
Заранее спасибо.
aaarrr
Очепятка, должно быть www.microwindows.org

UPD: Действительно не ходит sad.gif Ждите, пока поднимут.
unichorn
Нее результат тотже sad.gif
Понятно.
Evgeny_CD
Цитата(unichorn @ Jul 5 2006, 17:39) *
Нее результат тотже sad.gif
Понятно.
У меня толко что открылось. Сейчас на мыло вышлю.

Так еще поробуйте
ftp://microwindows.censoft.com/pub/microwindows/
unichorn
Огромное спасибо всем откликнувшимся.

Так открылось.
ftp://microwindows.censoft.com/pub/microwindows/

Письмо получил.
grigorybold
После долбежа с конфигуратором всё-таки нано-х компильнулось под asp-линуксом вместе с примерами (запускал demo.sh и другие сценарии - прикольно). Чтобы компильнулось и заработало под линуксом надо компилить с драйверами для X-11 (а не как с фрэймбуфером - по умолчанию).
Под виндой-же пока поставить выше названный эксперимент пока не получается.
Damon
Цитата(grigorybold @ Jul 12 2006, 16:02) *
Чтобы компильнулось и заработало под линуксом надо компилить с драйверами для X-11 (а не как с фрэймбуфером - по умолчанию).

Сегодня тока собрал с FB. При работе с FB, X'ы вообще не нужны. Пара проблем: после ковыряния мышу завел, а клаву так и не получилось. И пускать приходиться из-под root'а иначе ругается что /dev/fb<чего-то> открыть не может. Впринципе, права на файл устройства поправить можно, но мне проще из-под root'а пускать было. :-)
Запускается демка, она запускает процесс nano-x и все это в сумме весит (колонка RES утилиты top) 3-4 метра.
PS. счас у меня X'ы жрут (согласно top) 51 метр.
Johny
Цитата(ryhor @ Apr 19 2006, 17:57) *
кнопки... не помню уже - нокнопки были точно - причем была система окон... там вроде как то информировалось система что нажималась внопка - а слой работающий с самими кнопками сам писал. что то там простое было - вот и не запомнилось.
в том же документе должно быть как ввод нажатий/курсора обслуживать.


Вплотную занялся кнопками (железяка появилась smile.gif , кидает коды нажатых кнопок в ttyS0).
Посмотрел по исходникам: там есть возможность сделать ввод из FIFO "/tmp/.nano-X-softkbd". Для этого в config должно быть указано PIPEKBD Y . Завтра попробую перекомпилировать MicroWindows и перенаправить ttyS0 в /tmp/.nano-X-softkbd.
Johny
как выяснилось, в драйвере pipe-клавиатуры kbd_pipe.c бага!

Читается из pipe и заполняется в переменной MWKEY* buf только младший байт, а старшие - как придется:

Цитата
static int
soft_Read(MWKEY* buf, MWKEYMOD* modifiers, MWSCANCODE* scancode)
{
int cc;
*modifiers = 0; /* no modifiers yet */
*scancode = 0; /* no scancode yet */

cc = read(kbd_fd, buf, 1); /* this is NON BLOCKING read */

if (cc > 0) {
if(*buf == 0x1b)
return -2; /* special case ESC*/
#if _SOFT_DEBUG
EPRINTF("kbd_soft.c: soft_Read(): read '%c', cc = %d\n",
buf[0], cc);
fflush(NULL);
#endif
return 1;
}

return 0;
}


Что интересно, пока до pthread_create не доходит, работало нормально. Наверное компилятор переменные по умолчанию нулями инициализирует.
пришлось подправить:

Цитата
static int
soft_Read(MWKEY* kbuf, MWKEYMOD* modifiers, MWSCANCODE* scancode)
{
unsigned char buf[1];
MWKEY mwkey;
int cc;
*modifiers = 0; /* no modifiers yet */
*scancode = 0; /* no scancode yet */

cc = read(kbd_fd, buf, 1); /* this is NON BLOCKING read */

if (cc > 0) {
mwkey = buf[0];
if(mwkey == 0x1b)
return -2; /* special case ESC*/
#if _SOFT_DEBUG
EPRINTF("kbd_soft.c: soft_Read(): read '%c', cc = %d\n",
mwkey, cc);
fflush(NULL);
#endif
*kbuf = mwkey;
return 1;
}

return 0;
}
Carmack
Для x-board уже есть линукс с ядром 2.6
Johny
Цитата(Carmack @ Mar 21 2007, 12:08) *
Для x-board уже есть линукс с ядром 2.6


X-board PXA? Где дают?
Carmack
Цитата(Johny @ Mar 22 2007, 16:16) *
X-board PXA? Где дают?

У прадавцов X-board в саппорте закажите
Johny
Дабавил в microwindows поддержку PCF шрифтов с big endian расположением байтов и битов, патч послал в список рассылки nanogui

Взял последний снапшот, а они, нехорошие люди, кодировку по умолчанию UTF-8 сделали. Меняется в функцией MwSetTextCoding(). Полдня ковырялся, пока нашел, в чем дело.
С документацией в microwinows как всегда - никак...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.