- Поиск и установка драйвера на адаптеры Broadcom BT
- Содержание
- Где найти?
- Поиск информации
- Конвертация
- Важно!!
- Благодарность Broadcom
- Bluetooth в Linux
- 1. Вступление
- 2. Находим телефон.
- 3. Подключаем
- 4. Монтируем
- 5. GPRS\EDGE
- Настройка Bluetooth Ubuntu 16.04
- Первоначальная настройка
- Сканирование устройств Bluetooth
- Сопряжение устройств
- Отправка и прием файлов по OBEX
- Интернет через Bluetooth
- Выводы
- Как настроить Bluetooth в Linux сложным путем
- Этап 1. Подготовка
- Этап 2. Наступление
- Этап 3. Проверка связи
- Этап 4. ./configure && make
- Этап 5. Варим кашу из топора
- Установка в QEMU
- Настройка системы
- Терминалы
- Bluetooth и Wi-Fi
- Взмах влево, взмах вправо
- Разделы системы
- Этап 6. Пробуем нашу кашу
- Этап 7. Финишная прямая
- Используем на практике
- Полезные ссылки
- Интересные факты о контроллере
Поиск и установка драйвера на адаптеры Broadcom BT
Содержание
Данная статья посвящeна установке драйвера на «синезубый» адаптер Broadcom BT.
Сама лицензия Broadcom не позволяет заниматься распростронением драйвера для данного адаптера, поэтому мы соберём его сами.
Где найти?
B случае, если у приведённых ссылок будут изменены адреса, придётся пользоваться поиском по сайту производителя.
Поиск информации
Может быть напpимер bcbtums.inf, но все они расположены в директории Win32 или Win64, разрядность не важна.
— 21D7.
Полный вывод по нашему/вашему адаптеру будет содержать примерно такую строку:
Запись в файле bcbtums-win8x86-brcm.inf будет иметь формат VID_0A5C&PID_21D7, её-то и нужно вбить в строке поиска по файлу .inf
Если Вы не уверены которым из увиденных устройств является Ваш адаптер BT, используйте команду , тем самым можно получить более детальную информацию.
По выводу этой команды можно узнать ID продукта и вендора.
Итак, мы увидим строку, заканчивающуюся записью .
В таком случае, мы можем произвести поиск по файлу .inf, имея эту информацию.
Секция файла .inf, которая нас интересует, имеет следующие записи:
Bingo!!
BCM43142A0_001.001.011.0122.0126.hex — это наше искомое!
Распакуйте из архива именно этот файл.
Конвертация
После чего у Вас появится каталог hex2hcd в домашней директории.
Как видите, в названии файла обязательно должны присутствовать ID-шки Вашего адаптера из вывода команды
T.е., команда конвертации будет выглядеть так:
.hcd, т.е., в нашем случае это
BCM-0a5c-21d7.hcd
Важно!!
Для ядер 4.2+ это будет выглядеть как:
Для ядер 4.8+ — так:
Для последующих ядер название может опять измениться. Для ядра 5.0 название файла может быть опять BCM43142A0-0a5c-21d7.hcd Правильное название всегда можно узнать выполнив
Если имя прошивки неверно, то появится ошибка ввода, сообщающая, что файл не найден. В таком случае нужно переименовать файл.
Выключите компьютер и включите снова.
Адаптер подхватит прошивку и соединение будет установлено.
Благодарность Broadcom
Конечно, данная инструкция выглядит немного сложноватой для начинающего linux-user’а, но во всех этих сложностях стоит винить только лишь юристов компании Broadcom.
Большинство производителей оборудования позволяют распространять прошивки в соответствии с лицензиями. А сейчас они запрещают «распространять» свои прошивки, поэтому никто не может легально поставлять уже сконвертированные прошивки для дистрибутивов, включая Ubuntu.
Источник
Bluetooth в Linux
1. Вступление
А вы знаете, что настроить bluetooth соединение с PC на Linux совсем не сложно?
Итак, сейчас мы создадим подключение к телефону\PDA, примонтируем файловую систему телефона к оной на ПК и создадим GPRS\EDGE подключение.
Железо, на котором тестировал — ноутбук ASUS M51TR, мобилки — Motorola L9, Motorola E398. Все это на Kubuntu 8.10.
Необходимые пакеты:
- fuse-utils
- obexftp
- obexfs
- obextool
- bluez-utils
2. Находим телефон.
Для этого, нам нужно знать MAC-адрес телефона и номера каналов неободимых нам сервисов.
С помощью sdptool ищем наш телефон в зоне досягаемости:
sdptool browse
Она выведет в терминал что-то вроде этого:
Inquiring .
Browsing 00:17:E4:1B:D2:E3 .
Где 00:17:E4:1B:D2:E3 и есть мак-адрес.
А далее последуют описания сервисов, которые предоставляет сотовый телефон, например, для Dial-Up Networking:
Service Name: Dial-up Networking Gateway
Service Description: Dial-up Networking Gateway
Service Provider: Motorola
Service RecHandle: 0x10001
Service Class ID List:
«Dialup Networking» (0x1103)
Protocol Descriptor List:
«L2CAP» (0x0100)
«RFCOMM» (0x0003)
Channel: 1
[сократил, так как много ненужной нам инфы]
Жирным выше я выделил ключевые моменты.
Service Name — название сервиса.
Service Provider — в большинстве случаев — модель телефона (полезно, когда найдено много устройств).
Channel — второй обязательный пункт, после MAC-адреса.
Ицем номера каналов для нужных сервисов (DUN, FTP) и регистрируем:
sdptool add DUN
sdptool add FTP
3. Подключаем
Редактируем файл /etc/bluetooth/rfcomm.conf, добавляя подключения:
rfcomm0 <
bind yes;
device 00:17:E4:1B:D2:E3;
channel 1;
comment «Dialup Networking Gateway»;
>
bind — автоматически подключать устройство при старте системы,
device — MAC-адрес,
channel — канал.
Каждый новый сервис добавляется как rfcommN, где N — число. Элементарно, просто страхуюсь 😉
Сохраняемся и проверяем работоспособность:
sudo rfcomm bind all
rfcomm
Получаем на выхлопе следующее:
rfcomm0: 00:17:E4:1B:D2:E3 channel 1 clean
rfcomm1: 00:17:E4:1B:D2:E3 channel 9 clean
rfcomm2: 00:17:E4:1B:D2:E3 channel 8 clean
Если так, то все ОК, девайсы найдены и подключены, если нет — проверьте rfcomm.conf
4. Монтируем
Нужен сервис — OBEX FTP.
Создаем точку монтирования:
sudo mkdir -m777 /media/mobile
Добавляем пользователя в группу fuse, что бы он мог монтировать ФС:
sudo usermod -aG fuse username
Монтируем*:
obexfs -b00:17:E4:1B:D2:E3 -B9 /media/mobile
-b = MAC
-B = channel
или
obexfs -t /dev/rfcomm0 /media/mobile
Затем:
cd /media/mobile
ls
Вуаля:
audio MMC(Removable) picture video
Размонтирование, все просто:
umount /media/mobile
*Возможно при первом подключении будет выдан запрос на спаривание устройств. Введите, например, «1234» на телефоне, а затем на ПК.
5. GPRS\EDGE
Нужен сервис — DUN (Dial-Up Networking)
У меня KDE, так что запускаем kppp.
Configure -> Modems -> New -> Device,
где Modem device сконфигуренный вами девайс\канал для DUN (см. /etc/bluetooth/rfcomm.conf)
Все там же: переходим на таб Modem->Modem Commands
(дальше настройки для белорусского MТС, смотрите на сайте оператора):
Initialization String 1: AT+CGDCONT=1,«IP»,«mts»
Initialization String 2: ATZ
Что бы проверить, нажмите Query Modem.
Модем настроен, настраиваем подключение:
Главное окошко настроек -> Accounts -> New -> Manual Setup
Указываем имя, допустим, MTS BY
Добавляем номер телефона: *99# или *99***1#.
Готово. Выбираем в kppp аккаунт и модем, и в сеть!
(kppp->use modem -> %configured modem% ->Connect)
Спасибо за внимание!
UPD: переименовал топик, что бы не путать 😉
Источник
Настройка Bluetooth Ubuntu 16.04
Устройства Bluetooth встречаются довольно часто в наше время. Это простой и дешевый способ добавить поддержку беспроводных технологий для смартфона или любого другого гаджета. Система Linux может использовать различные протоколы: OBEX, A2DP, DUN, HID и другие для взаимодействия с различными устройствами.
В этой статье мы рассмотрим как выполняется настройка Bluetooth Ubuntu 16.04. Рассмотрим как установить драйвера и настроить связь между двумя устройствами.
Первоначальная настройка
Большинство Bluetooth адаптеров выполнены в виде USB и могут быть настроены с помощью утилит HCL. Некоторые устройства, такие как Atheros, требуют для своей работы установленных прошивок в системе.
Для установки всех необходимых программ выполните такую команду:
sudo apt-get install bluetooth bluez bluez-tools rfkill rfcomm
Дальше установите прошивки для адаптеров Atheros, если это необходимо:
sudo apt-get install bluez-firmware firmware-atheros
Затем запустите службу управления Bluetooth:
sudo service bluetooth start
Сканирование устройств Bluetooth
Перед тем, как перейти к сканированию устройств нужно убедиться что ваш bluetooth адаптер подключен и не заблокирован с помощью rfkill:
sudo rfkill list
Если устройство заблокировано, программной или аппаратной блокировкой, необходимо разблокировать его с помощью команды rfkill:
sudo rfkill unblock bluetooth
Включить адаптер можно с помощью команды hciconfig:
sudo hciconfig hci0 up
Дальше можно начать сканирование. Только перед этим убедитесь, что на другом устройстве Bluetooth включен и не находится в скрытом режиме. Для сканирования выполните:
sudo hcitool scan
После завершения вы увидите доступное устройство. Здесь будет отображаться его имя и MAC адрес.
Чтобы узнать более подробную информацию об устройстве, вы можете использовать утилиту sdptool:
sdptool browse D0:B3:3F:96:2A:30
Вы можете сразу отфильтровать какие возможности поддерживает обнаруженное устройство:
sdptool browse D0:B3:3F:96:2A:30 | grep ‘Service Name:’
Также вы можете использовать интерактивный инструмент bluetoothctl:
[bluetooth]# info D0:B3:3F:96:2A:30
Также вы можете проверить доступность удаленного устройства с помощью утилиты ping:
sudo l2ping D0:B3:3F:96:2A:30
Сопряжение устройств
Для совместной работы устройств Bluetooth нужно настроить их сопряжение. Для этого используется команда RFCOMM. Эта команда требует полномочий суперпользователя. Синтаксис команды такой:
sudo rfcomm connect устройство_адаптера mac_адрес_цели канал
Например, подключимся к нашему устройству на втором канале:
sudo rfcomm connect hci0 D0:B3:3F:96:2A:30 2
Теперь на другом устройстве появиться запрос на соединение и вам нужно будет ввести одинаковый pin на обоих устройствах. После этого оно будет доступно через файл /dev/rfcomm0. Не закрывайте терминал, чтобы соединение оставалось активным. Вы можете посмотреть список подключений с помощью hcitool:
Отправка и прием файлов по OBEX
Дальше вы можете очень просто отправить файл на удаленное устройство с помощью протокола OBEX. Синтаксис:
sudo bt-obex -p MAC_адрес_устройства /путь/к/файлу
sudo bt-obex -p D0:B3:3F:96:2A:30
Чтобы получить файл вам нужно запустить сервис obex в режиме прослушивания с помощью опции -s:
bt-obex -s /path/to/output/folder
Здесь вам нужно указать путь к папке, куда нужно сохранить полученный файл. После выполнения этих настроек Bluetooth Ubuntu, вы можете передать любой файл с телефона. Вы также можете запустить FTP сеанс с устройством, для просмотра файлов, которые на нем есть:
sudo bt-obex -f MAC_адрес_устройства
Интернет через Bluetooth
Раньше использование Dial-up сети было очень популярным. Сейчас эта технология почти не используется. Но, возможно, понадобиться раздать интернет от вашего телефона на компьютер. Для этого можно использовать два протокола: DUN — более старый и BNEP, более похожий на работу локальной сети.
Чтобы определить поддерживает ли устройство работу по протоколу DUN нужно использовать правильный канал rfcomm. Нужно использовать канал 15:
sudo rfcomm bind D0:B3:3F:96:2A:30 15
Если протокол поддерживается, то у вас появиться устройство rfcomm0. Дальше вы можете использовать NetworkManager для подключения к сети.
Что касается BNEP, то здесь вам уже не нужно использовать rfcomm, все протоколы будут обрабатываться bluez. Все что нужно, это Bluez и NetworkManager. Добавьте новое соединение Bluetooth:
Выберите найденную сеть:
Дальше вы можете посмотреть информацию о подключении и использовать сеть:
Выводы
В этой статье мы рассмотрели как выполняется настройка Bluetooth Ubuntu 16.04. Все работает очень просто, и хотя в графическом интерфейсе может быть не совсем понятно как что настроить, то в терминале все точно и понятно. Если у вас остались вопросы, спрашивайте в комментариях!
Источник
Как настроить Bluetooth в Linux сложным путем
Готовясь на работе к ежегодному форуму посвященному IT, возникла идея создать простой манипулятор управляемый беспроводным геймпадом для демонстрации возможностей микроконтроллеров и одноплатных компьютеров. Под рукой был контроллер ТРИК, несколько сервомоторов, железный конструктор и месяц до начала форума.
«Все идет по плану», но не в этом случае.
Этап 1. Подготовка
ТРИК на борту с Linux был перебором для такого манипулятора, но «дело в банальном удобстве использования и обслуживания» (цитата ClusterM про Linux в умном домофоне).
Прочитав спецификацию, было обнаружено, что в нем есть Bluetooth. Если вы работали с этим контроллером, то знаете, что передача программ осуществляется по Wi-Fi и других удобных способов общения с ним нет. В меню нет упоминания о наличии Bluetooth. Но как так?
Вооружившись SSH, отверткой и любопытством я начал искать Bluetooth. В системе присутствовали утилиты hcitool, hciconfig и демон bluetoothd. Все они говорили о том, что его нет.
Обзвонив друзей в поисках внешнего USB модуля, я продолжил искать.
Разобрав контроллер, был найден модуль Jorjin WG7311-0A. В спецификации указано, что, действительно, есть Wi-Fi, Bluetooth и даже FM-радио. Интерфейс для общения с Bluetooth – UART, а включается он через контакт BT_EN.
Прочитав, как Bluetooth модуль подключается по UART через hcitool я испытал удачу и – ничего. Два из трех свободных UART портов молчали.
Но у нас есть контакт BT_EN! Возможно, что модуль просто выключен и не отвечает на запросы. Изучив устройство ядра Linux для ARM устройств, был найден файл, где прописываются все контакты, используемые SoC. Открыв arch/arm/mach-davinci/board-da850-trik.c в исходном коде ядра, и вправду был найден GPIO контакт для Bluetooth. Победа! – подумал я.
Этап 2. Наступление
Для включения контакта через GPIO, нужно найти его сквозной порядковый номер. Находим следующую строчку в коде ядра с запросом на инициализацию контакта BT_EN_33 в arch/arm/mach-davinci/board-da850-trik.c :
В ней используется макрос GPIO_TO_PIN. Смотрим описание макроса в arch/arm/mach-davinci/include/mach/gpio-davinci.h :
При помощи его и можно узнать сквозной номер контакта. Получаем, что 16 * 6 + 11 = 107. Теперь перейдем к включению контакта.
0 или 1 в команде echo является состоянием контакта.
Запускаем команду на подключение и.
непонятные для нас (на данный момент) сообщения об ошибке. Пробуем настроить устройство через hcitool:
Устройств нет, хотя инициализация якобы прошла. Пробуем подключиться второй раз, но с другим типом адаптера:
И вновь ничего. Давайте вернемся к первой ошибке и применим знания английского языка:
Открываем папку /lib/firmware с прошивками и не находим нужного файла. После долгих поисков в интернете, находим на репозиторие TI нужный файл и скачиваем его. Другие версии этого же файла работать отказывались.
Перезагружаем контроллер и подключаемся вновь:
Ура! Прошивка загрузилась. Проверяем hciconfig:
Запускаем службу bluetoothd, сканирование устройств и обнаружение нашего модуля:
Поиск на компьютере обнаруживает устройство:
Для включения Bluetooth можно сделать скрипт:
И добавить его в автозапуск:
Перезапуск и отключение модуля ведут себя непредсказуемо, поэтому варианты stop и restart не имеют никаких команд.
Этап 3. Проверка связи
Самый простой способ проверки связи в обе стороны – служба COM-порта. При помощи нескольких команд включаем её:
Подключаемся с телефона и видим приглашение на вход в систему:
Ни один из проверенных терминалов не дал ввести пустой пароль пользователя, поэтому пришлось отправить данные для входа при помощи перенаправления потоков в SSH-сессии.
Этап 4. ./configure && make
Следуя инструкциям по подключению геймпада в Linux мы сталкиваемся со следующими проблемами:
- BlueZ в дистрибутиве устарел и не понимает команд от демона sixad, который устанавливает связь с геймпадом
- Новая версия BlueZ из исходных кодов отказывается компилироваться из-за множества зависимостей
- BlueZ из свежего Debian требует udev и systemd, которые отсутствуют в текущем дистрибутиве
Единственную зависимость, которую получилось удовлетворить – это модуль ядра uinput.
- получаем конфигурацию текущего ядра на устройстве
- скачиваем код ядра
- скачиваем и устанавливаем toolchain
- копируем конфигурацию ядра в папку с кодом ядра
- добавляем модуль uinput в конфигурацию
- запускаем сборку, предварительно включив toolchain
- копируем модули ядра на карту памяти
- собираем образ uBoot и копируем в /boot
Теперь программа не ругается на отсутствие модуля ядра, но дальше мы не можем ничего сделать. Инструкция для геймпада нам пригодится чуть позже.
Этап 5. Варим кашу из топора
Приступаем к плану «тяп-ляп». Раз нет удобного способа поставить нужные программы на оригинальный дистрибутив, то поставим что-нибудь популярное. Процессор имеет архитектуру ARMv5TE, значит и дистрибутивы есть под неё.
Пробуем распаковать и запустить универсальный Arch Linux для ARM и при загрузке в консоли видим, что systemd требует ядро более новой версии, чего у нас нет. Попытки переноса ядра 4.16 не увенчались огромным успехом и на это было потрачено слишком много времени.
Переходим к другому варианту – Debian. Образ диска с установленной системой для ARM существует, но лучше поставить чистую систему с нужными для нас пакетами и настройками.
Установка в QEMU
Скачиваем установочный образ (ссылка на .iso) и устанавливаем QEMU.
Также нам нужны ядро и образ initrd для загрузки установки, которые можно скачать отсюда.
Создаем образ карты памяти с объемом настоящей карты памяти (в данном случае 4 Гб):
Если вы собираетесь сделать разметку диска нестандартной относительного оригинального дистрибутива, то оставьте корневой раздел первым, иначе придется менять параметры загрузки ядра в uBoot. Там прописан номер раздела на котором находится корневая файловая система.
Стандартная разметка содержит:
- Раздел EXT4 для корневой файловой системы размером ≈ 1,3 Гб
- Раздел FAT32 для хранения данных пользователя размером ≈ 500 Мб
Вывод fdisk для образа оригинального дистрибутива:
После настройки параметров уходим пить несколько чашек чая, т.к. эмулятор ненамного быстрее настоящего ARM процессора.
Для запуска установленной системы потребуется другой образ initrd, который можно взять отсюда.
Настройка системы
После запуска входим в суперпользователя, проверяем связь с интернетом, обновляем репозитории и систему, ставим минимальный набор программ:
Терминалы
Редактируем /etc/inittab , убираем лишние терминалы, включаем нужный для нас UART и добавляем автовход для нужного пользователя (используйте root только при отладке). Автовход пригодится, если вы планируете запускать оболочку для управления на контроллере.
Bluetooth и Wi-Fi
Устанавливаем bluez-utils и wpasupplicant для доступа к Wi-Fi и Bluetooth.
Отключаем интерфейс eth0 и настраиваем интерфейс wlan1 в /etc/network/interfaces :
Добавляем заранее сеть в /etc/wpa_supplicant.conf , т.к. делать это на самом контроллере не так удобно:
Если у вас нет доступа к Wi-Fi, вы можете использовать UART для дальнейшей настройки, но учтите, что по умолчанию ядро выводит в данный терминал все ошибки. Поэтому во время работы вас может прервать внезапное сообщение от ядра или службы.
Добавляем скрипт на включение Bluetooth. В этот раз, модифицируем /etc/init.d/bluetooth :
Таким образом, все службы, которые требуют службу Bluetooth, будут запускать необходимые команды для инициализации.
Взмах влево, взмах вправо
Убираем ненужные программы и службы которые можно посмотреть при помощи htop, ведь они занимают драгоценное место в ОЗУ:
В данном случае, служба ConsoleKit имеет очень много процессов. Переместим файл этой службы в домашнюю папку суперпользователя на случай восстановления:
До отключения службы потребление ОЗУ было 19 Мб, а после – 16 Мб.
Разделы системы
Хоть uBoot и передает ядру устройство, на котором расположен корневой раздел, стоит прописать его в /etc/fstab для надежности. Изменяем первую строчку, отвечающую за корневой раздел:
Если вы сделали корневой раздел не первым, не забудьте указать нужный номер раздела.
Если вы оставили второй раздел FAT для пользовательских данных, то вам необходимо создать папку для монтирования раздела в неё
и прописать раздел в /etc/fstab :
Этап 6. Пробуем нашу кашу
Настроив образ системы, необходимо примонтировать его для установки модулей ядра и самого ядра:
где, NNNN = размер сектора * начало раздела. Размер сектора по умолчанию равен 512 байтам.
Монтируем также и оригинальный дистрибутив:
Удаляем ядро для QEMU и его модули, т.к. они не предназначены для нашей платформы. Копируем новое ядро и модули, так же, как и на оригинальном дистрибутиве.
Нам понадобятся прошивки для Wi-Fi модуля, которые есть в оригинальном дистрибутиве в папке /lib/firmware и прошивка Bluetooth, которую мы нашли ранее.
Отсоединяем образы дисков:
И запускаем копирование образа на карту памяти с помощью dd:
Этап 7. Финишная прямая
Компилируем программы для подключения геймпада на новой системе и устанавливаем демон sixad.
Подключаем геймпад через USB к контроллеру и запускаем программу для создания пары:
При подключении геймпада ничего не происходит и служба sixad молчит:
Но в сообществе Raspberry Pi уже изготовили «костыль» для исправления подключения.
Пересобираем программу и радуемся.
Теперь геймпад доступен системе как устройство ввода и программа jstest покажет состояние всех кнопок и аналоговых датчиков:
где X – номер устройства в системе, по умолчанию – 2. Номера кнопок и осей можно посмотреть здесь.
Используем на практике
Видео с демонстрацией работы геймпада на YouTube.
Загрузка ядра:
Терминал, запущенный в X11:
И по традиции:
Полезные ссылки
Программы для подключения геймпада Dualshock 3 – sixpair и sixad.
Для геймпадов и других устройств ввода есть легкая библиотека на C – libenjoy.
Исходный код программы для управления сервомоторами и моторами – репозиторий GitHub.
Все файлы конфигурации из статьи для самодельного дистрибутива – репозиторий GitHub.
Интересные факты о контроллере
- В спецификации заявлено, что объем ОЗУ составляет 256 Мб. Но если вы запустите htop, то увидите, что доступно только 128 Мб. Это ограничено параметрами ядра, которые можно посмотреть в консоли uBoot:
Чип памяти имеет маркировку 3PC22 D9MTD производства Micron. Найти информацию о его настоящем объеме не удалось.
- uBoot хранится на SPI флэш-памяти в которой также зашито ядро, и оно не используется. Вы можете попробовать использовать это место для своих задач или скопировать новое ядро и перенастроить uBoot, чтобы он его использовал.
Адреса образов из dmesg:
- Экран у контроллера хоть и небольшой, но на самом деле имеет резистивный сенсор. Подключен ли сам сенсор – неизвестно.
- Dualshock 3 имеет светодиоды у разъема USB, которые показывают номер геймпада/джойстика. В видео присутствует один геймпад, но номер у него 3. Это не ошибка, т.к. в системе присутствуют ещё два «джойстика»: акселерометр и гироскоп.
Источник