Highlighter

вторник, 7 февраля 2012 г.

Редактирование прошивки android под linux

Писал для 4pda.ru для телефона Samsung GT-I9001 Galaxy S Plus, может, кому будет полезно.

Данное руководство предполагает, что читающий обладает базовыми навыками использования linux (использование консоли, получение прав рута, установка программ, создание/редактирование системных файлов)

Зависимости и UDEV

Сначала нужно установить sun-jdk. Стоит отметить, что оракл недавно менял лицензию, поэтому в основном репозитории его может не быть. Для ubuntu достаточно установить sun-java6-jdk, но, если планирутся пересобирать ядро, то нужно будет установить дополнительные зависимости.

Для 32/64 битной ubuntu нужно выполнить следующее:
sudo -s
apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

Дополнительно, если у вас 64 бита, нужно установить 32х битные библиотеки
ia32-libs lib32z1-dev lib32ncurses5-dev gcc-multilib g++-multilib

Теперь, чтобы у обычных пользователей были права на использование adb, нужно создать соответствующее правило udev
echo 'SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"' > /etc/udev/rules.d/90-adb.rules

После этого жмём Ctrl+D, чтобы выйти из рутовской сессии.

Создаём своё ядро

Качаем гугловский sdk. Для этого идём на http://developer.android.com/sdk/index.html и качаем версию под linux http://dl.google.com/android/android-sdk_r16-linux.tgz
После этого распаковываем файл
tar xzf android-sdk*

Идём в папку android-sdk-linux/tools и запускаем файл android
./android

И устанавливаем Android SDK Platform tools
После этого появится папка android-sdk-linux/platform-tools, где и находится adb. Для удобства, есть смысл добавить эту папку в PATH, чтобы иметь быстрый доступ к adb (замените путь на свой).
echo 'PATH="/home/shtsh/phone/android-sdk-linux/platform-tools:${PATH}"' >> ~/.bashrc

Теперь можно подключать телефон в режиме отладки USB (Настройки - приложения - разработка - включить отладку USB) к компьютеру.
По команде adb devices должен показаться ваш телефон.

Теперь возьмём с телефона текущий конфиг ядра.
adb pull /proc/config.gz

Теперь распаковываем его при помощи gunzip и переименовываем в .config (стоит обратить внимание, что файл, начинающийся с точки - скрытый)

Идём на http://opensource.samsung.com и качаем исходники ядра, либо пользуемся git для получения. После этого распаковываем скачанный архив и копируем туда наш файл .config.

Теперь нам нужен тулчейн для сборки под arm. Для ubuntu можно скачать отсюда, затем распаковать.
В gentoo можно воспользоваться командой crossdev --target arm-none-linux-gnueabi.

Открываем Makefile и ищем там переменную CROSS_COMPILE и заменяем значение на тот путь, где находится наш распакованный (или установленный тулчейн). У меня этот путь
CROSS_COMPILE   ?= /usr/bin/arm-none-linux-gnueabi-

Теперь обычным make -jX, где X - число процессоров(ядер)+1 собираем ядро. Если собралось, то Вы — молодец. Можно накладывать патчи и что-то менять в ядре.
После сборки ядро находится Kernel/arch/arm/boot/zImage.

Модификация прошивки.

Сначала при помощи CWM нужно сделать бэкап прошивки.

После этого идём на https://github.com/dsixda/Android-Kitchen/archives/master и качаем кухню. Samsung GT-I9001 поддерживается с версии 0.182.
Качаем, распаковываем.
Копируем файлы, полученные при бэкапе из CWM в папку original_update.
Запускаем кухню
./menu

Выбор осуществляется вводом цифр/букв, которые написаны в начале строки.

Устанавливаем рабочий каталог, добавляем busybox. Затем жмём 0 и заходим в advanced options — тут можно сделать деодекс прошивки. Это нужно для того, чтобы можно было изменять файлы прошивки. Также стоит включить поддержку /etc/init.d.

После всего этого можно заняться кастомизацией интерфейса. Это делается очень просто - идём на http://uot.dakra.lt/kitchen/, выбираем, что нам нужно сделать и через некоторое время получаем готовую прошивку. Единственное, на что стоит обратить внимание — в пункте File Upload нужно выбрать:
update-binary — Type Galaxy
Upload system files — заливаем framework-res.apk, SystemUI.apk, twframework-res.apk.

После этого жмём submit и ждём, когда модификации будут готовы.
На выходе мы получаем zip-файл, который можно прошить через CWM. Но можно вынуть файлы из архива и скопировать их в нашу распакованную прошивку. Она находится в папке WORKING_число_число.

Установка нового ядра

Выбираем 20 - Tools for boot image (unpack/re-pack/etc.), затем распаковываем boot.img. У нас появится папка BOOT-EXTRACTED, где находится ядро и распакованный рамдиск, где можно подредактировать загрузочные скрипты и параметры. Делаем Build boot.img from BOOT-EXTRACTED folder (for working folder) и после этого можно собирать прошивку.

В результате у нас готов подписанный архив, который можно ставить из recovery.

Примечание 1. У меня нету под руками ubuntu, поэтому с именами пакетов мог ошибиться. Все остальные действия не сильно зависят от используемого linux.

Комментариев нет:

Отправить комментарий