Jump to content

Rtl8186 Firmware Всем, кто пишет под RTL8186

Ты не понял, в беспроводной сети МАК-уровень есть только между точкой доступа и клиентскими адаптерами. Всё что кроме не поддерживается стандартом. То есть МАК-фильтр на самом деле это разрешение работать определенным адаптерам с точкой доступа... Ты ведь на клиентской точке доступа обязательно включаешь или подмену или клон мак-адреса. В случае с одним компьютером на проводе точки доступа можно использовать макклон, но если там несколько компьютеров, то его использовать нельзя, ты просто не сможешь работать с точкой доступа, она не словить нужный мак-адрес и будет пытаться каждый раз его менять, это занимает время... То есть я рекомендую всем ставить нат2.5 на точки доступа в режиме клиента, кроме случаев одного компьютера, который подключается по pppoe. (вроде были глюки с нат2.5, еще не проверял, скорее всего уже подправлено). А при использовании нат2.5 хоть две сотни компов за клиентской точкой - все они будут видны с одним маком.

Edited by N.leiten

Share this post


Link to post
Share on other sites

N.leiten, подскажите как в Wive можно посмотреть на какой скорости завязались АПшки?

Share this post


Link to post
Share on other sites

Dr. Morg

cat /proc/wlan0/sta_info

там инфо выводится блоками для каждой приассоциированной станции. Смотрите параметры

current_tx_rate: 12

current_rx_rate: 6

 

Первое - скорость передачи, второе - естественно скорость приема (а если быть точным, то скорость передачи удаленной станции)

Share this post


Link to post
Share on other sites

2N.leiten

с маками разобрался опытным путем :)

в этой прошивке есть какая-нибудь команда типа arp, чтобы посмотреть таблицу мак адресов? ну заодно и очистить

и еще... как посмотреть, кто подключен к точке доступа?

---

как посмотреть маки - разобрался :)

cat /proc/net/arp

Edited by brb

Share this post


Link to post
Share on other sites

таблицу мак-адресов можно посмотреть

cat /proc/net/arp

как удалять - не знаю.

 

насчет подключенных клиентов - смотри там же:

cat /proc/wlan0/sta_info - вся инфа о приассоциированных станциях.

Share this post


Link to post
Share on other sites

Dr. Morg

cat /proc/wlan0/sta_info

там инфо выводится блоками для каждой приассоциированной станции. Смотрите параметры

current_tx_rate: 12

current_rx_rate: 6

 

Первое - скорость передачи, второе - естественно скорость приема (а если быть точным, то скорость передачи удаленной станции)

Спасибо за информацию!

 

И так, результаты многочасовых настроек...

 

Удалось нормально сконнектить 2000AP+ и G700AP, где 2000AP+ была в роли AP Client, а G700AP в роли собственно AP.

 

Ставлю 2000AP+ в режим бриджа и нифига не работает! :(

G700AP видит 2000AP+, но почему-то не завязываются они:

# cat /proc/wlan0/sta_info
-- STA info table --
1: stat_info...
    state: 1000
    AuthAlgrthm: 0
    ieee8021x_ctrlport: 0
    hwaddr: 0011957af5b0
    bssrateset: 8c9298a4b0c8e0ec
    aid: 1
    tx_bytes: 0
    rx_bytes: 0
    tx_pkts: 0
    rx_pkts: 0
    tx_fail: 0
    rssi: 0
    wds_tx_bytes: 0
    wds_rx_bytes: 0
    wds_tx_pkts: 0
    wds_rx_pkts: 0
    wds_tx_fail: 0
    expired_time: 500
    sleep: no
    current_tx_rate: 11
    current_rx_rate: 0
    rtk_capability: 0x0000
    link_time: 0 sec

 

Из-за чего такая ерунда может быть?

 

В /etc/network/wifi/wds включил режим WDS и забил MAC 2000AP+,- результат тот же,- в режиме бридж не вяжутся... с отключеным режимом WDS аналогичная картина... :(

Share this post


Link to post
Share on other sites

Ещё такая проблема...

Хотел заюзать WinSCP, раз уж в прошивке Wive имеется dropbear, но софтина ругается:

Unexpected directory listing line 'drwxr-xr-x    6 0        0            1024 var'.

В чём грабли?

 

dropbear сильно обрезаный что ли там?

В WRT54G с прошивкой DD-WRT V23 SP2 и более ранними всё ок работает с тем же dropbear'ом!

Share this post


Link to post
Share on other sites

dropbear действительно может быть обрезан. В LinkSys насколько я помню многие деввайсы с 4мб флеш, а у нас всего 2, поэтому и режем по живому :)

 

ЗЫ. НАсчет WDS, так как общего стандарта нет по орагнизации таких сетей, вполне вероятна ситуация с разной реализацие его и посему несовместимостью WDS сетей.

Edited by N.leiten

Share this post


Link to post
Share on other sites

dropbear действительно может быть обрезан. В LinkSys насколько я помню многие деввайсы с 4мб флеш, а у нас всего 2, поэтому и режем по живому :)
Это только в версиях железа младше 5-й по 4Мб флеша и 16Мб РАММы!

В 5-й версии и новее флеш обрезали до 2Мб, а РАМу до 8Мб!

 

Но кроме всего прочего умудрились туда и WEB-интерфейс запихать и очень много утилит.

 

Я тут мельком читал ридми для прошивки dgreen'a и наткнулся на оч. интересный факт:

Для построения точки в outdor прошивка содержит управление вентилятором и датчиком температуры фирмы Dallas (DS1820, DS18B20, DS18S20).

 

...

 

Вентилятор выведен на GPAPIN[7]_CPU_pin_8_JTAG_TMS (в G700 – разем слева внизу если расположит точку светодиодами к себе. В OvisLink 5460 – LED5...

Вроди писали тут, что есть даташит на этот проц.

 

Так вот, раз можно найти GPIO проца, да и слава богу проц не в BGA корпусе, то есть идея припаять SD карточку к G700AP, аналогично я припаял SD к WRT54G.

 

Исходник драйвера у меня есть,- в нём нужно будет только изменить GPIO, которые нужно пользовать.

 

Для работы карточки нужно 4 GPIO.

 

Если спаяем и сюда такой mod, то о нехватке места, думаю, можно будет забыть раз и навсегда! :)

 

Для разработчиков, кого заинтересовала эта идея выкладываю исходники драйвера:

#include <linux/delay.h>
#include <linux/timer.h>

#include <linux/module.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/blkpg.h>
#include <linux/hdreg.h>
#include <linux/major.h>
#include <asm/uaccess.h>
#include <asm/io.h>

#define DEVICE_NAME "mmc"
#define DEVICE_NR(device) (MINOR(device))
#define DEVICE_ON(device)
#define DEVICE_OFF(device)
#define MAJOR_NR 121

#include <linux/blk.h>

MODULE_AUTHOR("Madsuk/Rohde");
MODULE_DESCRIPTION("Driver MMC/SD-Cards");
MODULE_SUPPORTED_DEVICE("WRT54G");
MODULE_LICENSE("GPL");

#define SD_DI 0x20
#define SD_DO 0x10
#define SD_CLK 0x08
#define SD_CS 0x80

/* we have only one device */
static int hd_sizes[1<<6];
static int hd_blocksizes[1<<6];
static int hd_hardsectsizes[1<<6];
static int hd_maxsect[1<<6];
static struct hd_struct hd[1<<6];

static struct timer_list mmc_timer;
static int mmc_media_detect = 0;
static int mmc_media_changed = 1;

typedef unsigned int uint32;

static unsigned char port_state = 0x00;
static volatile uint32 *gpioaddr_input = (uint32 *)0xb8000060;
static volatile uint32 *gpioaddr_output = (uint32 *)0xb8000064;
static volatile uint32 *gpioaddr_enable = (uint32 *)0xb8000068;
static volatile uint32 *gpioaddr_control = (uint32 *)0xb800006c;

static void mmc_spi_cs_low(void)
{
  port_state &= ~(SD_CS);
  *gpioaddr_output = port_state;
}

static void mmc_spi_cs_high(void)
{
  port_state |= SD_CS;
  *gpioaddr_output = port_state;
}

static unsigned char mmc_spi_io(unsigned char data_out)
{
  int i;
  unsigned char result = 0, tmp_data = 0;
  
  for(i=0; i<8; i++) {
    if(data_out & (0x01 << (7-i)))
      port_state |= SD_DI;
    else
      port_state &= ~SD_DI;
    
    *gpioaddr_output = port_state;
    port_state |= SD_CLK;
    *gpioaddr_output = port_state;
    
    tmp_data = *gpioaddr_input;
    
    port_state &= ~SD_CLK;
    *gpioaddr_output = port_state;
    
    result <<= 1;
    
    if(tmp_data & SD_DO)
      result |= 1;
  }
  
  return(result);
}

static int mmc_write_block(unsigned int dest_addr, unsigned char *data)
{
    unsigned int address;
    unsigned char r = 0;
    unsigned char ab0, ab1, ab2, ab3;
    int i;

    address = dest_addr;

    ab3 = 0xff & (address >> 24);
    ab2 = 0xff & (address >> 16);
    ab1 = 0xff & (address >> 8);
    ab0 = 0xff & address;
    mmc_spi_cs_low();
    for (i = 0; i < 4; i++) mmc_spi_io(0xff);
    mmc_spi_io(0x58);
    mmc_spi_io(ab3); /* msb */
    mmc_spi_io(ab2);
    mmc_spi_io(ab1);
    mmc_spi_io(ab0); /* lsb */
    mmc_spi_io(0xff);
    for (i = 0; i < 8; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0x00) break;
    }
    if (r != 0x00)
    {
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        return(1);
    }

    mmc_spi_io(0xfe);
    for (i = 0; i < 512; i++) mmc_spi_io(data[i]);
    for (i = 0; i < 2; i++) mmc_spi_io(0xff);

    for (i = 0; i < 1000000; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0xff) break;
    }
    if (r != 0xff)
    {
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        return(3);
    }
    mmc_spi_cs_high();
    mmc_spi_io(0xff);
    return(0);
}

static int mmc_read_block(unsigned char *data, unsigned int src_addr)
{
    unsigned int address;
    unsigned char r = 0;
    unsigned char ab0, ab1, ab2, ab3;
    int i;

    address = src_addr;

    ab3 = 0xff & (address >> 24);
    ab2 = 0xff & (address >> 16);
    ab1 = 0xff & (address >> 8);
    ab0 = 0xff & address;

    mmc_spi_cs_low();
    for (i = 0; i < 4; i++) mmc_spi_io(0xff);
    mmc_spi_io(0x51);
    mmc_spi_io(ab3); /* msb */
    mmc_spi_io(ab2);
    mmc_spi_io(ab1);
    mmc_spi_io(ab0); /* lsb */

    mmc_spi_io(0xff);
    for (i = 0; i < 8; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0x00) break;
    }
    if (r != 0x00)
    {
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        return(1);
    }
    for (i = 0; i < 100000; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0xfe) break;
    }
    if (r != 0xfe)
    {
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        return(2);
    }
    for (i = 0; i < 512; i++)
    {
        r = mmc_spi_io(0xff);
        data[i] = r;
    }
    for (i = 0; i < 2; i++)
    {
        r = mmc_spi_io(0xff);
    }
    mmc_spi_cs_high();
    mmc_spi_io(0xff);

    return(0);
}

static void mmc_request(request_queue_t *q)
{
    unsigned int mmc_address;
    unsigned char *buffer_address;
    int nr_sectors;
    int i;
    int cmd;
    int rc, code;
    
    (void)q;
    while (1)
    {
        code = 1; // Default is success
        INIT_REQUEST;
        mmc_address = (CURRENT->sector + hd[MINOR(CURRENT->rq_dev)].start_sect) * hd_hardsectsizes[0];
        buffer_address = CURRENT->buffer;
        nr_sectors = CURRENT->current_nr_sectors;
        cmd = CURRENT->cmd;
        if (((CURRENT->sector + CURRENT->current_nr_sectors + hd[MINOR(CURRENT->rq_dev)].start_sect) > hd[0].nr_sects) || (mmc_media_detect == 0))
        {
            code = 0;
        }
        else if (cmd == READ)
        {
            spin_unlock_irq(&io_request_lock);
            for (i = 0; i < nr_sectors; i++)
            {
                rc = mmc_read_block(buffer_address, mmc_address);
                if (rc != 0)
                {
                    printk("mmc: error in mmc_read_block (%d)\n", rc);
                    code = 0;
                    break;
                }
                else
                {
                    mmc_address += hd_hardsectsizes[0];
                    buffer_address += hd_hardsectsizes[0];
                }
            }
            spin_lock_irq(&io_request_lock);
        }
        else if (cmd == WRITE)
        {
            spin_unlock_irq(&io_request_lock);
            for (i = 0; i < nr_sectors; i++)
            {
                rc = mmc_write_block(mmc_address, buffer_address);
                if (rc != 0)
                {
                    printk("mmc: error in mmc_write_block (%d)\n", rc);
                    code = 0;
                    break;
                }
                else
                {
                    mmc_address += hd_hardsectsizes[0];
                    buffer_address += hd_hardsectsizes[0];
                }
            }
            spin_lock_irq(&io_request_lock);
        }
        else
        {
            code = 0;
        }
        end_request(code);
    }
}


static int mmc_open(struct inode *inode, struct file *filp)
{
    int device;
    (void)filp;
    
    if (mmc_media_detect == 0) return -ENODEV;

#if defined(MODULE)
    MOD_INC_USE_COUNT;
#endif
    return 0;
}

static int mmc_release(struct inode *inode, struct file *filp)
{
    (void)filp;
    fsync_dev(inode->i_rdev);
        invalidate_buffers(inode->i_rdev);

#if defined(MODULE)
    MOD_DEC_USE_COUNT;
#endif
    return 0;
}

extern struct gendisk hd_gendisk;
static int mmc_revalidate(kdev_t dev)
{
    int target, max_p, start, i;
    if (mmc_media_detect == 0) return -ENODEV;
    
    target = DEVICE_NR(dev);

    max_p = hd_gendisk.max_p;
    start = target << 6;
    for (i = max_p - 1; i >= 0; i--) {
        int minor = start + i;
        invalidate_device(MKDEV(MAJOR_NR, minor), 1);
        hd_gendisk.part[minor].start_sect = 0;
        hd_gendisk.part[minor].nr_sects = 0;
    }
    
    grok_partitions(&hd_gendisk, target, 1 << 6,
            hd_sizes[0] * 2);

    return 0;
}

static int mmc_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{
    if (!inode || !inode->i_rdev)
        return -EINVAL;

    switch(cmd) {
    case BLKGETSIZE:
        return put_user(hd[MINOR(inode->i_rdev)].nr_sects, (unsigned long *)arg);
    case BLKGETSIZE64:
        return put_user((u64)hd[MINOR(inode->i_rdev)].
                nr_sects, (u64 *) arg);
    case BLKRRPART:
        if (!capable(CAP_SYS_ADMIN))
            return -EACCES;
            
        return mmc_revalidate(inode->i_rdev);
    case HDIO_GETGEO:
    {
        struct hd_geometry *loc, g;
        loc = (struct hd_geometry *) arg;
        if (!loc)
            return -EINVAL;
        g.heads = 4;
        g.sectors = 16;
        g.cylinders = hd[0].nr_sects / (4 * 16);
        g.start = hd[MINOR(inode->i_rdev)].start_sect;
        return copy_to_user(loc, &g, sizeof(g)) ? -EFAULT : 0;
    }
    default:
        return blk_ioctl(inode->i_rdev, cmd, arg);
    }
}

static int mmc_card_init(void)
{
    unsigned char r = 0;
    short i, j;
    unsigned long flags;

    save_flags(flags);
    cli();

        printk("mmc Card init\n");
    mmc_spi_cs_high();
    for (i = 0; i < 20; i++) mmc_spi_io(0xff);

    mmc_spi_cs_low();

    mmc_spi_io(0x40);
    for (i = 0; i < 4; i++) mmc_spi_io(0x00);
    mmc_spi_io(0x95);
    for (i = 0; i < 8; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0x01) break;
    }
    mmc_spi_cs_high();
    mmc_spi_io(0xff);
    if (r != 0x01)
    {
        restore_flags(flags);
        return(1);
    }

        printk("mmc Card init *1*\n");
    for (j = 0; j < 10000; j++)
    {
        mmc_spi_cs_low();

        mmc_spi_io(0x41);
        for (i = 0; i < 4; i++) mmc_spi_io(0x00);
        mmc_spi_io(0xff);
        for (i = 0; i < 8; i++)
        {
            r = mmc_spi_io(0xff);
            if (r == 0x00) break;
        }
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        if (r == 0x00)
        {
            restore_flags(flags);
            printk("mmc Card init *2*\n");
            return(0);
        }
    }
    restore_flags(flags);

    return(2);
}

static int mmc_card_config(void)
{
    unsigned char r = 0;
    short i;
    unsigned char csd[32];
    unsigned int c_size;
    unsigned int c_size_mult;
    unsigned int mult;
    unsigned int read_bl_len;
    unsigned int blocknr = 0;
    unsigned int block_len = 0;
    unsigned int size = 0;

    mmc_spi_cs_low();
    for (i = 0; i < 4; i++) mmc_spi_io(0xff);
    mmc_spi_io(0x49);
    for (i = 0; i < 4; i++) mmc_spi_io(0x00);
    mmc_spi_io(0xff);
    for (i = 0; i < 8; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0x00) break;
    }
    if (r != 0x00)
    {
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        return(1);
    }
    for (i = 0; i < 8; i++)
    {
        r = mmc_spi_io(0xff);
        if (r == 0xfe) break;
    }
    if (r != 0xfe)
    {
        mmc_spi_cs_high();
        mmc_spi_io(0xff);
        return(2);
    }
    for (i = 0; i < 16; i++)
    {
        r = mmc_spi_io(0xff);
        csd[i] = r;
    }
    for (i = 0; i < 2; i++)
    {
        r = mmc_spi_io(0xff);
    }
    mmc_spi_cs_high();
    mmc_spi_io(0xff);
    if (r == 0x00) return(3);

    c_size = csd[8] + csd[7] * 256 + (csd[6] & 0x03) * 256 * 256;
    c_size >>= 6;
    c_size_mult = csd[10] + (csd[9] & 0x03) * 256;
    c_size_mult >>= 7;
    read_bl_len = csd[5] & 0x0f;
    mult = 1;
    mult <<= c_size_mult + 2;
    blocknr = (c_size + 1) * mult;
    block_len = 1;
    block_len <<= read_bl_len;
    size = block_len * blocknr;
    size >>= 10;

    for(i=0; i<(1<<6); i++) {
      hd_blocksizes[i] = 1024;
      hd_hardsectsizes[i] = block_len;
      hd_maxsect[i] = 256;
    }
    hd_sizes[0] = size;
    hd[0].nr_sects = blocknr;


    printk("Size = %d, hardsectsize = %d, sectors = %d\n",
           size, block_len, blocknr);

    return 0;
}

static int mmc_hardware_init(void)
{
  unsigned char gpio_outen;
  
  // Set inputs/outputs here
  printk("mmc Hardware init\n");
  gpio_outen = *gpioaddr_enable;
  
  gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS) & ~SD_DO;
  *gpioaddr_enable = gpio_outen;
  
  port_state = *gpioaddr_input;
  
  // Clock low
  port_state &= ~(SD_CLK | SD_DI | SD_CS);
  *gpioaddr_output = port_state;

  return 0;
}

static int mmc_check_media_change(kdev_t dev)
{
    (void)dev;
    if (mmc_media_changed == 1)
    {
        mmc_media_changed = 0;
        return 1;
    }
    else return 0;
}

static struct block_device_operations mmc_bdops = 
{
    open: mmc_open,
    release: mmc_release,
    ioctl: mmc_ioctl,
#if 0
    check_media_change: mmc_check_media_change,
    revalidate: mmc_revalidate,
#endif
};

static struct gendisk hd_gendisk = {
    major:        MAJOR_NR,
    major_name:    DEVICE_NAME,
    minor_shift:    6,
    max_p:        1 << 6,
    part:        hd,
    sizes:        hd_sizes,
    fops:        &mmc_bdops,
};

static int mmc_init(void)
{
    int rc;

    rc = mmc_hardware_init(); 

    if ( rc != 0)
    {
        printk("mmc: error in mmc_hardware_init (%d)\n", rc);
        return -1;
    }

    rc = mmc_card_init(); 
    if ( rc != 0)
    {
        // Give it an extra shot
        rc = mmc_card_init(); 
        if ( rc != 0)
        {
            printk("mmc: error in mmc_card_init (%d)\n", rc);
            return -1;
        }
    }

    memset(hd_sizes, 0, sizeof(hd_sizes));
    rc = mmc_card_config(); 
    if ( rc != 0)
    {
        printk("mmc: error in mmc_card_config (%d)\n", rc);
        return -1;
    }
    

    blk_size[MAJOR_NR] = hd_sizes;

    memset(hd, 0, sizeof(hd));
    hd[0].nr_sects = hd_sizes[0]*2;

    blksize_size[MAJOR_NR] = hd_blocksizes;
    hardsect_size[MAJOR_NR] = hd_hardsectsizes;
    max_sectors[MAJOR_NR] = hd_maxsect;

    hd_gendisk.nr_real = 1;

    register_disk(&hd_gendisk, MKDEV(MAJOR_NR,0), 1<<6,
              &mmc_bdops, hd_sizes[0]*2);

    return 0;
}

static void mmc_exit(void)
{
    blk_size[MAJOR_NR] = NULL;
    blksize_size[MAJOR_NR] = NULL;
    hardsect_size[MAJOR_NR] = NULL;
    max_sectors[MAJOR_NR] = NULL;
    hd[0].nr_sects = 0;
}

static void mmc_check_media(void)
{
    int old_state;
    int rc;
    
    old_state = mmc_media_detect; 

    // TODO: Add card detection here
    mmc_media_detect = 1;
    if (old_state != mmc_media_detect) 
    {
        mmc_media_changed = 1;
        if (mmc_media_detect == 1)
        {
            rc = mmc_init();
            if (rc != 0) printk("mmc: error in mmc_init (%d)\n", rc);
        }
        else 
        {
            mmc_exit();
        }
    }

    /* del_timer(&mmc_timer);
    mmc_timer.expires = jiffies + 10*HZ;
    add_timer(&mmc_timer); */
}

static int __init mmc_driver_init(void)
{
    int rc;

    rc = devfs_register_blkdev(MAJOR_NR, DEVICE_NAME, &mmc_bdops);
    if (rc < 0)
    {
        printk(KERN_WARNING "mmc: can't get major %d\n", MAJOR_NR);
        return rc;
    }

    blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), mmc_request);

    read_ahead[MAJOR_NR] = 8;
    add_gendisk(&hd_gendisk);

    mmc_check_media();

    /*init_timer(&mmc_timer);
    mmc_timer.expires = jiffies + HZ;
    mmc_timer.function = (void *)mmc_check_media;
    add_timer(&mmc_timer);*/

    return 0;
}

static void __exit mmc_driver_exit(void)
{
    int i;
    del_timer(&mmc_timer);

    for (i = 0; i < (1 << 6); i++)
        fsync_dev(MKDEV(MAJOR_NR, i));

    blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
    del_gendisk(&hd_gendisk);
    devfs_unregister_blkdev(MAJOR_NR, DEVICE_NAME);
    mmc_exit();
}

module_init(mmc_driver_init);
module_exit(mmc_driver_exit);

 

Собирается стандартно в mmc.o.

 

Кто шарит в GPIO и в их программировании,- отзовитесь!!!

 

ЗЫ. НАсчет WDS, так как общего стандарта нет по орагнизации таких сетей, вполне вероятна ситуация с разной реализацие его и посему несовместимостью WDS сетей.
Каким тогда образом можно связать G700AP и 2000AP+ в режиме моста?
Edited by Dr. Morg

Share this post


Link to post
Share on other sites

Ещё такой момент... попробовал собрать маленькое приложение для проверки, но линух успешно поругался на не соответствие ELF архитектуре проца... :-/

 

Собирал как обычно собираю для WRT54G под MIPS архитектуру.

 

В rtl8186 вроде встроен LX5280, у которого MIPS R3000 ISA-1.

 

В чём разница?

 

Каким компилятором собирать под это чудо и почему просто MIPS не покатил (на WRT54G прекрасно запускается)?

Share this post


Link to post
Share on other sites

Нашёл все 11 выделенных GPIO!

 

th_DWL-G700AP_GPIO.jpg

 

Очень интересная железка в плане дальнейшей модернизации и обвеса различными внешними приблудами! :)

Edited by Dr. Morg

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Насчет дополнительных карт - поддерживаю. Насчет компилятора, там отдельный компилятор нужен от lexra - он есть в любом SDKб сегодня выложу на фтп
Кроме карт ещё есть идея (раз уж столько свободных GPIO имеется) привзяать кулер, нагреватель и термодатчик на свободные GPIO.

 

У dgreena реализована поддержка кулера и термодатчика, можно в сорцах посмотреть какими средствами он пользовался.

 

Вместо непосредственно нагревателя можно включать релюшку, а уже ей включать любой нагреватель (лампа накаливания и т.п.).

Share this post


Link to post
Share on other sites

даташит есть. на 8186 если надо скину в почту.
Спасибо. Уже нашёл на фтп, где и прошивки лежат.

 

Теперь нужно с адресацией разобраться, подкорректировать модуль, собрать его, залить в АП, припаять SD карточку, отформатировать её в ext2 (это можно и заранее сделать), загрузить АП и радоваться жизни! :)

 

N.leiten сказал, что выложит сегодня SDK,- ночью стяну, попробую собрать модуль...

Share this post


Link to post
Share on other sites

Хм, не SDK, а компилятор :) уже выложил.
Спасибо.

 

Тем лучше,- меньше качать! :)

 

GPIO под rtl8186 уже кто-нибудь программировал?

Или толька с LED0 и LED1 баловались? :)

 

Как dgreen подключил термодатчик и кулер ещё не смотрел, возможно тоже через GPIO...

Share this post


Link to post
Share on other sites

Помогите чайнику настроить g700 с перешитую Wive-v0.5.6-20060913.

Имеем точку доступа---> ~~~~ >-g700 клиент

меня точка должна видеть как:

ip 192.168.10.20

mac 112233445566

шлюз 192.168.20.20

wep64 5555555555

 

/etc/network/wifi/general

 

#Set ESSID of wirelless Infrastructure Network

iwpriv wlan0 set_mib ssid="wilan"

 

iwpriv wlan0 set_mib hiddenAP=0

 

#Set Mode: 8 - Client;16 - AP; 32 - AdHoc

iwpriv wlan0 set_mib opmode=8

 

#Set Regulatory Domain:

# "3" - 13 channels available, "6" - 14 channels available.

# FCC=1;IC=2;ETSI=3;SPAIN=4;FRANCE=5;MKK=6

iwpriv wlan0 set_mib regdomain=6

 

#Set Channel here

iwpriv wlan0 set_mib channel=1

 

даьше ничего не менял

 

 

/etc/network/interfaces

 

 

BRIDGE_START=no

#When auto_bridge is "yes" then init.script makes bridge itself

# when aut_bridge is "no" then init.script start /etc/network/bridge

AUTO_BRIDGE=yes

BR0_IPADDR=192.168.0.50/24

 

IPV4_FORWARD_ENABLE=yes

START_IPTABLES=yes

 

ETH0_ENABLED=yes

ETH0_IPADDR=192.168.0.50/24

ETH0_MACADDR=00006c576976

ETH0_DEVICE=eth0

 

ETH1_ENABLED=no

ETH1_IPADDR=192.168.1.50/24

ETH1_MACADDR=00006c576977

ETH1_DEVICE=eth1

 

WLAN_ENABLED=yes

WLAN_IPADDR=192.168.10.20/16

WLAN_MACADDR=112233445566

 

 

/etc/network/wifi/wep

 

#Encryption mode:

# 0 - disabled; 1 - WEP64; 5 - WEP128; 2 - WPA

iwpriv wlan0 set_mib encmode=1

 

#Number of key for encrypt. Range 0-3

iwpriv wlan0 set_mib wepdkeyid=1

 

#10 digits for 64bit

iwpriv wlan0 set_mib wepkey1=5555555555

iwpriv wlan0 set_mib wepkey2=1122334455

#26 digits for 128bit

iwpriv wlan0 set_mib wepkey3=11223344556677889910111213

iwpriv wlan0 set_mib wepkey4=11223344556677889910111213

 

 

что еще нужно сделать? И что я делаю неверно?

Share this post


Link to post
Share on other sites

name@

Для режима клиента обязательно включите или нат2.5 или макклон. Как раз в той части файла /etc/network/wifi/general, которую вы не редактировали. (по-умолчанию оба параметра выключены). Это если в режиме бриджа включаете, если роутер, то не трогайте.

 

Далее в текущем конфиге вы указали использовать ключ

iwpriv wlan0 set_mib wepkey2=1122334455

 

Обращайте внимание на диапазоны

#Number of key for encrypt. Range 0-3

iwpriv wlan0 set_mib wepdkeyid=1

(написано диапазон от 0 до 3, то есть для использования первого ключа, нужно выставить 0, а для второго 1)

 

Если хотите использовать ключ

iwpriv wlan0 set_mib wepkey1=5555555555

исправьте

iwpriv wlan0 set_mib wepdkeyid=0

 

 

Далее, самое важное - мак-адреса точки доступа - переписывайте мак-адрес с дна точки доступа, но никогда не пишите:

WLAN_MACADDR=112233445566

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

Edited by N.leiten

Share this post


Link to post
Share on other sites

мучал я всех мучал своим вопросом 6:-)

решил....

АП которая 10,1,1,4 что то с ней похоже не то :((

взял только что снял эту АП G700 котрая клиентом поставил радио карту .. и тоже самое :(

всё видно до 10.1.1.4 за ней нечего нету :(

завтра поеду разбераться :(...

Edited by Animal

Share this post


Link to post
Share on other sites

name@

Для режима клиента обязательно включите или нат2.5 или макклон. Как раз в той части файла /etc/network/wifi/general, которую вы не редактировали. (по-умолчанию оба параметра выключены). Это если в режиме бриджа включаете, если роутер, то не трогайте.

Спасибо за помощь. Продолжаю мучиться... А какой режим мне нужен мост или роутер? Сейчас включил бридж и нат. Правда чет не помогло ((

Share this post


Link to post
Share on other sites

Насчет режимов - смотря что вам нужно... Если прозрачно беспроводной сегмент и проводной сегмент, то бридж, если надо роутить - то естественно роутер :)

А в чем проблема, мост включили, нат включили, что теперь не работает?

Share this post


Link to post
Share on other sites

Насчет режимов - смотря что вам нужно... Если прозрачно беспроводной сегмент и проводной сегмент, то бридж, если надо роутить - то естественно роутер :)

А в чем проблема, мост включили, нат включили, что теперь не работает?

видимо нужен роутер. нужно с компа что за 700ой выходить в инет через точку доступа к которой подключаюсь. А как роутер настраивать?

Share this post


Link to post
Share on other sites

Сегодня удалённо конфигурил через Telnet G700AP в режиме AP и неожиданно связь пропала...

 

После этого ни телнетом, ни через SSH не пускает на АПшку... :(

Причём линк стабильный, сеть работает. Пробовал удалённо через Wi-Fi, просил так же по езернету попробовать на том конце,- результат одинаковый...

 

Можно как-то удалённо решить проблему или же придётся идти и ребутить?

 

Добавлено:

забыл сказать - прошивка Wive

Edited by Dr. Morg

Share this post


Link to post
Share on other sites

Хм, не SDK, а компилятор :) уже выложил.
Сегодня нашёл время, чтобы поковыряться с компилятором...

Хотел собрать модуль для SD/MMC картчоек под MIPS, но что-то у меня тулчан видимо тупит, либо ещё чего... короче, разбираюсь пока с этим...

 

Для тестирования собрал простенькое приложение, но в виду описаной мною проблемы в предыдущем посте, не имею возможности потестить на АПшке...

 

Если есть у кого желание протестировать,- выкладываю образцы сюда: http://slil.ru/23171536 (31КБ)

 

Бинарник test-mips собран с помощью lexra-nnop-v5; test-mips-1 я собрал стандартным MIPS компилятором с использованием uClibc.

 

Второй вариант получился меньшего размера. =)

 

 

Ещё вопрос к разработчикам прошивок,- кто-нибудь в своих прошивках реализовывал вывод консоли в COM порт?

Если да, то где можно отключить это перенаправление,- есть необходимость использовать его для подключения картридера-программатора.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.