The MIPS Creator CI20 platform is a feature laden MIPS/Imagination Linux and Android development system. It incorporates an Ingenic JZ4780 SoC which includes a 1.2GHz dual core MIPS32 processor and Imagination PowerVR SGX540 GPU. The CI20 board provides comprehensive connectivity, multimedia capabilities and substantial RAM and flash.

Hardware Features

The MIPS Creator CI20 development board features an updated board layout which enhances Wi-Fi performance and signal strength, and makes the microcomputer easier to mount in cases or on secondary devices.

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

Detailed documentation, including user guides, full hardware schematics and more can be found on a dedicated eLinux page for MIPS Creator CI20.

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 http://svn.radix.pro/svn/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. Зеркало, обновляемое каждые сутки, можно найти на нашем сервере по адресу http://git.radix.pro/Ingenic/linux/CI20_linux.git.

Порядок сборки и приготовления отчуждаемого пакета, можно найти в каталоге boot/kernel/ci20 репозитория платформы Radix.pro. Здесь представлены две версии ядра 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.pro, можно видеть в каталоге 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.pro осуществляется по сценариям, описанным в 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.pro. Внимательно изучив данный Make-файл, можно увидеть, каким образом корректируются пути поиска библиотек, а также изменения в заголовочных файлах, которые необходимо сделать для использования библиотек во время сборки пакетов Qt4 и Qt5.

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