Download presentation
Presentation is loading. Please wait.
1
Автор: студент 545 группы Абусалимов Э.Ш. Научный руководитель: асп. каф. системного программирования Бондарев А.В. Рецензент: Венгеров В.В. Система сборки, анализа и верификации кода ОСРВ Embox Дипломная работа
2
ОСРВ Embox: модульная и конфигурируемая Исходные коды (на сегодня около 300 файлов) организованы в модули (около 180) Модули взаимосвязаны по следующим отношениям: o "Зависит от" (около 100 связей) o "Наследует" (около 20 связей) Каждый модуль также имеет: o Документацию o Флаги компиляции o Доступные опции конфигурации Проблемная область
3
Постановка задачи Система сборки, обладающая следующими свойствами: Простой формат описаний o Для разработчика o Для конечного пользователя Поддержка межмодульных зависимостей o Разрешение зависимостей при сборке Возможность использовать знания о конфигурации во время исполнения o Внедрение зависимостей Верификация предоставленных описаний o Анализ исходного кода o Проверка корректности описаний
4
GNU Make – стандарт де-факто в Unix'ах o Инкрементальная сборка o Слишком общее средство o Не решает ни одну из поставленных задач GNU Autotools – переносимость программ между Unix'ами o Основная цель отлична от поставленной задачи Cmake, Scons – замена GNU Autotools o Не ориентированы на модульные приложения Kbuild – система сборки ядра Linux o Поддерживает зависимости для опций CONFIG_XXX o Информация о зависимостях используется только во время сборки Существующие средства
5
Система сборки Embuild GNU Make Embuild cache CPP conf -files em -files Dependency graph nm output analysis Verification tool Dependency injection Make rules generation source GCC, nm
6
Формат описаний em -файлы – для разработчика: Подмножество языка Make define module foo brief = Main application module sources = foo.c depends = bar endef conf -файлы – для конечного пользователя: Обрабатываются препроцессором C module(foo)
7
Разрешение зависимостей define module bar sources = bar.c endef define module foo sources = foo.c depends = bar endef foo.em:bar.em: modules.conf: module(foo) Граф зависимостей:
8
Абстрактные модули define api alloc brief = Dyn memory endef define module baz depends = alloc endef baz.em:alloc.em: define module best_fit sources = best_fit.c provides = alloc endef define module buddy sources = buddy.c provides = alloc endef buddy.em:best_fit.em:
9
define module bar sources = bar.c endef Внедрение зависимостей define module foo sources = foo.c depends = bar endef 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: foo.em:bar.em:
10
define module bar sources = bar.c endef Верификация описаний define module foo sources = foo.c depends = bar endef 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: foo.em:bar.em:
11
Анализ исходного кода 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: Компиляция | Обработка утилитой nm | анализ вывода U the_answer00000000 B the_answer foo.o:bar.o:
12
Анализ графов зависимостей define module bar sources = bar.c endef define module foo sources = foo.c depends = bar endef foo.em:bar.em: U the_answer00000000 B the_answer foo.o:bar.o: Сопоставление дуг
13
KbuildEmbuild Сравнение Рекурсивный MakeНерекурсивный Make Опции конфигурации и список исходников в разных файлах Описание модуля в одном файле Все опции в одном пространстве имен Различные пространства имен для модулей Ограничивается только сборкой образа Модель зависимостей доступна во время исполнения Отсутствие средств верификации Анализ и сравнение описаний с исходным кодом Используют среду исполнения GNU Make Сборка приложений, имеющих множество конфигураций
14
Полученные результаты Реализована система сборки Embuild, которая: Имеет простой формат описаний o Модулей разрабатываемого приложения o Конечной конфигурации приложения Поддерживает межмодульные зависимости o Разрешение зависимостей при сборке Использует знания о конфигурации во время исполнения o Внедрение зависимостей Обладает возможностью верификации предоставленных описаний o Анализ исходного кода o Проверка корректности описаний
15
Контакты Эльдар Абусалимов eldar.abusalimov@gmail.com Embox Project Homepage http://code.google.com/p/embox/ Essential toolbox for embedded development
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.