IT News: Digital Camera, OS, Laptop, Smartphone, Smart TV, Sound...

The Author's Project by Valeri N.Kravchuk
Сайт проверен Dr.Web
Меню сайта
  • Главная страница
  • Информация о сайте
  • Дневник
  • Каталог файлов
  • Обратная связь
  • Каталог сайтов
  • FAQ
  • Доска объявлений
  • Форум
  • Фотоальбом
  • Категории раздела
    Автомобильные гаджеты, ремонт... [220]
    Безопасность IT [484]
    Блоки питания, Power Banks, зарядки... [490]
    Видеорегистраторы [220]
    Гаджеты для спорта и здоровья... [190]
    Гаджеты, аксессуары... [625]
    Измерительная техника, инструменты [449]
    Накопители данных [226]
    Нетбуки, Ноутбуки, Ультрабуки [679]
    Мультиварки, блендеры и не только... [158]
    Планшеты [758]
    Радар-детекторы [26]
    Роботы-пылесосы [37]
    Своими руками [356]
    Сети, сетевые технологии, оборудование... [269]
    Смартфоны [4966]
    Фотокамеры, объективы, искусство фотографии.. [543]
    Умный дом [47]
    Электронные книги [96]
    CB, LPD, PMR- связь... [169]
    DECT, IP-телефоны [18]
    Drones, boats, cars... [108]
    electric cars [35]
    GPS-навигаторы, трекеры... [51]
    Linux и не только [4380]
    mini computers и не только... [409]
    News IT, Это интересно, ликбез... [1113]
    Smart TV, UltraHD, приставки, проекторы... [414]
    Smart Watch [263]
    Sound: наушники, плееры, усилители... [616]
    Windows 10... [298]
    Windows 11 [28]
    Погода

  • Метеорадар БРЕСТ
  • Погода в Бресте от www.yr.no

    Яндекс.Погода БРЕСТ

  • Интересные ссылки

    COMPIZOMANIA

    Наш опрос
    Оцените мой сайт
    Всего ответов: 1339
    Статистика
    Анализ веб сайтов

    Яндекс.Метрика

    Рейтинг@Mail.ru Яндекс цитирования

    Russian America Top. Рейтинг ресурсов Русской Америки.

    eXTReMe Tracker

    Правильный CSS!


    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Locations of visitors to this page
    Форма входа
    Главная » 2014 » Апрель » 16 » Собираем свой Android для BeagleBoard
    15:09
    Собираем свой Android для BeagleBoard

    Собираем свой Android для BeagleBoard


    В этой статье, я хочу рассказать о процессе сборки Android, для контроллеров ARM. Надеюсь что для кого то эта статья окажется полезной, не только разработчику но и не искушённому пользователю. В основном конечно, хотелось бы показать как происходит сам процесс сборки, операционной системы для мобильных устройств. В качестве «подопытного кролика» я выбрал BeagleBoard-xM.
    Это одна из отладочных плат, которые, как нельзя лучше подходят для подобных целей. кроме всего прочего она обладает HDMI и S-VIDEO выходами, для того что бы «пощупать» результат. А так же 4-я USB портами, которых вполне хватает для подключения клавиатуры, мышки и т.п. В своих экспериментах, я использовал BeadaFrame купленную на eBay, однако это условие абсолютно не принципиально, так как подойдёт любой «телевизор».

    И так, грузиться наша плата будет с microSD, а для сборки Android нам понадобится Linux машина, например c Ubuntu 13.04-AMD x64, вполне можно использовать виртуальную машину, однако рекомендую убедиться в том что виртуальной машине доступно MMC устройство, т.е. сама microSD карточка, а для начала нам понадобится установить следующие пакеты:

    sudo apt-get install aptitude
    sudo aptitude install ia32-libs
    
    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-glx:i386 libgl1-mesa-dev g++-multilib mingw32 
    openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 curl
    



    Для нашего Android понадобится собрать три основные вещи:

    • само ядро операционной системы, по сути, — это бинарный файл, который будет загружать загрузчик.
    • загрузчик, в нашем случае — это будет u-boot, хотя можно использовать и x-loader.
    • файловая система



    А для работы создадим какую ни будь рабочую директорию, например: /home/ubuntu/Adroid/

    mkdir /home/ubuntu/Android
    cd /home/ubuntu/Android
    


    и сразу добавим эту директорию в пути:

    export PATH=/home/ubuntu/Android:$PATH
    


    Если на Вашей виртуальной машине, не был установлен git, то придётся это сделать:

    sudo apt-get install git
    
    git config --global user.email "you@example.com"
    git config --global user.name "You Name"
    

     

    Инициализация репозитория


    Теперь нам нужно получить исходный код самого Android, из которого, в дальнейшем, мы будем собирать само ядро операционной системы и файловую систему. Для этого внутри рабочей директории /home/ubuntu/Adroid, выполним следующую команду:

    curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > androidrepo
    


    В результате мы получили файл androidrepo, с помощью которого мы и будем работать с репозиторием. Для этого назначим права исполняемого файла для androidrepo.

    chmod a+x androidrepo
    


    Далее, внутри наше рабочей директории, создаём каталог для исходного кода:

    mkdir /home/ubuntu/Android/source
    cd /home/ubuntu/Android/source
    


    и инициируем репозиторий:

    androidrepo init -u git://gitorious.org/rowboat/manifest.git -m rowboat-jb-am37x.xml
    


    После успешной инициации, выполняем синхронизацию с репозиторием

    androidrepo sync
    


    Синхронизация — это достаточно долгий процесс, поскольку содержит ни только исподники ядра, но и файловую систему а так же компилятор с помощью которого и будет собираться и загрузчик, и само ядро.
    По окончанию синхронизации, мы должны увидеть информацию об успешной синхронизации, что то вроде этого:
    Syncing work tree: 100% (261/261), done.
    Теперь, перед сборкой нам нужно настроить путь к компилятору, которым мы будем собирать и ядро и загрузчик. Сам компилятор находится внутри самого репозитория в директории prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin, так что устанавливаем путь к нему в переменной PATH.

    export PATH=/home/ubuntu/Android/source/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
    


    На этом, подготовительную работу, можно считать законченной.
     

    Сборка загрузчика


    Как я уже писал, что в качестве загрузчика, мы будем использовать u-boot. Для сборки нам понадобится сделать клон репозитория u-boot, в нашей рабочей папке:

    git clone git://git.denx.de/u-boot.git u-boot
    


    И собираем наш загрузчик, первую команду distclean, при самой первой сборке, можно пропустить.
    Для сборки u-boot используется компилятор arm-eabi-gcc, путь к которому у нас уже установлен.

    сd u-boot-main
    
    make CROSS_COMPILE=arm-eabi- distclean
    make CROSS_COMPILE=arm-eabi- omap3_beagle_config
    make CROSS_COMPILE=arm-eabi-
    


    Результат сборки загрузчика — это два файла MLO, и u-boot.bin. Оба этих файла находятся в корне директории u-boot. Сразу перенесём их куда ни будь, просто для удобства, например в каталог build.
     

    Сборка ядра


    Теперь мы добрались до сборки самого ядра. Физически это один файл uImage, который по факту представляет ни что иное как — Linux ядро. Однако перед тем как приступать к сборке, необходимо установить Java SE 1.6. И именно версию 1.6, установить которую можно из репозитория:

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java6-installer
    


    или, например как описано в этой статье.
    Далее, для сборки ядра, нам нужно зайти в директорию kernel, внутри Android репозитория. В нашем случае: /home/ubuntu/Adroid/source/kernel, и по примеру сборки загрузчика u-boot, выполнить сборку:

    make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
    make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig
    make ARCH=arm CROSS_COMPILE=arm-eabi- uImage
    


    Надо заметить, что omap3_beagle_android_defconfig взят из каталога kernel/arch/arm/configs, в котором находятся конфигурации ядра. При желании можно изменить, добавить, или подобрать подходящую конфигурацию для конкретного «железа».
    Результат сборки, будет находится в папке kernel/arch/arm/boot, т.е. в нашем случае /home/ubuntu/Adroid/source/kernel/arch/arm/boot, откуда мы берём файл uImage, собственно само ядро, и переносим его в уже удобную, для нас директорию build.
     

    Сборка файловой системы


    Это последний этап сборки нашей операционной системы, для этого нужно перейти в корень репозитория, и собрать её:

    make TARGET_PRODUCT=beagleboard droid
    


    Файловая система собирается достаточно долгое время, да и места на диске требует около 20Gb. После компиляции самой файловой системы, нужно получить архив, в который войдут все необходимые файлы.

    make TARGET_PRODUCT=beagleboard fs_tarball
    


    После окончания сборки архива, мы получаем файл footfs.tar.bz2, который находится в директории out: /home/ubuntu/Adroid/source/out/target/product/beagleboard/rootfs.tar.bz2, и собственно содержит файловую систему Android. Тут находятся все системные файлы, приложения, и утилиты входящие в состав операционной системы.
     

    Конфигурирование системы


    Сам процесс конфигурирования достаточно прост, а для упрощения, воспользуемся Rowboat Tools от Texas Instruments. Нам понадобится файл конфигурации загрузчика boot.scr, который содержит настройки переменных загрузчика.
    Скачиваем и распаковываем непосредственно сам Rowboat Tools:

    cd /home/ubuntu/Android/
    wget https://rowboat.googlecode.com/files/RowboatTools-JB.tar.gz
    tar -xvzf RowboatTools-JB.tar.gz
    


    Для нас, сейчас интересен файл mkbootscr, который находится в каталоге RowboatTools-JB/am37x/mk-bootscr. Если заглянуть внутрь файла, то можно найти подобные строки:

    setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 
    rw rootfstype=ext4 rootwait init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram=8M omapfb.vram=0:8M 
    omapdss.def_disp=dvi omapfb.mode=dvi:1024x768-16'
    


    Это и есть установка переменных загрузчика, т.е. например нам нужно установить разрешение экрана отличным от «по умолчанию», значит мы должны изменить значение dvi:1024x768-16, и выполнить mkbootscr. В результате мы получаем файл boot.scr с нашими новыми настройками. Менять сразу boot.scr не выйдет, потому что он несёт информацию о контрольной сумме, которая, конечно же, должна совпадать с размером самого файла.
     

    Установка и загрузка


    Сама плата, как в принципе и большинство устройств на ARM контроллерах могут загрузиться с NAND памяти, SD/MMC или USB/RS-232. В нашем случае, мы будем загружаться с MMC. Во первых этот безопаснее чем прошивка NAND памяти, а во вторых, на мой взгляд, просто удобнее особенно в демонстрационных целях.
    И так, нам понадобится MMC, желательно от 2 до 8 Gb. Подключаем MMC к Linux машине, и подготавливаем файловую систему.
    Загрузочный MMC диск должен содержать минимум два раздела. Первый FAT16 назовём его boot, с которого собственно и будет происходить загрузка u-boot и ядра операционной системы, и второй Ext4, на котором будет находится наша файловая система, назовём его rootfs.
    Для упрощения создания файловой системы, я подготовил маленький bash скрипт, просто для удобства пользования. Если контроллер не найдёт загрузочный сектор, наша платформа просто не сможет загрузится.

    #!/bin/bash -e
    
    if ! [ $(id -u) = 0 ] ; then
     echo "This script should be run as sudo user or root"
     exit 1
    fi
    
    mmcdisk=$1
    
    conf_boot_startmb="1"
    conf_boot_endmb="96"
    sfdisk_fstype="0xE"
    
    label_boot="boot"
    label_rootfs="rootfs"
    
    # Umount existion partitions
    echo "Unmounting partitions"
    mountpoints=$(mount | grep -v none | grep "$mmcdisk" | wc -l)
    
    for ((i=1;i<=${mountpoints};i++))
    do
     currentdisk=$(mount | grep -v none | grep "$mmcdisk" | tail -1 | awk '{print $1}')
     umount ${currentdisk} >/dev/null 2>&1 || true
    done
    
    dd if=/dev/zero of=${mmcdisk} bs=1M count=16
    sync
    
    # Create partition table
    LC_ALL=C sfdisk --force --in-order --Linux --unit M "${mmcdisk}" <<-__EOF__
     $conf_boot_startmb,$conf_boot_endmb,$sfdisk_fstype,*
     ,,,-
    __EOF__
    
    sync
    
    partprobe ${mmcdisk}
    
    # Setup partitions
    echo "Setup partitions"
    LC_ALL=C fdisk -l "${mmcdisk}"
    
    LC_ALL=C mkfs.vfat -F 16 ${mmcdisk}p1 -n ${label_boot}
    sync
    
    LC_ALL=C mkfs.ext4 ${mmcdisk}p2 -L ${label_rootfs}
    sync
    


    Для работы скрипта, в качестве аргумента, нужно передать имя MMC устройства, т.е. например /dev/mmcblk0. Будьте предельно осторожны и внимательны с именем устройства, так как сам скрипт не проверяет MMC это или HDD диск.
    После создания загрузочного диска, нам осталось только правильно скопировать собранные файлы. Для этого, на boot раздел копируем само ядро uImage, загрузчик u-boot.bin и MLO, а так же файл конфигурации boot.scr. На второй раздел: rootfs, нужно распаковать архив с нашей файловой системой rootfs.tar.bz2.
    Все, наш свежесобранный Android готов, размонтируем нашу microSD, вставляем в целевое устройство, и включаем питание. Иногда конечно требуется нажать клавишу reset, и самая первая загрузка требует немного больше времени, чем обычно. Но всё таки — это «холодный старт».
     

    Заключение


    Подобным образом выглядит процесс сборки Android для мобильных телефонов и планшетов, разве что отличается процесс развёртывания на целевом устройстве. А для отладочных плат подобных BeagleBoard и BeagleBone и т.п. отличаются только конфигурации устройства.

     

    http://habrahabr.ru/post/219457/

    Категория: mini computers и не только... | Просмотров: 692 | Добавил: laptop | Рейтинг: 4.0/1
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк - единственный из зверей, который может пойти в бой на более сильного противника.
    Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...

    Праздники сегодня

    Поиск
    Календарь
    Архив записей
    Друзья сайта
  • Официальный блог
  • JEEP - the best! Mercedes - the best! Автомобильный портал города Бреста: технические характеристики с фото, авторынок, автоспорт...
    Наша кнопка
    IT новости с моего лаптопа...

    Внимание!
    Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
    Copyright Valeri N.Kravchuk © 2007-2024