- summary Сборка ядра и корневой ФС с поддержкой Qt в buildroot
Описание процесса сборки корневой файловой системы c Qt-embedded (работает без Х-сервера напрямую с framebuffer), на примере buildroot-2012.02. Предполагается что выполнены настройка host-системы и собран кросскомпилятор, как описанно в OsSetup и CrosstoolNg.
дальнейшая настройка подразумевает что мы находимся в корне директории buildroot-2012.02
Есть несколько способов внести изменения в ФС под свои нужды
http://www.buildroot.net/downloads/buildroot.html#custom_targetfs
воспользуемся "стандартным" скелетом и будем вносить свои изменения. Сохраняем копию скелета
создаем пароль суперпользователя root 123456
копируем gdb-server который мы собрали в crosstool-ng
копируем настройки локального времени для Москвы
прописываем настройки сетевого интерфейса
прописываем DNS сервер google
указваем в каком порядке резольвить адреса (сначала искать в локальных файлах, затем на сервере DNS)
вносим настройки tslib и мышки
корректируем конфиг по умолчанию для busybox - для удаленной отладки в Qt Creator нам потребуется pgrep и pkill
Если нужна поддержка сторожевого таймера, пропишите в загрузочные скрипты запуск демона - создайте файл fs/skeleton/etc/init.d/S15watchdog с таким содержимым
и установите права на исполнение для него
переходим к конфигурированию buidroot
Запускаем конфигуратор
базовые настройки
- Примечание:* _если вам нужна отладочная информация в системных библиотеках (например в библиотеках Qt) отключите strip_
указываем свой кросскомпилятор
http://wiki.starterkit-org.googlecode.com/git/images/Screenshot-buildroot-2012.02-2.png
настройки системы
- Примечание:* _вместо ttyS0 нужно прописать в качестве порта getty для i.mx23 - ttyAM0, для i.mx53 - ttymxc0_
http://wiki.starterkit-org.googlecode.com/git/images/Screenshot-buildroot-2012.02-3.png
Выбор пакетов для корневой ФС
для примера в Qt выбран практически полный набор
Для автоматизации загрузки проектов на плату и удаленной отладки потребуется ssh сервер, возможно использовать минималистичный dropbear, я выбираю openssh потому что тестировал с ним
Для работы с nand потребуется набор утилит mtd-utils
В качестве имиджа корневой ФС создаем простой архив tar.gz
Оставляем в Host utilities все по умолчанию - ничего не выбираем. Загрузчик не собираем - воспользуемся отдельным не из состава buildroot, так что Bootloaders так же пропускаем. Правила для ядра
http://starterkit-org.googlecode.com/files/linux-3.2.18-oem.patch - патч для платы Startterkit SK-9G45-OEM, at91sam9g45sd7 - конфиг для корневой на SD и 7" TFT панели, для 4" панели наберите в этом поле at91sam9g45sd4. Конфигурация закончена, выбиаем Exit в главном окне, на вопрос Do you wish to save your new configuration? отвечаем < Yes >
Конфиг который получился в итоге можно взять тут qt_br.config
Сборка
Qt будет собираться достаточно долго - у меня больше 3 часов (если вам что-то не нужно из модулей - вы можете их не включать в конфиг, особенно долго собирается QtWebkit). По окончании сборки имиджи ядра и корневой ФС находятся в директории output/images/.
После окончания сборки системы можно дополнительно сконфигурировать ядро под свои нужды
например, чтобы собрать ядро с полной вытесняющей многозадачностью
включить поддержку сторожевого таймера
пересобираем ядро (динамические модули автоматически добавятся в корневую ФС)
После сборке корневой ФС можно дополнительно сконфигурировать busybox, так же как ядро. Например вместо правки конфига по умолчанию, которое было сделано в начале статьи при помощи sed, можно включить поддержку pgrep и pkill
выходим с сохранением конфига и собираем