Linux firmware что это
В общем купил я значит видеокарту RX550, наслушавшись разговоров о том, что у красных замечательные опенсорсные драйвера, так вот, на федоре(как мне известно состоит только из свободного по) все было хорошо, изкоробки, как говорится. Когда решил установить дебиан11 уже при запуске systemd писало firmware gpu error, и как итог второй монитор не определился и вообще ничего толком нормально не работало. После установки пакета firmware-amd-graphics всё заработало в обычном режиме, но меня этот вариант не устраивает, не хочу ставить проприетарный драйвер, да и на федоре все работало нормально. В чем может быть проблема, в какую сторону копать, как фиксить? Хочу узнать ваше мнение. Так же, если кто-то из вас знает, подскажите видеокарты, которые поддерживает debin/freebsd из коробки, без проприетарных драйверов.
Здравствуйте! Меня заинтересовал файл /root/remove_firmware.sh, поставляемый с Devuan. Хочу попробовать без проприетарных драйверов, так как мой ноутбук фризится (Gentoo ускорила Lenovo G50-30, но стало жарко).
Листинг этого файла:
Я пользуюсь вайфай, поэтому конкретно вопрос к firmware-atheros, firmware-iwlwifi: можно ли мне их удалить?
Подскажите, как проверить, нужны ли мне проприетарные драйверы?
wi-fi карта, драйверы и пакеты, содержащие эти драйверы:
Как видно, драйвер ath9k сдержится в пакете firmware-atheros и в паре других, тоже firmware. Без этого дравера вайфай не будет работать?
Также если не будет работать вайфай, то и эзернет тоже без проприетарного драйвера?
Модель - Toshiba (Hitachi) PC P300 1TB 7200rpm / 64 MB buffer / HDWD110UZSVA / HDKPC32ZKA01, дата выпуска FEB2021, firmware MS2OA80R
Переехал на лето в другую страну. Взял с собой новый ThinkPad e15 с дуалбутом Xubuntu/W10. Сегодня подключил интернет и по этому поводу решил обновить систему. Просто запустил apt update / apt upgrade со всем что было. Видел что в списке обновлений есть пункты с firmware в названии, но запустил как есть.
Что это и как лечить?
Вопрос к тем, у кого оно установлено: есть ли смысл? Фичи почитал и вроде ничего серьезного для меня нет, но мало ли пользовательский опыт что-то скажет.
Доброго дня, ЛОРчане!
Есть уже достаточно древняя видео карточка AMD Radeon R9 270X, от ASUS (R9270X-DC2T-4GD5) c 4-мя ГиБ GDDR5 памяти. На днях произошла некая поломка, которую я пытаюсь идентифицировать. Хоть карточка и древняя, но время сейчас не самое удачное для покупки новой. Да и в любом случае было бы интересно разобраться в причинах.
Система работала нормально, просто рабочий стол и зависла совершенно полностью, помог только Reset. После включения на экране появились надписи POST вперемешку с красными горизонтальными линиями высотой в символ (на экране текстовый режим) и шириной в половину экрана. Дальше появился GRUB так же в текстовом режиме. Хотя до этого всегда работал в графическом. Между буквами меню отображались артефакты похожие на символы псевдографики (но не они) зелёного цвета. В UEFI (BIOS) setup войти не удалось, вероятно из-за того, что он работает в графическом режиме. А может быть и удалось. Непонятно, после нажатия Delete просто чёрный экран.
Карточку извлёк, разобрал, почистил от пыли. Поменял термопасту (оригинальная совсем высохла). Собрал. В процессе никаких видимых повреждений, вроде проблемных конденсаторов или следов явного перегрева, я не обнаружил. Естественно разборка и сборка не помогла.
В UEFI (BIOS) setup выставил встроенную в процессор, после этого система стала загружаться нормально. Но R9 279X, естественно, от этого работать не начала. Драйвер ядра её определяет, но выдаёт жалобы:
После загрузки карточка в системе никак не задействуется.
По совету я попробовал её перепрошить на ту же версию VBIOS и это даже помогло один раз. Я прошил, перезагрузил комп, посмотрел dmesg , указанных ошибок там больше не было. Я запустил DRI_PRIME=1 glxgears (DRI_PRIME, т.к. основной была выставлена встроенная), шестерёнки отображались корректно. Проверил glxinfo - информация корректная. Я запустил ещё штук 5 glxgears чтобы немного нагрузить карточку. И система опять намертво зависла, пришлось использовать Reset. После перезагрузки карточка опять оказалась не задействованной, и в dmesg я обнаружил такие же ошибки, как и были (как и написаны выше). Попробовал прошить ещё раз, но это уже не помогло. Сначала я упёрся в ошибку утилиты amdvbflash * сообщающую, что прошивка уже была проведена. Обойти эту проблему помог ключ -fa и прошивка прошла. Однако в этот раз пробема никуда не делась и карточка осталась в нерабочем состоянии. Я попробовал и другую версию VBIOS - ничего. Правда я не уверен, что прошивка действительно в эти разы работала нормально. Несмотря на то, что утилита для прошивки писала
,
при явной проверке контрольной суммы она отличалась от контрольной суммы файла с прошивкой.
Пробовал в этом же слоте другую карточку от NVIDIA - работает нормально. Т.е. с большой вероятностью, это не проблема слота или материнской платы. Карточку AMD пока не пробовал в другом системнике, надо его ещё собрать.
Поскольку одна перепрошивка всё же помогла, у меня есть мысль заменить микросхему памяти. Однако я не уверен, что дело всё таки в микросхеме памяти с прошивкой, ведь работа карточки нарушалась уже после загрузки. Хотя я не знаю, используется ли VBIOS после того как карточка была инициализирована или он нужен только в самом начале после включения.
Что ещё можно попробовать с ней сделать кроме как выбросить?
Примечания:
* - Почему-то amdvbflash_linux_4.69 карточку не видит вообще, что с загруженным драйвером, что без него. Поэтому все манипуляции с прошивкой пришлось проводить из FreeDOS.
Как им теперь управлять? Может конфигурируется, но я не нашел. Кто-то сталкивался? Идеи? Опять самому плату и прошивку делать?
Sun netra X4270 System Firmware and Software
ILOM 3.2.11.21 r126364 BIOS vers. 14.01.02.18
ILOM 3.2.11.21 r126364 BIOS vers. 14.01.02.18
Скачивать дают только обладателям подписки на My Oracle Support (нужен Support Identifier).
после чего теряется, как usb-устройство.
И происходит это из-за того, что по всей видимости он считается как модем, но ведет он себя не как модем и из-за этого отключается:
Для успешной перепрошивки он должен остаться висеть в USB устройствах. Можно ли как то отключить, что бы ядро перестало его опознавать как модем? Может какие модули надо заблеклистить?
Здравствуйте, только что начал устанавливать линух дебиан на новую машину. Выбрал для скачивания образ Netinst, т.к. нет хорошего интернета в деревне. И столкнулся с проблемкой: при обнаружении сетевой карты, не видит мой TP-Link TL WN722N. Я так понял, там нужно докачивать фирмаври для того чтобы начало работать, но до конца не разобрался… Можете помочь?
В свете последних событий прям жить захотелось)) Спасибо причастным!
Откопал Соньку хпирию(совсем дрова), аккум в ней сдох, вспучился, повредил шлейф экрана. Но я взял, да и восстановил шлейф, напаял волосинок, замазал компаундом, вообщем заработал он. Но там ядро старое. 4-ое, а есть 5.1 на эту модель.
Прошивать везде инструкции с винды, не, я могу пробросить в виртуалке УСБ, конечно. Но хочется с онтопика, с моего АРМ64. Гугл тут всё, его полномочия закончились.
Имеется почти непользованый HTC Desire 12 (не плюс) с родным Android 7.1.1 (который дальше не обновляется, поскольку производитель положил болт) и кучей предустановленного bloatware. Есть ли для этого аппарата альтернативная прошивка с чистым Android без всего этого говна?
Купил это чудо года полтора - два назад за копейки, понял, что ошибся и купил нормальный Samsung за нормальные деньги. Хочу использовать его как запасной телефон, но он даже после factory reset тормозит как ненормальный.
Подскажите как в LEAP 15.2 реализована настройка b43? Все так же нужно заблеклистить все остальное и установить фирмварь и что-то новенькое??
ЗЫ вот что-то не понял вчера ночью засыпая на один глаз из под SU пишу ifconfig мне в ответ нет такой команды, что-то поменялось?? 0_о
Есть файл прошивки demo.bin Linux/MIPS, как его распаковать а потом заново собрать в bin? Необходимо добавить драйвер, возможности скопировать через флешку или по сети нет.
Доброго времени суток, лорчане и лорчанки.
Недавно я поставил Xen на свой ноут с Debian 10 Buster и решил поиграть в сеньор-дева решений виртуализации enterprise-класса. Я понял, что проиграл, когда после запуска системы в качестве dom0 внутри Xen обнаружил, что у меня отвалился X-сервер. И startx, и xinit, и init 5, и много других способов стартовать Иксы заканчивались ничем. startx, например, просто возвращал информацию о том, что надо немного подождать, пока X-сервер не начнёт принимать соединения, а по истечению некоторого времени просто оставлял все попытки родить оболочку с ошибкой Connection refused.
К счастью, клавиатура не отвалилась и я смог собрать немного инфы о своей проблеме через утилиты типа lspci и lsusb. Вот какие странности я обнаружил сразу после этого:
- Сеть в dom0 отсутствует - dmesg даже ругается, что link not ready для ipv6;
- lspci вешает dom0. Намертво. Не помогает даже отправка SIGINT в терминал. При загрузке ванильного Дебиана без гипервизора такого не возникает;
- lsusb возвращает идентичный вывод как внутри гипервизора, так и вне его;
- upower –dump вешает dom0 на некоторое время, возвращая затем ошибку о том, что какая-то из служб systemd не работает. Как вы уже могли догадаться, без гипервизора всё работает замечательно;
- reboot, halt, shutdown и poweroff просто вешают систему после ввода этих команд, так что вырубить ноут можно только силой, нажав на кнопку питания.
Но самое вкусное - lsmod внутри Xen dom0 показывает на пару десятков меньше загруженных драйверов, чем вне его. Если вы ещё не поняли масштаб трагедии - в Qubes OS, стоящей на соседней машинке, при загрузке в окружение с Зеном выключаются разве что драйвера от другого гипервизора - KVM, но в моём Дебиане в астрал уходит, похоже, вообще всё, что может туда уйти. После такого неудивительно, что система адски лагает - драйвера-то не работают.
В попытках решить эту проблему я перечитал гору документации к Xen и кучу логов dmesg, даже написал в рассылку xen-users, но и там никто не подсказал мне, как решить эту проблему. Я нашёл несколько юзеров с похожими проблемами с X-сервером на сайтах типа Stackoverflow и на форуме Gentoo, но их решения либо не сработали на моей системе, либо решали немного другой косяк, где логи dmesg и xorg явно указывали на проблему. В данном случае чтение логов мне не помогло.
Плюнув, я решил просто на всякий случай переустановить Xen, добавив в sources.list пакеты contrib и non-free… и оно заработало! Я смог получить доступ к сети изнутри dom0, а lspci корректно вывел информацию о девайсах на шине!
Правда, Иксы так и не завелись.
К счастью, в этот раз они выдали другую ошибку - no screens found. Пару дней назад у меня была аналогичная проблема, и я исправил её, скачав пакет firmware-amd-graphics и сгенерировав новый xorg.conf, где заменил все упоминания amdgpu на radeon. Пакет firmware-amd-graphics я потом удалил, потому что всё работало и без него. Я вошёл в обычный Дебиан без Xen и сделал всё то же самое, убедился, что иксы успешно стартуют и, счастливый, перезагрузился в зеновский dom0, уже предвкушая, как буду ставить Винду в HVM, чтобы играть в GTA 5 без костыля в виде Вайна…
Угадайте, что я обнаружил после того, как загрузился в Xen. Мою отвисающую челюсть было очень непросто удержать от падения на пол.
После установки прошивки, в dom0 вновь отвалились Иксы и куча драйверов. Команда upower опять не работала так, как надо, а lspci вновь стал намертво вешать систему.
Между тем, в окружении без Xen, в ванильном Дебиане всё работает как часы.
Я грешил на то, что как-то неправильно поставил гипервизор, думал, что он почему-то не даёт некоторым драйверам загрузиться и поэтому не всё работает так, как надо, думал, что надо будет пересобрать проблемные драйвера и проблема решится сама собой. В какой-то момент я даже подумал, что это, должно быть, редкий баг в Зене или Дебиане, или что Зен, возможно, просто не совместим с моим железом. Но всё оказалось куда проще: прошивка AMD порезала мой dom0. А после того, как я переустановил Зен, он уничтожил то, что от неё осталось после того, как я её удалил, и поэтому у меня второй раз за неделю упали Иксы на ванильном Дебиане.
Я банально не знаю, как решить эту проблему. Во время установки пакетов apt пишет, что отсутствует прошивка для amdgpu. Ранее он жаловался на отсутствие таковой для radeon, но, поскольку я уже понял, к чему приводит её установка, я, пожалуй, воздержусь от установки ещё одной, чтобы не сломать всё окончательно. Ещё я заметил, что и установка Зена, и установка прошивки создаёт новый initrd с помощью update-initramfs. Я подозреваю, что, возможно, новый рамдиск создаётся криво, и Зен не может загрузить все модули, рожая в ответ такие фокусы. Тем не менее, я всё ещё не до конца уверен в том, что происходит, и боюсь лишний раз повредить что-нибудь своими неумелыми действиями. В общем, что делать? С меня как обычно.
Восстановил работу ручной правкой /boot/initrd.img-5.4.0-0.bpo.3-amd64 потому что update-initramfs создает косячный образ. Что делать?
Так как комп не перезагружался недели две я даже не скажу с уверенностью после какого апдейта это случилось. Предположительно после установки Virtual Machine Manager, но не точно.
Короче, дано: Debian 10 Buster все stable, не считая ядра которое из бекпортов сейчас 5.4.0-0.bpo.3-amd64 и развлечений с rocm одно время, но уже давненько. Видеокарта Radeon RX 580 с опенсорсными драйверами.
И вот чих-пых, внезапно что-то отвалилось. Это перестала загружаться графика (иксы, вулканы), при этом при старте есть в самом начале запись, что
drm:amdgpu_pci_probe[amdgpu] amdgpu requires firmware installed
apt-get install firmware-linux-nonfree сделал, заругалось на broken dependences, но установилось из бекпортов правильно.
update-initramfs - тоже самое: не грузится бинарная прошивка для видеокарты.
Замена /boot/initrd.img-5.4.0-0.bpo.3-amd64 на старый вариант помогла. Стал сравнивать чем они отличаются. Обнаружил, что внутри правильного варианта структура каталогов такая (сокращенно, всю не привожу):
В неправильном, в котором бинарники прошивки не грузятся
распаковал gunzip и cpio образ, переместил amdgpu на прежнее место, запаковал gzip и cpio, положил в /boot и все загружается теперь, прошивки есть.
Но это не дело, update-initramfs по-прежнему создает образ с ошибками. Я как-то даже не в курсе как это чинить.
в общем поставил debian 10, перезагрузился, все большими буквами и нет wifi девайса.
вот вывод lspci
весь firmware который можно поставил, что можно сделать? помогите пожалуйста.
Достался мне в наследство сервер T3-1. Все бы ничего, но столкнулся с глюками ILOM, версия очень старая, ее даже не нашел в поддержке. Обыскал весь интернет в надежде найти версию свежее, но рабочих ссылок не нашел к сожалению, есть только одна и ведет она на сайт оракла.
Скачивать дают только обладателям подписки на My Oracle Support (нужен Support Identifier).
Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.
Нужный ZIP можно найти на XDA Developers или 4PDA. Но имей в виду, что нужна прошивка конкретно для твоей модели аппарата, — у того же Galaxy S7 есть несколько модификаций для разных рынков, не всегда совместимых между собой.
Структура ZIP-файла с прошивкой
После загрузки распакуем архив с помощью любого архиватора. Внутри будет следующий набор файлов и папок:
- META-INF — папка с метаинформацией о прошивке (сертификат автора, манифест со списком файлов, их контрольными суммами), скриптом обновления (updater-script) и инсталлятором (update-binary), который выполняет команды скрипта по монтированию разделов, копированию файлов и другим действиям с NAND-памятью;
- boot.img — образ с ядром и RAM-диском (он прошивается в раздел boot);
- system.new.dat — это, грубо говоря, и есть сама прошивка, а точнее образ раздела system, содержащий операционную систему Android за вычетом ядра;
- system.transfer.list — содержит список команд, которые необходимо выполнить, чтобы поблочно скопировать содержимое system.new.dat в раздел system при установке прошивки;
- system.patch.dat — используется для OTA-обновлений, то есть выборочного внесения изменений в прошивку; если прошивка «полная», он имеет нулевой размер.
Реверс малвари
Распаковываем system.new.dat
Файлы system.new.dat и system.transfer.list представляют для нас наибольший интерес. Точнее, не они, а содержащаяся в них система. Но добраться до нее не так просто.
Скрипт
Самые ленивые могут разобрать прошивку с помощью скрипта System_Extractor-Linux.
- Распаковываем архив с прошивкой в любую папку.
- Качаем скрипт по ссылке и разархивируем в любую папку.
- Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
- Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
- Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
- После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
- Готово. Содержимое system в папке extract_*/output .
Ручной способ
Распаковываем архив с прошивкой в любую папку (например, в rom ):
Скачиваем нужные нам инструменты в эту папку:
Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt :
Содержимое образа system
Структура каталогов Android
После распаковки system появится следующая каталоговая структура:
- app — предустановленные приложения со стандартными привилегиями;
- priv-app — предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
- bin — бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
- etc — файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
- fonts — шрифты. По умолчанию содержит только фирменные шрифты Roboto;
- framework — библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
- lib и lib64 — Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
- media — медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
- tts — файлы, необходимые синтезатору речи;
- usr — каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
- vendor — файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
- xbin — необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
- build.prop — файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
- addon.d — содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.
Ознакомившись с базовой структурой Android, начнем вносить изменения.
Удаляем и добавляем приложения
Все предустановленные программы можно найти в двух папках:
Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из нашей статьи.
Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.
Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.
Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.
Меняем анимацию загрузки
Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:
- desc.txt — файл, описывающий анимацию;
- part0 — папка с файлами анимаций, которые воспроизводятся первыми;
- part1 — папка с файлами анимаций, которые воспроизводятся вторыми;
- .
- part? — крайняя папка, изображения с которой воспроизводятся в конце.
Файл desc.txt может содержать нечто вроде
Назначение этих строк интуитивно понятно: 1920 × 1080 — разрешение картинки, 60 — число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).
Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.jpg , 00001.jpg , 00002.jpg . Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA.
Четыре части в bootanimation.zip для LineageOS
Изменяем звуковое оформление
Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:
- alarms — мелодии будильника;
- notifications — звуки уведомлений;
- ringtones — мелодии звонка;
- ui — системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.
В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:
И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).
Добавляем шрифты
Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA. Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .
Меняем системные настройки (build.prop)
В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.
Дополнительный файл для Gigaset ME и ME Pro
Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:
- ro.product.model и ro.product.manufacturer — модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
- hw.qemu.mainkeys — принимает только два значения: 0 — показать наэкранные клавиши навигации, 1 — не показывать кнопки. Отсутствие строки соответствует 0;
- debug.sf.nobootanimation — значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
- ro.telephony.default_network — говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
- ro.sf.lcd_density — DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт. Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие — меньше;
- ro.config.vc_call_vol_steps — количество шагов громкости во время разговора (по умолчанию 8);
- ro.config.media_vol_steps — количество шагов громкости мультимедиа (по умолчанию 15).
Внедряем в прошивку Google Apps
Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.
Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps. Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock. ), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.
Интеграция GApps в прошивку выполняется так:
- Распаковываем ZIP-архив GApps с помощью любого архиватора.
- Переходим в папку Core.
- Видим множество архивов с расширением .tar.lz . Извлекаем с помощью lzip.
- После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
- Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
- Все, мы интегрировали GApps в нашу прошивку!
Свободное место
Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя ADB:
Инфа о разделе system
Второй вариант: поставить на устройство терминал и набрать команду
Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду
Или то же самое с помощью ADB:
Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.
При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app ( /system/priv-app ) и звуки вызова из system/media/audio и bootanimation.zip , но и:
- /system/tts/lang_pico — языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
- /system/usr/srec/config/ — офлайн-языки. Можно будет скачать потом онлайн, если понадобится.
Сборка
После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:
Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img :
1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:
Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:
Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).
Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner, так и на ПК (потребуется установленная Java):
Подводные камни
Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.
Установка
Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.
Выводы
Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка — это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей — TouchWiz, ZenUI, HTC Sense и так далее — всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.
Есть много причин, по которым хорошую перспективную технологию могут не принимать в официальную ветку Linux — Линус славится своими жесткими требованиями к новому коду. Но от этого факта менее интересными такие технологии не становятся. И иногда ради них стоит пересобрать ядро с наложением стороннего патча.
Какими бывают линуксы
linux-rt
Пожалуй, самый известный сторонний патч. Позволяет превратить обычный Linux в ОС реального времени. И хотя главное применение такой операционки – промышленные и встроенные системы, на обычном десктопе она тоже может быть интересна. Например, тем, кто часто занимается обработкой звука или видео или постоянно грузит систему какими-нибудь ресурсоемкими вычислениями. Встречаются также свидетельства о положительном эффекте от применения этого ядра на highload-серверах. Я же ничего, кроме слегка упавшей общей производительности системы, не заметил.
$ sudo apt-get install linux-rt
В других же дистрибутивах ядро с этим патчем можно легко собрать. Для этого надо наложить патч на ванильное ядро и при конфигурировании указать опцию Processor type and features –> Preemption Mode (Complete Preemption (Real-Time)). И еще рекомендуется отключить опцию Kernel hacking –> Check for stack overflows, так как она повышает латентность. Чтобы можно было собирать некоторую статистику по времени отклика, при конфигурировании нужно также включить: Kernel hacking –> Tracers –> Kernel Function Tracer, Interrupts-off Latency Tracer, Interrupts-off Latency Histogram, Preemption-off Latency Traver, Preemption-off Latency Histogram, Scheduling Latency Tracer, Scheduling Latency Histogram, Missed timer offsets histogram.
После сборки ядро должно содержать в имени PREEMPT и RT, например:
Чтобы потешить собственное самолюбие, можно включить сбор статистики:
Саму статистику смотрим тут:
$ grep -v " 0$" /sys/kernel/debug/tracing/latency_hist/wakeup/CPU0
Самое интересное там: значения минимального, среднего и максимального времени отклика.
Широко известный в узких кругах анестезиолог-линуксоид Кон Коливас с переменным успехом поддерживает собственную ветку (точнее, набор патчей) Linux. Главным нововведением в его патчсете является новый планировщик BFS (Brain Fuck Scheduler), являющийся альтернативой стандартному CFS и показывающий, по результатам тестов, улучшенную отзывчивость ядра на десктопе (другими словами, при использовании BFS жадные до графических ресурсов приложения получают ощутимый прирост производительности, а раздражающие паузы, возникающие, например, при переключении между ресурсоемкими программами, которые требуют доступ к диску, становятся менее заметными, либо исчезают совсем).
ReiserFS
Но поддержка ядром ФС – это еще не все. Чтобы можно было оперировать с разделами reiser4, надо поставить reiser4progs. Во многих дистрибутивах этот комплект утилит есть в репозитории:
$ sudo apt-get install reiser4progs
Соответственно, основные операции с ФС:
- mkfs.reiser4 – создать раздел с reiser4;
- fsck.reiser4 – проверить раздел с reiser4;
- measurefs.reiser4 – посмотреть параметры раздела с reiser4.
Grsecurity
Патч, содержащий потрясающее количество механизмов для повышения защищенности Linux-системы. Опции компиляции grsecurity расположены в Security options –> Grsecurity. Есть три уровня безопасности на выбор: низкий, средний и высокий. Низкий уровень рекомендован, когда более высокие уровни не подходят из-за использования нестандартного набора ПО. Он содержит:
В среднем уровне защиты дополнительно добавятся технологии:
- дополнительные ограничения для приложений, запускаемых в chroot: запрет монтирования и mknod (создание именованных каналов, специальных символьных и блочных файлов), запрет на двойной chroot, запрет на запись в sysctl и другое;
- ограничение прав на чтение /proc для пользователей, не входящих в заранее заданную группу (по умолчанию wheel);
- ограничение записи в /dev/kmem, /dev/mem и /dev/port;
- рандомизация адресного пространства;
- серьезное логирование подозрительных событий (неудавшихся вызовов fork(), попыток изменения системного времени, сигналов вроде SIGSEGV и подобных);
Высокий уровень еще больше затягивает узлы, так как дополнительно:
- ограничивает права на чтение /proc – теперь пользователи смогут читать из /proc информацию только о своих процессах. Можно также указать GID специальной группы, которая сможет читать любую информацию из /proc.
- накладывает ограничения на работу процессов в chroot-окружении: отключение возможности устанавливать suid-бит, отключение возможности посылать некоторые сигналы внешним процессам, ограничение на выполнение таких системных задач, как изменение системного времени или перезагрузка компа;
- добавляет дополнительное логирование (в том числе всех mount/umount);
- включает рандомизацию стека ядра;
- добавляет ограничение на чтение информации о ядре через системные вызовы для обычных пользователей (для root эта возможность остается).
Необязательно в качестве Security Level выбирать один из имеющихся уровней. Есть вариант Custom, позволяющий отдельно выбрать все необходимые опции. Еще одна интересная опция Grsecurity –> Sysctl support позволит включать/отключать параметры безопасности через sysctl без необходимости пересобирать ядро. Так как эта директива отрицательно влияет на общую безопасность системы, ее рекомендуется использовать лишь в тестовых целях.
Помимо уровней безопасности, при конфигурации можно включить/отключить RBAC (Role Based Access Control) – управление доступом на основе ролей. Управление пользователями и их ролями осуществляется с помощью специальной утилиты gradm2, присутствующей в большинстве дистрибутивов:
$ sudo apt-get install gradm2
Zen-kernel
Zen-kernel – наверное, самая большая пачка заплаток ядра в одном месте. Позиционируется как быстрое ядро для десктопов. Получить zen-kernel можно тремя способами:
- скачать архив с последним релизом (за номером 2.6.34-zen1);
- забрать версию с уже наложенными патчами из git'а;
- скачать патч для нужной версии и наложить самому.
У них есть два репозитория: zen-stable.git (с патчами, наложенными на стабильное ядро) и zen.git (синхронизация с git-хранилищем Линуса и наложение тестовых патчей).
Набор сторонних патчей меняется от релиза к релизу и на данный момент включает в себя:
- патчи от Кона Коливаса (в том числе BFS);
- Reiser4;
- Linux-PHC – проект, позволяющий снижать напряжение CPU для уменьшения энергопотребления и температуры;
- обновленные и добавленные дрова (для Lenovo ThinkPad SL, Gamecube/Wii, Macbook, WiFi-чипов и другого);
- Tuxonice – патч, реализующий продвинутый hibernate («спящий режим» – при выключении содержимое ОЗУ скидывается на винт, при включении – восстанавливается);
- поддержка FatELF – формата бинарников, содержащего в одном файле варианты для нескольких архитектур (аналог Universal Binary в Mac OS X);
- DazukoFS – виртуальная ФС, предоставляющая on access доступ к файлам. Широко используется различными антивирусами.
Универсальная сборка
Итак, ядро и патчи выбраны, можно приступать к сборке. Опишу сборку своего ядра на примере Ubuntu, хотя в других дистрибутивах последовательность действий будет аналогичной. Если нужно просто пересобрать имеющееся ядро (изменив опции конфигурации), то проще скачать исходники ядра с помощью стандартного менеджера пакетов твоего дистрибутива и собирать уже их:
$ sudo apt-get install linux-source
Но мне zen-kernel нравится больше, чем стандартное generic-ядро ubuntu, поэтому его и буду мучить. Поставим все, что может пригодиться для сборки:
$ sudo apt-get install build-essential libncurses5-dev \
libgtk2.0-dev libglade2-dev libqt3-mt-dev git-core
Добавим своего юзера в группу src, чтобы можно было без проблем собирать в /usr/src:
$ sudo usermod -a -G src adept
Клонируем git-репозиторий (приготовься скачать около 500 метров):
Смотрим, какие ветки есть в репозитории:
Выбираем последнюю патченную версию:
$ git checkout v2.6.34-zen1
Сорцы не обязательно вытягивать из git. Если ты ограничен по трафику или скорости инета, то быстрее и дешевле будет скачать патч и официальное ядро. Заплатка накладывается следующим образом:
$ cd /usr/src/linux-2.6.34
$ zcat ../patch-2.6.35.bz2 | patch -p1
Утилита patch также имеет замечательную опцию '--dry-run', позволяющую протестировать, как наложится патч, прежде чем его накладывать.
Далее выбираем способ конфигурирования ядра:
- make config – для тех, у кого уйма свободного времени. Система задаст несколько тысяч вопросов (по одному на каждую опцию конфигурации);
- make allnoconfig/allyesconfig – генерируется конфиг, в котором на все вопросы отвечено no/yes;
- make defconfig – конфиг с настройками по умолчанию;
- make randconfig – самый веселый способ – использует великий рандом для ответа на вопросы;
- make oldconfig – при использовании старого конфига. Задаст вопросы только про те пункты, которых не было в старом конфиге;
- make menuconfig – псевдографический, использующий ncurses, интерфейс;
- make nconfig – одно из нововведений ядра 2.6.35. Тоже псевдографический, использующий ncurses, интерфейс, но выглядит несколько более свежо, чем menuconfig;
- make xconfig – графический интерфейс на базе QT;
- make gconfig – графический интерфейс на базе GTK.
Мне больше привычен интерфейс menuconfig.
Какие-то конкретные советы по конфигурированию ядра давать сложно – все очень сильно зависит от имеющегося окружения и желаемых результатов. Но я всегда придерживаюсь нескольких простых правил:
- Все, что мне точно понадобится (в том числе поддержка ФС, на которой у меня /) и будет нужно часто, я включаю в ядро. Все, что может пригодиться или будет нужно редко – компилирую модулем. Все, что точно не пригодится, соответственно, выкидываем.
- Опции с пометкой EXPERIMENTAL лучше не включать без крайней на то необходимости. Также не рекомендуется включать Device Drivers –> Staging Drivers. Ядро может просто не собраться или работать не стабильно.
- Чтобы не путаться в ядрах, добавляю суффикс версии ядра в General Setup –> Local Version.
Также неплохой отправной точкой может стать конфиг дистрибутивного ядра.
После того, как конфиг готов (и сохранен в файл .config), можно приступать к сборке:
С помощью опции «-j» можно указать количество потоков, что немного ускорит компиляцию на многоядерном процессоре. В зависимости от мощности компа и опций конфигурации, ядро может собираться по часу и даже больше. После компиляции начинается установка:
$ sudo make modules_install
$ sudo make install
На самом деле модули просто скопируются в /lib/modules/, а ядро с конфигом – в /boot.
Создаем initrd для нашего нового ядра:
$ sudo update-initramfs -k v2.6.34-zen1 -c
Обновляем конфигурацию grub, чтобы он нашел новое ядро:
Все, можно идти в ребут, скрестив пальцы и затаив дыхание, загрузиться с новым ядром.
Компиляция. Debian-way
Выше я описал способ, которым можно собрать ядро в любом дистрибутиве. Но практически во всех дистрах есть свой путь, дающий те или иные плюшки, самая большая из которых — получение на выходе пакета с ядром, который можно легко поставить или удалить штатным пакетным менеджером.
В Debian/Ubuntu за сборку ядра отвечает make-kpkg. Для того, чтобы воспользоваться make-kpkg, установим один пакет:
$ sudo apt-get install kernel-package
Генерация конфига происходит точно так же, как и в способе выше, а сборка несколько иначе:
$ fakeroot make-kpkg --initrd --revision=mykernel \
kernel_image kernel_headers modules_image
Эта команда сначала соберет ядро, а потом создаст два пакета: linux-image-version-revision.deb (бинарник и модули ядра) и linux-headers-version-revision.deb (заголовочные файлы ядра), которые будут лежать в /usr/src.
Ставим то, что получилось, и идем на перезагрузку:
$ sudo dpkg -i /usr/src/*.deb
$ sudo reboot
make complete
К сожалению, журнал не резиновый, и рассказать получилось далеко не про все заслуживающие внимания патчи. За бортом остались OpenVZ и Xen, Openwall, а также целый класс патчсетов – дистрибутивные (ведь очень небольшое количество дистрибутивов использует ванильное ядро).
Скажи «нет!» ребуту
И все обновления установлены! Правда, «uname -a» все еще показывает старую версию. Зато
расскажет всю правду об установленных апдейтах.
В дополнение система еще имеет веб-интерфейс, где можно посмотреть статус всех своих подключенных серверов, умеет присылать на email уведомления о выходе новых патчей. И такое rebootless счастье стоит, в принципе, не так уж и дорого – $3,95 в месяц за один физический сервер (если серверов больше 20, то $2,95). Есть триальный доступ на 30 дней. А поддержка десктопной убунты вообще бесплатна.
В общем, сказка, если б не одно «но» – все это работает только со стандартным ядром твоего дистра – никаких тебе патчей и обновлений версий ядра.
Турбо-компиляция
Далеко не всегда получается с первого раза собрать идеально работающее ядро – обязательно забудешь включить какой-нибудь модуль или наложить какой-нибудь патч. А новая сборка, особенно на маломощном компе, может быть раздражающе долгой. В таком случае на помощь придет ccache, умеющий кэшировать результаты компиляции. В результате повторная пересборка проходит значительно быстрее. Для использования ccache при сборке ядра набирай
Весь кэш будет храниться в каталоге
/.ccache, а статистику по его использованию можно посмотреть с помощью команды
iwlwifi — это драйвер для современных беспроводных чипов Intel.
Contents
Чтобы заставить его работать, нужно сделать небольшую настройку ядра. Драйвер поддерживает 802.11a/b/g/n/ac (в зависимости от устройства), поэтому IEEE 802.11 должно быть включено.
IEEE 802.11
Activate at least cfg80211 and mac80211.
ВажноIn case the wireless configuration API ( CONFIG_CFG80211 ) is built into the kernel ( <*> ) instead as a module ( <M> ), the driver won't be able to load regulatory.db from /lib/firmware resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE .
Драйвер устройства iwlwifi
Используйте этот драйвер для современных беспроводных чипов Intel. Установите как модуль, как показано <M> . Также необходим DVM или MVM вариант согласно записи в колонке Module в таблице firmware.
ВажноВ случае если драйвер встроен в ядро ( <*> ), а не собран как модуль ( <M> ), firmware необходимо собрать также непосредственно в ядре. Смотрите раздел если предпочтительней собирать в ядро.
После внесения изменений в конфигурацию ядра не забудьте перекомпилировать ядро.
После перекомпиляции ядра и перезагрузки с использованием нового ядра, выбранные параметры можно проверить следующим образом:
ЗаметкаПоддержка псевдо-файла /proc/config.gz включена с помощью параметра Kernel/IKCONFIG_Support.
Firmware
Необходимые firmware для конкретных устройств перечислены в этой таблице. Они доступны в пакетах sys-kernel/linux-firmware, а также, для конкретного устройства, в пакетах sys-firmware/iwlxxxx-*ucode.
Если предпочтительней собирать в ядро
В случае если драйвер будет компилироваться в ядре ( <*> ), а не как модуль ( <M> ), firmware необходимо также собирать в ядре.
В этом примере замените iwlwifi-xxxx.ucode на подходящее имя firmware. Уделите некоторое внимание для FW_LOADER_USER_HELPER_FALLBACK .
Optional: savedconfig
The savedconfig USE flag could be set for Linux firmware in order to avoid unneeded stuff in /lib/firmware/ .
As for example the Intel® Centrino® Advanced-N 6205 needs iwlwifi-6000g2a-ucode while anything else may be commented out or deleted.
Файл /etc/portage/savedconfig/sys-kernel/linux-firmware Take care that version number is removedIn order to not lose these settings on next firmware update the version number needs to be removed:
Имена сетевых устройств
Чтобы сохранить классическое именование это правило может быть перезаписано пустым файлом с таким же именем в каталоге /etc/udev/rules.d :
Тестирование
После обновления ядра и перезагрузки или после загрузки модулей, устройства можно проверить на доступность с помощью следующих методов:
- используя файловую систему /sys
- используя команду ip
- используя команду ifconfig
- используя команду iw
Файловая система /sys
Узнать имя устройства можно с помощью просмотра каталога /sys/class/net используя ls -al или команду tree (из пакета app-text/tree):
Команда ip
Чтобы убедится, что беспроводная карта обнаружена, а также чтобы узнать имя карты, выполните следующую команду ip :
Команда ifconfig
Команда ifconfig предоставляется пакетом sys-apps/net-tools. Используйте ifconfig -a , чтобы вывести список всех обнаруженных сетевых карт, даже если они не включены/активированы:
Сетевая карта может быть активирована так:
В этом примере включить беспроводную карту не удалось, поскольку был установлен radio frequency kill state (RF-kill). Как правило, он устанавливается в целях энергосбережения и избежания случайного соединения с беспроводными сетями.
Команда iw
Если драйвер беспроводной сетевой карты поддерживает стэк nl80211, команда iw , которая есть в паете net-wireless/iw, может отобразить обнаруженную беспроводную сетевую карту:
modprobe и modinfo
modprobe не должен возвращать что-либо:
Большую часть информации о драйвере можно получить с помощью modinfo iwlwifi :
lspci
lspci должен показать iwlwifi в Kernel driver in use: и Kernel modules: .
Идентификатор xx:xx.x будет весьма полезен при поиске специфичной информации для этого устройства в выводе dmesg.
dmesg
Проверьте вывод dmesg. Замените 03:00.0 на идентификатор из lspci, а wlp на имя сетевого устройства.
Устранение проблем
Ядро не загружается
Проверьте, что загружено правильное ядро. Это можно сделать (зависит от параметра IKCONFIG) так:
Читайте также: