|
GP2X Community Новостной форум посвященный консолям GP2X
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Сегодня мы попробуем вывести GP2X WiZ в сеть. И у нас получится, обещаю
Получилось не статья, а HOWTO, ну да ладно. Я намеренно уделяю внимание «ненужным» деталям потому как многие пользователи Виза в Линуксе слабы. Парадокс однако.
|
|
Вернуться к началу |
|
|
EugeneP
Местный
Возраст: 43 Зарегистрирован: 04.06.2009 Сообщения: 170
Группы:
|
|
Wiz глазами линуксоида: 3.О, Сеть! О! Cеть! O_o
Сегодня мы попробуем вывести на GP2X WiZ. И у нас получится, обещаю
Получилось не статья, а HOWTO, ну да ладно. Я намеренно уделяю внимание «ненужным» деталям потому как многие пользователи Виза в Линуксе слабы. Парадокс однако.
Цель: вывести Виз в сеть.
Ингредиенты:
1)Виз
2) USB-Host кабель (не продаётся, изготавливается вручную отдельно, см. http://gbx.ru/index.php?showtopic=48266)
3)USB2USB ethernet bridge (или любоe другое USB->Ethernet устройство НАТИВНО поддерживаемое ядром 2.6.24! Это важно! Никакие дилинковские финтифлюшки с дровами «для убунты» не поканают. Только то, на что есть исходники.)
4)Исходники Визовского ядра ( http://dl.openhandhelds.org/cgi-bin/wiz.cgi?0,0,0,0,46,151 )
5)Тулчейн для сборки (можно брать девкит, опенвиз или что угодно другое.)
6)Стационарный комп (или хотспот или роутер гейт в сеть)
7)желательно установленный Linux (нужны утилиты типа depmod, да и проверенный тулчейн есть только под лин и мак, ядро опять же собрать из под винды сложновато)
Все дальнейшие манипуляции проводились на машинке с Gentoo Linux и повторно тестировались на машинке с Sabayon (что по сути одно и то же)
1) Устанавливаем среду сборки.
Я использую openwiz, скачанный с openhdnhelds.org. Распакуем его согласно рекомендациям в /opt/toolchain/ (потребуются права root)
Для удобства определим переменные с путями до утилит. Я добавил в мой их в мой .bashrc
Код: | export OPENWIZ=/opt/toolchainarm-openwiz-linux-gnu
export OPENWIZ_CC_PREFIX=/opt/toolchain/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-
export OPENWIZ_PKG_CONFIG_PATH=/opt/toolchain/arm-openwiz-linux-gnu/lib/pkgconf |
Не забудем обновить окружение: source ~/.bashrc
2) Распакуем и подготовим ядро.
Создаём папочку wiz-kernel (или другую, по вкусу) где нам удобно и распаковываем там ядро.
Код: | tar -xjf linux-2.6.24-pollux-wizr245.bz2 |
получаем папку linux-2.6.24-pollux с исходниками ядра.
Здесь же создаём временную папочку для модулей
Дальше убеждаем ядро собираться нашим тулчейном
открываем linux-2.6.24-pollux/Makefile и ищем строки
Код: | ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
#CROSS_COMPILE ?= arm-wiz-linux-gnueabi- |
Исправим их на:
Код: | ARCH ?= arm
CROSS_COMPILE ?= $(OPENWIZ_CC_PREFIX)
#CROSS_COMPILE ?= arm-linux-
#CROSS_COMPILE ?= arm-wiz-linux-gnueabi- |
Помним что мы заранее определили переменную $OPENWIZ_CC_PREFIX
Далее ищем
Код: | ifeq ("$(CROSS_COMPILE)", "arm-wiz-linux-gnueabi-")
CFLAGS_KERNEL = -fno-tree-scev-cprop
endif
ifeq ("$(CROSS_COMPILE)", "arm-linux-")
CFLAGS_KERNEL =.
endif |
добавляем в конец:
Код: | ifeq ("$(CROSS_COMPILE)", "arm-wiz-linux-gnueabi-")
CFLAGS_KERNEL = -fno-tree-scev-cprop
endif
ifeq ("$(CROSS_COMPILE)", "arm-linux-")
CFLAGS_KERNEL =.
endif
ifeq ("$(CROSS_COMPILE)", "$(OPENWIZ_CC_PREFIX)")
CFLAGS_KERNEL =.
endif |
И напоследок подправим путь для установки модулей, заменим содержимое linux-2.6.24-pollux/.insignal_module_installdir на ../wiz-root например так:
Код: | echo '../wiz-root' > .insignal_module_installdir |
Всё, мы почти готовы.
Для полного счастья (более удобной конфигурации ядра) нам потребуются исходники библиотеки ncurses который следует установить принятым в вашем дистрибутиве способом (пакет ncurses, ncurses-devel, libncurses-devel, libncurses5-dev в зависимости от дистрибутива) Если этого пакета нет то make menuconfig не сработает и вам придётся конфигурировать ядро другим способом (см make help)
3) Настроим ядро
Переходим в linux-2.6.24-pollux и делаем
Если появился экран конфигурации ядра, значит мы всё сделали правильно (Иначе изучаем сообщения об ошибках, читаем make help и решаем проблему)
Сначала настроим ядро «совместимо» с Визом. Поскольку конфиг ядра неизвестен (неплохо бы потрясти корейцев на этот счёт), то здесь придётся тыкаться методом проб и ошибок. Я налетел на следующее:
поставить (интересующий меня драйвер был experimental)
Код: | General setup --->
[*] Prompt for development and/or incomplete code/drivers |
(Обязательно!)
Код: | General setup --->
Choose SLAB allocator (SLAB) --->
(X)SLAB |
Ну и главное
Код: | [*] Enable loadable module support --->
[*] Module unloading
[*] Forced module unloading |
Теперь основа готова.
Выходим из конфига [Esc],[Esc], Не забываем согласиться с сохранением новой конфигурации.
Пробуем собрать
Если всё прошло без ошибок, значит мы молодцы (Иначе разбираемся с ошибками.)
4) Модули aka драйвера
Теперь приступаем к сборке модулей под наше железо.
Лирическое отступление 1. Вот в этом месте я налетел на традиционную для линукса проблему: «для моей дешёвой китайской железяки нет драйвера». Я хоть и специально старался выбрать заведомо поддерживаемое железо, но недоглядел.
Я хотел купить USB-to-USB bridge на базе чипов Prolific 2301/2302 которые давно поддерживаются. Большинство устройств типа USB2COM, «серийных» кабелей для мобилок, USB-to-Ethernet и т.п. адаптеров сделаны именно на этих чипах. В магазине я наше «кабелёк» Gembird UANC22 USB network link cabe, воткнул его в ближайший демонстрационный ноут с линухом сделал lsusb, увидел заветное слово Prolific и довольный пошел к кассе. Каково же было моё удивление, когда воткнув в свой комп этот кабель я обнаружил что он не распознаётся! ЫЫЫЫ! Чип в нём оказался 2501, не 23xx. Внимательней надо читать! >__< к счастью интернет рассказал мне что у чипа PL2501 есть режим совместимости с PL23xx и старые драйвера должны с ним работать.
Ну что ж убедим драйвер признавать девайс за «свой»:
(это, кстати, наглядный пример силы свободного софта: захотел порылся где надо)
драйвер в нашем случае находится здесь:
linux-2.6.24-pollux/drivers/net/usb/plusb.c
Подправим распозновалку устройств, добавив туда наш новодел. Находим в plusb.c строки:
Код: | static const struct usb_device_id products [] = {
{
USB_DEVICE(0x067b, 0x0000), // PL-2301
.driver_info =<>(unsigned long) &prolific_info,
}, {
USB_DEVICE(0x067b, 0x0001), // PL-2302
.driver_info =<>(unsigned long) &prolific_info,
},
{ }, // END
}; |
Добавляем наш девайс (id нам подскажет lsusb):
Код: | static const struct usb_device_id products [] = {
{
USB_DEVICE(0x067b, 0x0000), // PL-2301
.driver_info =<>(unsigned long) &prolific_info,
}, {
USB_DEVICE(0x067b, 0x0001), // PL-2302
.driver_info =<>(unsigned long) &prolific_info,
}, {
USB_DEVICE(0x067b, 0x2501), // PL-2302
.driver_info =<>(unsigned long) &prolific_info,
},
{ }, // END
}; |
Лирическое отступление 2. В связи с тем, что ядро линукса является монолитным и внутренний API меняется от версии к версии, то бинарные драйвера также как и не поддерживаемые в основных ветках исходники практически бесполезны. Выбирая девайс будьте бдительны. Пошарив по настройка ядра вы найдёте полный список поддерживаемых *чипов* (кстати для USB WiFi таковой всего один: ZD1201, для USB Etheternet выбор побогаче: восемь чипов), однако это полбеды, узнать какой в конкретной железке чип цельная проблема. Я лично рекомендую пойти в магазин с ноутом и при выборе железки просить её распаковать, тыкать в ноут и делать lsusb.
Лирическое отступление 3. Вообще говоря можно без всякого меню, напрямую редактировать файл .config предварительно его создав (make help).
Так поехали дальше. Драйвера нам нужно собирать как модули (мы же не хотим заливать своё ядро на Виз), т.е. Выбираем в меню кнопочкой <M>, а не пробелом.
В моём случае (USB-to-USB bridge) нужно выбрать:
Код: | Device Drivers --->
[*] USB support --->
<M> Support for Host-side USB |
(и убрать все флажки с подкатегорий!)
не забыть
Код: | Networking --->
[*] Networking support |
(кстати тут же живёт Wireless, можно сразу собрать ели у вас есть WiFi на чипе ZD1201)
Код: | Device Drivers --->
[*] Network device support --->
USB Network Adapters --->
<M> Multi-purpose USB Networking Framework
<M> Prolific PL-2301/2302 based cables |
(это и есть тот самый plusb.c, который мы обработали напильничком)
Ну вот. Выходим из конфига сохранив изменения. Делаем:
Код: | make modules && make modules_install |
Если всё прошло хорошо, то в папочке ../wiz-root появилась lib/ c деревом модулей внутри.
Теперь всё это можно залить на Виз, но перед этим желательно построить список зависимостей, дабы не париться с ручной загрузкой модулей через insmod.
Идём в wiz-root и делаем.
Код: | /sbin/depmod -b ./ -v 2.6.24
tar -czf wiz-modules.tgz lib |
Ну вот у нас готов архивчик wiz-modules.tgz с модулями.
5) Заливка на Виз и тестирование
ВНИМАНИЕ, ВНИММАНИЕ. ВЫ РИСКУЕТЕ КОКНУТЬ СВОЮ ПРИСТАВКУ ЕСЛИ НЕАККУРАТНО ПЕРЕПИШИТЕ МОДУЛИ КОТОРЫХ ВХОДЯТ В ПРОШИВКУ (брика скорее всего не будет, перепрошьётесь и всё, но неприятно, да.) Я ПРЕДУПРЕДИЛ!
Сделаем скриптик wiz-modules-install.gpe
Код: | #!/bin/sh
D=$(pwd)
cd /
tar -xzf $D/wiz-modules.tgz
cd /usr/gp2x
exec ./gp2xmenu |
Зальём скриптик и архив на карточку. Вставим. Запустим.
Теперь пробуем загрузить модуль. Для этого нам потребуется консоль. Можно использовать сериал кабель, если есть. Если нет рекомендую терминал из Qtopia.
Перезагружаем Виз.
Открываем на Визе консольку. Набираем:
(если у вас другое устройство, то, естественно пробуем его драйвер, а не plusb)
Если в ответ тишина, значит всё хокей. Убеждаемся набрав lsmod и пронаблюдав наш модуль в памяти.
Если было сообщение об ошибке набираем dmesg | tail и смотрим в чём проблема. (You'r on your own here)
Пробуем девайс: Втыкаем USB-HOST переходник, в него адаптер. Делаем в консоли Виза:
Вот он, красавец, Интерфейс usb0 Уряяя!
6) Собственно сеть
Карта моей сети такова:
[Комп] usb0(10.0.0.1) <--> (10.0.0.10) usb0 [Виз]
Если нужен внешний инет, то гейтом ставим Комп, и на нём делаем форвардинг. Как есть много гуд-гуд мануалов
Лирическое отступление 4. Настройку сети на компе я опускаю т.к. у меня там не сильно распространённый дистрибутив, и, кроме того мне пришлось и на тоже нём патчить модуль plusb вышеописанным способом. Короче, кому надо разберётся. А кто пользует линукс только для сборки визовских прог - грузится в альтернативную ОСь и настраивает второй конец моста «согласно документации».
Создаём скриптик для Виза:
Код: | #!/bin/sh
modprobe plusb
ifconfig usb0 10.0.0.10
route add default gw 10.0.0.1 usb0
cd /usr/gp2x
exec ./gp2xmenu |
Заливаем на карточку, запускаем. Идем в терминал.
УРРРА!
На компе
УРРА!
Всё. Квест окончен в связи с отсутствием другого сетевого софта для Виза
Вот тут вопрос был как собрать USB-Host кабель.
Инструкция в картинках: http://wiz.rusbase.net/forum/files/usb_host_for_dummiespdf_119.gz
Описание: |
GP2x Wiz USB Host for Dummies |
|
Скачать |
Имя файла: |
usb-host_for_dummies.pdf.gz |
Размер файла: |
53.47 KB |
Скачано: |
1513 раз(а) |
|
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
Powered by phpBB © 2001, 2005 phpBB Group
|