Золотые страницы форума GP2X Community
Новостной форум посвященный консолям GP2X
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   СудокуСудоку    Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Wiz глазами линуксоида: 3. О, Сеть! О! Cеть! O_o

 
Начать новую тему   Ответить на тему    Список форумов GP2X Community -> Статьи сайта
Предыдущая тема :: Следующая тема  
Автор Сообщение
EugeneP

Местный



Возраст: 43
Зарегистрирован: 04.06.2009
Сообщения: 170

Группы: 
[Модераторы Модераторы ]


СообщениеДобавлено: Ср Окт 28, 2009 11:26 pm    Заголовок сообщения: Wiz глазами линуксоида: 3. О, Сеть! О! Cеть! O_o Ответить с цитатой

Сегодня мы попробуем вывести GP2X WiZ в сеть. И у нас получится, обещаю Smile
Получилось не статья, а HOWTO, ну да ладно. Я намеренно уделяю внимание «ненужным» деталям потому как многие пользователи Виза в Линуксе слабы. Парадокс однако.
Вернуться к началу
Посмотреть профильEugeneP сейчас оффлайн  Отправить личное сообщение
EugeneP

Местный



Возраст: 43
Зарегистрирован: 04.06.2009
Сообщения: 170

Группы: 
[Модераторы Модераторы ]


СообщениеДобавлено: Чт Окт 29, 2009 6:20 am    Заголовок сообщения: Ответить с цитатой

Wiz глазами линуксоида: 3.О, Сеть! О! Cеть! O_o

Сегодня мы попробуем вывести на GP2X WiZ. И у нас получится, обещаю Smile
Получилось не статья, а 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 с исходниками ядра.

Здесь же создаём временную папочку для модулей

Код:
mkdir wiz-root


Дальше убеждаем ядро собираться нашим тулчейном

открываем 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 menuconfig


Если появился экран конфигурации ядра, значит мы всё сделали правильно (Иначе изучаем сообщения об ошибках, читаем make help и решаем проблему)

Сначала настроим ядро «совместимо» с Визом. Поскольку конфиг ядра неизвестен (неплохо бы потрясти корейцев на этот счёт), то здесь придётся тыкаться методом проб и ошибок. Я налетел на следующее:

поставить (интересующий меня драйвер был experimental)
Код:
General setup  --->
   [*] Prompt for development and/or incomplete code/drivers


(Обязательно!)
Код:
General setup  --->
   Choose SLAB allocator (SLAB)  --->
      (X)SLAB


Ну и главное Smile
Код:
[*] Enable loadable module support  --->
   [*]   Module unloading
      [*]     Forced module unloading


Теперь основа готова.
Выходим из конфига [Esc],[Esc], Не забываем согласиться с сохранением новой конфигурации.

Пробуем собрать

Код:
make


Если всё прошло без ошибок, значит мы молодцы (Иначе разбираемся с ошибками.)

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

(и убрать все флажки с подкатегорий!)


не забыть Smile
Код:
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.

Перезагружаем Виз.

Открываем на Визе консольку. Набираем:

Код:
modprobe plusb


(если у вас другое устройство, то, естественно пробуем его драйвер, а не plusb)
Если в ответ тишина, значит всё хокей. Убеждаемся набрав lsmod и пронаблюдав наш модуль в памяти.

Если было сообщение об ошибке набираем dmesg | tail и смотрим в чём проблема. (You'r on your own here)

Пробуем девайс: Втыкаем USB-HOST переходник, в него адаптер. Делаем в консоли Виза:

Код:
ifconfig -a


Вот он, красавец, Интерфейс usb0 Smile Уряяя!

6) Собственно сеть

Карта моей сети такова:

[Комп] usb0(10.0.0.1) <--> (10.0.0.10) usb0 [Виз]

Если нужен внешний инет, то гейтом ставим Комп, и на нём делаем форвардинг. Как есть много гуд-гуд мануалов Smile

Лирическое отступление 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


Заливаем на карточку, запускаем. Идем в терминал.

Код:
ping 10.0.0.1


УРРРА!

На компе

Код:
ping 10.0.0.10


УРРА!

Всё. Квест окончен в связи с отсутствием другого сетевого софта для Виза Smile

Вот тут вопрос был как собрать USB-Host кабель.
Инструкция в картинках: http://wiz.rusbase.net/forum/files/usb_host_for_dummiespdf_119.gz



usb-host_for_dummies.pdf.gz
 Описание:
GP2x Wiz USB Host for Dummies

Скачать
 Имя файла:  usb-host_for_dummies.pdf.gz
 Размер файла:  53.47 KB
 Скачано:  1290 раз(а)

Вернуться к началу
Посмотреть профильEugeneP сейчас оффлайн  Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов GP2X Community -> Статьи сайта Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы




Powered by phpBB © 2001, 2005 phpBB Group

Locations of visitors to this page