Редактирование ядра Андроид: лучший способ
Всем привет! Нужно отредактировать ядро Андроид 3.10. Файл boot.img. есть. Magiskboot позволяет отредактировать ramdisk прямо в телефоне, но нигде не упоминается о том, что этим инструментом можно повлиять на kernel config.
говорится о возможности редактирования ядра Clang:
ядро можно собирать компилятором Clang благодаря подготовленным проектом LLVMLinux патчам.
Подскажите, пожалуйста, оптимальный (и самый простой способ ) отредактировать kernel config, и ссылку на внятную для новичка статью на эту тему.
Перемещено hobbit из general
AnonimKA
07.06.23 03:25:28 MSK
- Ответить на это сообщение
- Ссылка

нигде не упоминается о том, что этим инструментом можно повлиять на kernel config
Потому что это невозможно. Конфигурация ядра задается во время его компиляции.
Подскажите, пожалуйста, оптимальный (и самый простой способ ) отредактировать kernel config
Пересобрать его из исходников. Для начала тебе стоит запросить у производителя твоего телефона исходный код ядра, в соответствии с лицензией GPLv2.
a1ba ★
( 07.06.23 04:12:15 MSK )
Последнее исправление: a1ba 07.06.23 04:12:26 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от a1ba 07.06.23 04:12:15 MSK
Это исходный код ядра, boot.IMG которого (найден тоже в интернете) прошивается через twrp. Вопрос: как инструментом его лучше собирать?
AnonimKA
( 07.06.23 13:30:39 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AnonimKA 07.06.23 13:30:39 MSK
Вот эта инструкция будет работать (OS Android 12), проживать хочу на Linux Debian?
AnonimKA
( 07.06.23 13:33:18 MSK ) автор топика
- Ответить на это сообщение
- Ссылка

Жесть какая. Не ходите дети в Африку гулять.
Как уже сказали, нужны исходники ядра. Но не просто ванильные (с kernel.org), а от производителя. Тут если очень повезет, то найдутся у производителя железки на его сайте. Либо BSP какое подойдет для плат на этом SoC (system on chip) — часто производители железок берут схему из оценочной борды почти без изменений. Там будет и какой-то конфиг под эту борду/семейство, но не факт, что все заработает с этим конфигом. Производитель телефона может поставить другую камеру, аудио и т.д. + Под конкретную embedded-железку (в отличие от PC) нужен файл описания устройств DTS. + Патчи ядра от производителя телефона. Даже со всем этим 90% что сразу не взлетит, а окирпичить девайс легко. Опять же с u-boot не все гладко может пойти.
Старый конфиг из текущего ядра вынуть практически невозможно. Если только ядро не было собрано с такой опцией, хранить в себе и показывать в /proc/config кажется, что очень маловероятно.
Какой нафиг CLang?! make, gcc кросс-средства для ARM, куча утилит. Долго объяснять.
Потренировались бы для начала собрать ядро для ПК своего на x86, потренировались бы на каких OrangePi, чтоб вкурить что к чему.
И, судя по версии ядра 3.1 в телефоне что-то типа Android 2.3 или из тех же времен (2012-й?). Вы чего добиться хотите обновлением ядра? Андроид от этого свежее не станет, а новый собрать из AOSP это еще тоже задача отдельная, опять же со всякими патчами от производителя телефона, которых 100% в 2023-м не найти.
bugs-bunny ★
( 07.06.23 21:00:16 MSK )
Последнее исправление: bugs-bunny 07.06.23 21:19:25 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Показать ответы
- Ссылка
Компиляция ядра Android
Друзья, начинаю серию статей с подробными объяснениями того, как сделать свое ядро для собственного телефона.
Тема этой статьи — компиляция ядра, собственно того что отвечает за работу всей аппаратуры телефона и коммуникации. Текст будет редактироваться, дополняться — пишите, поправляйте, пробуйте!
Подготовка
Для компиляции ядер я использую или Linux (UBUNTU) или Windows Bash UBUNTU под Windows 10.
Как настроить все программы я напишу позже (т.к. требует и моей подготовки), сейчас перейду к главному
Компиляция
Компиляция ядер происходит в 2 этапа + сборка DTB + сборка ядра для прошивки:
- Компиляция конфигурации будущего ядра
- Компиляция самого ядра + возможно библиотеки уровня ядра (для MTK я этого не видел, только для MSM и другого процессора)
- Дополнительно собирается DTB файл конфигурации устройств, если настройка конфигурации ядра этого требует
- Дополнительно необходимо собрать boot.img
Первое что делается, задаются глобальные переменные параметров процессора (ARM или ARM64) и пути к компилятору (набор программам которые преобразуют текст исходного кода в двоичный файл), все это делается командами:
export ARCH=arm
export CROSS_COMPILE=prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
export TARGET=out
export означает то, что переменная будет доступна для всех запущенных программ и будет храниться в глобальном списке переменных (окружения bash).
ARCH— тип архитектуры процессора под который будет компилироваться ядро
CROSS_COMPILE — указывает путь, где компилятор будет искать программы компиляции и сборки ядра.
TARGET — папка, куда компилятор будет складывать все свои файлы.
Далее компилируем конфигурационный файл, итогом компиляции будет файл $TARGET/.config
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE X5PRO_6735m_defconfig
make — стандартная программа для сборки программ по сценариям
O=$TARGET — папка, куда буду складываться все скомпилированные файлы и конфигурации, ее надо указать потому что многие модули ядра используют ее для своих целей, берется из глобальной переменной установленной в примере выше
ARCH=$ARCH — тип архитектуры процессора, обычно arm или arm64, в примере берется из глобальной переменной установленной выше.
CROSS_COMPILE= — путь к компилятору, мы задали глобальную переменную в примере выше
5PRO_6735m_defconfig — название конфигурационного файла для компиляции ядра вашего телефона, находится по пути arch/$ARCH/configs/ и зависит от типа выбранной конфигурации процессора, мы задали ее в глобальной переменной $ARCH
Далее начинаем компиляцию самого ядра
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -j4
Т.е. такая же команда как и выше но без указания конфигурационного файла.
-j4 — это параметр говорит, сколько процессоров (процессов компиляции) использовать при работе. У меня в компьютере 4 физических процессора, и я использую цифру 4, если у вас в компьютере 8 процессов, то используйте цифру 8! Но чем больше цифра, тем больше используется памяти. Если у вас слабый компьютер, то используйте меньшее число.
По окончании компиляции, у меня он длится около 10 минут, в зависимости от версии ядра и процессора получится несколько файлов — частей будущего файла boot.img или recovery.img и размещаются в папке $TARGET/arch/$ARCH/boot и называются по разному в зависимости от архитектуры и процессора:
- Image.gz — упакованное в архив ядро, при запуске телефона ядро распаковывается в оперативную память и запускается, файл DTB располагается отдельно
- Image — не упакованное ядро, файл DTB располагается отдельно
- Image.gz-dtb — упакованное в архив ядро с встроенным файлом DTB для ARM64
- zImage-dtb — упакованное в архив ядро с встроенным файлом DTB для ARM
Для компиляции файла DTB (DTB — двоичный файл с описанием настроек всего оборудования телефона, DTS — текстовой формат файла DTB) для Qualcomm я дополнительно запускаю команду
dtbToolCM -2 -o $TARGET/arch/$ARCH/boot/dtb -s 2048 -p $TARGET/scripts/dtc/ $TARGET/arch/$ARCH/boot/dts/
Создается готовый для вставки в ядро файл dtb из скомпилированных раздельно файлов DTB находящихся в $TARGET/arch/$ARCH/boot/dts/
Для поиска и копирования всех возможно скомпилированных модулей для Qualcomm я использую команду которая ищет файлы по шаблону и копирует в одну папку.
find «$TARGET/» -name *.ko -exec cp <> «modules/» \;
Примеры
Компиляция ядра под процессор MTK для телефона DOOGEE X5PRO
git clone https://github.com/SnowCat6/DOOGEE-kernel-3.18.git
cd DOOGEE-kernel-3.18
export ARCH=arm
export CROSS_COMPILE=prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
export TARGET=out
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE X5PRO_6735m_defconfig
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -j4
Иходник ядра для DOOGEE X5PRO найдете здесь.
Лучше забирать через команду git clone https://github.com/SnowCat6/DOOGEE-kernel-3.18.git тогда вы сможете всегда обновлять до самой свежей версии командой git pull
Компиляция ядра под процессор Qualcomm для телефона Archos 50 Diamond
git clone https://github.com/SnowCat6/android_kernel_cyanogen_msm8916.git
cd android_kernel_cyanogen_msm8916
export ARCH=arm64
export CROSS_COMPILE=prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
export TARGET=out
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE lineageos_D50_defconfig
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -j4
dtbToolCM -2 -o $TARGET/arch/$ARCH/boot/dtb -s 2048 -p $TARGET/scripts/dtc/ $TARGET/arch/$ARCH/boot/dts
Автор искренне выражает благодарность всем кто словом и материально поддерживает мои проекты.
К сожалению реально помогающих очень мало и каждый хочет схалявничать и получить все задаром.
(c) Все авторские материалы должны быть скопированы на другие ресурсы с указанием ссылки на этот сайт.
Не разрешается размещать прямые ссылки на файлы на других сайтах — указывайте ссылки на страницы этого сайта.
Прошу вас содействовать в наведении порядка!
Основной спонсор проекта моя микрокомпания — «Виртуальный Проект». Если нужен сайт — я сделаю!
Как собрать KernelSU?
Прежде всего, необходимо ознакомиться с официальной документацией Android по сборке ядра:
Эта страница предназначена для устройств GKI, если вы используете старое ядро, пожалуйста, обратитесь к Как интегрировать KernelSU для не GKI ядер?.
Сборка ядра
Синхронизация исходного кода ядра
repo init -u https://android.googlesource.com/kernel/manifest mv kernel_manifest.xml> .repo/manifests repo init -m manifest.xml repo sync
Файл — это файл манифеста, который может однозначно определять сборку, с его помощью можно выполнить пересборку. Файл манифеста следует загрузить с сайта Сборки релизов Google GKI
Построение
Пожалуйста, сначала ознакомьтесь с официальной документацией.
Например, нам необходимо собрать образ ядра aarch64:
LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
Не забудьте добавить флаг LTO=thin , иначе сборка может завершиться неудачей, если память вашего компьютера меньше 24 Гб.
Начиная с Android 13, сборка ядра осуществляется с помощью bazel :
tools/bazel build --config=fast //common:kernel_aarch64_dist
Сборка ядра с помощью KernelSU
Если вы успешно собрали ядро, то собрать KernelSU очень просто, выберите любой запуск в корневом каталоге исходного кода ядра:
- Последний тэг(стабильный)
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
- Основная ветвь(разработка)
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main
- Выбранный тэг(Например, версия v0.5.2)
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2
А затем пересоберите ядро и получите образ ядра с KernelSU!
Сборка ядра для Android-устройств на примере Solid Kernel для LG e975
Установим необходимые пакеты. Набирем в терминале:
sudo su
Нажимаем Enter и пишем далее:
apt-get install bison build-essential curl flex lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev git-core make phablet-tools gperf
Система готова.
Качаем исходники
Идем на GitHub и скачиваем исходники (исходники для каждого девайса разные, поэтому ссылок давать не буду) архивом (в правой части экрана должна находиться кнопочка «Download ZIP»). Распаковываем архив в любое удобное место (у меня это папка /home/system-exe/Solid).
Качаем тулчейн. Переходим по ссылке, отмечаем галочкой нужный тулчейн (для меня это cortex-a15, зависит от ядер процессора) и нажимаем «скачать». Распаковываем скачанный архив в папку /home/%USERNAME%/Toolchain/Linaro-4.9.3 (вместо %USERNAME% подставляем имя учетки).
Выдираем файл конфигурации из девайса
Идем по пути /proc (на телефоне) и копируем файл config.gz на комп, распаковываем и получаем файл config, которые переименовываем по шаблону %устройство%_defconfig (у меня это e975_defconfig). Кладем получившийся файл по пути /home/%USERNAME%/Solid/arch/arm/configs
С подготовкой окончили.
Сборка ядра
Заходим в терминал и набираем команду:
cd Solid
(таким образом мы перешли в папку с нашими исходниками)
make %устройство%_defconfig
(у меня надо так: make e975_defconfig)
После завершения пишем:
make menuconfig
(здесь правим нужные значения конфигурации. Тут все предельно просто, думаю разберетесь.)
После завершения начинаем сборку:
make -j8
Параметр -j8 нужен только если у вас многоядерный процессор. Цифра 8 определяет количество ядер(потоков, в случае с Intel i3, i5, i7 процессорами). К примеру у меня — Intel i7, он четырехядерный, но поддерживает два потока на каждое ядро, поэтому 2 * 4 = 8.
В конце должна появиться надпись «zImage is ready».
Идем по пути /home/%USERNAME%/Solid/arch/arm/boot и видим там наше ядро — zImage.
Тестирование
Теперь нам осталось заставить работать этот самый zImage на нашем устройстве.
А вот теперь трижды подумайте надо ли вам это? Уверены ли вы в своих силах и в том, что правильно собрали ядро?
Подумали? Уверены? Точно уверены? Тогда продолжаем.
Извлекаем boot.img из нашего девайса. Набираем в терминале на телефоне:
su dd if=dev/block/platform/. /by-name/boot of=sdcard/boot.img
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).
Переносим boot.img, который лежит на карте памяти, на комп. Распаковываем его (в интернете есть множество описаний распаковки и запаковки boot.img), меняем оригинальный zImage на наш и собираем boot.img.
Закидываем наш собранный образ на карту памяти под именем new_boot.img
В терминале набираем:
su dd if=sdcard/new_boot.img of=dev/block/platform/. /by-name/boot
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).
Перезагружаем девайс. Если телефон загрузился, то все сделано правильно, если — нет, то читаем инструкцию внимательней и пробуем снова.
Для отката в случае неудачи используем наш оригинальный boot.img, который надо было оставить на карте памяти. Для отката в терминале набираем:
su dd if=sdcard/boot.img of=dev/block/platform/. /by-name/boot
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).
Эпилог
Как видно, ничего сложного в таком процессе, как сборка ядра системы для Android, нету. Не исключено, что может получиться даже с первого раза, но бэкап на всякий случай иметь нужно.