Поддерживаю драйвер tp-link t4u для linux

    Когда купил wifi адаптер, думал, что будет работать на моей ubuntu 20.04, потому что в числе поддерживаемых систем значился linux. Оказалось, что не работает. Попробовал решения, которые предлагают на форумах, но адаптер так и не заработал. Пришлось вчера и сегодня заняться поддержкой драйвера.

    Я подумал, а может это и не сложно сделать. И взялся за работу. При компиляции появлялись ошибки. Например, нет функции get_ds. Ну да, она была в 4 версии ядра, а в 5 этой функции нет. Я иногда думаю, что разработчики не хотят поддерживать свои драйвера из-за того, что в ядре постоянно изменения вносят и переписывать нужно некоторые участки кода. В общем, я посмотрел как в старой версии ядра реализован get_ds. Оказывается он просто возвращает KERNEL_DS. Ну это я и заменил также. Потом была проблема со структурой времени, которая в текущем ядре уже есть только 64 битная версия. Это исправил. Были ещё мелкие вроде исправления, но я не помню уже что исправлял. Итак, драйвер скомпилировался, но отказывался регистрировать устройство адаптер. Я нашел патч link, который обязывает производителей указывать правила. Я добавил в каждую запись в os_dep/linux/rtw_cfgvendor.c, такое .policy = VENDOR_CMD_RAW_DATA,

    Пример:

            {
                    {
                            .vendor_id = OUI_GOOGLE,
                            .subcmd = RTT_SUBCMD_SET_CONFIG
                    },
                    .policy = VENDOR_CMD_RAW_DATA,
                    .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
                    .doit = rtw_cfgvendor_rtt_set_config
            },
            {
                    {
                            .vendor_id = OUI_GOOGLE,
                            .subcmd = RTT_SUBCMD_CANCEL_CONFIG
                    },
                    .policy = VENDOR_CMD_RAW_DATA,
                    .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
                    .doit = rtw_cfgvendor_rtt_cancel_config
            },
            {
                    {
                            .vendor_id = OUI_GOOGLE,
                            .subcmd = RTT_SUBCMD_GETCAPABILITY
                    },
                    .policy = VENDOR_CMD_RAW_DATA,
                    .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
                    .doit = rtw_cfgvendor_rtt_get_capability
            },
    

    И скомпилировал, скопировал и запустил. и вуаля! у меня получилось. ) Хоть я в разработке ядра не разбираюсь, но поддержку простенькую мне удалось сделать. Ссылку на исходники драйвера пока что выложу на google диск. вот ссылка. link.

    И также теперь есть на github.

    Я рад, если это кому-то пригодится.

    image
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 51

      +34
        0
        Раньше мне это казалось какой-то дикостью, а сейчас кажется, ну а чё такого? Разве что без интернета это сделать было сильно сложнее. Но никто не говорит что в 2007 году у него не было модемного соединения.
          0
          Модемное то скорее 1997 поскольку в 2007 в столицах уже во всю оптика FTTB была за недорого. И интернет сейчас намного больше информации содержит чем 10 или 25 лет назад, потому в те годы иметь интернет была совсем не панацея.
        0
        Случаем не ваш драйвер?
        git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?h=next-20200911&id=e3037485c68ec1a299ff41160d8fedbd4abc29b9
        Если 8822b — это он, то вам тогде проще поставить mainline kernel kernel.ubuntu.com/~kernel-ppa/mainline/v5.8.9 посвежее, чем поддерживать непонятного свойства OOT-модуль.
          0
          там 8812au, драйвер по ссылке вроде его не поддерживает
            0
            да не поддерживает. я пробовал ставить. не работает. или не пробовал. а нет, я пробовал только из github ставить. а это нет.
              0
              Основное дерево github.com/aircrack-ng/rtl8812au для вашего и моего 8814au. Realtek обещал разродиться нативными драйверами (in tree), полностью на netlink, а не на ioctl, но пока что-то не очень (патч есть, но он WIP).

              Вы должны понимать, что эти драйверы жутко багованные! Ядро пришлось исправлять, чтобы заставить эти драйверы просто работать. git.kernel.org/pub/scm/network/wireless/iwd.git/tree/src/manager.c#n81
              +2

              Тем более https://github.com/aircrack-ng/rtl8812au
              Автору надо было чип написать и usb'шный idVendor idProduct из lsusb -v

            –9
            >8812au
            >Realtek
            на хрена на таком говне покупать wifi, взял бы atheros, intel или ralink на крайний случай
              +2
              mt76 по качеству не сильно лучше in-tree драйверов realtek в ядре, а другого для mtk нет.
                0
                с ralink возможно погорячился, да
                +1
                Я не так давно хотел купить адаптер на чипе Atheros (как раз что бы под линуксом без бубна завёлся). Так что бы по быстрому, из наличия в рознице (в Москве кстати). И внезапно понял, что их просто нет. Практически всё что продавалось было на Рилтеке. То что было возможно идентифицировать. А тот же TP-Link и вовсе балуется тем, что имеет под одним названием продукта кучу ревизий и все они могут быть на разных чипах (и последние опять же на Рилтеке). И продавцы естественно не пишут ревизию которая в продаже.
                Вот так. Пришлось купить на б/у на Авито в итоге.
                  0
                  Realtek — распространены, дёшевы, обычно есть открытые драйвера, в т.ч. для FreeBSD, и они — поддерживаются.
                  Здесь у человека, видимо, TP-Link Archer T4U V3, где производитель по-тихому заменил rtl8812au на rtl8812bu, отчего добавляется MU-MIMO. Такое и у других есть — Totolink A2000UA V. 3.0 или как там его.

                  www.tp-link.com/us/support/download/archer-t4u
                  Installation Guide for Linux
                  Определение версии железа: How to find the hardware version on a TP-Link device?

                  В openSUSE уже давно есть готовые пакеты:
                  forums.opensuse.org/showthread.php/535731-realtek-rtl8812BU
                  software.opensuse.org/package/rtl8822bu

                  Mediatek купил Ralink и с драйверами для Linux у них плохо.

                  Если есть желание что-то поддерживать — выясните, может, уже всё готово, или полуготовое можно допиливать. Для начала можно поискать, затем спросить на форуме вашей ОС.

                  askubuntu.com/questions/1018375/how-do-i-install-driver-for-rtl88x2bu
                  askubuntu.com/questions/1079377/how-do-i-install-drivers-for-realtek-rtl8812bu
                  www.fastoe.com/blog/install-rtl8812bu-usb-wifi-dongle-on-linux
                    +1

                    Православные ath9k не поддерживают 802.11ac, а на дворе уже ax, между прочим. Остается только Intel, поскольку Ralink тот еще шлак. Или на самый крайний случай — Broadcom (новые чипы, поддерживаемые brcmfmac).

                      0

                      Есть ath10k (pcie и sdio) с ac, ath11k с ax. Не знаю как с другими чипами, но mt7603/12/28/88 на mt76 работают отлично, но это еще зависит от firmware части как я понял. Интел по части вайфай — тоже хороши. Про броадком раньше говорили нехорошее. Рилтек — фу-фу-фу.

                    0
                      0
                      это не работает. пробовал. я полгода назад вроде это скачивал и не работало. хотя может сейчас работает. но проверю потом.
                      +7
                      Я иногда думаю, что разработчики не хотят поддерживать свои драйвера из-за того, что в ядре постоянно изменения вносят и переписывать нужно некоторые участки кода

                      в 99% случаев от производителя требуется один раз написать приличный драйвер, его включат в состав ядра и отслеживанием изменений ядерного API займутся те, кто развивают ядро.
                      я бы начал с поиска попыток пропихнуть в ядро, если они были — посмотреть какие были претензии к коду, попытаться учесть их и пропихнуть драйвер в ядро ещё раз (хотя есть подозрение, что там не причёсывать, а переписывать надо)

                        +3
                        Есть у меня такой адаптер, его проблема в том, что в кастомный драйверах и советах на форумах говорится, что в нём находится чип rtl8812au, его idVendor idProduct даже прописаны в этих драйверах. Однако на самых разных реализациях драйвера к rtl8812au, адаптер отказывается работать, потому что в реальности в нём стоит чип RTL88x2BU, возможно это лишь в 3 ревизии такое новшество. Умельцы реализовали поддержку таких адаптеров + есть поддержка режима монитора: github.com/ulli-kroll/rtw88-usb. Сам сейчас сижу с этим адаптером на ядре 5.8
                          –3
                          Вот из-за таких приколов люди и не хотят пользоваться линукс системами.
                            0
                            К сожалению, и другие ОС не застрахованы от кривых драйверов и окончания или неудовлетворительной поддержки производителем. Просто нужно тщательней выбирать и железо и ПО для своих нужд.
                              0
                              Просто нужно тщательней выбирать и железо и ПО для своих нужд.

                              Ещё бы заранее знать, кто и как будет поддерживать своё железо.
                                0
                                Если драйвер включён в ядро, то скорее всего проблем не будет.
                                0
                                Они, может, и не застрахованы, но давайте не будем начинать про поддержку железа на винде vs линуксе )
                                +3
                                можно подумать на винде все дрова даже до 7рки дотянули
                                  0

                                  гхм… как «система дружелюбна к разработчикам, можно вносить изменения» вы умудрились посчитать недостатком?


                                  исходная ситуация: есть драйвер для прошлой версии ОС, хочется использовать текущую, но драйвер там не работает. автор написал как он поступил.
                                  расскажите, какие были бы ваши действия под виндой в этом случае? (и не надо говорить, что в винде такого не может быть, оно встречается сплошь и рядом)

                                    0
                                    Берем VirtualPC, запускаем на ней XP, ставим драйвера на сканер Canon, ждем в меню «проброс UBS порта напрямую», сопрягаем папку C:\scan с C:\scan гостевой машины и сканируем по нажатию на кнопку сканера :)
                                    Отсюда вопрос. А можно USB сетевуху без дров воткнуть в виртуалку, а на виртуалке настроить аналог DMZ? (прям диалп по айпи телефонии)
                                      0
                                      Берём Virtualbox (ну и extpack), ставим в него XP, пробрасываем любую USB фигню в него. Я таким образом работаю с программатором(на который дров нет). Проблем с таким пробросом сети не вижу, надо будет только с маршрутизацией слегка подумать.
                                        0
                                        надо будет только с маршрутизацией слегка подумать.

                                        запустить linux на второй виртуалке :)
                                        0
                                        Берем VirtualPC, запускаем на ней XP,

                                        извините, но это «вырезать гланды через анус».

                                          0
                                          ну а что поделать, если производитель забил на поддержку оборудования?
                                            –2

                                            взять и допилить драйвер, ничего невозможного в этом нет, про это и статья

                                              0
                                              А если драйвер:
                                              1) Под винду без исходников?
                                              2) В формате nvidia-drivers?
                                              И вариант для реверсеров:
                                              1) Протокол обмена железки с драйвером писали криптонаркоманы?
                                                0
                                                А если…

                                                так к тому и веду: хорошо, что не везде так, исходники некоторых ОС можно читать и изменять, некоторые драйвера идут в исходниках, некоторые ноутбуки позволяют поменять wifi-адаптер, некоторые тракторы могут быть починены самими пользователями,…

                                                  0
                                                  Мы тут не про тракторы, а про
                                                  расскажите, какие были бы ваши действия под виндой в этом случае?
                                                    0

                                                    гхм, вы процитировали ответ на этот комментарий:


                                                    Вот из-за таких приколов люди и не хотят пользоваться линукс системами.

                                                    мир opensource предлагает альтернативное решение, странно его за это критиковать. и да, решение со старой версией в виртуалке в этом мире тоже может работать.

                                                      0
                                                      ну так мой ответ был на ваш ответ как раз на тот коммент, который вы процитировали. Отсюда совсем не понятен ваш воинственный настрой
                                                      Сами спросили что делать в винде, вам дали ответы, которые работают в винде (да и в linux виртуалки будут работать).
                                                      Опенсорс никто не критиковал
                                            0
                                            Ну а как быть, если последние дрова для XP, а надо хоть как-то работать под 10/Linux? Только если железо сменить. Для сканера в принципе есть вариант заплатить за VueScan (если тот умеет в имеющийся сканер), а вот для специализированного оборудования, увы, только виртуалки остаются.
                                              0
                                              если последние дрова для XP

                                              не, для 2000, на xp с небольшим бубном запускаются
                                                0
                                                Со сканерами я сам матерился — т.к. дома держу Mustek SP-12000(вот у него дрова какраз под 2к и к ним для XP надо ещё скачать «запускатель» установщика, чтобы они под XP встали) и Nikon LS2000, правда в итоге плюнул и перевёл оба на отдельный ПК с линуксом, старой сказёвой карточкой и SANE в сетевом режиме. Однако, если быть готовым потратить денег — есть вышеупомянутый VueScan, который имеет свои дрова для такого старья даже под десятку.
                                          0
                                          С виндой из того что могу вспомнить, не хочет работать старый драйвер от моего графического планшета Bamboo CTE-450. Однако без родного драйвера планшет все еще имеет базовую функциональность. Когда я пытался пересесть на юбунту — у меня не работал из коробки тачпад, тачскрин и клавиши управления яркостью экрана, что для ноутбука критически важно. Ведь я не разработчик, я — пользователь. И я хочу ПОЛЬЗОВАТЬСЯ. Вот к этому и был мой комментарий. Не о том, что линукс плохой, а о том, что им нельзя просто брать и пользоваться.
                                          0
                                          В windows, конечно, проблема будет решена без правки исходников — у вас их не будет. Соответственно либо смена устройства, либо смена ОС.
                                          Опять же под windows тоже бывают зверские способы установки дров, в плоть до установить предыдущую версию windows, потом драйвер, а потом обновить
                                          +1
                                          Всё правильно сделал.
                                            +2
                                            Всё правильно сделал

                                            Вот только "поддерживаю драйвер" — это значит включиться в команду разработчиков ядра и по-настоящему поддерживать этот драйвер.
                                            А просто выпустить заплатку и где-то там ее выложить, пусть даже на github — ну это так себе на самом деле, ее просто никто из тех кому она нужна, не найдет.

                                              +1
                                              почему же. вот, теперь в поисковике видно ссылку на эту статью. желательно написать в google «tplink t4u ubuntu 20.04»
                                            –1
                                            Респект! Заодно прокачал скилл
                                              +1
                                              Я много лет мучился с 8812au. Энтузиазм таких «поддерживаю драйвер» обычно заканчивается через год, репозиторий протухает, потом всплывает новый от нового энтузиаста, и так по кругу. Однажды не было актуального репозитория в какой-то момент, пришлось вот так же самому patch-ить.
                                              В итоге недавно плюнул на Realtek раз и навсегда, купил адаптер на MediaTek MT7612U с драйверами в стандартном ядре и забыл Realtek как страшный сон. Да, 160МГц не умеет, но 80 работают стабильно.
                                                0

                                                8812au умеет делать packet injection. Его обычно только ради этого и используют. Большинство новых карточек имеют только fullmac драйвера и для custom протоколов поверх wifi непригоды.

                                                0

                                                А существует девайс с драйверами из коробки и производителем который обновляем оперативно дрова под Linux?

                                                  0

                                                  Wifi адаптер? Да, интеловские, например. Ноутбук целиком — это фантастика, увы. Но ряд производителей достаточно близко подошли со своими ноутами, где изначально стоит linux.

                                                  0

                                                  Ха-ха, не так давно это все проделывал, взяв этот адаптер под свежий системник. Грустно, что не нашел врвмени оформить это так же. Автор — молодец! :)

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое