Сборка ядра для Орикса
Приведенный мануал справедлив для Kubuntu 14.04 64bit.
Втянуться в тему можно на странице Xilinx Wiki Getting Starting.
Наша цель - собрать новый uImage с применением патча PREEMPT_RT.
Если смотреть на схему, то складывается ощущение, что ядро входит в BOOT.BIN. Но на практике флешка содержит boot.bin, device tree, uImage и образ rootfs. Например, на ZC702:
drwxr-xr-x 3 root root 4096 Jan 1 00:00 .
drwxrwxr-x 19 1000 1000 0 Aug 15 2014 ..
drwxr-xr-x 5 root root 4096 Aug 15 2014 .Trash-1000
-rwxr-xr-x 1 root root 442480 Jun 19 2014 boot.bin
-rwxr-xr-x 1 root root 9219 Jun 3 2014 devicetree.dtb
-rwxr-xr-x 1 root root 3488208 May 30 2001 uImage
-rwxr-xr-x 1 root root 6054766 Aug 15 2014 uramdisk.image.gz
Поэтому простая подмена uImage тоже работает.
Содержание |
Шаг 1. Устанавливаем кросскомпилятор
Теоретически этот шаг можно пропустить, воспользовавшись билд-сервером. Но на практике я использовал кросс-компилятор от Xilinx'а.
Скачиваем инсталлер
Страница на Xilinx Wiki: Install Xilinx Tools ведет в раздел Downloads.
На текущий момент самая свежая версия имеет номер 2014.4, поэтому скачиваем Vivado 2014.4 WebInstall for Linux 64.
Потребуется зарегистрироваться на сайте (требует пароль с циферкой ;)).
В результате получаем файл типа Xilinx_Vivado_SDK_2014.4_1119_1_Lin64.bin
Устанавливаем SDK
Устанавливаем SDK и, при желании, Vivado WebKit. Оба инструмента бесплатные:
В начале установки поступит предложение Select Edition to Install, выбираем:
- Vivado Web Pack, если хотим установить Vivado+SDK
- Software Development Kit, если хотим ограничиться SDK
Драйвер для кабеля для компиляции ядра не потребуется, но иметь в системе его полезно.
Директорию установки оставляем по-умолчанию в /opt
После скачивания файлов программа установки предложит получить лицензию на сайте Xilinx, что и следует сделать (Get Free License, далее Xilinx MicroBlaze/All Programmable SoC Software Development Kit - Standalone для SDK или Vivado WebPACK License для Vivado).
Прописываем пути в PATH
По-умолчанию интерпретатор не знает пути до компиляторов. В переменную PATH их умеет добавлять специальный скрипт. Чтобы не вызывать его каждый раз руками, следует добавить строки в ~/.bashrc
:
source /opt/Xilinx/SDK/2014.4/settings64.sh # use settings32.sh on 32-bit operating systems
Переменная CROSS_COMPILE используется в некоторых Makefile'ах ниже. Сейчас с её помощью выбран кросс-компилятор для целевой Linux.
Появились новые возможности:
- можно открыть среду разработки командой xsdk
- можно компилировать прошивку для приемника не на билд-сервере, а на своей машине.
Заставляем работать кросскомпилятор
Самый простой способ убедиться, что кросскомпилятор начал работать - скомпилировать с его помощью прошивку для приемника.
Для этого в personal.conf
изменяем SERVER_BUILD_FIRMWARE
на 0 и добавляем TOOLS, GCC, GPP
:
TOOLS=LC_ALL=POSIX arm-xilinx-linux-gnueabi
GCC=$(TOOLS)-gcc $(CFLAGS)
GPP=$(TOOLS)-g++ $(CFLAGS)
Дале выполняем make
в /src/firmware
, на что получаем невнятное сообщение об отсутствии в системе компилятора arm-xilinx-linux-gnueabi-g++. Дело в том, что для его работы нужен ряд 32-битных библиотек:
После чего кросскомплилятор начинает успешно работать.
Сборка ядра, тестированного ODASL
Существует замечательная контора ODASL, занимающаяся тестированием PREEMPT_RT патча на различных сборках и архитектурах. Они протестировали ядро 3.12.24 с PREEMPT_RT патчем на ZedBoard. Более того, они предоставляют удобные скрипты, которые сами скачивают все нужные ядра (доступен по ссылке внизу страницы, копия).
Указан неподдерживаемый язык.
Вы должны указать язык следующим образом: <source lang="html4strict">...</source>
Поддерживаемые языки:
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, asm, asp, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, oobas, oracle11, oracle8, oxygene, oz, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, python, q, qbasic, rails, rebol, reg, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, uscript, vala, vb, vbnet, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic
Далее для сборки ядра потребуются: