找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 16333|回复: 22

关于tp741、841、3420等在openwrt中usb支持的问题!

  [复制链接]
本帖最后由 d2xs 于 2011-5-12 22:00 编辑

tp741、841、941、1043、3420路由器刷对应的openwrt官方版本,安装好usb驱动。结果741、841、941的usb无法初始化,diy出的usb口当然也无法使用。1043、3420的usb完全正常。
仔细看一下,原来1043、3420是出厂带usb口的。再来看Kconfig中相关代码:

config AR71XX_MACH_TL_WR741ND
        bool "TP-LINK TL-WR741ND support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_AP91_PCI if PCI
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        default n

config AR71XX_MACH_TL_WR841N_V1
        bool "TP-LINK TL-WR841N v1 support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_PB42_PCI if PCI
        select AR71XX_DEV_DSA
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        default n

config AR71XX_MACH_TL_WR941ND
        bool "TP-LINK TL-WR941ND support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_AR9XXX_WMAC
        select AR71XX_DEV_DSA
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        default n

config AR71XX_MACH_TL_WR1043ND
        bool "TP-LINK TL-WR1043ND support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_AR9XXX_WMAC
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        select AR71XX_DEV_USB
        default n

config AR71XX_MACH_TL_MR3X20
        bool "TP-LINK TL-MR3220/3420 support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_AP91_PCI if PCI
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        select AR71XX_DEV_USB
        default n

发现不同的地方了么?

原来op默认根本就没提供对741、841、941等出厂不带usb口的路由器的核心支持!这也是为什么841V7必需刷3420的op才能正常使用usb结口。

知道了以上的问题,我们完全可以修改相应的代码,编译出真正支持usb的741、841、941固件。
以741为例:

config AR71XX_MACH_TL_WR741ND
        bool "TP-LINK TL-WR741ND support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_AP91_PCI if PCI
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        default n
改为

config AR71XX_MACH_TL_WR741ND
        bool "TP-LINK TL-WR741ND support"
        select AR71XX_DEV_M25P80
        select AR71XX_DEV_AP91_PCI if PCI
        select AR71XX_DEV_GPIO_BUTTONS
        select AR71XX_DEV_LEDS_GPIO
        select AR71XX_DEV_USB
        default n

再将mach-tl-wr741nd.c 这个文件

/*
*  TP-LINK TL-WR741ND board support
*
*  Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org>
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License version 2 as published
*  by the Free Software Foundation.
*/

#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>

#include <asm/mach-ar71xx/ar71xx.h>

#include "machtype.h"
#include "devices.h"
#include "dev-m25p80.h"
#include "dev-ap91-pci.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
+++#include "dev-usb.h"+++


#define TL_WR741ND_GPIO_LED_QSS                0
#define TL_WR741ND_GPIO_LED_SYSTEM        1

#define TL_WR741ND_GPIO_BTN_RESET        11
#define TL_WR741ND_GPIO_BTN_QSS                12

#define TL_WR741ND_KEYS_POLL_INTERVAL        20        /* msecs */
#define TL_WR741ND_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR741ND_KEYS_POLL_INTERVAL)

#ifdef CONFIG_MTD_PARTITIONS
static struct mtd_partition tl_wr741nd_partitions[] = {
        {
                .name                = "u-boot",
                .offset                = 0,
                .size                = 0x020000,
                .mask_flags        = MTD_WRITEABLE,
        }, {
                .name                = "kernel",
                .offset                = 0x020000,
                .size                = 0x140000,
        }, {
                .name                = "rootfs",
                .offset                = 0x160000,
                .size                = 0x290000,
        }, {
                .name                = "art",
                .offset                = 0x3f0000,
                .size                = 0x010000,
                .mask_flags        = MTD_WRITEABLE,
        }, {
                .name                = "firmware",
                .offset                = 0x020000,
                .size                = 0x3d0000,
        }
};
#endif /* CONFIG_MTD_PARTITIONS */

static struct flash_platform_data tl_wr741nd_flash_data = {
#ifdef CONFIG_MTD_PARTITIONS
        .parts                = tl_wr741nd_partitions,
        .nr_parts        = ARRAY_SIZE(tl_wr741nd_partitions),
#endif
};

static struct gpio_led tl_wr741nd_leds_gpio[] __initdata = {
        {
                .name                = "tl-wr741nd:green:system",
                .gpio                = TL_WR741ND_GPIO_LED_SYSTEM,
                .active_low        = 1,
        }, {
                .name                = "tl-wr741nd:green:qss",
                .gpio                = TL_WR741ND_GPIO_LED_QSS,
                .active_low        = 1,
        }
};

static struct gpio_keys_button tl_wr741nd_gpio_keys[] __initdata = {
        {
                .desc                = "reset",
                .type                = EV_KEY,
                .code                = KEY_RESTART,
                .debounce_interval = TL_WR741ND_KEYS_DEBOUNCE_INTERVAL,
                .gpio                = TL_WR741ND_GPIO_BTN_RESET,
                .active_low        = 1,
        }, {
                .desc                = "qss",
                .type                = EV_KEY,
                .code                = KEY_WPS_BUTTON,
                .debounce_interval = TL_WR741ND_KEYS_DEBOUNCE_INTERVAL,
                .gpio                = TL_WR741ND_GPIO_BTN_QSS,
                .active_low        = 1,
        }
};

static void __init tl_wr741nd_setup(void)
{
        u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
        u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);

         +++ar71xx_add_device_usb();+++

        ar71xx_add_device_m25p80(&tl_wr741nd_flash_data);

        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(tl_wr741nd_leds_gpio),
                                        tl_wr741nd_leds_gpio);

        ar71xx_register_gpio_keys_polled(-1, TL_WR741ND_KEYS_POLL_INTERVAL,
                                         ARRAY_SIZE(tl_wr741nd_gpio_keys),
                                         tl_wr741nd_gpio_keys);

        ar71xx_eth1_data.has_ar7240_switch = 1;
        ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0);
        ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac, 1);

        /* WAN port */
        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth0_data.speed = SPEED_100;
        ar71xx_eth0_data.duplex = DUPLEX_FULL;
        ar71xx_eth0_data.phy_mask = BIT(4);

        /* LAN ports */
        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
        ar71xx_eth1_data.speed = SPEED_1000;
        ar71xx_eth1_data.duplex = DUPLEX_FULL;

        ar71xx_add_device_mdio(0x0);
        ar71xx_add_device_eth(1);
        ar71xx_add_device_eth(0);

        ap91_pci_setup_wmac_led_pin(1);

        ap91_pci_init(ee, mac);
}
MIPS_MACHINE(AR71XX_MACH_TL_WR741ND, "TL-WR741ND", "TP-LINK TL-WR741ND",
             tl_wr741nd_setup);
增加前后+++之间的内容(一共两处),在编译即可!
以上文件的路径为
    trunk/target/linux/ar71xx/files/arch/mips/ar71xx
以上内容来自官方WIKI及自己的一点摸索经历,望高手指正?

评分

参与人数 5恩山币 +7 收起 理由
ZHIZ*** + 3 一看就是觉得高端、大气、上档次!
ice*** + 1 白富美露出了诧异的眼神:屌丝,你真是太厉害了!
song*** + 1 泥马,真给力,我要顶!
99*** + 1 技术研究贴都加分
phant*** + 1 good

查看全部评分

好文章。。
回复

使用道具 举报

思路正确。
回复

使用道具 举报

请问后来741N行了没?
回复

使用道具 举报

技术贴,支持
回复

使用道具 举报

好贴!前来思考!!
回复

使用道具 举报

万能的LZ啊,我的mips目录下没有ar71xx文件夹。。。肿么办啊。。。
回复

使用道具 举报

很强大。不过还没有自己编译过呢,正好学下哈~
回复

使用道具 举报

原来如此啊~~~终于明白了
回复

使用道具 举报

来自手机 | 显示全部楼层
很好很强大,谢谢楼主。
回复

使用道具 举报

请问这样改,后来成功了吗 ?
回复

使用道具 举报

好贴啊 思考了不少东西
回复

使用道具 举报

Kconfig中相关代码在哪里找啊?
回复

使用道具 举报

LZ 给力~~
回复

使用道具 举报

感谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-16 21:15

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表