Cubieboard

Cubieboard мини-компьютер для разработчиков, построеный на процессоре Allwiner A10 с архитектурой ARM® Cortex™-a8.

Плата Cubieboard от компании Cubietech является полнофункциональной платформой для разрабоки, как Linux так и Android приложений. Данная плата построена на кристалле Allwinner A10, который включает 1.0GHz ARM® Cortex™-a8 процессор и графический ускоритель Mali™-400.

Hardware Features

Плата Cubieboard является первой версией устройств от компании Cubietech.

Cubieboard
  • AllWinnerTech SOC A10, ARM® Cortex™-A8 ARM® Mali™-400 MP1 Complies with OpenGL ES 2.0/1.1
  • 1GB DDR3 @480MHz
  • 4GB internal NAND flash, up to 32GB on SD slot, up to 2T on 2.5 SATA disk
  • 5VDC input 2A or USB otg input
  • 1x 10/100 ethernet, support usb wifi
  • 2x USB 2.0 HOST, 1x mini USB 2.0 OTG, 1x micro sd
  • 1x HDMI 1080P display output
  • 1x IR, 1x line in, 1x line out
  • 96 extend pin interface, including I2C, SPI, RGB/LVDS, CSI/TS, FM-IN, ADC, CVBS, VGA, SPDIF-OUT, R-TP, and more

Документацию, включающую руководства пользователей, электрические принципиальные схемы и другую полезную информацию, можно найти на странице Cubieboard Docs.

Toolchain

На сайте linux-sunxi.org имеется достаточно информации для самостоятельной сборки toolchain-а.

Во вводной статье мы говорили о недостатках использования сторонних toolchain-ов и, естествено, в нашей работе, мы используем toolchain-ы собственной сборки.

Готовый toolchain для работы на 64-разрядных Linux машинах можно получить на нашем FTP-сервере в каталоге toolchains/x86_64. Выбирать здесь нужно последнюю версию архива с именем 'arm-A1X-linux-glibc-*.tar.gz'.

Для самостоятельной сборки toolchain-а, необходимо получить срез репозитория toolchains, например,

$ svn co svn://radix.pro/toolchains/trunk toolchains

И выполнить команду make в соответствующем каталоге:

$ cd toolchains/products/A1X-glibc/1.0.9
$ make -j8

Напомним здесь, что перед сборкой необходимо подготовить каталог для инсталляции toolchain-а так, как это описано в разделе, посвященном загрузке toolchain-ов с нашего FTP-сервера.

Source Code

На странице, посвященной исходным кодам Manual Build Howto, можно найти всю необходимую информацию для самостоятельной сборки ядра Linux и загрузчика U-Boot. Разработчики ведут собственные репозитории и делают все необходимое для того, чтобы их код, со временем, был интегрирован в основные ветки репозитория ядра Linux и загрузчика U-Boot.

Kernel

Репозиторий исходных кодов ядра расположен по адресу https://github.com/linux-sunxi/linux-sunxi. Зеркало, обновляемое каждые сутки, можно найти на нашем сервере по адресу https://git.radix.pro/linux-sunxi.git.

Порядок сборки и приготовления отчуждаемого пакета, можно найти в каталоге boot/kernel/A10 репозитория платформы Radix.Linux.

В каталоге 3.4-20140514 представлен сценарий сборки исходных кодов ядра, являющихся срезом ветки sunxi-3.4 оригинального репозитория.

Для идентификации срезов, мы используем дату в именовании каталогов, содержащих наши Make-файлы. Точные ревизии веток, используемые в нашей работе, можно увидеть на FTP-сервере или в репозитории sources.git (файл Linux/sunxi/sunxi-3.4/Makefile ), где вначале файла приведены таблицы соответствия hash-сумм и дат изменения репозитория.

.   .   .

#
# Revisions from 'sunxi-3.4' branch.
#
#                                               hash | date
#            ----------------------------------------+--------
revisions  = e37d760b363888f3a65cd6455c99a75cac70a7b8-20140514
revisions += 9a1cd034181af628d4145202289e1993c1687db6-20141014

.   .   .

Данный подход мы используем везде, где необходима точная идентификация, используемых нами ревизий.

U-Boot

Исходные коды загрузчика U-Boot находятся в репозитории на портале GitHub, Inc. (US). Для удобства, мы зеркалируем данный репозиторий на нашем сервере.

Для загрузки устройства необходимо использовать ветку sunxi. На странице, посвященной загрузчику, описан порядок сборки. Приготовление пакета, для платформы Radix.Linux, можно видеть в каталоге boot/u-boot/A10.

Следует отметить, что кроме старой версии загрузчика поддерживается версия, которая уже имплементирована в основную ветку U-Boot. На странице Mainline U-Boot можно найти достаточно подробное описание процесса сборки загрузчика.

Flash Layout

На странице Bootable SD Card представлена таблица размещения загрузчика, согласно которой запись на карту может быть осуществлена посредством следующих комманд.

# dd if=/dev/zero                 of=/dev/mmcblk0  bs=1024  seek=544 count=128
# dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0  bs=1024  seek=8

Здесь, первая команда предназначена для очистки переменных окружения U-Boot, а вторая, – для записи начального SPL загрузчика и, непосредственно, U-Boot.

В разделе Products Release вводной статьи, даны общие сведения о размещении корневой файловой системы на загрузочном носителе. Если не использовать готовый образ корневой файловой системы, а создавать разделы с помощью программы fdisk, то начало первого раздела носителя следует располагать в 2048-м секторе:

$ /sbin/fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 32.1 GB, 32094814208 bytes
4 heads, 16 sectors/track, 979456 cylinders, total 62685184 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start        End      Blocks   Id  System
/dev/mmcblk0p1            2048   33556479    16777216   83  Linux
/dev/mmcblk0p2        33556480   58722303    12582912   83  Linux
/dev/mmcblk0p3        58722304   62685183     1981440   82  Linux swap
$

Это соответствует значению, выбираемому программой fdisk по умолчанию.

GPU Kernel Module

В отличие от устройств, для которых модуль GPU собирается вне исходных кодов ядра Linux, разработчики ПО для Cubuiboard имплементировали Mali™-400 драйвер непосредственно в ядро, что накладывает некоторые ограничения на использование различных версий OpenGL ES 2.0 библиотек и xf86-video драйверов.

GPU User Space Drivers

На странице Mali Binary Driver даны исчерпывающие пояснения, достаточные для самостоятельной сборки необходимых длайверов.

Для X.org сервера лучшим решением будет использование длайвера fbturbo, исходные коды которого можно найти по адресу https://github.com/ssvb/xf86-video-fbturbo.

Сценарий приготовления отчуждаемого пакета OpenGL ES 2.0 библиотек можно видеть, например, в файле X11/libs/sunxi-mali/3.0.4.0/Makefile платформы Radix.Linux. Драйвер xf86-video-fbturbo собирается в каталоге X11/X.org/driver/xf86-video-fbturbo/r3p0-04rel0/0.4.0. Кроме того, для работы графического стека, необходимо позаботиться о сборке UMP драйвера и довольно старой версии библиотеки libdri2, которая уже не сопровождается отдельно и требуется лишь для старых (r3p0) версий Mali™-400 драйвера.

Мы не будем здесь подробно описывать весь процесс сборки графического стека поскольку структура исходных кодов для сборки платформы Radix.Linux достаточно прозрачна и, пользователи могут легко найти все необходимые сценарии самостоятельно.