HoRNDIS: драйвер USB-модема для Mac OS X

Перевод статьи HoRNDIS: USB tethering driver for Mac OS X, автор - Joshua Wise

HoRNDIS (произносится: «хоррендус») - это драйвер для Mac OS X, который позволяет вам использовать режим привязки USB-телефона на вашем Android-устройстве для получения доступа в Интернет. Он работает с Mac OS X версии 10.6.8 (Snow Leopard) - 10.12 и протестирован на большом количестве телефонов. Вы должны быть осторожны со всеми драйверами, которые вы устанавливаете на свой компьютер; тем не менее, HoRNDIS тщательно протестирован. Поэтому вы можете полноценно работать с ним на персональных компьютерах.

HoRNDIS реализуется как kext, а не как программа пользовательского пространства, которая открывает устройство TAP или TUN; Это означает, что он не конфликтует с другими kext-файлами TAP / TUN, которые вы, возможно, установили (например, OpenVPN, Tunnelblick или Cisco VPN). Драйвер реализует проприетарный протокол Microsoft RNDIS, который является единственным протоколом, поддерживаемым встроенными устройствами Android; Хотя пользователи Linux и Windows уже несколько лет пользуются родными драйверами RNDIS, Mac OS X поддерживает только устройства CDC Ethernet.1)

Главным преимуществом HoRNDIS над другими модемами является то, что он использует первоклассную поддерживаемую функцию в прошивке телефона. Другие решения принимают либо стек Wi-Fi телефона без знания операционной системы Android, либо создают IP-стек эмуляции в пользовательском пространстве на телефоне; Во многих случаях встроенная поддержка USB-модема может быть более стабильной, надежной и быстрой.

Загрузка и установка HoRNDIS

HoRNDIS доступен в исходной форме со своей страницы проекта на GitHub и в двоичной форме на этом сайте. Для быстрого запуска:

  • Загрузите последний бинарный пакет и дважды щелкните его в папке «Загрузки». Следуйте инструкциям в программе установки.
  • Если установка будет продолжена без ошибок, по ее завершению подключите свой телефон к Mac по USB.
  • Войдите в меню настроек на вашем телефоне.
  • В разделе соединений ниже Wi-Fi и Bluetooth выберите «Ещё ...».
  • Выберите «Tethering & portable hotspot».
  • Установите флажок «USB-модем». Он должен мигать один раз, а затем полностью проверяться. В некоторых версиях OS X может появиться диалоговое окно с предложением настроить устройство; Следуйте его инструкциям. Чтобы убедиться, что устройство подключено, запустите программу «Системные настройки» и выберите «Сеть»; Вы должны увидеть свой телефон в поле слева. Если повезет, вы сможете отключить Wi-Fi на своем Mac и просматривать Интернет через сетевое подключение вашего телефона.

Особое примечание о 32-разрядных машинах

В предыдущих версиях HoRNDIS требовалось 64-битное ядро. Если при установке HoRNDIS вы получите сообщение об ошибке поддержки 64-битной версии, попробуйте еще раз с пакетом версии 3 (или новее).

Примечания к различным версиям Mac OS X

Mac OS X 10.9 (Mavericks) и 10.10 (Yosemite) поддерживаются HoRNDIS, но есть некоторые ошибки. Если вы обновили более раннюю версию OS X, то обнаружите, что телефоны реплицируются в вашей панели управления сетью.

Если это случается с вашей машиной, один из способов обхода - очистка файлов конфигурации сети. Сделайте резервную копию  /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist и /Library/Preferences/SystemConfiguration/preferences.plist, а затем переместите или удалите их. (Обратите внимание, что это приведет к удалению пользовательской конфигурации сети). Я до сих пор не уверен, что вызывает эту проблему, и поэтому у меня нет более "красивого" обходного пути.

В версии Mac OS X 10.11 (и выше) перезаписан USB-стек, в нем больше проблем с совместимостью, чем 10.10 и ниже. К сожалению, Apple не опубликовала документацию для интерфейсов USB нового типа, представленных в 10.11, поэтому HoRNDIS использует только USB-интерфейсы, доступные в Mac OS 10.10 и ниже. Таким образом, в новейших  версиях OS X могут возникнуть трудности с подключением определенных устройств.

Удаление HoRNDIS

Если по какой-то причине вам нужно удалить HoRNDIS, вы можете просто перетащить расширение в корзину. В Finder перейдите в меню «Перейти» и выберите «Перейти в папку ...»; В этом случае введите /System/Library/Extensions. Найдите «HoRNDIS.kext» и перетащите его в корзину. При появлении запроса введите пароль. Сделайте то же самое для «HoRNDIS.kext», который также находится в /Library/Extensions. Затем перезагрузите Mac, чтобы убедиться, что он выгружен.

Получение и создание источника

(Вилка меня на GitHub!) Источник доступен на GitHub; Он лицензируется в соответствии с GNU General Purpose License, версия 3. Для сборки исходного кода вам понадобится Xcode 4.0+; Для создания версии, которая будет работать под управлением Snow Leopard, вам также понадобится установленный Snow Leopard SDK. К сожалению, SDK Snow Leopard трудно найти в настоящее время; Вам нужно будет найти его где-нибудь в Интернете и вручную установить в папку Xcode SDK. (Для большинства приложений все в порядке, чтобы создать новый SDK, а для модуля ядра волшебные трюки с виртуальными виртуальными таблицами требуют компиляции против самого низкого общего знаменателя.)

Простого запуска xcodebuild в каталоге checkout должно быть достаточно для сборки kext. Если вы хотите упаковать пакет, вы можете запустить make, чтобы собрать пакет в каталоге build/ (хотя, пожалуйста, не публикуйте выпущенные версии, как если бы они были официальными!).

Благодарности

На плечах гигантов я стою. Мое смутное спасибо Apple за то, что у меня есть хотя бы некоторый образец кода IOKit (хотя последний раз, когда он был успешно построен, был 10.2.x); Это было достойное начало чтения, чтобы понять, как я могу это структурировать. Существенное спасибо David Brownell, который написал драйвер rndishost для Linux; Некоторые части HoRNDIS были перенесены из этой работы. Дэвид Браундел также написал драйвер frndis, который позволяет устройствам Android / Linux вести себя как устройства RNDIS; Чтение этого источника помогло понять, почему HoRNDIS не работал на ранних стадиях. (К сожалению, Дэвид Браунелл скончался в апреле 2011 года. Спасибо за всю вашу напряженную работу, Дэвид, дайте вам покой.)

Спасибо также тем, кто помог протестировать HoRNDIS до того, как я ее выпустил, а также всех других людей со времен проекта unrEVOked, без которых я, скорее всего, не был бы вовлечен в разработку Android.

Поддержка и контакты

После трехлетнего срока пребывания в должности, я ищу нового помощника для HoRNDIS. У меня больше нет времени, чтобы держать HoRNDIS в курсе, как он заслуживает. Если вы считаете, что у вас есть навыки, необходимые для сопровождения этого программного обеспечения, сообщите мне об этом или опубликуйте в этой статье GitHub.

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

Поэтому, для обратной связи, свяжитесь со мной!