Abusalimov Jeldar - slides

реклама
Система сборки, анализа и
верификации кода ОСРВ Embox
Дипломная работа
Автор:
студент 545 группы
Абусалимов Э.Ш.
Научный руководитель:
асп. каф. системного программирования
Бондарев А.В.
Рецензент:
Венгеров В.В.
Проблемная область
ОСРВ Embox: модульная и конфигурируемая
• Исходные коды (на сегодня около 300 файлов)
организованы в модули (около 180)
• Модули взаимосвязаны по следующим отношениям:
o "Зависит от" (около 100 связей)
o "Наследует" (около 20 связей)
• Каждый модуль также имеет:
o Документацию
o Флаги компиляции
o Доступные опции конфигурации
Постановка задачи
Система сборки, обладающая следующими свойствами:
• Простой формат описаний
o Для разработчика
o Для конечного пользователя
• Поддержка межмодульных зависимостей
o Разрешение зависимостей при сборке
• Возможность использовать знания о конфигурации во
время исполнения
o Внедрение зависимостей
• Верификация предоставленных описаний
o Анализ исходного кода
o Проверка корректности описаний
Существующие средства
• GNU Make – стандарт де-факто в Unix'ах
o Инкрементальная сборка
o Слишком общее средство
o Не решает ни одну из поставленных задач
• GNU Autotools – переносимость программ между Unix'ами
o Основная цель отлична от поставленной задачи
• Cmake, Scons – замена GNU Autotools
o Не ориентированы на модульные приложения
• Kbuild – система сборки ядра Linux
o Поддерживает зависимости для опций CONFIG_XXX
o Информация о зависимостях используется только во
время сборки
Система сборки Embuild
Verification
tool
nm output
analysis
Dependency
injection
Make rules
generation
Dependency graph
source
conf-files
GCC, nm
CPP
em-files
GNU Make
Embuild
cache
Формат описаний
em-файлы – для разработчика:
• Подмножество языка Make
define module foo
brief = Main application module
sources = foo.c
depends = bar
endef
conf-файлы – для конечного пользователя:
• Обрабатываются препроцессором C
module(foo)
Разрешение зависимостей
foo.em:
bar.em:
define module foo
sources = foo.c
depends = bar
endef
define module bar
sources = bar.c
endef
Граф зависимостей:
modules.conf:
module(foo)
Абстрактные модули
baz.em:
alloc.em:
define module baz
depends = alloc
endef
define api alloc
brief = Dyn memory
endef
buddy.em:
best_fit.em:
define module buddy
sources = buddy.c
provides = alloc
endef
define module best_fit
sources = best_fit.c
provides = alloc
endef
Внедрение зависимостей
foo.em:
bar.em:
define module foo
sources = foo.c
depends = bar
endef
define module bar
sources = bar.c
endef
foo.c:
bar.c:
static int foo_init() {
printf("%d",
the_answer);
return 0;
}
MODULE_INIT(foo_init);
int the_answer;
static int bar_init() {
the_answer = 42;
return 0;
}
MODULE_INIT(bar_init);
Верификация описаний
foo.em:
bar.em:
define module foo
sources = foo.c
depends = bar
endef
define module bar
sources = bar.c
endef
foo.c:
bar.c:
static int foo_init() {
printf("%d",
the_answer);
return 0;
}
MODULE_INIT(foo_init);
int the_answer;
static int bar_init() {
the_answer = 42;
return 0;
}
MODULE_INIT(bar_init);
Анализ исходного кода
foo.c:
bar.c:
static int foo_init() {
printf("%d",
the_answer);
return 0;
}
MODULE_INIT(foo_init);
int the_answer;
static int bar_init() {
the_answer = 42;
return 0;
}
MODULE_INIT(bar_init);
• Компиляция | Обработка утилитой nm | анализ вывода
foo.o:
bar.o:
U the_answer
00000000 B the_answer
Анализ графов зависимостей
foo.o:
bar.o:
U the_answer
00000000 B the_answer
• Сопоставление дуг
foo.em:
bar.em:
define module foo
sources = foo.c
depends = bar
endef
define module bar
sources = bar.c
endef
Сравнение
Kbuild
Embuild
Используют среду исполнения GNU Make
Сборка приложений, имеющих множество конфигураций
Рекурсивный Make
Нерекурсивный Make
Опции конфигурации и список
исходников в разных файлах
Описание модуля в одном
файле
Все опции в одном пространстве Различные пространства имен
имен
для модулей
Ограничивается только сборкой Модель зависимостей доступна
образа
во время исполнения
Отсутствие средств
верификации
Анализ и сравнение описаний с
исходным кодом
Полученные результаты
Реализована система сборки Embuild, которая:
• Имеет простой формат описаний
o Модулей разрабатываемого приложения
o Конечной конфигурации приложения
• Поддерживает межмодульные зависимости
o Разрешение зависимостей при сборке
• Использует знания о конфигурации во время
исполнения
o Внедрение зависимостей
• Обладает возможностью верификации предоставленных
описаний
o Анализ исходного кода
o Проверка корректности описаний
Контакты
Essential toolbox for embedded development
Embox Project Homepage
• http://code.google.com/p/embox/
Эльдар Абусалимов
• [email protected]
Скачать