Сборка простого приложения
Добро пожаловать в OpenEmbedded
Поскольку OpenMoko была создана с помощью OpenEmbedded, то наиболее правильным способом сборки тестового приложения будет использование OpenEmbedded. Чтобы сосредоточиться на главном, начнем с приложения для командной строки, проверяющего правильную работу инструментов.
Создание директории пакета
Из предыдущего раздела вы узнали о директории openembedded/packages, в которой хранятся существующие пакеты. Пришло время добавить собственную директорию. Как правило, пример программы называется hello, поэтому начнем с неё; создайте в openembedded/packages директорию "hello" и создайте в ней вложенную директорию "files." Фактически вам нужно всего два файла—параметры BitBake и исходный файл для вашей программы.
Привет, пример программы!
От нашей простой программы ничего особенного не требуется; просто какой-нибудь вывод, чтобы можно было проверить, что она работает. Вот мой пример, сохраненный как hello/files/hello.c:
Листинг 1. Пример программы
#include <stdio.h>
int main(int argc, char *argv[]) {
puts("Help! I'm trapped in a sample program factory.");
return 0;
}
|
Параметры bitbake
Перейдем к деталям: параметрам bitbake. К счастью, большая часть работу уже проделана, и нам осталось самое лёгкое. По своей сути, параметры bitbake представляют собой особый сценарий командного процессора (если быть более точным, сценарий python, содержащий команды командного процессора); вот пример, соответствующей приведенной выше программе, я назвал его hello_0.0.bb:
Листинг 2. Пример параметров bitbake
DESCRIPTION = "Tutorial example"
PR = "r0"
SRC_URI = "file://hello.c"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/hello.c -o hello
}
do_install() {
install -m 0755 -d ${D}${bindir}
install -m 0755 ${S}/hello ${D}${bindir}
}
|
Задание переменных
Параметры начинаются с задания трёх переменных. Их описание достаточно прозрачно. PR определяет редакцию—ниже я разъясню это. SRC_URI должен содержать URI, указывающий на файл. Должно быть, вы обратили внимание, что здесь в URI file:// не используется третья косая черта—это сделано потому, что bitbake достаточно умен для того, чтобы автоматически выполнять поиск в директории files. Если вы укажете третью косую черту, вы получите запрос на файл hello.c, расположенный в корневой папке вашего локального диска.
Редакции
Самая запутанная часть - самая короткая: переменная PR, которая используется для обозначения редакции проекта. Если вы внесете изменения в файл, но не тронете переменную PR, bitbake не сможет понять, что вы хотите его обновить. Начните с r0 и спокойно увеличивайте число. Например, если даже если сборка завершилась ошибкой (например, из-за опечатки в исходном файле), обновление файла не приведет к копированию новой версии в сборку до тех пор, пока не будет изменен PR.
делай_то, делай_сё
Функция do_compile() задает инструкции по компиляции программы. Эти инструкции могут быть сложными и простыми; в нашем случае, они очень простые. Обратите внимание на множество предварительно определенных переменных, которые вы можете использовать для автоматической корректировки параметров сборки. Аналогичным образом после сборки программы запускается do_install() для копирования файлов в нужную папку целевой файловой системы. Будьте осторожны с режимами; в примере файла bitbake, с которого я начал, в качестве режима для кода цели значится 0644 (владелец имеет права на чтение и запись, его группа и прочие пользователи -- на чтение), но без прав на выполнение от него немного толка.
Добавление пакета
Для того, чтобы добавить пакет, вернитесь файлу local.conf и добавьте следующую строку:
DISTRO_EXTRA_RDEPENDS += "hello"
Обратите внимание, что название переменной заканчивается RDEPENDS, а не DEPENDS. Эта строка говорит bitbake о необходимости добавить в дистрибутив пакет hello (описанного приведенным выше файлом bitbake).
Повторная сборка
Чтобы выполнить сборку с новым пакетом, запустите make update, а затем make openmoko-devel-image. После этого вы можете использовать новый образ либо в телефоне, либо в QEMU. (В QEMU для "прошивки" виртуального телефона используйте make flash-qemu-local и make run-qemu-snapshot для его запуска.) Запуск hello в терминале должен привести к выводу информативного сообщения.
Достаточно для простейшего примера программы. Что теперь?
|