Поддержка Picolibc в GCC 16 для встраиваемых систем

Последнее обновление: Январь 19 2026
Автор: TecnoDigital
  • GCC 16 включает в себя встроенную поддержку Picolibc, сверхлегкой библиотеки libc на языке C, ориентированной на встраиваемые системы.
  • Интеграция добавляет целевые показатели. *-picolibc-* и новые возможности, такие как --oslib=, --crt0= y --printf=.
  • По сравнению с Newlib и Newlib-nano, Picolibc значительно уменьшает размер встроенного ПО, что имеет ключевое значение для приложений Интернета вещей и периферийных устройств.
  • GCC 16 сочетает эту поддержку с улучшениями в современных архитектурах и поддержкой C++20 по умолчанию, укрепляя свою роль в экосистеме встроенных систем.

Поддержка Picolibc в GCC 16 для встраиваемых систем

Выход GCC 16 с нативной поддержкой Picolibc вызывает значительный интерес в сообществе разработчиков встраиваемых систем . Это не просто «ещё одна версия» старого компилятора, а значительный шаг к созданию гораздо более лёгких и совершенных наборов инструментов для микроконтроллеров, устройств IoT и периферийных систем, где каждый байт имеет значение.

За этим шагом стоит опытный разработчик Кит Паккард, хорошо известный своей работой над X.Org , который годами продвигал Picolibc как минималистичную стандартную библиотеку C для встраиваемых систем. Благодаря интеграции в GCC 16, необходимость в пользовательских патчах, необычных конфигурациях и обходных путях для связывания этой библиотеки наконец-то отпала: Picolibc становится полноправным членом экосистемы GCC.

Что такое Picolibc и почему он интегрирован в GCC 16?

Picolibc — это сверхлегкая стандартная библиотека C, разработанная специально для 32-битных и 64-битных встраиваемых систем. Она появилась в результате слияния и рефакторинга Newlib и AVR Libc с четкой целью: минимизировать использование ПЗУ и ОЗУ без ущерба для основных функций языка C.

В отличие от других, более ресурсоемких альтернатив, Picolibc разработана таким образом, что компоновщик может легко отбрасывать неиспользуемый код , обеспечивая очень точный контроль над тем, какие части библиотеки в конечном итоге попадут в бинарный файл. Это идеально подходит для микроконтроллеров, где объем памяти измеряется несколькими килобайтами, а каждый дополнительный фрагмент кода увеличивает стоимость, потребление ресурсов и сложность.

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

Ключевым моментом является то, что дерево кода GCC 16 включает в себя необходимые изменения для распознавания цели такого типа *-picolibc-* и параметр конфигурации --with-picolibcТаким образом, при сборке компилятора или использовании предварительно собранного набора инструментов, Picolibc становится опцией, поддерживаемой производителем., без каких-либо подручных средств.

Интеграция Picolibc в GCC 16: подробности и новые возможности.

Патч, который был объединен с репозиторием GCC 16, не только добавляет распознавание Picolibc в качестве альтернативной библиотеки libc, но и вводит специальные параметры компилятора , предназначенные для использования преимуществ этой легковесной среды во встроенных системах.

С одной стороны, GCC теперь может беспрепятственно работать с цели стиля *-picolibc-* (например, arm-none-picolibc-eabiКроме того, при компиляции GCC можно передать --with-picolibc чтобы конфигуратор подготовил среду, в которой эта библиотека будет указана в качестве основной цели, осуществляя управление. sysroot, заголовочные и загрузочные файлы аккорды к Picolibc.

Помимо базовой интеграции, патч предоставляет ряд очень интересных дополнительных возможностей при компиляции для Picolibc:

  • --oslib=Это позволяет выбирать различные модули, реализующие интерфейс с операционной системой или средой выполнения, что крайне важно при работе непосредственно на аппаратном обеспечении. Легкая RTOS или в симуляторах.
  • --crt0=: указывает загрузочный файл C (crt0) для использования, что оставляет место для адаптировать последовательность загрузки к каждой плате, загрузчику или требованиям инициализации.
  • --printf=: предлагает выбор между полной реализацией printf или сокращенные версии, например. минималистичные версии, ориентированные на целые числа что позволяет значительно сэкономить программную память.
  Что такое JavaScript: все, что вам нужно знать

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

В некоторых сценариях также используются макросы и флаги, например: -Dsystem-libc и конфигурации sysroot, связанные с Picolibc, так что компилятор рассматривает эту библиотеку как реализация по умолчанию библиотеки libc без необходимости добавлять десятки флагов к каждому вызову GCC.

Путь к «либерально-китайскому разнообразию» в странах Персидского залива

Включение Picolibc в GCC 16 не произошло на пустом месте; этому предшествовала дискуссия внутри самого проекта GCC о необходимости продвижения разнообразия официально поддерживаемых библиотек C. Примерно год назад в списках рассылки уже обсуждалась возможность включения различных библиотек libc, адаптированных к конкретным контекстам, и Picolibc стала очевидным кандидатом для встроенных систем.

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

Результатом этого процесса сотрудничества стала интеграция, которая является не просто дополнением, а расширением, хорошо согласованным с внутренней архитектурой GCC . Это подкрепляет идею «разнообразия libc»: теперь, в дополнение к обычным комбинациям с glibc, Newlib или uClibc в определенных средах, Picolibc добавлен в качестве легковесной и поддерживаемой альтернативы в самом дереве GCC.

Этот подход хорошо согласуется с современными отраслевыми тенденциями, где активно развиваются такие архитектуры, как RISC-V, новые профили ARMv9 и специализированные SoC. Модульная и минималистичная библиотека libc позволяет одному и тому же компилятору легко адаптироваться как к мощному серверу, так и к сенсорному узлу, использующему всего несколько килобайт флэш-памяти.

Взаимоотношения с Newlib, Newlib-nano и другими легковесными библиотеками libcs.

Чтобы понять, что предлагает Picolibc, полезно рассмотреть его в контексте по сравнению с другими классическими вариантами. Newlib уже много лет является стандартом для libc в средах встраиваемых систем на базе GCC, и от него были созданы такие варианты, как Newlib-nano, направленные на некоторое уменьшение размера за счет некоторой потери функциональности.

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

Согласно анализу сообщества (например, сравнениям, опубликованным в блогах разработчиков встраиваемых систем), переход на Picolibc может привести к значительному сокращению использования флэш-памяти, размера бинарного файла, размера стека и размера кучи по сравнению с Newlib и его вариантом nano. На практике это означает возможность разместить больше прикладной логики на том же микроконтроллере или уменьшить размер микроконтроллера до меньшего объема памяти, что снижает стоимость оборудования.

В то же время проект Picolibc не зацикливается на базовых принципах: в его репозитории показано, как он добавляет поддержку 16-битных целевых платформ, улучшает совместимость с POSIX и вносит различные усовершенствования, которые делают его привлекательным даже для менее экзотических архитектур: ARM Cortex-M, RISC-V, встроенных MIPS и многих других.

По сравнению с другими облегченными альтернативами, такими как dietlibc или различные нанобиблиотеки, Picolibc обеспечивает баланс между размером и соответствием стандартам , что особенно хорошо подходит для проектов, где требуются согласованные API, интенсивное тестирование и, в то же время, очень малый размер.

  Что такое разгон и для чего он используется в вашем ПК?

Как использовать Picolibc во встроенном рабочем процессе

Интеграция в GCC 16 приводит к очень конкретным изменениям в повседневной работе разработчика встроенного ПО. Чтобы это наглядно продемонстрировать, представим типичный проект для ARM Cortex-M с кросс-компиляцией с компьютера разработчика. Традиционно используются такие наборы инструментов, как... arm-none-eabi на основе Newlib или проприетарных SDK от производителя микропроцессора.

С помощью GCC 16 вы можете собрать или загрузить набор инструментов, который уже включает в себя цель arm-none-picolibc-eabiПри настройке компилятора с использованием этой опции. --with-picolibcТеперь среда готова использовать эту библиотеку libc в качестве стандарта, включая заголовочные файлы, системный корневой каталог и соответствующие загрузочные файлы.

Далее компиляция выполняется с использованием нового префикса, например. arm-none-picolibc-eabi-gccнаряду с обычными флагами оптимизации и отладки. Если вы хотите еще точнее настроить размер, вы можете использовать опцию. --printf= выбрать вариант printf легче, чем требуется для реализации проекта.

В средах, использующих Make, CMake или другие системы сборки, изменения обычно ограничиваются следующим: скорректируйте определение цепочки инструментов: укажите новый префикс, возможно, адаптируйте некоторые параметры связывания и проверьте, что скрипты запуска (crt0) и файлы скриптов компоновщика соответствуют организации Picolibc. Во многих случаях эта корректировка намного меньше, чем та, которая уже требуется при переходе от SDK стороннего поставщика к "чистому" набору инструментов GCC.

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

Влияние на Интернет вещей, граничные вычисления и регулируемые сектора.

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

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

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

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

Сочетание GCC 16, поддержки современных архитектур (ARMv9.6-A, RISC-V, новых поколений x86, таких как AMD Zen 6 или новые процессоры Intel) и Picolibc в качестве легковесной библиотеки libc укрепляет позиции компилятора GNU как центрального элемента для новой волны интеллектуальных устройств , от носимых устройств до промышленных датчиков с возможностями локального анализа.

Статус GCC 16, другие новые функции и уровень зрелости поддержки.

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

  Как использовать историю файлов в Windows: полное руководство

В последнем отчете упоминалось, что несколько регрессий с приоритетом P1 , наиболее критических ошибок, остались нерешенными. До тех пор, пока количество этих ошибок не достигнет нуля или приемлемого уровня, первые кандидаты на релиз GCC 16.1 не будут созданы. Такой подход гарантирует, что поддержка Picolibc будет выпущена в достаточно зрелом состоянии, чтобы начать использоваться в реальных проектах.

Помимо поддержки Picolibc, GCC 16 включает в себя множество новых функций: поддержку целевой платформы. Армв9.6-Апервоначальная реализация для архитектуры AMD Zen 6 (обозначена как Znver6Благодаря новым возможностям ISA, улучшаются и процессы управления. управляемая память в графических процессорах AMDа также поддержка процессоров Intel следующего поколения, таких как Nova Lake и Wildcat Lake, и увеличение количества разделов по умолчанию в LTO (Link Time Optimization), среди прочих улучшений.

Что касается языков программирования, одним из наиболее заметных изменений является то, что C++20 становится стандартом по умолчанию, если не указан другой язык. Также добавлен новый интерфейс для Algol 68, расширяющий список языков, поддерживаемых GCC. Все это сочетается с исправлениями ошибок и незначительными оптимизациями, распределенными по различным бэкендам.

В целом, GCC 16 — это не просто «версия, в которую включена Picolibc». Это мощный релиз с точки зрения архитектурной поддержки, модернизации C++ и возможностей для современного оборудования, где включение легковесной библиотеки libc является частью более широкой стратегии адаптации к современным потребностям разработки, как на настольных компьютерах, так и, особенно, на встроенных системах.

Технические сообщества и специализированные СМИ собирают информацию о новых разработках: от статей, посвященных поддержке Picolibc и идее «разнообразия libc», до анализов последствий новых архитектур, таких как AMD Zen 6, и дискуссий в социальных сетях о том, как использовать GCC 16 в проектах, начиная от ретро-консолей и заканчивая промышленным управлением.

Всё указывает на то, что по мере приближения финального релиза GCC 16.1 и стабилизации первых наборов инструментов с интегрированной библиотекой Picolibc мы увидим больше примеров реального использования, сравнительных тестов размера и производительности, а также практических руководств по работе с аппаратным обеспечением без операционной системы, скриптов компоновщика и конкретных последовательностей загрузки с использованием этой новой комбинации.

Поддержка Picolibc в GCC 16 знаменует собой поворотный момент для экосистемы встраиваемых систем: она значительно снижает сложности, связанные с внедрением сверхлегкой libc, открывает возможности для создания более компактного и удобного в сопровождении программного обеспечения и соответствует общей тенденции к открытым, конфигурируемым инструментариям, адаптированным к различным архитектурам. Для многих команд разработчиков целесообразно начать тестирование ветвей GCC 16 с Picolibc уже сейчас, оценить влияние на размер, производительность и удобство сопровождения и рассмотреть возможность включения этой функции в будущие продукты.

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