MIPS Creator CI20

MIPS® Creator CI20 – мини-компьютер для разработчиков, построеный на процессоре Ingenic JZ4780 с архитектурой MIPS.

Плата MIPS Creator CI20 от компании Imagination Technologies является полнофункциональной платформой для разрабоки, как Linux так и Android приложений. Данная плата построена на кристалле Ingenic JZ4780, который включает двухъядерный 1.2GHz MIPS32 процессор и графический ускоритель PowerVR SGX540, разработанный для мобильных устройств.

Hardware Features

Плата MIPS Creator CI20 имеет обновленную версию, монтаж которой обеспечивает более высокую скорость передачи и достаточный уровень сигнала для устойчивого Wi-Fi соединения.

MIPS Creator CI20
  • Ingenic JZ4780, dual-core 1.2 GHz MIPS32 processor, PowerVR SGX540 GPU, 32k I&D L1 cache, 512k L2 cache
  • IEEE754 Floating Point Unit
  • 8 GB Flash, 1 GB DDR3 memory
  • Video playback up to 1080p
  • AC97 audio, via 4-pin input/output jack and HDMI connector
  • Camera interface – ITU645 controller
  • Connectivity – 10/100M Ethernet, 802.11 b/g/n, Bluetooth 4.0
  • HDMI output up to 2K resolution
  • 2 x USB – host and OTG
  • 14-pin EJTAG connector
  • 2 x UART, GPIO, SPI, I2C, ADC, expansion headers

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

Toolchain

Разработчики Imagination Technologies на своей странице, посвященной исходным кодам рекомендуемого программного обеспечения, советуют использовать toolchain версии 2013.11-36 от компании Mentor Graphics. Однако данный toolchain, по умолчанию, рассчитан на создание big-endian кода, в то время, как все драйвера, поставляемые в виде бинарных файлов, собраны в little-endian формате. Разумеется, данный недостаток весьма незначителен и большинство разрабочиков успешно используют данный toolchain с управлением -EL при сборке собственных продуктов.

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

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

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

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

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

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

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

Source Code

На странице, посвященной исходным кодам Ci20 Development Zone, можно найти всю необходимую информацию для самостоятельной сборки ядра Linux и загрузчика U-Boot. Инженеры Imagination Technologies ведут собственные репозитории и делают все необходимое для того, чтобы их код, со временем, был интегрирован в основные ветки репозитория ядра Linux и загрузчика U-Boot.

Kernel

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

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

В каталоге 3.0.8-20150728 представлен сценарий сборки исходных кодов ядра, являющихся срезом ветки ci20-v3.0.8 оригинального репозитория, в каталоге 3.18-20151015 представлен сценарий сборки ядра 3.18.3, для которого предназначена ветка ci20-v3.18.

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

.   .   .

#
# Revisions from 'ci20-v3.18' branch.
#
#                                               hash |  branch | date
#            ----------------------------------------+---------+--------
revisions  = 8ef5089c1baf62db99f0855d49bd2fb9b89be685:ci20-3.18:20150313
revisions += 7732fdf2465ef07a39eacb05829f7fe355f2df62:ci20-3.18:20150820
revisions += 235d926f0e6a07983170e990e9c1bdc5384a1e57:ci20-3.18:20150828
revisions += a0005ba52d069a5ad328f3d242818478ea85845f:ci20-3.18:20151015
#
# Revisions from 'ci20-v3.0.8' branch.
#
#                                               hash |   branch | date
#            ----------------------------------------+----------+--------
revisions += 2e5af7d6650ce6435f2894bdd7ee7f0333950942:ci20-3.0.8:20150218
revisions += c52aae2473591e25305239c4d62c176435f21e31:ci20-3.0.8:20150728

.   .   .

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

U-Boot

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

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

Следующие комманды показывают по каким смещениям должны быть расположены результирующие файлы на загрузочной карте.

# dd if=/dev/zero      of=/dev/mmcblk0    bs=1K    seek=526 count=32
# dd if=u-boot-spl.bin of=/dev/mmcblk0   obs=512   seek=1
# dd if=u-boot.img     of=/dev/mmcblk0   obs=1K    seek=14

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

Flash Layout

В разделе Root Ext4 FS Image вводной статьи, даны общие сведения о структуре загрузочной SD карты. В отличие от рекомендаций, приведенных на странице eLinux, мы рекомендуем расположить корневую файловую систему не по смещению 2 MiB, а выбрать общепринятое смещение, равное одному мегабайту. То есть, если воспользоваться программой 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. На странице CI20-SGX kernel module доступны две версии драйвера: 1.13.3341330 и 1.14.3759903. Первая предназначена для ядра Linux версии 3.0.8, вторая, – для версии 3.18.3.

К сожалению инженеры Imagination Technologies поставляют срезы собственного репозитория в архивах, которые не соответствуют общепринятым нормам и, распаковав такой архив, пользователь получает каталог с именем eurasia_km, которое не несет информации о версии драйвера.

Для удобства, мы перепаковали оригинальные архивы так, чтобы у пользователей не возникало проблем с идентификацией расспакованных исходных текстов драйвера. Архивы можно найти в каталоге 3pp/Imagination/ci20/sgx-km, именно из этого каталога данные архивы загружаются в общее дерево исходных пакетов, которое, в свою очередь, поддерживается в каталоге sources нашего FTP-сервера.

Сборка драйверов для платформы Radix.Linux осуществляется по сценариям, описанным в Make-файлах каталога hal/drivers/ci20/sgx-ddk. Так, для версии 3.18.3 ядра Linux, сборка драйвера описана в файле 3.18/1.14.3759903/Makefile, а для версии 3.0.8, – в файле 3.0.8/1.13.3341330/Makefile.

Отметим здесь, что начиная с ревизии 279, мы полностью перешли на ядро 3.18.3, что потребовало не только перехода к версии 1.14.3759903 драйвера ядра, но и перехода к соответствующей версии драйверов и библиотех, работающих на пользовательском уровне.

GPU User Space Drivers

Компания Imagination Technologies не поставляет исходные коды библиотек и xf86-video драйвера в исходных кодах. Архивы, представленные на странице CI20-SGX kernel module, содержат ненужную поставку X.org и, кроме того, в версии 1.14.3759903, не представлены примеры, которые приходится брать в корневой файловой системе Debian на странице CI20 Distros.

Кроме того, библиотеки OpenGL ES содежат пути поиска библиотек в режиме выполнения (переменная RPATH), которые указывают на весьма странное их положение в корневой файловой системе.

Разумеется, для того, чтобы упростить работу по созданию пакета, мы перепаковали поставку Imagination Technologies. Исправленные архивы можно найти на нашем FTP-сервере в каталоге 3pp/Imagination/ci20/sgx-um. Следует отметить, что наши архивы, помимо библиотек и драйверов, содержат, необходимые для разработки, заголовочные файлы.

Сценарий приготовления отчуждаемого пакета можно видеть, например, в файле X11/libs/ci20-sgx-um/1.14.3759903/Makefile платформы Radix.Linux. Внимательно изучив данный Make-файл, можно увидеть, каким образом корректируются пути поиска библиотек, а также изменения в заголовочных файлах, которые необходимо сделать для использования библиотек во время сборки пакетов Qt4 и Qt5.

В заключение необходимо отметить, что, несмотря на некоторые недостатки, компания Imagination Technologies выгодно отличается от других с точки зрения поддержки своих пользователей и, если вы сталкиваетесь с какими-либо трудностями, то инженеры Imagination Technologies всегда, и достаточно быстро, придут к вам на помощь. Для этого достаточно зарегистрироваться на форуме и выбрать раздел Creator Platforms.