Плата MIPS Creator CI20 от компании Imagination Technologies является полнофункциональной платформой для разрабоки, как Linux так и Android приложений. Данная плата построена на кристалле Ingenic JZ4780, который включает двухъядерный 1.2GHz MIPS32 процессор и графический ускоритель PowerVR SGX540, разработанный для мобильных устройств.
Hardware Features
Плата MIPS Creator CI20 имеет обновленную версию, монтаж которой обеспечивает более высокую скорость передачи и достаточный уровень сигнала для устойчивого Wi-Fi соединения.
- 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.