2018-12-01 21:09:28

Wifi для телевизора Samsung E-series

Linux Wi-fi Железо


Когда-то мне повезло стать обладателем телевизора самсунг с проводным подключением к сети. Но недавно встала необходимость подключить мой телевизор к сети по wi-fi. Как известно, телевизор готов подключаться к вай-фай только с использованием родного самсунговского адаптера, который стоит чрезмерно дорого за предоставляемый функционал. Ниже я расскажу о том, как подключить телевизор самсунг Е-серии к wifi за 250р вместо 4000. 


TL;DR

Просто нужно взять адаптер на основе RT5370 и средствами родного линуксового драйвера поменять VID/PID на 148f:3572

iwpriv ra0 e2p 208=148f
iwpriv ra0 e2p 20a=3572

Теперь вы можете запастись ночным временем и пивом, чтоб проделать это самостоятельно, собрав все грабли по дороге, ну или прочитать дальше многа букаф...

Теперь подробно

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

Для начала нам понадобится оборудование: сетевуха на основе чипа RT5370, стоимостью примерно 250р на алиэкспресс. 

Чтоб телевизор признал ее родной, нужно поменять ее Vendor id (VID) и Product id (PID), точнее только PID тк в моем случае VID уже был подходящий. Для этого нам понадобится Linux и родные драйверы от Mediatek. На страничке скачивания ссылки для мак и линукс перепутаны, смотрите что качаете.

Обращаю ваше внимание на то, что в отличие от оригинальной инструкции с форума, я производил все действия на виртуалке, запущенной на макбуке, а подключение и отключение прошиваемого адаптера производилось не физически, а просто галочкой в виртуальной машине. Физически же, устройство один раз было подключено и оставалось в разъеме ноута до конца всех операций.

Нам понадобится Ubuntu 12, если точнее, то любой линукс с ядром 3x и достаточно старым gcc, который не сыпет ошибки на макросы __DATE__ и __TIME__ при компиляции (за это спасибо устаревшим драйверам от Mediatek, единственным, которые предлагают качать с официального сайта). Далее я буду рассказывать относительно Ubuntu 12, нам подойдет как сервер так и десктоп. Все команды выполняем от имени супер пользователя (root).

Первым делом убеждаемся что наш адаптер "виден" в линукс, для этого выполняем команду

lsusb

И в выводе находим устройство с VID:PID 148f:5370 (в моем случае) и подходящим названием.

Проводим подготовительные мероприятия к установке пакета build-essential, тк за время с момента выхода Ubuntu 12 многое изменилось. Вот проблема и ее решение, а если вкратце, то просто нужно выполнить на нашей виртуалке:

apt-get clean
rm -rf /var/lib/apt/lists/*
apt-get clean
apt-get update
apt-get upgrade

Теперь ставим пакет командой

apt-get install build-essential

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

Распаковываем архив с драйвером в любое удобное место и... идем править исходники драйвера (о да! как же без этого). Подробное описание, что как и почему смотрите тут, а если вкратце то нам надо в файле include/os/rt_linux.h исправить типы в структуре OS_FS_INFO.

Было

typedef struct _OS_FS_INFO_
{
   int             fsuid;
   int             fsgid;
   mm_segment_t    fs;
} OS_FS_INFO;

Стало

typedef struct _OS_FS_INFO_
{
   kuid_t              fsuid;
   kgid_t              fsgid;
   mm_segment_t    fs;
} OS_FS_INFO;

Меняем типы int на kuid_t и kgid_t. После этого запускаем в папке с драйвером команду

make  

и все успешно собирается.

После успешной сборки обращаемся к оригинальной инструкции и делаем следующее

# инсталлируем драйвер в систему
insmod os/linux/rt5572sta.ko
# проверяем, что драйвер успешно установился
lsmod | grep -B1 5572 
# должно выдать что-то вроде
# Module                  Size  Used by
# rt5572sta             718602  0

Теперь можно снова подключать сетевой адаптер к виртуальной машине. После этого выполняем команды

lsusb
# и находим в выводе нашу сетевуху
ifconfig ra0 192.168.10.100
# IP может быть любым, самое важное
# убеждаемся что интерфейс сконфигурирован
ifconfig ra0

Теперь самое интересное!

# читаем VID
iwpriv ra0 e2p 208
# ra0       e2p:
# [0x0208]:0x148f 
# читаем PID
iwpriv ra0 e2p 20a
# ra0       e2p:
# [0x020A]:0x:5379

И устанавливаем новые значения

# меняем VID
iwpriv ra0 e2p 208=148f
# ra0       e2p:
# [0x208]:148F 
# меняем PID
iwpriv ra0 e2p 20a=3572
# ra0       e2p:
# [0x20A]:3572

Убеждаемся, что все правильно записалось командами для чтения VID/PID выше. Для большей верности отключаем адаптер, снова подключаем, и смотрим

lsusb
# должно выдать что-то вроде 
# Bus 001 Device 014: ID 148f:3572 Ralink Technology, Corp.

Убеждаемся в правильности VID и PID. Теперь можно физически отключить сетевой адаптер и подключить к телевизору.

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

Наслаждаемся проделанной работой!