- PVSM.RU - https://www.pvsm.ru -

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

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

Я подумал, а может это и не сложно сделать. И взялся за работу. При компиляции появлялись ошибки. Например, нет функции get_ds. Ну да, она была в 4 версии ядра, а в 5 этой функции нет. Я иногда думаю, что разработчики не хотят поддерживать свои драйвера из-за того, что в ядре постоянно изменения вносят и переписывать нужно некоторые участки кода. В общем, я посмотрел как в старой версии ядра реализован get_ds. Оказывается он просто возвращает KERNEL_DS. Ну это я и заменил также. Потом была проблема со структурой времени, которая в текущем ядре уже есть только 64 битная версия. Это исправил. Были ещё мелкие вроде исправления, но я не помню уже что исправлял. Итак, драйвер скомпилировался, но отказывался регистрировать устройство адаптер. Я нашел патч link [1], который обязывает производителей указывать правила. Я добавил в каждую запись в 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 [2]
и также теперь есть на github [3]
я рад, если это кому то пригодиться.
image

Автор: Дмитрий

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/356914

Ссылки в тексте:

[1] link: https://www.mail-archive.com/linux-wireless@vger.kernel.org/msg57799.html

[2] link: https://drive.google.com/file/d/1dX0dMy3wMWS1fGzu87bbpr30G0kiABVI/view?usp=sharing

[3] github: https://github.com/xverizex/driver_tp_link_t4u

[4] Источник: https://habr.com/ru/post/518896/?utm_source=habrahabr&utm_medium=rss&utm_campaign=518896