Сборка и настройка ядра Linux-3.18 для платформы Elvees Multicore. Ниже описан процесс сборки ядра Linux-3.18.x для платформы Elvees Multicore на инструментальной машине под управлением операционной системы CentOS 7x64 из исходных кодов ядра и утилит, находящихся в репозитории git@warlock.elvees.com:2222/mclinux. 1. Установка необходимых инструментов. Поскольку в качестве системы, обеспечивающей сборку ядра, используется buildroot, его использование требует установки следующих пакетов (см. https://buildroot.org/downloads/manual/manual.html#requirement-mandatory): Перед установкой соответствующих пакетов необходимо выкачать из git-репозитория остальные модули mclinux командой `load_mclinux.sh`. Далее выполнить команду: - для установки на Centos: ` sudo yum install -y which sed make binutils binutils-essential gcc g++ bash patch gzip bzip2 perl tar` - для установки на Ubuntu: ` sudo apt-get install -y which sed make binutils gcc g++ bash patch gzip bzip2 perl tar` 2. В директории build находятся следующие скрипты: build_bench.sh - сборка тестового окружения; build_buildroot.sh - сборка buildroot toolchain, libc, busybox; build_lin3.18.sh - сборка образа linux kernel; clean_buildroot.sh - очистка (make clean) buildroot; clean_lin3.18.sh - очистка linux kernel; create_all.sh - полная сборка всех модулей mclinux; load_mclinux.sh - клонирование всех остальных модулей git-репозитория mclinux; project_structure – вспомогательный скрипт для настройки окружения; target_brd.sh - вспомогательный скрипт для настройки окружения для выбранной целевой платформы; Данные скрипты позволяют собрать образ ядра Линукс, buildroot-тулчейн, библиотеку libc и образ файловой системы под выбранную целевую платформу. Ниже приведено более детальное описание данных скриптов: - build_bench.sh позволяет собрать тестовое окружение и бенчмарки. - build_buildroot.sh служит для сборки тулчейна, системной библиотеки (uclibc или аналогичной) и корневой файловой системы. Имеет опции: Choose one of the following options. -m|--menuconfig Call buildroot menuconfig and exit -s|--savedefconfig Save defconfig based on current .config -t|--toolchain Build just the toolchain and exit -k|--keepconfig Build buildroot with current .config -b|--busiboxconfig Busybox menuconfig -u|--uclibcconfig Uclibc menuconfig -h|--help Print this help message and exit - build_lin3.18.sh служит для сборки образа ядра linux. Имеет следующие опции: Choose one of the following options. -m|--menuconfig Call kernel menuconfig end exit -d|--defconfig Build kernel with defconfig for defined board -k|--keepconfig Build kernel with current .config -s|--savedefconfig Call kernel savedefconfig and exit -h|--help Print this help message and exit - build_nvboot.sh служит для сборки загручика nvboot, который позволяет загрузить и исполнить образ ядра Линукс из флеш-памяти. - clean_buildroot.sh имеет следующие опции: Choose one of the following options. -a|--all Clean all the built objects -d|--dist Clean all the built objects and all disributives -c|--config Clean current config -t|--target Clean the target rootfs -h|--help Print this help message and exit и позволяет очистить при необходимости пересборки разные объектные файлы и компоненты. - clean_lin3.18.sh служит для очистки образа ядра linux при пересборке. - create_all.sh служит для полной сборки, включающей сборку тулчейна, библиотеки xlibc, корневой файловой системы, тестового окружения и образа ядра linux. - load_mclinux.sh создает полную локальную копию репозитория mclinux. - project_structure является вспомогательным, используется в остальных для настройки на текущие директории проекта и переменные окружения (environment). - target_brd.sh также вспомогательный, служит для установки переменной окружения TARGET_BOARD для текущей целевой платформы, используемой в других скриптах сборки. 3. Сборка (Внимание! Для создания во время сборки файлов устройств в папке /dev в корневой файловой системе, требуется чтобы пользователь находился в группе sudoers). Полная сборка выполняется командой: build/create_all.sh {--nvcom02-tem|--mc24r2-em|--mct04em|--30sf6em|--mct03pem|--mc0428em-pci} Настройка сборки в появившемся меню: - Во вкладке System configuration: - в пункте меню : ($(MCLINUX_ROOT)/project-overlay/buildroot/board/elvees_multicore/mct04em/rootfs_overlay) Root filesystem overlay directo, отредактировать и указать тот модуль, на котором будет проводиться сборка ядра Linux-3.18 - в пункте меню: ($(MCLINUX_ROOT)/project-overlay/buildroot/board/elvees_multicore/mct04em/post_image.sh) Custom scripts to run after crea│ сделать аналогичные настройки или выбрать common/post_image.sh (можно применять для большинства наших платформ, то есть "универсальная" платформа, но при этом не все функции платформ будут поддерживаться правильно) - Во вкладке Toolchain: - в поле GCC Options убедиться что выбрано GCC compiler Version (gcc 4.9.x) - в поле Binutils Options убедиться что выбрано Binutils Version (binutils 2.28.1) Замечания: Если при сборке обнаружилась ошибка "не возможно подключится к proxy-серверу", в терминале открываем sudo gedit. bashrc и добавляем: export http_proxy= export https_proxy=$http_proxy export ftp_proxy=$http_proxy export rsync_proxy=$http_proxy Ниже описано как можно собрать тоже самое по отдельным шагам. 3.1. Сборка инструментов buildroot. Для сборки тулчейна необходимо выполнить команды: build/clean_buildroot.sh -a # удаляем объектные файлы предыдущей сборки build/build_buildroot.sh -m # выполняем конфигурацию buildroot build/build_buildroot.sh -t # собственно сборка тулчейна Собранные инструменты (gcc, binutils и пр.) будут находится в директории ~/toolchain/3.18/host. 3.2. Сборка тестового окружения выполнятся с помощью команды: build/build_bench.sh Так как тесты являются частью корневой файловой системы, то их необходимо собрать до создания target. 3.3. Сборка выбранных пакетов(packages), busybox и корневой фаловой системы выполняется командой (Внимание! Для создания во время сборки файлов устройств в папке /dev в корневой файловой системе, требуется чтобы пользователь находился в группе sudoers): build/build_buildroot.sh -k Собранная корневая файловая система будет находится в директории linux/target. 3.4. Сборка ядра Линукс. Выполняется командами: build/clean_lin3.18.sh # удаление объектных файлов предыдущей сборки build/build_lin3.18.sh -d {--nvcom02-tem|--mc24r2-em|--mct04em|--mc30sf6em} # сборка с текущим defconfig-ом При сборке с текущим defconfig-ом в начале выводится конфигурационное меню, для того чтобы можно было проверить и оперативно скорректировать текущие настройки модулей ядра. При конфигурации ядра: - выбрать пункт меню Kernel hacking, убедиться, что выбран пункт Built-in kernel command line и отредактировать строку, расположенную под этим пунктом. Командная строка ядра должна иметь вид: console=ttyS0,115200N8 root=/dev/ram0; - выбрать пункт General Setup, убедиться, что выбран пункт меню Initial RAM filesystem and RAM disk (initramfs/initrd) support, а в пункте Initramfs source file(s) указан правильный путь к корневой файловой системе: (../target) Initramfs source file(s) Собранное ядро будет находиться в директории linux/linux3.18/.