Project

General

Profile

Wiki » History » Version 1

Alexey Khoroshilov, 08/10/2015 07:57 AM

1 1 Alexey Khoroshilov
h1. Инструменты поддержки процесса верификации
2
3
В данном репозитории собран ряд утилит для изучения исходных кодов модуля ядра Linux и для работы с ними. Программы имеют внешние зависимости. Для того, чтобы их установить необходимо выполнить команды:
4
<pre>
5
cpan cpanm
6
cpanm --installdeps .
7
</pre>
8
9
Для удобства работы с программами можно задать переменные окружения:
10
* **CURRENT_PROJECT** - директория с исходными кодами исследуемого модуля ядра Linux
11
* **CURRENT_KERNEL**  - директория с исходными кодами ядра Linux с которым сочетается модуль
12
13
h2. Краткое описание функциональности программ
14
15
Каждая из программ имеет собственную man документацию, которая доступна по ключу --help. Здесь сведено вместе краткое описание программ, их функциональности и предназначения.
16
17
h3. Трансформация исходных кодов
18
19
Данные программы используются для работы с исходными кодами и разработки спецификаций.
20
21
* **dismember** - из исходных кодов вытаскиваются все зависимости для конкретных функций так, чтобы компилятор мог создать отдельный объектный файл. У инструментов верификации вызывает затруднение работа с большими объёмами кода, что проявляется в существенном замедлении их работы. Программа позволяет многократно сократить объём исходного кода за счёт того, что неиспользуемый код исключается. В получившемся коде функции расположены в соответствии с графом их вызовов, структуры и остальные сущности расположены так, чтобы программисту было наиболее удобного работать с получившимся набором исходных кодов.
22
* **merge** - спецификации переносятся с одного набора исходных кодов на другой. Осуществляется полуавтоматических образом. В случае невозможности автоматического разрешения конфликтов вызывается внешняя программа. Расположение функций в файлах не имеет значения.
23
24
h3. Информация из исходных кодов
25
26
Данные программы предназначены для изучения исходных кодов модуля ядра как самостоятельного объекта, так и их интерфейсов взаимодействия с ядром. Используются при исследовании новых релизов исходных кодов, для подготовки отчётов и планирования работ.
27
28
* **graph** - строит карту исходных кодов. Карта представляет собой граф вызовов функций модуля ядра.
29
* **headers** - строит карту подключений заголовочных файлов в исходном коде
30
* **calls** - программа для анализа и сбора статистики вызовов функций и функциональных макросов в модуле ядра. Автоматическое определение сущности функция/макрос, и места определения ядро/модуль.
31
* **lsm_diff** - программа для анализа интерфейса lsm ядра и его использования в модуле ядра
32
* **stapgen** - по исходным кодам ядра создаёт скрипт для systemtap. Скрипт в динамике перехватывает вызовы lsm интерфейса ядра, осуществляет логирование параметров и контекста вызова функции. Позволяет отследить какие действия в ОС, приводят к вызову конкретных функций интерфейса lsm.
33
* **get_preprocessed** - осуществляет частичный(раскрываются только макросы ядра) либо полный препроцессинг исходных кодов модуля ядра
34
* **recursion** - программа для детектирования рекурсии(прямой/косвенной) в исходных кодах модуля ядра Linux