25 мая 2011 г.

Танцы на костях или два удара в бубен

Чтобы завести USB-сетевуху D-Link DUB-E100 Rev.B1(т.е. купленную не пять лет назад) на старых ядрах(ещё в 2.6.20 эта проблема вроде присутствует. точнее не скажу), придётся сделать два грязных хака и один удар в бубен.

Удар в бубен:
---
 src/linux-2.6.17/drivers/usb/net/asix.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/linux-2.6.17/drivers/usb/net/asix.c b/src/linux-2.6.17/drivers/usb/net/asix.c
index 12b599a..5d5f5d4 100644
--- a/src/linux-2.6.17/drivers/usb/net/asix.c
+++ b/src/linux-2.6.17/drivers/usb/net/asix.c
@@ -872,6 +872,11 @@ static const struct usb_device_id products [] = {
  USB_DEVICE (0x2001, 0x1a00),
  .driver_info =  (unsigned long) &dlink_dub_e100_info,
 }, {
+ // DLink DUB-E100 
+ USB_DEVICE (0x2001, 0x3c05),
+ .driver_info =  (unsigned long) &ax88772_info,
+}, {
+
  // Intellinet, ST Lab USB Ethernet
  USB_DEVICE (0x0b95, 0x1720),
  .driver_info =  (unsigned long) &ax8817x_info,
-- 
Это для того, чтобы устройство вообще определилось в системе.

Хаки:
---
 src/linux-2.6.17/drivers/usb/net/asix.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/linux-2.6.17/drivers/usb/net/asix.c b/src/linux-2.6.17/drivers/usb/net/asix.c
index 5d5f5d4..829c2ef 100644
--- a/src/linux-2.6.17/drivers/usb/net/asix.c
+++ b/src/linux-2.6.17/drivers/usb/net/asix.c
@@ -589,7 +589,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
 
  msleep(5);
  if ((ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT,
-    0x0001, 0, 0, buf)) < 0) {
+    0x0000, 0, 0, buf)) < 0) {
   dbg("Select PHY #1 failed: %d", ret);
   goto out2;
  }
@@ -614,7 +614,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
  if ((ret = asix_read_cmd(dev, AX88772_CMD_READ_NODE_ID,
     0, 0, ETH_ALEN, buf)) < 0) {
   dbg("Failed to read MAC address: %d", ret);
-  goto out2;
+  //goto out2;
  }
  memcpy(dev->net->dev_addr, buf, ETH_ALEN);
 
@@ -625,7 +625,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
           0x0010, 2, 2, buf)) < 0)
    || (*((u16 *)buf) != 0x003b)) {
   dbg("Read PHY register 2 must be 0x3b00: %d", ret);
-  goto out2;
+  //goto out2;
  }
 
  /* Initialize MII structure */
-- 
Тут выкидывается проверка на PHY ID, поскольку ethernet физика стоит на разных ревизиях разная. Плюс меняется что-то для выбора физики. Без этих хаков MAC-уровень заводится нормально, ip присваивается, мак определяется, но физически данные никуда не уходят. Спасибо LKML и людям пишущим в него, за инфу. http://lkml.org/lkml/2006/7/6/132 http://lkml.org/lkml/2007/1/15/156

18 мая 2011 г.

Настройка SDK для TC65i под Linux

Ничего сложного в этом нет, но есть пара неочевидных моментов.

Во-первых, скачиваем Cinterion TC65i SDK. Гугл в помощь.
Во-вторых, ставим Sun JDK и JRE. Это нужно для последующей установки Sun Wireless Toolkit.
В-третьих ставим Wine.

Дальше ставим всё это добро методами дистрибутива или руками. Тут на любителя.

В качестве IDE рассматриваю NetBeans 7 но работать должно с любой из версий до 6.0. Eclipse - сами.

Устанавливаем Cinterion SDK без интеграции с IDE, оно не надо. Из всего что поставится нужна будет директория "Program Files\Cinterion\TC65i\WTK". Её копируем куда-нибудь в сторонку.

Заходим в скопированную директорию, там заходим в bin и создаём два скрипта preverify и emulator с таким содержимым:
#!/bin/sh
wine (путь к директории WTK)/bin/emulator.exe $*

Аналогичный скрипт для preverify. Может можно использовать и родные от Sun Wireless Toolkit, не проверял.

Дальше запускаем NetBeans и заходим в Tools -> Java platforms.

Делаем "Add Platform", Выбираем "Custom JavaME MIDP platform emulator"

Дальше в Platform Home выбираем скопированную WTK директорию и пишем имя платформы и девайса.

На следующем экране должны быть найдены библиотеки для j2me. Жмём далее.

В раздел Javadoc добавляем директорию WTK/doc - в дальнейшем немного облегчит жизнь в плане подсказок по использованию функций и классов.

Всё. можно создавать J2ME проект. Настройки все будут аналогичны SDK'шным.



В итоге, что есть и чего нет.

Есть:
  • Сборка проекта и получение jar и jad файлов
  • Удобная IDE
  • Работа без тормозной виртуалки
Нет:
  • Загрузки файлов из IDE на устройство
  • Отладки на устройстве

Загрузка файлов на устройство решается использованием утилиты tc65sh Которой требуется библиотека rxtx.


Написано по мотивам:
http://www.xargs.com/linux/tc65-linux.html
http://florent.clairambault.fr/tag/tc65

17 мая 2011 г.

Не верь жене, тормозам и аппноутам

Если вдруг найдутся те, кому надо будет подключить SPI флеш(at45db642d) к at91rm9200 то это заметка для них.

В BSP файле для платы нужно объявить флешку. Делается это так:
static struct spi_board_info dk_spi_devices[] = {
 { /* DataFlash chip */
  .modalias = "mtd_dataflash",
  .chip_select = 0, 
  .bus_num = 0,
  .max_speed_hz = 16000000,
 }
}

потом в процедуре board_init добавляется инициализация spi
at91_add_device_spi(dk_spi_devices, ARRAY_SIZE(dk_spi_devices));

Важно правильно задать chip_select и bus_num, они зависят от разводки платы.

chip_select - тут задаётся номер CS SPI-контроллера на котором висит флешка

bus_num - номер контроллера SPI(их может быть несколько). Нумеруются они с 0.