Android compile
[ Toshiba G900 ] | [ TODO ] | [ Характеристики ] | [ Компиляция ядра ] | [ Компиляция Андройда ]
Содержание
Предисловие.
Ниже приведен вариант с установкой под Ubuntu 8.10. Также можно с Windows и VMWare
Кратко
выполняем команды:
установка repo:
su (тут спросят пароль пользователя root) curl http://android.git.kernel.org/repo >/bin/repo chmod a+x /bin/repo exit (выходим из под суперюзера)
выкачиваем исходники:
mkdir ~/mydroid cd ~/mydroid repo init -u git://android.git.kernel.org/platform/manifest.git repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo repo sync
Всё, началось скачивание. Процесс это долгий, качать порядка 1.5 Гб, которым потом еще и распаковываться в процессе. Если случился обрыв связи или вдруг вы не компилировали Андроида, то опять заходите в свой рабочий каталог и выполняете команду
repo sync
и процесс продолжится.
Подготовка к компиляции Андроида
Прежде всего учитывайте, что на текущий момент единственный проверенный способ получить последнюю версию Андроида после компиляции – это заново скачать 1.5 Гб. Ибо после компиляции синхронизация с репозиторием не работает.
!!! важно все следующие команды выполняються из директории ~/mydroid
cd ~/mydroid
- докачиваем необходимые пакеты (кто знает как это сделать через repo поправте)
- alsa-lib
cd external git clone git://android.git.kernel.org/platform/external/alsa-lib.git cd alsa-lib git checkout origin/froyo cd ~/mydroid
- alsa-lib
cd hardware git://android.git.kernel.org/platform/hardware/alsa_sound.git cd alsa_sound git checkout origin/froyo cd ~/mydroid
- создаем фалы платформы и правим конфигурационные файлы
mkdir build/target/board/g900
AndroidBoard.mk
nano build/target/board/g900/AndroidBoard.mk
приводим к виду
LOCAL_PATH := $(call my-dir) file := $(TARGET_OUT_KEYLAYOUT)/querty.kl ALL_PREBUILT += $(file) $(file) : $(LOCAL_PATH)/querty.kl | $(ACP) $(transform-prebuilt-to-target) include $(CLEAR_VARS) LOCAL_SRC_FILES := querty.kcm include $(BUILD_KEY_CHAR_MAP)
Скопируем 2 файла раскладки клавы
cp build/target/board/generic/tuttle2.kl build/target/board/g900/querty.kl cp build/target/board/generic/tuttle2.kcm build/target/board/g900/querty.kcm
!! но по идее их надо переписать под наш девайс
BoardConfig.mk
nano build/target/board/g900/BoardConfig.mk
приводим к виду
# config.mk # # Product-specific compile-time definitions. # TARGET_NO_BOOTLOADER := true TARGET_NO_KERNEL := true TARGET_CPU_ABI := armeabi #HAVE_HTC_AUDIO_DRIVER := true #BOARD_USES_GENERIC_AUDIO := true BOARD_USES_ALSA_AUDIO := true BUILD_WITH_ALSA_UTILS := true BOARD_WPA_SUPPLICANT_DRIVER := WEXT BOARD_USE_G900_LIBLIGHTS := true BOARD_USE_G900_LIBSENSORS := false TARGET_ARCH_VARIANT := armv5te-vfp #fake camera USE_CAMERA_STUB := true
system.prop
nano build/target/board/g900/system.prop
приводим к виду
rild.libpath=/system/lib/g900-ril.so rild.libargs=-d /dev/ttyS0
AndroidProducts.mk
nano build/target/product/AndroidProducts.mk
ДОБАВЛЯЕМ
$(LOCAL_DIR)/g900.mk \
g900.mk
nano build/target/product/g900.mk
и приводим к виду
# Superclass $(call inherit-product, build/target/product/generic.mk) # Overrides PRODUCT_NAME := g900 PRODUCT_DEVICE := g900 PRODUCT_MANUFACTURER := g900
ну и под конец создаем buildspec.mk в корне проекта (в нашем слечае папка ~/mydroid)
nano buildspec.mk
вписываем
TARGET_PRODUCT:= g900
Адаптация исходников
тут самый интересный момент, необходимо исправить (не все решения еще найдены или доведены до ума(помечены *))
1*. добавить hardware/config_files Файл:G900 config files.rar
2*. добавить и доработать hardware/ril-msm6280 Файл:Ril-msm6280.rar
3. доработать hardware/alsa_sound
4. доработать блютуз
5. поправить моунт сервис
файл frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
socket.connect(address); - mCallbacks.onDaemonConnected(); InputStream inputStream = socket.getInputStream(); mOutputStream = socket.getOutputStream(); + mCallbacks.onDaemonConnected(); byte[] buffer = new byte[BUFFER_SIZE]; int start = 0;
6*. правим wifi hardware/libhardware_legacy/wifi/wifi.c
приводим к виду
#ifndef WIFI_DRIVER_MODULE_PATH #define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/libertas_spi.ko" #endif #ifndef WIFI_DRIVER_MODULE_NAME #define WIFI_DRIVER_MODULE_NAME "libertas_spi" #endif #ifndef WIFI_DRIVER_MODULE_ARG #define WIFI_DRIVER_MODULE_ARG "" #endif #ifndef WIFI_FIRMWARE_LOADER #define WIFI_FIRMWARE_LOADER "" #endif #define WIFI_TEST_INTERFACE "wlan0"
7. и еще куча всего
Компиляция и закачка файлов на телефон
Выполняем команду make в директории и идем отдыхать часок-другой
cd ~/mydroid make
В итоге, если всё правильно, в конце будут указаны img-файлы, которые создались при компиляции – recovery.img, boot.img, system.img, userdata.img. НО ОНИ НАМ НЕ НУЖНЫ.
а нужно нам только папка out/target/product/g900/system из нее делаем файл образа system.img
dd if=/dev/zero of=system.img bs=1024k count=128 mkfs.ext2 system.img (тут отвечаем "y" )
теперь у нас есть пустой отфарматированый system.img размером 128мегабайт копируем его в data.img (просто потом нам понадобиться пустой дата образ)
теперь смонтируем и скопируем mkdir sysdir mount system.img sysdir -o loop cp -r out/target/product/g900/system/* sysdir/
в него добавляем кернел модули (точнее это только 1 модель на данный момент )
mkdir sysdir/lib/modules cp ~/libertas_spi.ko sysdir/lib/modules/libertas_spi.ko
зададим рава на все 777 чтобы исключить глюки и потом обязательно размонтируем
chmod 777 sysdir/ -R umount system.img
и out/target/product/generic/root
которая будет ramfs
но для запуска необходимо поправить конфигурационные файлы
init.rc и default.prop
также необходимо init переименовать в init_1 и добавить стартовый скрипт init, но и его придеться поправить если это не donut билд