Настройка интернет соединения через USB модем
1. Подключаем USB-модем к компьютеру.
Устройство определяется системой и требует драйвера,
устанавливаем драйвера с самого модема (эмулятор CD), с флэшки или компакт-диска.
2. В «Диспетчере устройств» находим модем и заходим в его свойства.
Смотрим номер COM-порта на который установился модем (может пригодиться для отлучения модема от оператора).
И заполняем строку инициализации модема (точка доступа оператора).

Чтобы не менялся COM-порт модема и не приходилось проверять строку инициализации,
следует включать модем всегда в один и тот же USB-порт.
Для модема с SIM-картами разных операторов в системе может быть несколько устройств.
Строки инициализации для разных операторов связи:
Мегафон: AT+CGDCONT=1,»IP»,»internet»
МТС: AT+CGDCONT=1,»IP»,»internet.mts.ru»
Теле 2: AT+CGDCONT=1,»IP»,»internet.tele2.ru»
БиЛайн: AT+CGDCONT=1,»IP»,»internet.beeline.ru»
3. Заходим в «Сетевые подключения» и запускаем «Мастер новых подключений»
Нажимаем кнопку «Далее»
4. Выбираем «Подключить к интернету»
и «Установить подключение вручную»
5. Выбираем «Через обычный модем»
6. Вводим приемлемое название соединения
7. Вводим номер дозвона поставщика услуг
Одинаков для МТС, БиЛайн, Мегафона и Теле2: *99***1# (возможен короткий вариант *99#)
8. Вводим «имя пользователя» и «пароль доступа»
Для МТС:
имя пользователя — mts
пароль доступа — mts
Для БиЛайн:
имя пользователя — beeline
пароль доступа — beeline
Для Мегафон:
имя пользователя — gdata (или оставить пустым)
пароль доступа — gdata (или оставить пустым)
Для Теле2:
имя пользователя — оставить пустым
пароль доступа — оставить пустым
9. Завершаем настройку, нажимая «Готово»
10. Имеем готовое соединение для подключения к интернету
которое можно сделать соединением «по-умолчанию» в браузере
11. Можно настроить свойства соединения под свои потребности
которое можно сделать соединением «по-умолчанию» в браузере 
Моя попытка сделать Wi-Fi-флешку и что из этого получилось (а что нет)

Что такое Wi-Fi-флешка? Это флешка, которая опознается, как флешка, пахнет, как флешка, крякает, как флешка, но на самом деле никакая она не флешка, она просто эмулирует файловую систему, а файлы берет по Wi-Fi с сервера.
Но зачем?
Да, на самом деле, и не зачем. Просто как-то пришла в голову идея о чем-то подобном и стало интересно, реально ли это вообще? И немного подумав, я понял, что вроде все необходимое для реализации проекта у меня есть, и я таки решился попробовать. Кому-то нравится в свободное время играть в игры, качать героя, стрелять из танков, самолетов, кому-то смотреть фильмы или сериалы, кому-то читать художественную литературу, кому-то решать головоломки, проходить квесты, выбираться из комнат. А мне вот захотелось пройти свой квест, чисто For Fun. Да и к тому же, даже если результат проекта мне сейчас не нужен, это в любом случае будет хороший опыт, который может пригодиться в будущем. Но теоретическое назначение этому мне виделось следующее.
Есть старые устройства, которые умеют читать флешки (телевизоры, музыкальные центры), но при этом еще не доросли до сети. Чтобы постоянно не перезаписывать для них флешку с файлами, можно сделать такое вот беспроводное автоматическое обновление. Но это только один из вариантов использования, на самом деле, мне кажется, много чего можно сделать из такой технологии, поэтому вперед!
Для этого нам нужно
- ESP32-S2 (так как она сразу умеет в USB OTG).

- USB разъем (так как эта плата не умеет в USB через разъем для прошивки, хотя вроде есть версии с двумя USB Type-C, где один как раз OTG, но у меня такой нет).

- Упрямство, отвага и возможно даже слабоумие (но это не точно).
Ну, что ж, начнем.
Для программирования плат Arduino и ESP я использую Arduino, но не саму студию (она ужасна), а только её SDK. А для написания кода мне гораздо больше нравится плагин Visual Micro для Visual Studio. Но проще (и бесплатнее) это делать через Arduino IDE. Как всем этим пользоваться я тут расписывать не буду, иначе статья растянется на километры, поэтому предположим, что вы все знаете и умеете. Брынь! (взмах волшебной палочкой). Все. Теперь вы знаете и умеете.
Первое что я сделал — взял демо скетч USBMSC, который идет в комплекте к SDK для ESP32, использующий tinyUSB:
В нем видно, что эмуляция флешки — это очень просто. Для начала я просто собрал его, чтобы проверить. Тогда я еще не знал, что tinyUSB в ESP32-S2 не может работать по встроенному USB для прошивки (Arduino Leonardo, например, может). Ну ладно, не может и не может, вопрос решался довольно просто, GPIO20 на плате это USB_DATA+, GPIO19 это USB_DATA-.

В результате получилось так:

Питание пока не подключено, только линии данных, так как при отладке она будет питаться через Micro-USB, но если делать законченное устройство, то нужно землю к земле, 5 вольт к 5-ти вольтам. После этого скетч заработал, и у меня тут же в системе появился диск какого-то микроскопического объема с файлом README + еще один COM порт. Это меня порадовало, пришло время менять код из примера на нужный мне. Я разделил этот процесс на несколько этапов.
Работа с готовым образом флешки
Сперва я решил начать с простого: взять готовый образ флешки с файлами и передавать его. Все казалось довольно легко, ведь в примере все сделано на довольно нехитрых функциях:
static int32_t onRead(uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize); static int32_t onWrite(uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize);
Метод onWrite мне вообще не нужен, так как я пока не планирую возможность записи на такую флешку, вернем в нем bufsize, типа мы все записали. А вот метод onRead как раз нужен, и вроде все просто, данные спрашивают у меня, я спрашиваю у сервера, получаю результат, отдаю его спрашивающему.
Но начал я с того, чтобы создать образ флешки. Нужен именно чистый образ, без лишних данных и без дополнительных заголовков файловых контейнеров. Для Windows есть программы для создания подобного, вроде Win32DiskImager, но я просто написал такой код на C и создал образ с реальной флешки:
FILE* f = fopen("\\\\.\\PhysicalDrive8", "rb"); FILE* fd = fopen("V:\\WFLASH.RAW", "wb"); if (f == NULL) < std::cout __int64 size = 0; const int BUFFER_SIZE = 512; char buffer[BUFFER_SIZE]; while (fread(buffer, 1, BUFFER_SIZE, f) == BUFFER_SIZE) < fwrite(buffer, 1, BUFFER_SIZE, fd); size += BUFFER_SIZE; if ((size % 4194304) == 0) < std::cout >
PhysicalDriveНОМЕР_ДИСКА — который можно посмотреть в оснастке управление компьютером → управление дисками.
Далее я поднял простой HTTP сервер (у меня был ламповый Apache) и накидал скрипт на PHP:
if (!isset($_GET["length"])) < $_GET["length"] = 512; >file_put_contents("./log.txt", "POS=".$_GET["pos"].", LENGTH=".$_GET["length"].PHP_EOL, FILE_APPEND); $file = fopen("v:/WFLASH.RAW", "r"); fseek($file, $_GET["pos"]); echo fread($file, $_GET["length"]); fclose($file); ?>
Скрипт просто получает позицию и размер данных, которые ему нужно прочитать, читает и отдает. Здесь все легко.
Повозиться пришлось на стороне платы. Она никак не хотела подключаться и что-то получать. Потом до меня дошло, что в методе onRead не надо этого делать, он вызывается как-то по прерыванию, и в нем не все работает, в нем можно поспать (типа delay(1) в цикле) в ожидании нужного результата, а во время его сна уже работает основная функция цикла программы loop() и в ней как раз можно и подключаться и получать данные. После N минут (часов, дней. ) отладки все наконец-таки заработало и я увидел образ флешки, как новый диск у себя в компьютере. Не скажу, что работало это быстро, скажу, что работало это очень медленно. Вначале я думал на медленный USB HOST на ESP32-S2, но потом понял, что медленно идет именно получение данных. Поэтому перешел ко второму этапу — вещать образ флешки не через HTTP, где надо еще формировать и парсить заголовки, и не PHP скрипта, который при каждом запросе по новой открывает файл, а написать на C простой сервер на сокетах с постоянным соединением явно будет быстрее.
Сказано — сделано. Сервер был написан, и даже дал определенный прирост производительности, но небольшой. Тогда я решил сделать буфер данных на плате. Например, запрашивают у меня один сектор 512 байт, но ведь наверняка, как только я его отдам, у меня тут же запросят следующий, идущий за ним. А мне надо по каждому сектору спрашивать данные и получать ответ. Но я сделаю умнее, я сразу запрошу 32 КБ данных и потом буду супер-турбо-мега-быстро отдавать данные уже из памяти. До тех пор пока не запросят что-то за пределами буфера. При случайном чтении станет, конечно же, еще медленнее, но чаще всего чтение идет последовательное, поэтому делаю кэш.


Снова сказано — снова сделано. Стало ещё чуть быстрее, но все равно не то, 65 КБ данных приходят примерно за 200 мс, 32 КБ за 100, это где-то 2–2,5 Мбит/с. Хм, надо оптимизировать что-то еще.
А ведь все начиналось так хорошо.
Дальше, что бы я не делал, скорость, увы, не росла. На форумах у людей получалось поднимать скорость Wi-Fi платы перекомпилируя SDK с другими параметрами. Я тоже пробовал так делать, но мне это дало процентов 5–10 прироста и все. «Что я делаю не так?» пролетало у меня в голове, «они ведь пишут, что им удалось поднять скорость чуть ли не в 5 раз! Почему у меня не получается?». И тут мне на выручку пришло одно полезное правило:
Когда уже больше ну ничего не помогает, прочти уже наконец целиком текст сообщений, а не только те его куски которые тебе интересны
И вот я прочел и все понял: у них изначально была скорость в 5 раз ниже моей, а после всех ускорений, стала примерно такая же, как у меня сейчас и когда они жаловались на медленный Wi-Fi, они жаловались не на 300 КБ/с, как зажравшийся я, а на 50-60 КБ/с. И выходит, что 300-350 КБ/с это и есть предел скорости на ESP32. Круче только на бенчмарках у производителей платы, но похоже, что там специфические тесты. И это весьма грустно, так как довольно прилично портит функционал устройства. Я конечно же не ожидал 54 мегабита по воздуху от ESP, но рассчитывал хотя бы на 20 мегабит. Ну хотя бы 10? Ну пожалуйста. Ну и ладно. В целом, все работает и видео с битрейтом до 2 мегабит играются без тормозов (ни о каком HD конечно же речь не идет, 2 мегабита — это довольно низкий битрейт даже для 720p, но для SD вполне). Можно пока оставить сей момент как есть, все равно с ним уже ничего не сделаешь, и продолжить двигаться дальше, туда где можно что-то еще улучшить.

— Друзья! У нас две проблемы. Минобороны и пуговица. Пуговицу мы найти можем? Чисто теоретически? Можем. А с Минобороны. ничего. Вывод: ищем пуговицу. (День радио)
Ищем пуговицу
Итак мой сервер уже умеет передавать данные с готового образа, но если бы я видел завершение проекта таким, то скорее всего даже не начал бы его. Потому, что в этом нет никакого смысла. Если для того, чтобы добавить файл для передачи его нужно копировать в образ, то тогда зачем все это, если можно точно также скопировать его на обычную флешку и вставить в устройство. Да и к тому же, у меня на диске лежит, например, фильмов на 200 ГБ, получается нужно либо делать образ флешки еще на 200 ГБ, либо постоянно вручную копировать их в образ меньшего объема. Нет, это все полная фигня. Я видел все совсем по другому. Я хочу, чтобы я просто указал серверу «расшаренную» папку, а он сам её просканирует и создаст у себя в мозгах виртуальный образ, но физически не будет его записывать на диск или в память. Он, понимая в каком диапазоне секторов у него находятся какие файлы и когда у него эти сектора запрашивают, будет просто открывать настоящие файлы и брать данные оттуда. Таким образом, он создаст образ, не создавая его) И это будет быстро и не потребует много памяти даже для 200+ ГБ образов.
Чтобы реализовать такой алгоритм, нужно понимать какую файловую систему эмулировать. FAT16 имеет ограничения на размер раздела в 2 ГБ, что сразу нет. NTFS слишком сложный и навряд ли его понимают старые устройства, как и exFAT. Остается FAT32 с его единственным важным ограничением — максимальная длина одного файла 4 ГБ, остальное все неплохо. Снаружи. Тогда я еще не знал, что там внутри.

Там внутри такое. Там внутри такое! Там внутри такое!! Я не буду говорить, что там внутри никому, кроме своего психотерапевта, а так как его у меня нет, то вообще никому. Но эта информация открыта, её можно легко найти в сети, если есть такое желание. Особенно доставляет то, как там сделана поддержка длинных имен файлов, это настолько отвратительная мерзость, что даже великолепно. Но важно понимать, что перед людьми, придумавшими это, стояла важная задача — сохранить совместимость с устройствами и программами, которые знать не знали ни о каких длинных именах файлов и важно было, чтобы потом из-за этого изменения не потерялись важные файлы на тысячах компьютеров по всему миру, поэтому вариантов у разработчиков было не много. Впрочем после N минут (часов, дней. ) отладки я научился читать образы FAT32 и вытаскивать оттуда файлы и папки, а после N×3 минут (часов, дней. ) я научился их создавать такими, чтобы их могли читать другие. Ну а дальше, спустя еще пару веков, сервер научился и эмулировать FAT32 больших размеров, храня у себя в памяти только структуру FAT, а сами данные файлов беря из их настоящего расположения. Я попробовал проэмулировать папку с фильмами, получилось 229 ГБ данных, файлы размером более 4 ГБ отсекаются сервером еще на этапе сканирования папок, иначе размер образа был бы еще больше. Жаль что большая часть этих фильмов не способна воспроизводиться без жутких тормозов, но старые 700 МБ рипы играются очень даже бодро)

На сегодняшний день сервер работает только под Windows (но только из-за не стандартизированных сокетов C++ и возможно еще пары функций, вроде AnsiToOem, честно говоря было просто лень искать кроссплатформенные альтернативы и не хотелось подключать сторонние библиотеки, но думаю портировать код на другие ОС не будет большой проблемой).

Оптимизаторы оптимизировали-оптимизировали.
Еще интересный момент, связанный с инициализацией флешки. Windows подключает флешку тем дольше, чем больше она по объему, так как хочет полностью прочитать всю таблицу секторов, а для 200+ ГБ она занимает более 60 МБ (а скорость помним, ~300 КБ/с) и это прям не быстро. Совсем. Флешка такого объема подключается несколько минут. А вот Android, при подключении к нему флешки, очень скромен и запрашивает данные только при необходимости, поэтому к нему флешка подключается мгновенно. Зато при запуске видео, Android начинает читать кучу всего, и самого запуска видео я на нём так и не дождался, устал ждать).
Но всё-таки решил немного ускорить загрузку данных для Windows. И раз он читает всю таблицу FAT, я могу отдать ему её быстрее. А добиться этого можно, если сделать плату чуть умнее, не просто, как прокси, которая гоняет через себя данные, а ещё совсем немного в них разбирается. И самое важное здесь то, что я эмулирую идеальный FAT. Это FAT в котором нет фрагментации, FAT в котором данные каждого файлика идут строго друг за другом, без пропусков и без перемешивания секторов, мой FAT — это FAT в котором волшебные пони кушают волшебную радугу, голосуйте за мой FAT! Поэтому в моей таблице секторов в разделе с данными самих файлов всего два варианта записей: информация о том, где следующий сектор файла (а это всегда на единицу больше текущего) или информация о том, что этот сектор для файла последний. Поэтому, чтобы построить её, нужно всего лишь иметь массив с конечным (или начальным) сектором каждого файла, отсортированный по возрастанию.
Для этого, помимо количества секторов на диске, мой сервер стал отдавать плате немного больше полезной информации. И вот, когда код был написан, и я его запустил, я ожидал, как при подключении к USB флешка в ту же секунду определится. Ну ладно, может через пару секунд. Но увы тут меня ждал второй облом, скорость увеличилась раза в 2, но не более. Я уже стал грешить, что написал медленный код генерации кусочков таблицы FAT на ESP32, но нет, мой код был быстр, как гордый лев, удирающий от разъяренного носорога, чего нельзя сказать про работу USB на плате. И тут я вспомнил. Ну конечно, там же USB 1.1 и 10 мегабит скорости! Но с другой стороны, должно же быть 1.25 МБ/с. В идеальных условиях и идеальном мире, а в реальном те 800 КБ/с, что у меня получились — это похоже был максимум, на что я мог рассчитывать, так что не так уж и страшен этот медленный Wi-Fi, все равно порог скорости не так уж далеко, не 350 КБ/с так 800 КБ/с. Ладно. Я спокоен.

Вишенкой на торте я хотел записать видео, как я запускаю с получившейся «флешки» фильм на телевизоре, и уже было собрался это делать, так как я помню что у одного из моих старых телеков точно был USB разъем, но увы, расходимся пацаны, кина не будет, не для нас USBишенька цвела:

Немного идей
Еще поразмыслив, я решил, что идеальная флешка могла бы работать не в связке с каким-то специальным сервером, а более универсально, например, подключаясь по FTP или WebDAV сама эмулировала бы FAT32, а данные получала бы прямо с этих серверов. Это было бы просто прелестно, будь у ESPшки нормальная скорость Wi-Fi и USB. Но, увы, нет ручек — нет конфеток. Но идея прекрасна, возможно когда-нибудь.
Настройка флешки
Изначально все настройки (Wi-Fi, сервер) этой «флешки» были прямо в прошивке, но я подумал, что так уж совсем негоже. По хорошему надо сделать подключение к ней с телефона, как к Wi-Fi точке доступа и настраивать все через Web. Но тогда надо еще сделать какую-то кнопку, чтобы сбрасывать настройки, иначе как потом перевести её снова в точку доступа? И если бы я делал законченное устройство, я бы так и сделал, а еще придумал бы для этого всего корпус, но мне это устройство не сильно нужно, поэтому и с настройкой я так заморачиваться не хотел и остановился на компромиссе: все будет настраиваться командами, через любой из COM портов (либо через тот, что используется для прошивки, либо через тот, что идет бонусом вместе с USB устройством). Это, конечно, еще не человек, но уже и не обезьяна, и не нужно пересобирать прошивку для изменения настроек сервера или Wi-Fi.


Итого
На этом, в общем-то, проект можно считать завершенным. У меня еще была идея сделать псевдо-меню на файлах флешки и таким принципом работы:
- Мы подключаем флешку к ТВ и она показывает нам фейковый список видео файлов (это будет, например, список роликов с ютуба).
- На ТВ мы выбираем файл и запускаем его.
- Сервер видит к какому файлу идет обращение и может скачать этот файл с ютуба, но он не может сразу подменить содержимое у запрошенного файла. У фейкового файла был фейковый размер и он будет отличаться от реального, а менять эти данные на уже подключенной флешке мы не можем. Но мы можем послать ей команду на перезагрузку, она отвалится, подключится снова и на ней будет уже другой список файлов. Так мы и будем делать навигацию по меню с проваливанием внутрь пунктов и возвращением обратно, через отвал флешки. Можно даже сделать прогресс бар скачивания файла, когда флешка будет периодически отваливаться и там будет файл с процентами загрузки в имени файла, а потом уже скачанный файл, который можно запускать и файл «назад», который возвращает к списку. Клевое извращение, правда?))
Звучит дико и забавно, но я все таки решил этого не делать) Слишком уж большое извращение над USB, да и к тому же, я в курсе, что существуют дешевые HDMI-устройства на Android, которые превращают любой старый ТВ в смарт. У меня даже валялся такой где-то.
Ну а пока оставляю тут исходный код того, что получилось, надеюсь кому-то было интересно и кому-то будет полезно:
Как использовать USB модем как флешку (Билайн и другие 3G модели) – Huawei Devices

Новости
Автор Лян Ли На чтение 36 мин Опубликовано 02.06.2022
.04 – Как «поговорить» с USB-модемом в Linux?
Я верю ответу, который Вы ищете, здесь: Используя winmodem USB с драйвером Conexant в (K) (Сновещательной) Ubuntu 11.10 .
Важный материал (извлеченный из сайта):
Когда я включил модем Conexant, я выполнился
lsusb
Bus 006 Device 002: ID 0572:1300 Conexant Systems (Rockwell), Inc. SoftK56 Data Fax Voice CARP
таким образом, я знал, что модем HSF был распознан системой.
Поскольку у меня было предыдущее интернет-соединение, я обновил систему
sudo apt-get update && sudo apt-get dist-upgrade
Я проверил, что у меня не было предыдущих установленных драйверов Conexant. Например: Я выполнился
ls /usr/sbin/hsfconfig
и это сказало, что тот файл не существовал; если это существовало, я буду думать, что что-то было все еще установлено.
Я удостоверился, что у меня был “gcc”, и “сделайте” готовыми, выполнившись
sudo apt-get install gcc make
Затем я выполнил те шаги, сказанные там:
sudo -s cd /lib/modules/$(uname -r)/build/include/linux ln -s ../generated/utsrelease.h ln -s ../generated/autoconf.h exit
Я подготовил файлы к компиляции драйвера, выполнившись
mkdir ~/conexant_modem cd ~/conexant_modem
и если у меня была 64-разрядная операционная система, я выполнился
wget http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/hsfmodem-7.68.00.09x86_64oem.tar.gz tar xzf hsfmodem-7.68.00.09x86_64oem.tar.gz wget http://www.bargweb.net/images/2009/november/hsfmodem-7.80.02.05-DiacoEdition.zip unzip hsfmodem-7.80.02.05-DiacoEdition.zip cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/framewrk.h hsfmodem-7.68.00.09x86_64oem/modules/imported/include/framewrk.h cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/osservices.h hsfmodem-7.68.00.09x86_64oem/modules/imported/include/osservices.h
еще, если у меня была 32-разрядная операционная система, я выполнился
wget http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/hsfmodem-7.68.00.09oem.tar.gz tar xzf hsfmodem-7.68.00.09oem.tar.gz wget http://www.bargweb.net/images/2009/november/hsfmodem-7.80.02.05-DiacoEdition.zip unzip hsfmodem-7.80.02.05-DiacoEdition.zip cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/framewrk.h hsfmodem-7.68.00.09oem/modules/imported/include/framewrk.h cp -a hsfmodem-7.80.02.05-DiacoEdition/modules/imported/include/osservices.h hsfmodem-7.68.00.09oem/modules/imported/include/osservices.h A note for the curious ones: those "framewrk.h" and "osservices.h" files were the different ones between the directories "hsfmodem-7.68.00.09oem/modules/imported" and "hsfmodem-7.80.02.05-DiacoEdition/modules/imported".
Если у меня была 64-разрядная операционная система, я выполнился
wget http://www.linuxant.com/drivers/hsf/full/archive/hsfmodem-7.80.02.06x86_64full/hsfmodem-7.80.02.06x86_64full.tar.gz
еще, если у меня была 32-разрядная операционная система, я выполнился
wget http://www.linuxant.com/drivers/hsf/full/archive/hsfmodem-7.80.02.06full/hsfmodem-7.80.02.06full.tar.gz
Примечание для любопытных: тот файл был новейшим в http://www.linuxant.com/drivers/hsf/full/downloads.php
И затем, если у меня была 64-разрядная операционная система, я выполнился
tar xzf hsfmodem-7.80.02.06x86_64full.tar.gz rm -r hsfmodem-7.80.02.06x86_64full/modules/imported cp -R hsfmodem-7.68.00.09x86_64oem/modules/imported hsfmodem-7.80.02.06x86_64full/modules/ cp -R hsfmodem-7.68.00.09x86_64oem/modules/imported hsfmodem-7.80.02.06x86_64full/modules/
еще, если у меня была 32-разрядная операционная система, я выполнился
tar xzf hsfmodem-7.80.02.06full.tar.gz rm -r hsfmodem-7.80.02.06full/modules/imported cp -R hsfmodem-7.68.00.09oem/modules/imported hsfmodem-7.80.02.06full/modules/ cp -R hsfmodem-7.68.00.09oem/modules/imported hsfmodem-7.80.02.06full/modules/
Следующий шаг должен был убрать существующий каталог.
Если у меня была 64-разрядная операционная система, я выполнился
rm -rf hsfmodem-7.68.00.09x86_64oem rm -rf hsfmodem-7.80.02.05-DiacoEdition rm hsfmodem-7.68.00.09x86_64oem.tar.gz rm hsfmodem-7.80.02.05-DiacoEdition.zip rm hsfmodem-7.80.02.06x86_64full.tar.gz
еще, если у меня была 32-разрядная операционная система, я выполнился
rm -rf hsfmodem-7.68.00.09oem rm -rf hsfmodem-7.80.02.05-DiacoEdition rm hsfmodem-7.68.00.09oem.tar.gz rm hsfmodem-7.80.02.05-DiacoEdition.zip rm hsfmodem-7.80.02.06full.tar.gz
Затем я должен был изменить некоторые файлы для адаптации их для работы с 3.0.0 версиями ядра Linux. Если у меня была 64-разрядная операционная система, я выполнился
cd hsfmodem-7.80.02.06x86_64full xdg-open modules/GPL/serial_cnxt.c
еще, если у меня была 32-разрядная операционная система, я выполнился
cd hsfmodem-7.80.02.06full xdg-open modules/GPL/serial_cnxt.c
и затем текстовый редактор был запущен. Я искал строку
#ifndef FOUND_UART_REGISTER_PORT
и ниже я нашел строку
static DECLARE_MUTEX(cnxt_port_sem);
Я удалил ту последнюю строку и записал там
static DEFINE_SEMAPHORE(cnxt_port_sem);
и я сохранил и закрыл тот файл. Я выполнился
xdg-open modules/osdiag.c
и затем текстовый редактор был запущен. Я искал строку
THIS_MODULE,
и ниже я нашел строку
.ioctl = diag_ioctl,
Я удалил ту строку и записал там
.compat_ioctl = diag_ioctl,
и я сохранил и закрыл тот файл. Я выполнился
xdg-open modules/osnvm.c
и затем текстовый редактор был запущен. Я искал строку
static LIST_HEAD(nvm_newinst_list);
и ниже я нашел строку
static DECLARE_MUTEX(nvmelem_writelist_sem);
Я удалил ту последнюю строку и записал там
static DEFINE_SEMAPHORE(nvmelem_writelist_sem);
и я сохранил и закрыл тот файл.
Примечание для любопытных: источником тех изменений в тех файлах был http://www.openmamba.org/showfile.ht…l-2.6.37.patch
Пользователь по имени Chiaseth помог сообщению тех шагов, которые я выполнил, этот путь:
- Я выполнился xdg-открытый modules/osservices.c
и затем текстовый редактор был запущен. Я искал строку
#include
и я удалил ту строку и записал там
#include DEFINE_MUTEX(os_mutex); // Define a mutex
В том файле я искал строки
unlock_kernel()
замена всех их с
mutex_unlock(&os_mutex)
Кроме того, в том файле я искал строки
lock_kernel()
замена всех их с
mutex_lock(&os_mutex)
и я сохранил и закрыл тот файл.
- Я выполнился xdg-открытый modules/osdcp.c
В том файле я искал строку
static spinlock_t dcp_lock = SPIN_LOCK_UNLOCKED;
static DEFINE_SPINLOCK(dcp_lock);
и я сохранил и закрыл тот файл.
- Я выполнился xdg-открытый modules/osdiag.c
В том файле я искал строку
static spinlock_t diag_lock = SPIN_LOCK_UNLOCKED;
static DEFINE_SPINLOCK(diag_lock);
и я сохранил и закрыл тот файл.
- Я выполнился xdg-открытый modules/osfloat.c
В том файле я искал строку
static spinlock_t fpstates_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
static DEFINE_SPINLOCK(fpstates_lock);
и я сохранил и закрыл тот файл.
- Я выполнился xdg-открытый modules/osservices.c
В том файле я искал строку
static spinlock_t atomic_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
static DEFINE_SPINLOCK(atomic_lock);
и я сохранил и закрыл тот файл.
- Я выполнился xdg-открытый modules/GPL/oscompat.h
В том файле я искал строку
static spinlock_t tqueue_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
static DEFINE_SPINLOCK(tqueue_lock);
и я сохранил и закрыл тот файл.
Наконец… Если выполняется
sudo make install sudo hsfconfig
Это спросило, “Где исходный каталог сборки Linux, который соответствует Вашему рабочему ядру?”, затем я просто нажал клавишу Return для принятия ответа по умолчанию. Я также принял ответ по умолчанию в других вопросах.
Наконец команда сообщила об этом
The /dev/modem alias (symlink) points to ttySHSF0
dmesg
и в конце я видел
[59190.782005] hsfengine: module license 'see LICENSE file distributed with driver' taints kernel. [59190.782022] Disabling lock debugging due to kernel taint [59192.564398] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300) [59192.600274] usbcore: registered new interface driver hsfusbcd2 [59194.416241] usbcore: deregistering interface driver hsfusbcd2 [59194.600064] usb 6-1: reset full speed USB device using uhci_hcd and address 2 [59194.811746] cnxthsf_DcpDestroy: units still active, waiting.. [59194.811764] cnxthsf_DcpDestroy: units still active, waiting.. [59194.811778] cnxthsf_DcpDestroy: units still active, waiting.. [59196.967466] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300) [59196.994150] usbcore: registered new interface driver hsfusbcd2
который предназначенный, среди прочего, в котором был обнаружен USB-модем /dev/ttySHSF0 .
Примечание: поскольку они сказали в https://help.ubuntu.com/community/Di… Практическое руководство/Conexant : “не удаляйте или перемещайте исходное дерево [в наш случай: ~/conexant_modem] от Вашей системы после этих шагов, это потребуется, чтобы удалять и исправлять драйвер”.
Я запустился kppp (например), и настроенный новое “соединение”, указывая, что модем был в /dev/ttySHSF0 . Вы могли также использовать программу как efax-gtk отправить факсы через модем.
3g-модем от билайн в виде флэшки
В теории подобное возможно, если пользователь сможет создать новую прошивку для модема, но подобного ещё никто не делал.
Yellow leaf — статьи — использование 3g/4g-модема в linux без wvdial и network manager
Про использование GSM/3G/4G-модемов в Linux написано уже много, но почти все руководства предполагают использование утилит wvdial или network manager для подключения. Эти утилиты позволяют существенно упростить процесс подключения, однако при их использовании невозможно полностью управлять опциями pppd, хотя это бывает необходимо (например при подключении нескольких модемов и/или когда надо «привязывать» подключения к конкретному ppp-интерфейсу).
Далее будет показано как можно настроить подключение к интернету с использованием GSM/3G-модема в дистрибутивах Debian/Ubutnu без использования вспомогательных утилит.
Начальные условия: сервер под управлением Ubuntu 12.04, модем Huawei E171 с симкой оператора «Мегафон», доступный в системе как «/dev/ttyUSB0».
Задача: подключиться к интернету используя только pppd и привязать соединение к интерфейсу ppp100.
Переходим к решению задачи. Обычно для дозвона пишут свой chat-скрипт, и почему-то не многие знают что в поставке pppd уже есть chat-скрипт для GSM/3G-модемов, доступный в большинстве дистрибутивов Linux как «/etc/chatscripts/gprs». Поэтому часть с написанием этого скрипта можно пропустить и сразу приступить к описанию подключения в pppd. Для этого создадим файл «/etc/ppp/peers/Megafon» следующего содержания:
# Используемое для подключения устройство /dev/ttyUSB0 # chat-скрипт # В параметре "-T" передаётся имя точки доступа connect '/usr/sbin/chat -v -f /etc/chatscripts/gprs -T internet' # Надо ли менять маршрут по умолчанию # Закомментируйте если не надо defaultroute # Использовать ли DNS-сервера провайдера # Закомментируйте если не надо usepeerdns # Номер ppp-интерфейса (в данном случае будет ppp100) unit 100 # Подключаться в случае обрыва persist # Перепосылать пакеты авторизации каждые 60 секунд # Позволяет избежать обрыва соединения при отсутствии трафика chap-interval 60 # Идентификатор соединения, используемый для поиска паролей в соответствующих файлах, # А так же передаваемый ip-up и ip-down-скриптам ipparam Megafon # Имя пользователя (пароль описывается в файле "/etc/ppp/chap-secrets") user "gdata" # Отключаем любое сжатие nopcomp novjccomp nobsdcomp nodeflate noaccomp # Правильная обработка обрывов соединения lcp-echo-interval 2 lcp-echo-failure 3 # IP адрес мы будем получать от провайдера, а не назначать сами noipdefault
Теперь вписываем в файл «/etc/ppp/chap-secrets» следующие строки
"gdata" Megafon "gdata"
И подключаемся командой:
pon Megafon
Соответственно отключиться можно командой:
poff Megafon
Чтобы соедиение устанавливалось автоматически при загрузке нужно добавить запись в файл «/etc/network/interfaces». Согласно документации она должна выглядеть вот так:
auto Megafon iface Megafon inet ppp provider Megafon
Однако в утилите ifup есть баг, который приводит к тому, что сразу после успешного подключения pppd получает SIGHUP и соединение рвётся. Ошибка эта очень древняя и судя по сообщениям на форумах и баг-трэкерам дистрибутивов надеяться на её исправление в ближайшем будущем не стоит. Поэтому используем небольшой хак: опишем интерфейс не как ppp, а как manual:
auto Megafon iface Megafon inet manual pre-up /usr/bin/pon Megafon pre-down /usr/bin/poff Megafon
На этом всё. Приятной работы!
Yellow leaf – статьи – использование 3g/4g-модема в linux без wvdial и network manager – huawei devices

Продолжение. Начало здесь .
Для тех, кто недавно присоединился к радиоканалу «Боян-FM» читателям моей уютненькой™, напомню, что затеял всё это ради того, чтобы построить достаточно скоростной IPSec-канал через «Йоту». А для этого, в свою очередь, необходимо получить прямой «честный» IP с SIM-карты на каком-либо сетевом интерфейсе, притом минуя PPP.
Конкретно я использую модем iRZ TL21 , построенный на базе модуля Sierra (он же AirPrime) MC7710, в составе которого находится чип Qualcomm MDM9200. Система — стабильный дистрибутив Debian (в данном случае Wheezy).
Сразу оговорюсь, что в какой-нибудь свежей Ubuntu данный модем заработает прям «из коробки»: его хорошо понимает NetworkManager. Но мы ж реальные пацаны, у нас реальный сервак, GUI на нём нетути. Да и подниматься линк должен сам по себе при старте системы. Поэтому пойти по простому пути не получится, придётся никакой механизма всё вручную.
Итак, суём модем в USB-порт, заправшиваем « lsusb » и видим…
Bus 006 Device 002: ID 03f0:1027 Hewlett-Packard Virtual keyboard and mouse
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 003: ID 1199:68a2 Sierra Wireless, Inc. MC7710 Modem
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Ага, третья строчка — вот оно как раз самое. Выделенные жирным шрифтом цифирки нам потом ещё пригодятся. Ну что-ж, вроде как всё хорошо. Смотрим « ls /dev/ttyUSB* » и видим… а ничего мы не видим. Как говорится, «***в панама». Нету псевдотерминалов.
Иногда затык может заключаться в том, что некоторые модемы «тянут» за собой виртуальный CD-ROM, на котором типа лежат типа драйвера для этого модема. И пока не пнёшь этот модем правильной AT-командой, собственно в модем он не превратится. А будет и дальше себе с настойчивостью кретина прикидываться CD-приводом. Ну это лечится элементарной установкой пакета «usb-modeswitch»: « apt-get install usb-modeswitch «.
Ладно, установили. Но псевдотерминалы всё равно не появились. Чешем репу. И вспоминаем, что в Debian-е по умолчанию идёт довольно боянистый софт, и нужных драйверов «из коробки» нет. Чтобы не париться уж слишком сильно, можно тупо поставить свежее ядрышко из backports. На момент написания этого псто оно было версии 3.16:
Перезагрузились. Смотрим « modinfo qmi_wwan » и « modinfo sierra_net «. Если выделенные жирным циферки из выхлопа lsusb (см. выше) оказались в одном из двух списков, то всё пучком. Можем продолжать. Если же нет, увы. Идем искать драйвера к нашему «мопеду». Хорошо если найдём. А если не найдем — значит «упс». В моём случае всё ништяк:
Внезапно, и псевдотерминалы появились в большом количестве:
Дальше тыкаем каким-нибудь minicom -ом в каждый терминал по очереди (« minicom -D /dev/ttyUSB0 «, « minicom -D /dev/ttyUSB1 » и т.п.) и смотрим который из них откликнется на какой нибудь « AT!GSTATUS? «, тот и есть нужный нам. Заодно проверим, что модем сцепился с сотовой сетью.
RSSI (dBm): -75 Tx Power: 0
RSRP (dBm): -103 TAC: 26BD (9917)
RSRQ (dB): -9 Cell ID: 0F30DB00 (254860032)
SINR (dB): 7.2
Вроде работает. Тут наступает небольшая засада. В дальнейшем нам придётся из различных скриптов ссылаться на найденный псевдотерминал. Но никто не может гарантировать нам, что после очередной перезагрузки сервера имя устройства останется таким же. Поэтому придётся помучать udev для того чтобы создать символическую ссылку (symlink), дабы увековечить нашу бесценную находку. Для начала смотрим к каким атрибутам мы могли бы привязаться.
Копипаста ниже была взята с другой конфигурации оборудования, поэтому некоторые буквы-цифры там будут расходиться с моим примером. Самые внимательные, наверное, даже найдут где именно. Но общий смысл от этого не меняется. Текстовое поле можно растянуть, чтобы было удобнее читать.
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device ‘/devices/pci0000:00/0000:00:1d.7/usb4/4-5/4-5:1.3/ttyUSB3/tty/ttyUSB3’:
KERNEL==»ttyUSB3″
SUBSYSTEM==»tty»
DRIVER==»»
looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb4/4-5/4-5:1.3/ttyUSB3’:
KERNELS==»ttyUSB3″
SUBSYSTEMS==»usb-serial»
DRIVERS==»sierra»
ATTRS==»0″
looking at parent device ‘/devices/pci0000:00’:
KERNELS==»pci0000:00″
SUBSYSTEMS==»»
DRIVERS==»»
Смотрим к каким атрибутам оборудования мы можем «привязаться». Однозначно придётся использовать критерий SUBSYSTEM==»tty» из первой секции, иначе получится ерунда. Но этого мало. Нужно что-то ещё. Большой соблазн взять ATTRS==»MC7710″, чтобы однозначно идентифицировать устройство, но… тогда мы не сможем указать номер интерфейса. Ибо udev позволяет брать параметры устройства и только одного родителя. Поэтому придётся довольствоваться ATTRS==»03″ и DRIVERS==»qcserial» из третьей секции. Итоговое правило будет выглядеть так:
Записываем его куда-нибудь в «/etc/udev/rules.d/80-LTE.rules», после чего заклинаем « udevadm control —reload-rules «, « udevadm trigger «. Первое нужно, чтобы udev перечитал список правил, второе — чтобы не топать ногами в серверную и не «перевтыкать» руками модем.
Итак, у нас появилась символическая ссылка «/dev/LTE-control». Что же с ней делать дальше? А дальше надо указать модему APN и логин-пароль, если есть. Но каждый раз мы это делать руками, понятно, не будем. Поэтому имеет смысл либо написать скрипт, либо запихнуть вызов соответствующих команд прямо в «/etc/network/interfaces». У меня получилось что-то типа того.
В директиве «pre-up» описываем действия до поднятия интерфейса: указать название APN, немного подождать, запустить пакетный драйвер QMI (или как он там правильно называется). То есть софтинку, которая разбирает-собирает поток данных и контрольный канал. С этого момента всё должно заработать. Если не взлетит, то вдумчиво раскуривать мануалы по модему, искать там диагностические AT-команды и пытаться разобраться что же пошло не так. После опускания интерфейса останавливаем QMI-драйвер.
Вроде бы на этом можно и успокоиться. Но я же ж извращенец, мне этого мало. Я хочу не просто подключить модем к серваку, а стать владычицей морскою «закинуть» его вовнутрь QEMU/KVM-виртуалки. В принципе, можно потанцевать с бубном и попробовать сделать это «прям щас». Но мой модем помимо режима QMI умеет ещё Direct IP, при котором не надо запускать никакого QMI-драйвера. Поэтому я пошёл дальше.
Сперва попросил уважаемого rustedowl разобраться как именно переключить модем в другой режим. Сложность там в том, что у данного устройства есть два разных набора AT-команд. Один лоховский универсальный, который является стандартным для любых UMTS-устройств. А второй — пацанский расширенный, для того чтобы можно было трогать модем за яйца крутить всякие хитрые инженерные параметры. Спустя какое-то время поспели вот такие заклинания:
Где набор символов «A710» является… паролем. Дабы всякие ничтоже сумнящиеся не совали свои шаловливые ручки куда не просят. И что сцуко характерно, энтот пароль в официальной документации к хитропопому прибору напрочь отсутствует. Он был найден на бескрайних просторах интернета и подходит к большинству модемов от данного производителя (Sierra Wireless). Параметр второй команды — собственно режим. «68A2» — это QMI, «68A3» — Direct IP. Данные значения актуальны только для данной модели (MC7710). Но в любом случае будет очень кстати лишний раз свериться с документацией чтобы не напортачить, поскольку операция смены PID является весьма щекотливой и может привести к самым разным последствиям. Третья команда перезагружает мопед.
После перезагрузки супостат перекрашивается яки киллер из GTA2 . Он теперь в lsusb виден как «Bus 004 Device 003: ID 1199:68a3 Sierra Wireless, Inc. MC8700 Modem». Обратите внимание, что поменялся ID оборудования и даже название модели. Раньше он представлялся как MC7710, а теперь внезапно стал MC8700. И драйвер теперь к нему подключился другой:
Также увеличилось количество псевдотерминалов ажно до пяти штук. И несколько изменился набор допустимых AT-команд.
Дальше всё «как обычно». Находим среди этой пачки «телетайпов» контрольный канал, фиксируем его udev-ом. Точно так же, как и в предыдущем случае, указываем точку доступа («AT CGDCONT=1,»IP»,»yota.ru»»). А вот процесс «дозвона» намного проще: «at!scact=1,1». Где последняя циферка является номером профиля, указанного в «CGDCONT». То есть, внутри модема можно создать несколько разных профилей с разными точками доступа и переключаться между ними. Теоретически это может пригодиться если нужно время от времени использовать то «честный» IP от оператора, то «серый», которые раздаются разными APN. Практически я не знаю случаев, когда такое может реально понадобиться.
Проверить, что «всё хорошо» можно командой «at!scpaddr=1», где цифра означает номер пресловутого «профиля». В ответ модем должен откликнуться полученным от оператора IP-адресом.
Но самой главной «плюшкой» режима Direct IP является то, что конкретно Sierr-овские модемы можно настроить на «автодозвон». Для этого нужно установить профиль по умолчанию: « at!scdftprof=1 » и включить автодозвон в этом профиле: « at!scprof=1,»»,1,0,0,0 «. Теперь после перезагрузки сервера либо отключения-включения питания модема он будет устанавливать линк автоматически. Аллилуйя!
IP-шник на системный интерфейс прилетает как обычно, по DHCP. Однако wwan0 — это всё-таки не ethernet. Попытки объединить его в bridge с другими системными интерфейсами (« brctl addif br0 wwan0 «) не увенчались успехом. Для того, чтобы получить беспроводной LTE-линк с честным IP-адресом внутри виртуальной машины, пришлось ещё немного поизгаляться. Как — напишу в третьей части, если когда-нибудь дойдут руки.
Какой вывод можно сделать из вышеописанных половых сношений с модемом умозаключений? Sierra Wireless делает вполне годные железки, которые довольно неплохо поддерживаются Linux-ом. Даже таким консервативным, как Debian. Собратьям по несчастью разуму могу порекомендовать брать устройства, которые понимает драйвер «sierra_net», ибо при прочих равных секса с ними будет меньше. К сожалению, таковых не так уж и много. Пока что их можно пересчитать по пальцам одной руки. Если кто будет выбирать, вот вам их VID-PID: «0f3d:68a3», «0f3d:68aa», «1199:68a3», «1199:68aa». Однако имейте в виду, что VID-PID также зависит и от режима работы и может изменяться в результате переключения последнего.
Автозагрузка
А теперь — автозагрузка, с ней посложнее. Я сразу опишу создание скрипта автозагрузки, в который можно будет запихнуть всё, что угодно. Он будет стартовать вместе с системой, нооо…
Нельзя просто так взять и создать файл автозагрузки. Есть одна проблема — Debian с какого-то времени пересмотрел свои требования к файлам автозагрузки. Файл мало просто создать, его нужно ещё по-особому отформатировать:
- Первая проблема — это LSB headers. Это заголовок файла автозагрузки. Нужен он потому, что компоненты автозагрузки должны выполняться в определённом порядке, поскольку часть из них зависят друг от друга. Предположим, у вас есть два скрипта в автозагрузке — один из них должен будет монтировать сетевую папку, а второй — делать в неё резервную копию файлов. Естественно, что сначала нужно выполнить первый, а потом — второй, поскольку второй зависит от первого. Для указания таких зависимостей и используются заголовки загрузочного файла. Впрочем, будет достаточно того заголовка, который я выложу в образце файла автозагрузки.
- Вторая проблема — любой скрипт в автозагрузке при запуске системы вызывается командой /etc/init.d/script start, а при выключении компьютера — командой /etc/init.d/script stop. Нужно добавить условия для обработки этих случаев.
Я сделал просто — взял за основу скрипт из имеющихся в /etc/init.d/ — уж они-то должны быть созданы по правилам, потом изучил этот скрипт и вырезал из него всё ненужное. Осталось два места, которые нужно изменить — место для команд, которые выполняются при запуске системы, и место для команд, которые выполняются при выключении компьютера. Впрочем, сейчас всё увидите:
Возможные проблемы и решения
Для стабильной работы лучше назначить usb-устройству режим «только модем» с помощью программы cutecom, и перейти в порт /dev/ttyUSB0, где нужно вписать соответствующую команду. Если связь проблемно устанавливается, в PPP параметрах следует выключить Deflate, BSD. Чтобы работать без перебоев, нужно следить за оставшимся балансом.
Задачи:
- Принимать первый аргумент командной строки в качестве названия внешнего интерфейса, проверяя подлинность имени, используя команду ifconfig;
- Добавить сохранение выбранного интерфейса в какой-нибудь файл в /etc и сделать ключ выбора последнего интерфейса, а лучше — при отсутствии имени интерфейса как аргумента.
- Запихнуть это всё красиво в автозагрузку и в $PATH.
Как сделать загрузочную флэшку
Для того, чтобы операция прошла успешно, сначала нужно убедиться, что система поддерживает загрузку с юсб. Проверить это можно, зайдя в BIOS. После нужно записать образ на девайс с помощью UltraISO или другой программой, и запустить ПК не с жёсткого диска, а с загрузочной флэшки (тоже через BIOS).
Как сделать модем универсальным?
Операторы сотовой связи ставят блокировку на свои модемы, чтобы их нельзя было использовать с сим-картами чужих операторов. Чтобы активировать данную функцию, нужно прошить устройство с помощью программы Huawei Modem Unloker. Она требует от себя знание кода пришивки, который можно получить сторонними программами по IMEI.
Мегафон
Получалось подключаться на любых настройках. А вообще точка доступа зависит от тарифа, по умолчанию — internet; имя пользователя megafon, пароль megafon. (Более не актуально, точка доступа для всех тарифов -internet, имя пользователя,пароль не требуются.)
Мегафонмодем в mandriva linux

Неоднократно видел и читал как народ настраивает модемы, которые видны как флешка модем в Linux, видел страшные скрипты, куча пакетов, кто-то даже ядро пересобирал. Но вот я стал
вынужденным обладателем EDGE модема Huawei e160g, который входит комплект Мегафон Модем Плюс.
Настраивалось на Mandriva Linux 2009.0, в других дистрибутивах будет иначе, так как не везде есть drakconnect.
Думал будет страшно, на деле оказалось максимально просто. Итак, инструкция (копипаст из личного блога ):
- подготовка к настройке — следует заранее установить 2 пакета ppp и comgt (в режиме суперпользователя # urpmi comgt ppp)
- вставляем сам модем в USB порт, жмем правой кнопкой на сетевом апплете (рядом с часиками 2 монитора (синенькие квадратики) с зеленой галочкой или красным крестиком), выбираем «Настроить сеть» и понеслась (после каждого пункта надо нажимать кнопку Далее или Готово):
: час ночи (MSK) — поставил на закачку фильм 2.2 Гб, скорость колеблется в районе 20 КБ/с ( -4 КБ/c), прога обещает скачать фильм примерно за 1 день и 5 часов. Трафик нигде не учитывается (не снимаются деньги со счета, 100 халявных МБ тоже не убывают). В целом неплохо, если подводных камней не будет — для дачи/поездок/отсутствие выделенки — самое оно.
Найденный скрипт
Хм-хм. Этот скрипт уже староват — iptables ругается на одну из команд и не хочет выполнять, да и тот путь, которым в статье скрипт пытаются поместить в автозагрузку, тоже работает не всегда на моей практике. Более того, есть проблема — этот скрипт отлично подходит для ситуации, когда ничего не собирается меняться.
Если бы так и было, я бы поставил iptables-persistent и на этом закончил бы статью. А вот я собираюсь иногда получать интернет по интерфейсу ppp0, иногда — по eth0, а иногда — вообще по wlan1, причём менять интерфейс хочу одной консольной командой. Так, eth1 в примере — внешний интерфейс, а eth0 — внутренний.
Настройка с помощью at-команд
Для удобной конфигурации понадобится терминальная программа, или более подходящее решение в виде Huawei Modem Terminal. Подключившись к устройству, нужно проверить подключение командой AT. Если ответ положительный, можно дальше проводить настройку. Для того, чтобы узнать список всех доступных команд, нужно вписать: AT^CMDL.
Общий алгоритм конфигурации
Для подключения модемов МТС, Мегафон в среде Unity (Ubuntu 12.04 и другие) используется интерфейс Network Manager. Инструкция:
- Зайти в пункт для изменения соединений.
- Добавить во вкладке мобильной передачи новую сеть.
- Выбрать настраиваемое устройство.
- Определить оператора связи, страну.
Переключение режима usb модема из mаss storage в gsm modem в linux – huawei devices
Привет. В этот раз мы решили написать статью об антеннах, в контексте антенн для USB-модемов. Расскажем о том, какие они бывают, почему так выглядят, какие проблемы решает каждая из антенн.
Мы учли пожелания в комментариях к предыдущей публикации о том, чтобы писать «проще», в то же время мы не можем не использовать технические описания и терминологию. Надеемся, что у нас получился нужный баланс удобного и одновременно полезного содержания.
Периодически, на электронную почту завода приходят вопросы вроде: «Почему купленная мною 3G антенна не ловит LTE?», или «Вскрыл вашу антенну — одни железки/фольга, где же усилитель?» и много других вопросов.
Было решено написать статью в том числе для ответов и на такие вопросы. Цель материала — показать, как работают такие антенны на примере собственных изделий и помочь выбрать нужную антенну для приема интернет-сигнала именно в вашей ситуации.
Антенны являются неотъемлемой частью любого устройства беспроводной связи. Из-за тренда к уменьшению габаритов устройств потребительской электроники, к антеннам, предъявляются жесткие требования. Под антенну на печатной плате выделяется небольшой участок (10% и менее от площади платы). Иногда и вовсе используются антенны на гибких печатных платах — FPCB , что позволяет компоновать устройство не только в плоскости, но и в объеме корпуса. Бывает, инженеры просто размещают «закорючку» на плате (например, PIFA-антенна ), отвечающую за работу устройства в 2G, 3G, 4G сетях. Такая антенна — ненаправленная, с минимальным коэффициентом усиления, её эффективность мала.
Да, подобные технические решения ориентированы преимущественно на работу устройства в зонах уверенного приема сигнала. Но, иногда мы оказываемся в зонах с плохим покрытием, где встроенной антенны недостаточно. В таких случаях может выручить внешняя антенна.
В зависимости от используемого устройства (смартфон, планшет , модем), понадобится антенна, функционал которой реализован под конкретное устройство. О системах усиления интернет-сигнала Orange-900 и Orange-2600, улучшающих качество связи смартфона/планшета, мы говорили ранее . Теперь мы рассмотрим способы усиления сигнала мобильного интернета модема, на примере нескольких классических вариантов антенн.

Взгляните, как излучает (принимает сигнал) модем в 4G-диапазоне:
Рис. 1 — Компьютерная симуляция 3D диаграммы направленности 4G-модема (f=2.6GHz)
На Рис. 1 изображена 3D диаграмма направленности модема на рабочей частоте 2.6 GHz (сеть 4G). Давайте рассмотрим её подробнее. Как видим, встроенная антенна модема излучает вокруг на 360 градусов по горизонту с небольшим собственным усилением. Перекос излучения по горизонту обусловлен конструкцией антенны модема — за основу взята модель антенны одного из ранее популярных модемов, для наглядности помещенная в радиопрозрачный корпус.
К плюсам кругового излучения относится тот факт, что пользователю не надо искать направление на БС — модем сам выберет нужную ему БС. Однако, ведя прием со всех направлений, помимо полезного сигнала, такая антенна примет помехи и шумы других передатчиков, что ухудшит соотношение полезный сигнал/шум ( S/N ). Это соотношение влияет на «пинг» и скорость соединения: чем оно больше, тем меньше «пинг» и выше скорость обмена данными.
Для того, чтобы повысить соотношение S/N модема можно использовать усилитель интернет-сигнала Connect 3.0 — это двухэлементная антенна, состоящая из рефлектора и активного элемента (модема, который вставляется в специальный держатель). Самого усилителя (если под усилителем понимать активное устройство) здесь нет, как и в любой пассивной антенне, однако, говоря об усилении, в первую очередь мы говорим о направленных свойствах антенны, и чем ярче они выражены, тем больше подобного «усиления» придает антенна.
Для базовой настройки достаточно направить усилитель с модемом в сторону лучшего уровня сигнала в помещении (как правило это окно) и качество соединения улучшится. В компьютерной модели это происходит так.

Рис. 2 — Компьютерная симуляция 3D диаграммы направленности 4G-модема
в усилителе Connect 3.0 (f=2.6GHz)
На Рис. 2 излучение модема в направлении от Connect 3.0 теперь выражено сильнее, причем красный цвет (максимум излучения) стал ярче, что говорит о приобретенной направленности (усилении). Справа на картинке приведена цветовая шкала усиления, по которой можно представить в каком направлении излучение модема максимально.
С помощью рефлектора Connect 3.0, встроенная антенна модема приобрела направленные свойства, в результате чего возросло собственное усиление антенны 6.5 dBi (1 dBi — децибел относительно изотропного источника излучения), а вход модема стал менее подвержен шумам и наводкам, что повышает соотношение S/N и улучшает качество интернет-соединения.
Важно: у модемов разных моделей антенны совершенно по-разному размещены, их конструкции различны, поэтому эффект усиления может быть различным в количественной мере, однако, диаграмма направленности во всех случаях будет принимать схожий вид, что важно для улучшения соотношения S/N.
Такой отражатель вы можете собрать и настроить самостоятельно, например, из обычной пивной банки. Это любопытно для любителей DIY, и, да, она тоже будет работать в сторону усиления. Одно «но» — пивная банка не всегда эстетично и презентабельно смотрится дома, в офисе, в магазине.
Небольшой FAQ по антеннам-отражателям:
Вопрос: В технических характеристиках вы пишете что антенна поддерживает практически все стандарты связи — как возможно достигнуть такой широкополосности?»
Ответ: поскольку Connect 3.0 — это двухэлементная антенна, активным элементом которой является модем, все зависит от того — поддерживает ли модем нужный стандарт. Размеры и расположение рефлектора, скрытого в пластиковом корпусе Connect 3.0, позволяют антенне оказывать положительный эффект в таком широком диапазоне частот.
Вопрос: «Почему антенна стоит именно столько (подставьте здесь любую цену)? Продавать за такие деньги штампованный пластик и фольгу — обман»
Ответ: Несмотря на относительную простоту конструкции — антенна работает, выполняет заявленную функцию, что подтверждено сотнями тысяч выпущенных изделий и множеством положительных отзывов от наших клиентов. Мы считаем неправильным обсуждать вопрос экономики и расчета стоимости данного изделия, опираясь лишь на цены материалов, входящих в его стоимость. К сожалению, присутствует множество факторов конечного ценообразования, часто не зависящих от нас.
Антенны направленного действия.
Бывают ситуации, когда решения уровня «Connect 3.0» недостаточно, чтобы «дотянуться» модемом до сигнала БС на расстоянии в несколько километров. Здесь нам помогут направленные антенны типа «волновой канал» и панельные патч-антенны. Эти антенны имеют отличные приемные характеристики в рабочем диапазоне и помогут наладить стабильную связь в условиях слабого приема сигнала (конечно, если он есть вообще).
Современные сети 2-4 поколений используют широкий диапазон частот: от 800 до 2700 МГц, который перекрыть одной направленной антенной с одинаковыми параметрами во всей рабочей полосе очень сложно, но этого и не надо. Нужно лишь правильно выбрать антенну под свою ситуацию, понимая, что если у вас 3G-антенна, то она не поможет, если вы захотите поймать WiFi-сеть или, например, сеть LTE-2600.
Стоит уточнить: из-за специфики частотного распределения, в России есть участки диапазонов, в которых размещены сети разных поколений (принцип технологической нейтральности), как например GSM 1800 (2G) и LTE 1800 (4G), для которых подойдет одна и та же антенна на 1800 МГц, но таких примеров немного.

Рис. 3 — 3G/4G/WiFi панельная антенна «Flat Combi»
Когда нужнее панельная антенна, а когда необходима антенна типа ’’волновой канал’’? У панельной антенны (Пример на Рис.3) широкий рабочий диапазон частот и её проще настроить на базовую станцию. Антенна «Волновой канал» (Пример на Рис.4) более узкополосная — обычно они хорошо работают в одном диапазоне (2G, 3G, 4G), но имеют большее усиление. Панельные антенны менее подвержены механическим повреждениям и «атакам ворон» в виду своей обтекаемой формы. А «волновые каналы», благодаря своей узкополосности менее подвержены наводкам и помехам от других источников сигнала, что положительно сказывается на отношении S/N. Антенны комплектуются разъемами SMA, N или FME, поэтому чтобы подключить их к модему, надо использовать переходник на CRC-9 или TS-9 разъем, в зависимости от модема.
Теперь обсудим расположение наружных антенн. В сетях 3G используется вертикальная поляризация, антенны следует располагать элементами перпендикулярно земле. Об этом написано в паспорте продукта и на сайтах производителей, но не все читают инструкции, поэтому нередко устанавливают связные антенны, как традиционные телевизионные — горизонтально. Результат — антенна в таком положении или вовсе не работает, или почти не работает.
Стандарт 4G/LTE имеет другую поляризацию. Для лучшего приёма антенну стоит располагать под углом 45 градусов к горизонту.
Вопрос: Поддерживают ли подобные антенны технологию MiMo ?
Ответ: Поддерживают. Для работы с технологией MiMo вам понадобятся 2 антенны. Например, для поддержки LTE MiMo рекомендуем использовать 2 волновых канала, расположенных под углами 45 и −45 градусов к горизонту.

Рис. 4 — Антенна «волновой канал» для 4G сетей «Рысь 4G»
Выбирая антенну, определитесь с тем, какой именно сигнал хотите усилить. Для наглядности мы приведем сводную таблицу с характеристиками рассматриваемых антенн:

Благодарим за внимание. До встречи в новых статьях и обзорах!
Переключение режимов модем/флэшка/модем кардридер
Если устройство изначально поддерживает функцию переключения, процесс происходит через AT-команду AT^U2DIAG=[значение]. С её помощью можно перевести устройство в режим «только модем» (0), использовать в виде флэшки (1), кардридера (256), или соединить всё вместе (255).
Создание wi-fi сети из usb-модема
Прежде всего нужно обзавестись роутером, который поддерживает подключения модемов. Если такой вариант отпадает, можно использовать старый маршрутизатор. Инструкция:
- Отключить модем, Интернет.
- Соединить сетевым кабелем роутер с компьютером.
- В сетевых настройках ПК нужно обратиться к свойствам телефонного подключения.
- Разрешить использовать его другим пользователям сети.
Так роутер будет распространять Интернет с компьютера через модем.
Часть вторая — подключаемся
Собственно, программ, которые позволяют заставить модем набрать номер и подключиться к провайдеру — предостаточно. Тот же Network Manager, например. Кстати, те, у кого до этого в Network Managere-е модем не находился, уже могут попробовать поискать его снова . Ну а мы, в данном случае, решили воевать в консоли. Потому, в консоли и продолжим…
Как использовать USB модем как флешку (Билайн и другие 3G модели)

Новости
Автор Лян Ли На чтение 9 мин Просмотров 19 Опубликовано 23.01.2022
3g-модем от билайн в виде флэшки
В теории подобное возможно, если пользователь сможет создать новую прошивку для модема, но подобного ещё никто не делал.
Yellow leaf – статьи – использование 3g/4g-модема в linux без wvdial и network manager
Про использование GSM/3G/4G-модемов в Linux написано уже много, но почти все руководства предполагают использование утилит wvdial или network manager для подключения. Эти утилиты позволяют существенно упростить процесс подключения, однако при их использовании невозможно полностью управлять опциями pppd, хотя это бывает необходимо (например при подключении нескольких модемов и/или когда надо “привязывать” подключения к конкретному ppp-интерфейсу).
Далее будет показано как можно настроить подключение к интернету с использованием GSM/3G-модема в дистрибутивах Debian/Ubutnu без использования вспомогательных утилит.
Начальные условия: сервер под управлением Ubuntu 12.04, модем Huawei E171 с симкой оператора “Мегафон”, доступный в системе как “/dev/ttyUSB0”.
Задача: подключиться к интернету используя только pppd и привязать соединение к интерфейсу ppp100.
Переходим к решению задачи. Обычно для дозвона пишут свой chat-скрипт, и почему-то не многие знают что в поставке pppd уже есть chat-скрипт для GSM/3G-модемов, доступный в большинстве дистрибутивов Linux как “/etc/chatscripts/gprs”. Поэтому часть с написанием этого скрипта можно пропустить и сразу приступить к описанию подключения в pppd. Для этого создадим файл “/etc/ppp/peers/Megafon” следующего содержания:
# Используемое для подключения устройство /dev/ttyUSB0 # chat-скрипт # В параметре "-T" передаётся имя точки доступа connect '/usr/sbin/chat -v -f /etc/chatscripts/gprs -T internet' # Надо ли менять маршрут по умолчанию # Закомментируйте если не надо defaultroute # Использовать ли DNS-сервера провайдера # Закомментируйте если не надо usepeerdns # Номер ppp-интерфейса (в данном случае будет ppp100) unit 100 # Подключаться в случае обрыва persist # Перепосылать пакеты авторизации каждые 60 секунд # Позволяет избежать обрыва соединения при отсутствии трафика chap-interval 60 # Идентификатор соединения, используемый для поиска паролей в соответствующих файлах, # А так же передаваемый ip-up и ip-down-скриптам ipparam Megafon # Имя пользователя (пароль описывается в файле "/etc/ppp/chap-secrets") user "gdata" # Отключаем любое сжатие nopcomp novjccomp nobsdcomp nodeflate noaccomp # Правильная обработка обрывов соединения lcp-echo-interval 2 lcp-echo-failure 3 # IP адрес мы будем получать от провайдера, а не назначать сами noipdefault
Теперь вписываем в файл “/etc/ppp/chap-secrets” следующие строки
"gdata" Megafon "gdata"
И подключаемся командой:
pon Megafon
Соответственно отключиться можно командой:
poff Megafon
Чтобы соедиение устанавливалось автоматически при загрузке нужно добавить запись в файл “/etc/network/interfaces”. Согласно документации она должна выглядеть вот так:
auto Megafon iface Megafon inet ppp provider Megafon
Однако в утилите ifup есть баг, который приводит к тому, что сразу после успешного подключения pppd получает SIGHUP и соединение рвётся. Ошибка эта очень древняя и судя по сообщениям на форумах и баг-трэкерам дистрибутивов надеяться на её исправление в ближайшем будущем не стоит. Поэтому используем небольшой хак: опишем интерфейс не как ppp, а как manual:
auto Megafon iface Megafon inet manual pre-up /usr/bin/pon Megafon pre-down /usr/bin/poff Megafon
На этом всё. Приятной работы!
Автозагрузка
А теперь — автозагрузка, с ней посложнее. Я сразу опишу создание скрипта автозагрузки, в который можно будет запихнуть всё, что угодно. Он будет стартовать вместе с системой, нооо…
Нельзя просто так взять и создать файл автозагрузки. Есть одна проблема — Debian с какого-то времени пересмотрел свои требования к файлам автозагрузки. Файл мало просто создать, его нужно ещё по-особому отформатировать:
- Первая проблема — это LSB headers. Это заголовок файла автозагрузки. Нужен он потому, что компоненты автозагрузки должны выполняться в определённом порядке, поскольку часть из них зависят друг от друга. Предположим, у вас есть два скрипта в автозагрузке — один из них должен будет монтировать сетевую папку, а второй — делать в неё резервную копию файлов. Естественно, что сначала нужно выполнить первый, а потом — второй, поскольку второй зависит от первого. Для указания таких зависимостей и используются заголовки загрузочного файла. Впрочем, будет достаточно того заголовка, который я выложу в образце файла автозагрузки.
- Вторая проблема — любой скрипт в автозагрузке при запуске системы вызывается командой /etc/init.d/script start, а при выключении компьютера — командой /etc/init.d/script stop. Нужно добавить условия для обработки этих случаев.
Я сделал просто — взял за основу скрипт из имеющихся в /etc/init.d/ — уж они-то должны быть созданы по правилам, потом изучил этот скрипт и вырезал из него всё ненужное. Осталось два места, которые нужно изменить — место для команд, которые выполняются при запуске системы, и место для команд, которые выполняются при выключении компьютера. Впрочем, сейчас всё увидите:
Возможные проблемы и решения
Для стабильной работы лучше назначить usb-устройству режим «только модем» с помощью программы cutecom, и перейти в порт /dev/ttyUSB0, где нужно вписать соответствующую команду. Если связь проблемно устанавливается, в PPP параметрах следует выключить Deflate, BSD. Чтобы работать без перебоев, нужно следить за оставшимся балансом.
Задачи:
- Принимать первый аргумент командной строки в качестве названия внешнего интерфейса, проверяя подлинность имени, используя команду ifconfig;
- Добавить сохранение выбранного интерфейса в какой-нибудь файл в /etc и сделать ключ выбора последнего интерфейса, а лучше — при отсутствии имени интерфейса как аргумента.
- Запихнуть это всё красиво в автозагрузку и в $PATH.
Как сделать загрузочную флэшку
Для того, чтобы операция прошла успешно, сначала нужно убедиться, что система поддерживает загрузку с юсб. Проверить это можно, зайдя в BIOS. После нужно записать образ на девайс с помощью UltraISO или другой программой, и запустить ПК не с жёсткого диска, а с загрузочной флэшки (тоже через BIOS).
Как сделать модем универсальным?
Операторы сотовой связи ставят блокировку на свои модемы, чтобы их нельзя было использовать с сим-картами чужих операторов. Чтобы активировать данную функцию, нужно прошить устройство с помощью программы Huawei Modem Unloker. Она требует от себя знание кода пришивки, который можно получить сторонними программами по IMEI.
Мегафон
Получалось подключаться на любых настройках. А вообще точка доступа зависит от тарифа, по умолчанию – internet; имя пользователя megafon, пароль megafon. (Более не актуально, точка доступа для всех тарифов -internet, имя пользователя,пароль не требуются.)
Мегафонмодем в mandriva linux

Неоднократно видел и читал как народ настраивает модемы, которые видны как флешка модем в Linux, видел страшные скрипты, куча пакетов, кто-то даже ядро пересобирал. Но вот я стал
вынужденным обладателем EDGE модема Huawei e160g, который входит комплект Мегафон Модем Плюс.
Настраивалось на Mandriva Linux 2009.0, в других дистрибутивах будет иначе, так как не везде есть drakconnect.
Думал будет страшно, на деле оказалось максимально просто. Итак, инструкция (копипаст из личного блога ):
- подготовка к настройке — следует заранее установить 2 пакета ppp и comgt (в режиме суперпользователя # urpmi comgt ppp)
- вставляем сам модем в USB порт, жмем правой кнопкой на сетевом апплете (рядом с часиками 2 монитора (синенькие квадратики) с зеленой галочкой или красным крестиком), выбираем «Настроить сеть» и понеслась (после каждого пункта надо нажимать кнопку Далее или Готово):
: час ночи (MSK) — поставил на закачку фильм 2.2 Гб, скорость колеблется в районе 20 КБ/с ( -4 КБ/c), прога обещает скачать фильм примерно за 1 день и 5 часов. Трафик нигде не учитывается (не снимаются деньги со счета, 100 халявных МБ тоже не убывают). В целом неплохо, если подводных камней не будет — для дачи/поездок/отсутствие выделенки — самое оно.
Найденный скрипт
Хм-хм. Этот скрипт уже староват — iptables ругается на одну из команд и не хочет выполнять, да и тот путь, которым в статье скрипт пытаются поместить в автозагрузку, тоже работает не всегда на моей практике. Более того, есть проблема — этот скрипт отлично подходит для ситуации, когда ничего не собирается меняться.
Если бы так и было, я бы поставил iptables-persistent и на этом закончил бы статью. А вот я собираюсь иногда получать интернет по интерфейсу ppp0, иногда — по eth0, а иногда — вообще по wlan1, причём менять интерфейс хочу одной консольной командой. Так, eth1 в примере — внешний интерфейс, а eth0 — внутренний.
Настройка с помощью at-команд
Для удобной конфигурации понадобится терминальная программа, или более подходящее решение в виде Huawei Modem Terminal. Подключившись к устройству, нужно проверить подключение командой AT. Если ответ положительный, можно дальше проводить настройку. Для того, чтобы узнать список всех доступных команд, нужно вписать: AT^CMDL.
Общий алгоритм конфигурации
Для подключения модемов МТС, Мегафон в среде Unity (Ubuntu 12.04 и другие) используется интерфейс Network Manager. Инструкция:
- Зайти в пункт для изменения соединений.
- Добавить во вкладке мобильной передачи новую сеть.
- Выбрать настраиваемое устройство.
- Определить оператора связи, страну.
Переключение режимов модем/флэшка/модем кардридер
Если устройство изначально поддерживает функцию переключения, процесс происходит через AT-команду AT^U2DIAG=[значение]. С её помощью можно перевести устройство в режим «только модем» (0), использовать в виде флэшки (1), кардридера (256), или соединить всё вместе (255).
Создание wi-fi сети из usb-модема
Прежде всего нужно обзавестись роутером, который поддерживает подключения модемов. Если такой вариант отпадает, можно использовать старый маршрутизатор. Инструкция:
- Отключить модем, Интернет.
- Соединить сетевым кабелем роутер с компьютером.
- В сетевых настройках ПК нужно обратиться к свойствам телефонного подключения.
- Разрешить использовать его другим пользователям сети.
Так роутер будет распространять Интернет с компьютера через модем.
Часть вторая — подключаемся
Собственно, программ, которые позволяют заставить модем набрать номер и подключиться к провайдеру — предостаточно. Тот же Network Manager, например. Кстати, те, у кого до этого в Network Managere-е модем не находился, уже могут попробовать поискать его снова . Ну а мы, в данном случае, решили воевать в консоли. Потому, в консоли и продолжим…
Программу я для этого решил использовать следующую — wvdial. По умолчанию она не установлена, поэтому, устанавливаем: