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 |