Как собрать дерево устройства
Чтобы понять, как используется дерево устройств, мы начнем с простой машины и построим дерево устройств, чтобы описать его шаг за шагом.
Рассмотрим следующую воображаемую машину (основанную на ARM Versatile), производимую Acme и получившую название «Coyote’s Revenge»:
2.2. Исходная структура
Первым делом нужно создать каркас машины. Это минимальная структура, необходимая для действительного дерева устройств. На этом этапе вы хотите однозначно идентифицировать машину.
Свойство compatible указывает имя системы. Оно содержит строку в формате производитель, модель. Важно указать точное устройство и включить имя производителя, чтобы избежать конфликтов пространства имен. Поскольку операционная система будет использовать значение compatible для принятия решений о том, как запускаться на машине, очень важно указать правильные данные в этом свойстве.
Теоретически совместимыми являются все данные, необходимые ОС для однозначной идентификации машины. Если все детали машины жестко запрограммированы, тогда ОС может искать именно «acme, coyotes-revenge» в свойстве compatible верхнего уровня.
Следующий шаг — описать каждый из процессоров. Узел контейнера с именем cpus добавляется с дочерним узлом для каждого процессора. В данном случае это двухъядерная система Cortex A9 от ARM.
Cвойство compatible в каждом узле процессора — это строка, которая указывает точную модель процессора в формате , , точно так же, как свойство совместимости на верхнем уровне.
Позже к узлам процессора будут добавлены дополнительные свойства, но сначала нам нужно поговорить о некоторых основных концепциях.
Соглашения об именах.
У каждого узла должно быть имя в формате [].
Имя представляет собой простую строку ascii длиной до 31 символа.
Как правило, узлы именуются в зависимости от того, какое устройство они представляют. т.е. узел для адаптера Ethernet 3com будет использовать это имя ethernet, а не 3com509.
Адрес устройства включается, если узел описывает устройство с адресом. Как правило, адрес устройства является основным адресом, используемым для доступа к устройству, и указан в свойстве reg узла. (Свойство reg будет рассмотрено позже).
Узлы-братья должны иметь уникальное имя, но это нормально, когда несколько узлов используют одно и то же общее имя, если адрес отличается (например, serial@101f1000 и serial@101f2000). (См. Раздел 2.2.1 спецификации ePAPR для получения полной информации об именах узлов).
Каждое устройство в системе представлено узлом дерева устройств. Следующим шагом является заполнение дерева узлом для каждого из устройств. На данный момент новые узлы останутся пустыми, пока мы не сможем поговорить о том, как обрабатываются диапазоны адресов и IRQ.
В это дерево добавлен узел для каждого устройства в системе, а иерархия отражает способ подключения устройств к системе. т.е. устройства на внешней шине являются дочерними по отношению к внешнему шинному узлу, а устройства i2c являются дочерними по отношению к узлу контроллера шины i2c. В общем, иерархия представляет собой взгляд на систему с точки зрения ЦП.
Это дерево на данный момент недействительно. Отсутствует информация о соединениях между устройствами. Эти данные будут добавлены позже.
См. Раздел 2.2.2 спецификации ePAPR для получения списка определенных общих имен узлов, которые следует использовать везде, где это возможно.
2.6. Особенности свойства compatible
Каждый узел в дереве, представляющий устройство, должен иметь свойство compatible. Это ключ, который операционная система использует для решения, какой драйвер устройства привязать к устройству.
Cвойство compatible — это список строк. Первая строка в списке формата производитель, модель указывает точно устройство, которое представляет этот узел. Остальные строки представляют другие устройства, с которыми устройство совместимо.
Например, система на кристалле Freescale MPC8349 (SoC) имеет последовательное устройство, реализующее регистровый интерфейс National Semiconductor ns16550. Поэтому свойство для последовательного устройства MPC8349 должно быть: compatible = «fsl,mpc8349-uart», «ns16550».
В этом случае fsl,mpc8349-uart указывает точное устройство и ns16550 указывает, что оно на уровне регистров совместимо с UART National Semiconductor 16550.
Примечание: ns16550 не имеет префикса производителя исключительно по историческим причинам. Все новые совместимые значения должны использовать префикс производителя.
Эта практика позволяет привязать существующие драйверы устройств к новому устройству, при этом однозначно идентифицируя точное оборудование.
Предупреждение. Не используйте символы-джокеры (wildcard) в значениях свойства compatible, например «fsl, mpc83xx-uart» или аналогичные.
Примечание. Подстановочный символ (wildcard) — это символ (*,x,? и др.), который может быть использован в качестве замены для любого символа из одного класса символов
Поставщики микросхем постоянно вносят изменения, которые нарушают ваши предположения о wildcard в тот момент, когда уже слишком поздно его менять. Вместо этого выберите конкретную реализацию микросхемы и сделайте все последующие микросхемы совместимыми с ней.
Источник
Как собрать андроид из исходников
Для сборки 4-й версии Android, CM9, CWM recovery 6.х нужен ПК с 64-битной Ubuntu. (я использовал Ubuntu 12.10). Ограничение вызвано необходимостью установки дополнительных библиотек, которые существуют только для 64-битных систем. Диск не менее 30 Гбайт под систему. (после загрузки исходников и компиляции recovery на моём ПК осталось свободного места около 10 Гбайт).
Желательно иметь в наличии безлимитный интернет. Загрузить придётся более 10 Гбайт. После распаковки места останется ещё меньше.
Запускаем терминал и устанавливаем необходимые библиотеки:
user@HP:$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386 g++-multilib mingw32 openjdk-6-jdk pngcrush schedtool tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Устанавливаем символьную ссылку для устранения конфликта имен:
Пакет под названием «android-tools», в который включены консольные утилиты «adb» и «fastboot», загружен в официальные репозитории Ubuntu 12.10 и доступен в официальных репозиториях Ubuntu 12.10, так что всё, что нужно сделать — это найти его в Центре приложений Ubuntu и кликнуть на кнопку установки. Второй вариант:
Сохраняем и закрываем файл, а затем выполняем следующую команду:
Создаем необходимые директории на ПК:- название не МЕНЯТЬ.
По пути ~/android/system будем сохранять исходники CyanogenMod.
Качаем утилиту repo в свой домашний каталог и делаем её исполняемой:
user@HP:$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
user@HP:$ chmod a+x ~/bin/repo
Для вступления изменений в силу ОБЯЗАТЕЛЬНО перезагружаем ПК.
user@HP:$ cd ~/android/system/
— переходим в ранее созданную папку для исходников
Для CWM6 качаем исходники CyanogenMod для Jelly Bean. Вводим логин и адрес электронной почты в процессе закачки.
Проводим синхронизацию (eсли в процессе закачки соединение оборвалось повторно вводим команду):
Собираем утилиты, которые потребуются для компиляции:
Утилиты собраны. Находятся по пути:
/home/user/android/system/out/host/linux-x86/bin/
Откроем файл ~/.bashrc командой
и в самый-самый конец добавим такие строчки:
После чего перезагружаем терминал.
Загружаем «дерево устройства» для нашего девайса. «Дерево устройства» это набор конфигурационных файлов с настройками для определенного девайса. Его либо необходимо загрузить из стороннего источника либо собрать самому. Самый оптимальный вариант, это GitHub — самый большой веб-сервис для хостинга проектов и их совместной разработки.
Переходим в папку куда будем клонировать «дерево устройства»:
user@HP: $ cd ~/android/system/device $ mkdir huawei
user@HP:~/android/system/device$ cd ~/android/system/device/huawei
Клонируем с GitHub «дерево устройства». (github.com/forumber/android_device_huawei_u8800.git — выложенная в свободный доступ модификация Recоvery) Папка должна называться так же как стандартное имя устройства: u8800.
user@HP:~/android/system/device/huawei$ git clone git://github.com/forumber/android_device_huawei_u8800.git u8800
Вариант если нужно ядро своего телефона файл – kernel при компиляции без «дерева устройства».
(Добавляем новое устройсто (свой телефон) в дерево CynogenMod
boot.img ядро нашего телефона, которое заранее положили в домашний каталог в папку recovery
~/recovery/boot.img — путь к вашему boot.img или recovery.img.
После завершения работы скрипта будет создан каталог huawei/ u8800 в каталоге devices в дереве исходников CyanogenMod user@HP:~/android/system$
В этом каталоге должны появиться сгенерированные файлы AndroidBoard.mk, AndroidProducts.mk, BoardConfig.mk, device_.mk, kernel, system.prop, recovery.fstab, и vendorsetup.sh.
В файле BoardConfig.mk нужно прописать размеры разделов телефона, их можно узнать выполнив на телефоне команду cat /proc/mtd в любом эмуляторе терминала.
Файл kernel это ядро вашего телефона, которое было извлечено из файла boot.img
В файле recovery.fstab записана разметка телефона.)
Подготовка к компиляции:
Источник