LINUX.ORG.RU
ФорумMobile

Редактирование ядра Андроид: лучший способ

 ,


1

1

Всем привет! Нужно отредактировать ядро Андроид 3.10. Файл boot.img. есть. Magiskboot позволяет отредактировать ramdisk прямо в телефоне, но нигде не упоминается о том, что этим инструментом можно повлиять на kernel config.

В статье https://sukachoff.ru/ustrojjstva/pereproshivka-yadra-android-ustroistva-izuchaem-android-yadro-kernel--/

говорится о возможности редактирования ядра Clang:

ядро можно собирать компилятором Clang благодаря подготовленным проектом LLVMLinux патчам.

Подскажите, пожалуйста, оптимальный (и самый простой способ ) отредактировать kernel config, и ссылку на внятную для новичка статью на эту тему.

Спасибо!

Перемещено hobbit из general



Последнее исправление: hobbit (всего исправлений: 1)

нигде не упоминается о том, что этим инструментом можно повлиять на kernel config

Потому что это невозможно. Конфигурация ядра задается во время его компиляции.

Подскажите, пожалуйста, оптимальный (и самый простой способ ) отредактировать kernel config

Пересобрать его из исходников. Для начала тебе стоит запросить у производителя твоего телефона исходный код ядра, в соответствии с лицензией GPLv2.

a1ba ★★
()
Последнее исправление: a1ba (всего исправлений: 1)

Жесть какая... Не ходите дети в Африку гулять...

Как уже сказали, нужны исходники ядра. Но не просто ванильные (с 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
()
Последнее исправление: bugs-bunny (всего исправлений: 2)
Ответ на: комментарий от bugs-bunny

Спасибо за подробный ответ! Интерес не праздный. Ядро нужно для работы, с другим набором модулей.

А если исходники взять не ванильные, а, например, ElementalX, вот отсюда?

https://github.com/flar2/ElementalX-N5

AnonimKA
() автор топика
Ответ на: комментарий от bugs-bunny

Вот, например, по этой статье реально сделать? boot.img из этого ядра выложен в интернете. Он вроде нормально прошился через TWRP, логотип ядра ElementalX появился в процессе перепрошивки, телефон работает нормально. Но мне другой набор модулей нужен. В статье рабочий способ написан?

AnonimKA
() автор топика
Ответ на: комментарий от AnonimKA

В статье рабочий способ написан?

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

t184256 ★★★★★
()

а давай попробуем зайти с другой стороны - какая у тебя вообще настоящая/конечная цель?

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

d00fy ★★★
()
Ответ на: комментарий от d00fy

Если можно было удалить модули (или хотя бы сделать так, чтобы они не загружались), то ядро можно будет оставить старое. Но в интернете везде говориться о том, что встроенные модули можно выкинуть только пересобрав ядро. Через proc запрещать бесполезно (проверено). И, если уж под мой старый мобильник есть в инете Android 12 и 13, то можно, наверное, и ядро 5 версии собрать?

AnonimKA
() автор топика
Ответ на: комментарий от AnonimKA

а если не через /proc попробовать?

я не спец по андроиду, но может быть там сработает вариант, используемый на обычном десктопном линухе, - запрет через /bin/true ? (погугли сам, что это такое)

d00fy ★★★
()
Ответ на: комментарий от AnonimKA

И, если уж под мой старый мобильник есть в инете Android 12 и 13,

Это значит что кто либо уже собрал ядро на 4.19, готовым ядром более опытных людей для конкретной версии андроид и воспользуйся

One ★★★★★
()
Ответ на: комментарий от bugs-bunny

Если только ядро не было собрано с такой опцией, хранить в себе и показывать в /proc/config кажется, что очень маловероятно.

AFAIK почти никто не включает, что жаль.

Dimez ★★★★★
()
Ответ на: комментарий от AnonimKA

Очень много кастомных прошивок делают без поднимания ядра.

Ибо очень много драйверов прибиты гвоздями к определённой версии ядра и на другой не заведутся (kernel ABI)

Dimez ★★★★★
()
Ответ на: комментарий от burato

Кто поймёт, тот поймёт. :)

Мне кстати от первой мобилы на андроиде вместе с кернелом прислали весь HAL, RIL и прочие ништяки. Вендор не разобрался что он должен прислать, а что нет.

Жаль, я тогда не был достаточно опытен, чтобы понять что с этими исходниками можно сделать. :)

a1ba ★★
()
Ответ на: комментарий от a1ba

При сборке ядра с make все время выходят ошибки. Собираю ядро 3.10. Путь сборки такой:

  1. Загружаю zip ядра отсюда: https://github.com/flar2/ElementalX-N5

в папку проекта, допустим $project. Распаковываю.

  1. В ту же папку заружаю Cross Compiler от Google

$ mkdir bin $ cd bin $ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 $ cd aarch64-linux-android-4.9 $ git checkout android-7.1.2_r1

  1. файловая структура:

папка project папка Elemental (ядро) папка bin/aarch64-linux-android-4.9

  1. Дальше делаю (В папке с компилятором - aarch64-linux-android-4.9)

$ export SUBARCH=arm64 $ export ARCH=arm64 $ export CROSS_COMPILE=~/bin/aarch64-linux-android-4.9/bin/aarch64-linux-android-

Источник: https://hackmd.io/@LDKalL4lSCyvrSURi2u1YQ/HyBtpSk8B

После этого make menuconfig. Не работает.

4.1 Пробую

$ export ARCH=arm (в папке с ядром! - Elemental),

потом там же make menuconfig, то окно программы выходит без проблем.

Источник: https://www.protechtraining.com/blog/post/building-the-android-kernel-95

Вопрос: как мне просто собрать ядро из исходников с существующей конфигурацией (ничего не меняя) в make menuconfig? Мне нужено понять, что способ рабочий.

Пока же выходит, что файл .config есть, но при попытке сборки через make выходят одни ошибки.

Где я ошибаюсь?

AnonimKA
() автор топика
Ответ на: комментарий от AnonimKA

Загружаю ядро для SM -A510F. отсюда https://opensource.samsung.com/uploadList?menuItem=mobile

Инструменты для компиляции загружаются в папку с ядром отсюда wget https://releases.linaro.org/components/toolchain/binaries/latest-4/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz

В build_kernel.sh прописывается

#!/bin/bash

export ARCH=arm64 export CROSS_COMPILE=/source/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- export ANDROID_MAJOR_VERSION=q

make exynos7580-a5xelte_defconfig make -j$(nproc –all)

Делаю по этой статье

https://thingsandcode.com/blog/how-to-compile-the-android-kernel-for-samsung-a8/

Ядро для А8 получается (когда повторяешь за статьёй), когда подставляешь своё ядро с настройками (см. build_kernel.sh) идут одни ошибки.

Подскажите, пожалуйста, в чем дело? Почти месяц мучаюсь уже!

AnonimKA
() автор топика