Android compile — различия между версиями

Материал из G900
Перейти к: навигация, поиск
(Подготовка к компиляции Андроида)
(Компиляция и закачка файлов на телефон)
Строка 144: Строка 144:
  
 
а нужно нам только папка out/target/product/g900/system
 
а нужно нам только папка out/target/product/g900/system
из нее делаем файл образа system.img  
+
из нее делаем файл образа 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
 
и out/target/product/generic/root

Версия 00:23, 29 октября 2010

[ 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. поправить моунт сервис
6. и еще куча всего

Компиляция и закачка файлов на телефон

Выполняем команду 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 билд