Gabeldorsche bluetooth что это такое

Обновлено: 21.11.2024

Инженеры Android Дэйв Берк и Илиан Мальчев вернулись, чтобы ответить на наши ежегодные вопросы и ответы.

Рон Амадео – 20 сентября 2020 г., 12:30 UTC

Что бы ни случилось.

Увеличить / Слайд Google Slices API, на котором показан фрагмент, работающий в качестве результата поиска, уведомление, пользовательский интерфейс со значком при длительном нажатии и виджет на рабочем столе. Это похоже на модульный код пользовательского интерфейса.

Не все функции Android, о которых мы узнаем, сразу принимаются или даже выпускаются, так почему бы не проверить кое-что? Первым из них является «Slices API», который звучал как большое событие, когда он был анонсирован для Android 9. На одном слайде из Google I/O API Slices был представлен как модульный код пользовательского интерфейса — разработчики могли использовать API Slices для создания уведомления, и этот пользовательский интерфейс также будет отображаться в виде виджета на главном экране, результата поиска и значка при длительном нажатии.

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

Арс: Что случилось с Ломтиками? На Google I/O был один слайд, на котором API Slices назывался «единым многоразовым API для удаленного контента в Android», что звучало интересно. С этим что-то случилось или это была плохая идея?

Берк: Я по-прежнему считаю, что это отличная идея, но не думаю, что мы нашли для нее подходящее решение. На самом деле мы создали его, и прямо сейчас мы работаем с командой Google Assistant, чтобы посмотреть, сможем ли мы придумать что-то, что имеет смысл. Мы не думаем, что нашли правильный баланс между усилиями разработчика и пользовательскими функциями, чтобы это имело смысл. Это то, что нас по-прежнему очень интересует. Я думаю, что основные концепции действительно хороши. Я думаю, что это просто детали того, как его применять, и варианты использования еще не совсем готовы. Так что мы продолжим работать над этим.

Арс: Хорошо. Что мне нравилось в Slices — возможно, это была его побочная цель — это то, что разработчики «случайно» создавали виджеты на главном экране, просто создавая пользовательский интерфейс уведомлений. Вы можете взять уведомление медиаплеера и закрепить его на главном экране или что-то в этом роде.

Берк: Да, именно так. Эта унификация различных мест для удаленного отображения контента определенно была частью этой цели. Это также имеет смысл с точки зрения разработчика. Например, если вы можете написать для этого одного API и получить несколько поверхностей, стимулы будут хорошими. Я действительно думаю, что это часть ответа, но нам еще нужно повторить итерацию, чтобы сделать его полностью понятным.

Еще одна отсутствующая функция — панель управления разрешениями, которую мы видели в просочившейся сборке еще до того, как вышла официальная предварительная версия Android 10 для разработчиков. Панель инструментов будет давать вам визуализацию, показывающую, какие приложения используют какие разрешения, немного похоже на панель мониторинга батареи, только для конфиденциальности. Он так и не был запущен, но попал в AOSP, где разработчики Lineage OS подобрали его и превратили в функцию доставки. А как насчет включения в официальный Android?

Ars: Что такое центр разрешений в AOSP? Мы видели его утечку в ранних сборках Android Q, но он так и не был выпущен, верно?

Берк: О да. Там не так много. Вообще, мы всегда пробуем разные вещи. Это была идея, которая на самом деле не была завершена. В Android 11 мы сосредоточены на предоставлении разработчикам инструментов, позволяющих лучше понимать и улучшать использование ими конфиденциальных данных. Таким образом, одной из вещей, которые мы добавили, был аудит доступа к данным, и у нас действительно были хорошие отзывы об этом. Таким образом, это возможность для вас как бы атрибутировать использование вами конфиденциальных данных, таких как, возможно, местоположение, а затем иметь журнал аудита. По сути, это обратный вызов, с помощью которого вы узнаете, какие разрешения использует ваше приложение, хотя оно может и не понадобиться.

Вы можете задаться вопросом: "Зачем это разработчику?" Но когда у вас есть эти действительно сложные приложения, над которыми работает несколько команд в организации, очень легко потерять отслеживание всего происходящего доступа к данным. Так что предоставление этих инструментов на самом деле было тем, о чем нас просили. Это то, на чем мы сосредоточились в этом выпуске. И да, мы постараемся не распространять полусырые идеи.

В Android 10 на экране "Последние приложения" было несколько значков приложений, а в Android 11 – только эти две кнопки.

Одним из самых странных дизайнерских решений в Android 11 было удаление из экрана «Последние приложения» (или «Обзор», как его стал называть Google) множества функций. И в Android 10, и в 11 есть прокручиваемый список миниатюр, но в Android 10 была панель поиска Google, ряд интеллектуальных значков приложений и, когда вы проводите пальцем вверх, полнофункциональный ящик приложений. Android 11 пошел по этому пути назад, удалив все, что находится ниже эскиза, и заменив его двумя кнопками: «Снимок экрана» и «Выбрать».

Прогнозирующие приложения и панель приложений на экране недавних приложений в Android 10 были странной функцией. Несмотря на то, что это были недавние приложения, на самом деле это была часть кода запуска домашнего экрана. Это действительно усложняет ситуацию в Android, потому что вы можете заменить домашний экран по умолчанию, но не экран недавних приложений, так что же происходит с кодом последних приложений, когда вы заменяете домашний экран? Ну, вы потеряете все функции значка приложения. Прогностические приложения и панель приложений в последних приложениях работали только в том случае, если вы использовали встроенную программу запуска, а если вы переключились на стороннюю программу запуска, все, что было ниже эскиза, просто исчезло. В любом случае, зачем менять?

Арс: на недавнем экране приложений раньше был ящик приложений и предлагаемые приложения, которые были удалены в Android 11. Это как-то связано с поддержкой сторонних программ запуска или просто не сработало?

Берк: Нет, это было просто целью дизайна. Некоторым понравилось в Обзоре, но мы заметили пару вещей. Во-первых, мы полагаем, что делать снимки экрана и делиться своим экраном было гораздо более естественно в обзоре, поэтому мы хотели сделать эту функцию более заметной.

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

Это тот же телефон, но после быстрой перезагрузки у нас совершенно другая версия Android! Это версия Android Q только с открытым исходным кодом.

А вот и вторая сборка. Опять же, это все на одном устройстве. Один телефон, две сборки Android.

Далее. Динамические обновления системы (DSU) – еще одна перспективная функция Android 10, которую мы надеялись обновить с выходом Android 11. DSU – это система двойного ускорения для Android, позволяющая загружать вторую, «гостевую» версию Android на вашем устройстве без разрушения основной ОС. Вторая копия Android может быть загружена во временный виртуальный раздел, с которого вы затем сможете загрузиться. Подобная функция сделает тестирование бета-версий Android намного проще и доступнее. Раньше для этого требовалось стирать телефон и устанавливать нестабильное, незавершенное программное обеспечение в качестве основной ОС, что доставляло немало хлопот, если у вас нет для этого специального устройства.

DSU не был очень полезен для Android 10, поскольку Android 10 была единственной совместимой ОС, и вы могли переключаться только между различными версиями Android 10. Выпуск Android 11 GSI был первым случаем, когда вы могли загрузить другая версия, хотя система DSU, но вам нужно будет подключить телефон к компьютеру, установить некоторые биты SDK и выполнить некоторую работу с командной строкой. Казалось, что все это работает, и гуглеры, похоже, с этим согласились. Android 11 поставляется с разделом «DSU Loader» в параметрах разработчика, который автоматически загружает и устанавливает новую сборку прямо из Google. Подозрительно, это самый важный, верхний раздел параметров разработчика, как будто это будет иметь большое значение. Итак, увидим ли мы, наконец, простые в установке бета-версии для Android 12?

Арс: я видел, что в параметрах разработчика есть функция, позволяющая загружать образы для установки DSU. Увидим ли мы бета-версии этого предложения в будущем?

Мальчев: Такова цель. Идея состоит в том, чтобы иметь возможность загрузить общий образ системы или что-либо, что совместимо с Treble, на устройство и запустить его, не разрушая ваш заводской образ. Если вы разработчик и вам нужно физическое устройство для разработки, мы хотим, чтобы вы могли опробовать новые образы Android на реальном оборудовании, но без деструктивного аспекта «Я взорвал свой образ Samsung» или что-то в этом роде.

Мы извлекаем изображения внутренним образом, потому что они должны быть подписаны соответствующим образом, и мы не хотим, чтобы кто-либо злоупотреблял этим механизмом. Поддержка DSU должна быть явно одобрена OEM-производителем, потому что мы не хотим использовать для этого какой-то черный ход. На самом деле мы не слишком настаиваем на DSU, потому что это сложный механизм. Как и в случае с GKI, это сложный механизм, поэтому мы хотели убедиться, что все различные морщины разгладились, прежде чем мы скажем, что он готов. Поэтому сейчас он поддерживается на устройствах Pixel.

Арс: Хорошо, и нет возможности вернуться к более старым операционным системам для тестирования, верно? Это проблема безопасности?

Мальчев: Можно, но не стоит. Причина, о которой я говорю, заключается в том, что когда вы загружаете динамическое обновление системы, вы не откатываете такие вещи, как мастер хранилища ключей и дом хранилища ключей, потому что мы не хотим касаться субстрата поставщика. Это было бы действительно опасно. То, что мы загружаем, — это только верхняя половина ОС — образ системы.И если образ системы устарел, он может ожидать, что будет предоставлена ​​более старая версия HAL, а ее может и не быть.

Что делать с этими опциями для разработчиков?

Хорошим местом для проверки любой новой сборки Android являются параметры разработчика, скрытое меню Android, которое представляет собой просто огромный список флажков для различных функций. Некоторые из них предназначены для разработчиков приложений и четко объяснены и задокументированы, но другие предназначены для инженеров Google Android и являются функциями Android, находящимися в разработке. Часто настройки «только для Google» помечены настолько загадочно, насколько это возможно, и вообще не имеют общедоступной документации. Ярким примером из Android 11 является этот флажок «Включить Gabeldorsche», который как-то связан с новым стеком Bluetooth? А?

Увеличить / Стек Bluetooth "Gabeldorsche" в параметрах разработчика Android 11. Это все, что у нас есть. Нет документации или объяснения того, что это такое.

Арс: Самый эзотерический вопрос в моем списке: "Что такое Габельдорше?"

Берк: Это еще один пример того, что находится в стадии разработки, но он более продуман. По сути, это будущее направление для нашего стека Bluetooth, и на самом деле это инициатива по переписыванию стека Bluetooth по частям. Целью являются обычные хорошие вещи, такие как безопасность, надежность и функциональная совместимость, но самое интересное для меня — это возможность гораздо лучше автоматизировать сквозное тестирование.

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

Это был вариант разработчика, чтобы мы могли включить его во время бета-тестирования и предварительного просмотра для разработчиков и протестировать его, но он не готов для Android R, поэтому этот параметр разработчика исчезнет для R. Скорее всего, в S в Android 12, вы увидите, что в стеке начнут появляться части Gabeldorsche, которые, как мы надеемся, будут полностью прозрачными для пользователей. Bluetooth станет еще лучше.

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

Берк: Да, это еще одна вещь, над которой работают люди, но она еще не совсем закончена или не полностью испечена. Это на самом деле, вероятно, будет запущено в будущем обновлении, таком как выпуск обслуживания или отказ от функции Pixel. По сути, это две вещи: классическая проблема «на парковке», когда вы используете свой телефон по Wi-Fi на парковке и выходите за пределы досягаемости. Вы переключаетесь на сотовую связь, и мы надеемся сделать это более плавным, и наоборот. Кроме того, мы выясняем, когда использовать 5G с низким расходом заряда батареи. Итак, мы работали над кучей идей с использованием машинного обучения, и они на самом деле выглядят очень многообещающе. Он был не совсем готов для Android 11, поэтому мы надеемся выпустить его в обновлении раньше, чем позже, чтобы этот разработанный вариант также исчез в финальной версии.

Это все мои вопросы! Спасибо Дэйву и Илиану за то, что нашли время поговорить. Надеюсь, в следующем году это снова будет лично!

Вскоре после выпуска первой стабильной сборки Android 11 для линейки устройств Pixel компания Google начала загружать исходный код Android 11 в AOSP. Мы копались в коде, чтобы найти скрытые функции, которые мы могли пропустить в нашем предыдущем обзоре, и вот что мы нашли:

Новый объемный поток для виртуальных помощников

Andriod 11 представляет новый тип потока для виртуальных помощников: AUDIO_STREAM_ASSISTANT. Новый поток «предназначен для использования виртуальным помощником, таким как Google Assistant, Bixby и т. д. Аудиопоток имеет собственный псевдоним громкости, и громкость не изменяется при изменении громкости других потоков». < /p>

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

Плагины часов в Android 11

В Android 10 мы заметили работу по настройке часов на экране блокировки, которая предлагала 3 разных варианта: по умолчанию, текст, всплывающее окно и аналог. Эта функция должна была быть доступна в приложении Pixel Themes («Стили и обои») в виде отдельной вкладки «Часы», однако она не вошла в окончательный выпуск Android 10.

Хотя эта функция по-прежнему недоступна в стабильной версии Android 11, Google снова включил функцию пользовательских часов. Но поскольку Google удалил текстовые часы в Android 10 и удалил аналоговые и пузырьковые часы в Android 11, в настоящее время нет других доступных вариантов часов.

Мы подозреваем, что Google либо включила эту функцию только для OEM-производителей, либо компания может работать над новыми пользовательскими часами, которые будут запущены вместе с обновленным приложением Pixel Themes на Pixel 5 и Pixel 4a 5G.

Замораживание кэшированных приложений

В Android 11 Beta 2 мы обнаружили новую разрабатываемую функцию под названием «приостановить выполнение кэшированных приложений». В то время мы узнали, что эта функция будет находиться в параметрах разработчика, но у нас не было достаточно информации о том, как она работает и как ее включить.

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

Признанный XDA разработчик luca020400 говорит, что для этой функции требуются обновленные контрольные группы (функция ядра Linux), поэтому она не работает на текущих устройствах. Это может быть функция, предназначенная для OEM-производителей, или она может быть реализована в Pixel 5.

Размытие для тени уведомлений

В Android 11 Developer Preview 3 нам удалось включить скрытый переключатель для включения размытия окна. Однако в то время переключатель не работал. Признанному разработчику XDA luca020400 удалось заставить его работать.


Он прошил Android 11 GSI на своем ASUS ZenFone 6 и включил эту функцию, изменив системное свойство. Эта функция включает эффект размытия Кавасе, который является приближенным к размытию по Гауссу, за панелью уведомлений, когда она раскрывается.

Поддержка Deep Press для расширения уведомлений в Android 11

Во втором выпуске Pixel Feature Drop Google добавила «улучшенные параметры длительного нажатия», которые позволяют сильно нажимать на экран в Pixel Launcher, Google Фото и Google Диске для отображения контекстного меню. Это альтернативный способ доступа к контекстному меню, предназначенный для людей, которые могут не знать, что они могут получить к нему доступ, нажав и удерживая экран.

Эта функция использует API Deep Press, который использует модель машинного обучения, чтобы определить, когда пользователь сильнее нажимает на экран. В Android 11 теперь вы можете глубоко нажать на уведомления на панели уведомлений, чтобы развернуть их.

Что такое габельдорше?

В параметрах разработчика Android 11 есть переключатель «Включить Gabeldorsche» с описанием «включает стек функций Bluetooth Gabeldorsche». Google наконец-то опубликовал документацию по Gabeldorsche, которая, похоже, представляет собой полную переработку стека Android для Bluetooth. Надеемся, что переписывание приведет к меньшей задержке и большей стабильности. Если вам интересно узнать больше, вы можете просмотреть руководство по архитектуре и стилю стека Gabeldorsche Bluetooth прямо сейчас. Просто обратите внимание, что стек GD Bluetooth еще не готов к запуску в прайм-тайм и, вероятно, предназначен для запуска в Android 12 или более поздней версии.

Что такое расширенные возможности подключения?

В Android 11 Developer Preview 2 добавлена ​​еще одна загадочная опция разработчика под названием «расширенная связь» без какого-либо описания того, что она делает. Благодаря исходному коду мы теперь узнали, что эта функция «позволит диспетчеру тепловой мощности подключения активно отключать 5G для экономии энергии, когда пропускная способность сотовой связи ниже установленного порога».

Многоканальный аудиофокус

Еще в мае мы рассказывали о корневом приложении App Volume Control, которое позволяет вам управлять отдельными уровнями громкости приложений Android. Это необходимо, потому что в Android нет собственного микшера громкости, такого как Windows, поэтому вы не можете смешивать уровни громкости для нескольких приложений, воспроизводящих звук одновременно. В Android есть концепция "аудиофокуса", и только одно приложение может иметь фокус одновременно.

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

Ускоренный обмен листами

В дополнение к улучшениям, внесенным в Android 10, компания Google внесла некоторые улучшения в лист обмена в Android 11.Например, загрузка иконок теперь кешируется, а значит, они появляются быстрее. Прокрутка также была уменьшена за счет кэширования itemViewType в ViewHolder, кэширования результата shouldDisplayLandscape для уменьшения количества вызовов IPC во время прокрутки и кэширования дескриптора пользователя рабочего профиля.

Улучшенное управление памятью

Компания Google представила новый дизайн средства настройки OOM (OOM = нехватка памяти, т. е. что должна делать система, когда объем свободной памяти близок к исчерпанию). Существует 3 фактора для настроек OOM Adjuster: состояние процесса (определяет, находится ли процесс на переднем плане или в фоновом режиме), оценка OOM Adj (используется демоном убийцы нехватки памяти или lmkd, чтобы определить, какой процесс должен быть уничтожен при нехватке памяти). ) и группу планировщика (которая настраивает группу процессов ЦП и приоритеты потоков).

Системный сервер настраивает эти 3 фактора для 4 типов различных процессов Android: действия, службы, поставщика контента и получателя широковещательной рассылки. OOM Adjuster предназначен для того, чтобы избежать остановки процесса, если «это приведет к заметному для пользователя прерыванию обслуживания».

Улучшения Android 11 Go Edition

Устройства с малым объемом оперативной памяти (читай: Android Go Edition) теперь могут поддерживать несколько пользователей, управляемые профили и прослушиватели уведомлений. Для нескольких пользователей и управляемых профилей Google удалил только ограничения времени выполнения, которые не позволяли им работать на устройствах с малым объемом оперативной памяти, поэтому OEM-производителям все равно потребуется внести некоторые изменения в конфигурацию, чтобы они заработали. Однако прослушиватели уведомлений (приложения, которым было предоставлено разрешение на перехват уведомлений, например Pushbullet) должны работать без участия OEM-производителей.

Поддержка обоев WCG

10-битные (широкоцветные) изображения теперь можно устанавливать в качестве обоев в Android 11. Раньше при применении таких обоев они всегда преобразовывались в sRGB. Ошибка в процессе преобразования — это то, что интересно вызвало печально известные сбои проклятых обоев в начале этого года.

Настройка клавиши громкости

Похоже, что Google работает над API для обнаружения одиночного, двойного или тройного нажатия клавиш регулировки громкости. Мы обнаружили два коммита под названием «поддержка настройки клавиш громкости» и «поддержка настройки одинарного/двойного/тройного щелчка», которые указывают на это недокументированное изменение в Android 11. Чтобы включить эту функцию, нажмите длинную/одиночную/двойную/тройную клавишу. нажатия будут различаться по продолжительности и шаблонам KeyEvents.

Приложения, использующие службу специальных возможностей, такие как приложение ButtonMapper от flar2, уже могут перехватывать KeyEvent для нажатия кнопок громкости и использовать собственную логику для определения того, какое нажатие было выполнено пользователем. Похоже, что Google сейчас пишет встроенную поддержку для таких настроек, но мы не уверены, будет ли она использоваться для включения функции на устройствах Pixel или она написана только для OEM-производителей. Нет никаких доказательств того, что эта функция будет использоваться для смены музыкальных треков, и ее можно использовать только для функций, связанных с безопасностью, таких как, например, обнаружение, когда тройное нажатие клавиши уменьшения громкости выполняется для отправки сигнала SOS. Интересно, что в Android уже есть скрытый API для обнаружения долгих нажатий клавиш громкости.

Автоматическая разблокировка рабочего профиля с помощью Digital Wellbeing

В версии «Цифровое благополучие» 1.0.327635162 мы обнаружили строки для новой функции планировщика работы, которая автоматически отключает рабочий профиль при достижении запланированного времени. В Android 11 Digital Wellbeing теперь может автоматически разблокировать рабочий профиль, что прокладывает путь для появления этой функции.

Если вы хотите узнать больше обо всех изменениях, представленных в Android 11, ознакомьтесь с нашими публикациями о первом стабильном выпуске Android 11 и изменениях, ориентированных на разработчиков. Чтобы установить последнее обновление на свое устройство, вы можете проверить наши средства отслеживания обновлений Android 11, указанные ниже.

Rust стал популярен благодаря крупным технологическим компаниям и решениям, используемым в больших масштабах. После поддержки в ветке Linux-Next, области ожидания исправления для следующего окна слияния ядра, в этом месяце Google показала на этой неделе, что новая версия стека Android Bluetooth, Gabeldorsche, написана с помощью Rust.

Эта новость появилась примерно через два месяца после того, как Google присоединился к Rust Foundation, потому что в репозитории Git, содержащем исходные коды для Android, Google объявил, что новая версия Gabeldorsche, стека Bluetooth, используемого в Android с версии 11, имеет был переписан на Rust.

Детали проекта пока отсутствуют, доступны только инструкции по сборке.

«В настоящее время компоненты Rust создаются по-разному для Android и Linux. Нам не хватает поддержки Rust в нашей цепочке инструментов GN. Итак, в настоящее время мы создаем библиотеки Rust… », — сказали в команде.

На самом деле, несмотря на широкое распространение, Bluetooth по-прежнему может быть непоследовательной технологией: некоторые операционные системы и устройства справляются с ней лучше, чем другие. Программное обеспечение, отвечающее за управление многими движущимися частями соединения Bluetooth, обычно называют Bluetooth-стеком.

В течение многих лет Android полагался на стек "фторид" для своих нужд Bluetooth, но с Android 11 Google начал тестировать совершенно новый стек под названием Gabeldorsche, или сокращенно "GD". Gabeldorsche находится в разработке с 2019 года, но Google впервые выпустила его для широкой публики в 2020 году.

Согласно Google, Gabeldorsche предназначен для обеспечения стабильности сетей Bluetooth, тем самым улучшая связь мобильных устройств с домашней автоматикой или другими типами устройств.

«Безопасность памяти — постоянная проблема для разработчиков программного обеспечения, особенно для тех, кто работает с системными программами. Google начал использовать Rust в контекстах, где безопасность и производительность памяти имеют решающее значение, особенно в основных системах Android», — пояснили в компании.

На данный момент вы можете скомпилировать весь код Rust с помощью Cargo. Однако команда добавила, что есть некоторые необходимые зависимости: у вас должен быть установлен пакет «protobuf-compiler», последняя версия «Cargo + Rust» и использование «build.py» в корне.

Следует отметить, что параллельно для ОС Fuchsia разрабатывается еще один стек Bluetooth, для разработки которого также используется язык Rust.

Кроме того, для Fuchsia на Rust был написан новый сетевой стек Netstack3, и не только это: вот несколько примеров проектов, в которых Google уже использует Rust или вносит свой вклад в экосистему Rust:

  • Модули операционной системы Android, включая Bluetooth и хранилище ключей 2.0.
  • Низкоуровневые проекты, такие как монитор виртуальной машины crosvm (альтернатива QEMU) и драйверы, используемые в Chrome OS.
  • Участие в проектах с открытым исходным кодом, использующих Rust, таких как система управления исходным кодом Mercurial.
  • Прошивка для поддержки ключей безопасности FIDO.

Кроме того, Binder, механизм межпроцессного взаимодействия (IPC), используемый в Android, также переписан на Rust, а новый сетевой стек Netstack3 написан на Rust для Fuchsia. По данным Google, Fuchsia — это производственная операционная система с открытым исходным кодом, в которой приоритеты безопасности, обновлений и производительности.

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

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

Ходили слухи, что это замена Android и Chrome OS. Однако в июле 2019 года Google заявила, что намерена не заменять эти две операционные системы, а «просто тестировать новые концепции».

Содержание статьи соответствует нашим принципам редакционной этики. Чтобы сообщить об ошибке, нажмите здесь!.

В этом документе излагаются некоторые архитектурные соображения, которые мы приняли во внимание при разработке стека Bluetooth Gabeldorsche (GD).

Модель потоков

Во-первых, стек GD не строится на концепциях потоков. Вместо этого он работает с Handlers . Однако, поскольку GD в конечном итоге работает в ОС, ему все равно необходимо взаимодействовать с процессами и потоками, прежде чем будет достигнута абстракция обработчика.

Процессы

В целом. В среде выполнения GD существуют три типа процессов:

Процессы приложений: включают сторонние приложения, другие системные компоненты, такие как аудио и телекоммуникационные службы, которые взаимодействуют с API стека процессов Bluetooth, определенными с помощью различных методов RPC/IPC, таких как Binder, Socket IPC, gRPC, DBUS. и так далее, используя такие языки, как AIDL или Protobuf. Для приложений Android, несмотря на то, что API определены в AIDL, некоторый шаблонный код заключен в библиотеки Java, предоставляемые через код в frameworks/base/core/java/android/bluetooth, который предоставляется разработчикам как Android SDK.

Процессы уровня аппаратной абстракции (HAL): один или несколько процессов из раздела поставщика, поэтому они зависят от оборудования. Они взаимодействуют с процессом стека Bluetooth через набор API-интерфейсов аппаратной абстракции, определенных с помощью методов RPC/IPC, таких как Binder, Socket IPC, DBUS и т. д., с использованием таких языков, как HIDL. В Android это будут процессы HAL, реализующие API HIDL, такие как IBluetoothHci и IBluetoothAudioProvider.

Процесс стека Bluetooth: обычно один процесс, который реализует различные протоколы и профили Bluetooth выше интерфейса хост-контроллера (HCI) и ниже API SDK Bluetooth.С одной стороны, он обслуживает запросы от процессов приложений; с другой стороны, он перенаправляет эти запросы посредством взаимодействия с процессами HAL. В Android этот процесс обычно выполняется под AID_BLUETOOTH (обычно 1002) с именем процесса «com.android.bluetooth». Процесс запускается на Java и загружает нативные библиотеки через JNI. Другие системы, не использующие виртуальную машину Java, могут иметь чисто собственный процесс. В этом процессе может существовать несколько потоков по разным причинам. Стек GD полностью работает в этом процессе.

Потоки в стеке Bluetooth

  • Максимально сократите количество потоков, чтобы упростить синхронизацию.
  • Выполняйте блокировку операций ввода-вывода в отдельных потоках
  • Попробуйте перевести операции ввода-вывода в режим опроса, чтобы мы могли использовать методы, управляемые событиями, для взаимодействия с ними в основном потоке.
  • Переместите механизмы будильника и таймера в их вызывающие потоки, чтобы не создавать отдельный поток сигналов тревоги.
  • Изолируйте отдельные компоненты, чтобы каждый компонент можно было запускать и останавливать по отдельности, не прерывая основной поток.
  • Предпочитайте передачу данных, а не совместное использование данных между потоками, чтобы уменьшить количество блокировок и условий гонки.

После описанной выше оптимизации у нас осталось пять основных типов потоков в нативном коде:

Основной поток: основная рабочая лошадка в стеке Bluetooth. Контекст выполнения потока далее делится на обработчики, которые находятся в отдельных модулях. Этот поток можно разделить на более мелкие, если производительность на работающей платформе ограничена. Разработчику просто нужно привязать обработчики к разным потокам, и это не должно влиять на общую работу.

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

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

Рабочий поток аудио. Отвечает за операции кодирования и декодирования аудио, требующие более точного времени выполнения. Такой рабочий поток имеет отдельный поток, чтобы основной поток не влиял на него.

Поток ввода-вывода сокетов: связь с различными приложениями, использующими интерфейс BluetootSocket. У него есть отдельный поток из-за потенциальной задержки ввода-вывода.

Диаграмма потока данных

Вызовы функций между различными компонентами абстрагируются, поскольку управляющие пакеты (закрытие функции) проходят через очереди. Поток данных между компонентами — это пакеты данных, отправляемые через очереди, сигнализируемые с помощью Reactor. Они будут объединены во входную очередь для каждого компонента. Мы определяем три типа очередей:

Неблокирующая очередь: когда пользователи пытаются удалить очередь, когда она пуста, или поставить в очередь, когда она заполнена, она немедленно возвращается. Все очереди в потоке должны быть неблокирующими, иначе возникнет тупиковая ситуация.

Блокирующая очередь: когда пользователи пытаются удалить очередь, когда она пуста, или поставить в очередь, когда она заполнена, она будет заблокирована до тех пор, пока другой поток не сделает очередь доступной для записи/чтения. Его можно использовать в качестве механизма управления потоком, чтобы избежать слишком большого количества пакетов из пользовательского потока.

Дырявая очередь. То же, что и неблокирующая очередь, но она очищается, когда заполняется и пользователь пытается поставить в очередь. Это полезно для кодирования звука.

Основные блоки

Модуль

Код в GD упакован в объекты C++, называемые Module . Модуль стандартизировал следующие аспекты кода GD:

  • Зависимости: модуль обеспечивает свои собственные зависимости от других модулей путем реализации ListDependencies().
  • Жизненный цикл. В модуле должны быть реализованы методы жизненного цикла Start() и Stop().
  • Threading Module: базовый класс Module предоставляет обработчик контекста выполнения кода с помощью GetHandler().
  • Метрики: модуль может выводить информацию о своем состоянии для dumpsys с помощью функции DumpState().

Обработчик

Подобно android.os.Handler , bluetooth::os::Handler обеспечивает контекст последовательного выполнения, скрывая концепцию потока от исполняемого кода.

Разбивая контекст выполнения на более мелкие области, Handler дает следующие преимущества при разработке:

  • Меньше необходимости в блокировке из-за контекста последовательного выполнения
  • Меньший размер контекста упрощает управление потоком кода.
  • Отделение от потока дает разработчику системы больше свободы для настройки основного распределения потока. Например, для ОС реального времени без полной реализации потока можно использовать обработчик для обеспечения контекста выполнения, близкого к потоку.

Конечно, у Handler есть недостатки, с которыми разработчикам следует быть осторожными:

ВНИМАНИЕ! Хотя несколько обработчиков могут быть привязаны к одному и тому же потоку, обработчик не гарантирует последовательное выполнение кода в разных обработчиках, даже если они находятся в одном потоке.

ВНИМАНИЕ! Блокировка обработчиков, привязанных к одному потоку, может привести к взаимоблокировке

ВНИМАНИЕ: данные должны быть скопированы между обработчиком, чтобы избежать взаимоблокировки и состояния гонки

Реактор

bluetooth::os:Reactor реализует шаблон проектирования Reactor, в котором одновременные события демультиплексируются синхронным демультиплексором событий в список обработчиков запросов< /em> зарегистрирован через Диспетчер.

В универсальной операционной системе Linux, такой как Android, мы реализовали ее с помощью файловых дескрипторов, таких как eventfd для Handler , timerfd для Alarm и socketfd для конвейеров обработки данных. В контексте файловых дескрипторов события делятся на два типа:

  • OnReadReady: означает, что демультиплексор имеет некоторые события для обработчика, и обработчик может прочитать по крайней мере одно событие из базовой очереди событий. Это часто связано с EPOLLIN , EPOLLHUP , EPOLLRDHUP и EPOLLERR .
  • OnWriteReady: означает, что демультиплексор готов принять больше событий от этого обработчика, и обработчик может записать по крайней мере одно событие в базовую очередь. это часто связано с EPOLLOUT .

Этот шаблон естественным образом создает обратное давление от одной очереди к другой без какого-либо дополнительного сигнального механизма. При использовании в сетевом стеке, таком как наш, он упрощает поток кода сигнализации.

Язык определения пакетов (PDL)

Синтаксический анализ и сериализация пакетов являются важной частью любого сетевого стека. Обычно это первый фрагмент кода, который взаимодействует с удаленным устройством. В прошлом это достигалось вручную с помощью таких макросов, как STREAM_TO_UNIT8 или UINT8_TO_STREAM. Этот ручной метод утомителен и подвержен ошибкам. Чтобы исправить это, мы создали язык определения пакетов, который определяет структуру сетевых пакетов на уровне битов. Заголовки C++ и привязки Python будут автоматически генерироваться его генератором кода, а любые исправления в генераторе кода будут систематически применяться ко всему сгенерированному коду пакетов.

Соглашение о вызовах между модулями

Асинхронная клиент-серверная модель

Для большинства взаимодействий между модулями разработчики должны использовать асинхронную модель сервер-клиент в общей модели, например:

Многие протоколы и профили подходят для такой модели, например, AclManager и L2cap.

Модель синхронной базы данных

В некоторых случаях асинхронная модель "сервер-клиент" невозможна. В этом случае разработчики могут рассмотреть синхронную модель базы данных. В такой модели операции могут происходить синхронно с помощью мьютекса. Когда метод возвращается, изменения должны быть отражены во всех зависимостях. Любые изменения во внутренних состояниях должны применяться атомарно.

В эту модель входят многие модули хранения и информации, такие как Metrics и Storage .

Читайте также: