Категория > Новости > Только самое нужное. Избавляем Linux от багажа прошивок для оборудования - «Новости»
Только самое нужное. Избавляем Linux от багажа прошивок для оборудования - «Новости»27-07-2020, 16:00. Автор: Farrell |
Разработчики Linux поддерживают не только множество драйверов устройств в исходном коде ядра, но и большую коллекцию прошивок к устройствам в пакете linux-firmware. Но когда размер системы имеет значение — нужно отсечь лишнее. Модули ядра легко отключить в make menuconfig, а вот выбрать нужные прошивки сложнее. Поэтому сегодня мы напишем скрипт, который позволит тебе извлечь из полугигабайтной коллекции прошивок несколько мегабайт, нужных именно твоей машине. С железом нередко бывает так, что одного драйвера в пространстве ядра ОС для его работы недостаточно. Нужна также прошивка (firmware), которая загружается в само устройство. Точный формат и назначения прошивки зачастую известны только производителю: иногда это программа для микроконтроллера или FPGA, а иногда просто набор данных. Пользователю это не важно, главное, что устройство не работает, если ОС не загрузит в него прошивку. В свободных операционных системах прошивки нередко вызывают споры. Многие из них распространяются под несвободными лицензиями и без исходного кода. Авторы OpenBSD и ряда дистрибутивов GNU/Linux считают это проблемой и со свободой, и с безопасностью и принципиально не включают такие прошивки в установочный образ. Если у тебя есть устройство, которое требует прошивки, и тебе нужно, чтобы оно работало, вопрос лицензии прошивки становится чисто академическим — от необходимости иметь ее в системе и загружать ты никуда не уйдешь. Полный набор из linux-firmware занимает более 500 Мбайт в распакованном виде. При этом каждой отдельно взятой системе требуется только небольшая часть этих файлов, остальное — мертвый груз. Даже в современном мире с дисками на несколько терабайт еще много случаев, когда размер имеет значение: встраиваемые системы, образы для загрузки через PXE и подобное. Хорошо, если о board support package позаботился кто-то другой, но это не всегда так. Если ты точно знаешь полный список нужного железа, можно извлечь файлы вручную. Впрочем, даже в этом случае найти нужные файлы может быть непросто — linux-firmware представляет собой не очень структурированную кучу файлов, и списка соответствия файлов именам модулей ядра там нет. А если ты хочешь дать пользователям возможность легко собрать свой образ, тут и вовсе нет выбора — нужно автоматическое решение. В этой статье я расскажу о своем способе автоматической сборки. Он неидеален, но автоматизирует большую часть работы, что уже неплохо. Писать скрипт будем на Python 3. ![]() Примеры кода в статье упрощенные. Готовый и работающий скрипт ты можешь найти на GitHub. К примеру, можно им просмотреть список прошивок для включенных в
ОсновыВ ядре Linux нет глобального списка прошивок и кода для их загрузки. Каждый модуль загружает свои прошивки с помощью функций из семейства РќР° первый взгляд, некоторую надежду дает опция СЃР±РѕСЂРєРё РџРѕРёСЃРє РїРѕ вызовам К счастью для нас, модули должны указывать нужные им файлы прошивок с помощью макроса Именно из вывода этого макроса берется информация о прошивках, которую можно увидеть в выводе утилиты
В ряде случаев можно было бы обойтись одной Здесь и далее будем считать, что все ненужные модули отключены в конфиге сборки ядра (Kconfig). Если мы собираем образ для конкретной системы или ограниченного набора систем, это вполне логичное предположение. Ищем исходники модулейЧтобы собрать список имен файлов прошивок, мы сначала составим список всех файлов исходного кода ядра, где они используются. Затем мы прогоним эти файлы через препроцессор из GCC, чтобы раскрыть все макросы, и извлечем собственно имена нужных файлов. Находим все включенные в конфиге модулиЭто самая простая часть. Конфиг сборки ядра имеет простой формат «ключ — значение» вроде Нас интересуют только ключи, а какое значение там,
Перейти обратно к новости |