-
Notifications
You must be signed in to change notification settings - Fork 10
/
README.ru_RU.UTF-8
76 lines (66 loc) · 7.08 KB
/
README.ru_RU.UTF-8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
The Qemu device model source code generator.
Разработка новой платформы для эмулятора QEMU в самом развёрнутом случае
включает в себя реализацию следующего:
- передний план TCG для архитектуры нового процессора;
- модель нового процессора;
- логика работы системы управления памятью;
- модели периферийных устройств;
- опции запуска, уникальные для данной платформы;
- расширенные возможности внутреннего API Qemu;
- интеграция всего перечисленного в новую платформу.
В каждом конкретном случае этот перечень может сокращаться. Например, в Qemu
уже может быть нужный процессор, передний план TCG, и система управления
памятью. Часть устройств уже может быть реализована. Перечень опций запуска
может быть достаточен.
Целью данного проекта является автоматизация следующих частей вышеописанного
процесса:
1. реализация новых устройств;
2. интеграция платформы.
Каждую модель устройства можно условно разделить на индивидуальную и
интерфейсную части.
Индивидуальная часть есть суть этого устройства: то, чем это
устройство является. На практике она может быть описана в спецификации,
восстановлена из драйвера или альтернативной реализации и т.д. Вплоть до
описания на естественном языке. Эта часть не затрагивается данным проектом.
Интерфейсная часть есть программный код, который формально встраивает
индивидуальную часть в эмулятор: служит связующей оболочкой для двустороннего
взаимодействия. Замечено, что большая часть этого кода настолько похожа среди
устройств, что можно реализовать её автоматическую генерацию. При этом из
сравнительно короткого описания будет мгновенно получено большие количество
кода (заготовка устройства). Кроме того будут дополнены существующие файлы
таким образом, чтобы встроить заготовку в эмуллятор, сделав её доступной для
использования в платформах. Таким образом, код заготовки непосредственно можно
будет скомпилировать и запустить. Программисту останется реализовать
индивидуальную часть. При этом подразумевается использование средств
рефакторинга кода. Практически только переименования достаточно, чтобы привести
сгенерированные имена с соответствие со стилем программирования принятым в Qemu.
Имея законченный перечень устройств (как новых, так и существующих), можно
автоматически сгенерировать функцию инициализации, осуществляющую интеграцию
платформы. При условии полноценной реализации всех используемых устройств
сгенерированная платформа сразу является рабочим прототипом. В дальнейшем можно
реализовать её настройку через командную строку и прочую расширенную
логику.
Данный проект реализует генератор платформ, позволяющий по короткому описанию
на языке Python 2.x сгенерировать прототип платформы. Подразумевается
использование классов Python, предоставляемых передним планом данного проекта.
Для упрощения проектирования платформ и устройств проект содержит графический
пользовательский интерфейс.
Среди прочего, при достижении цели проекта применяется следующее:
- генерация фрагментов кода на языках Си и его препроцессора в правильном
порядке относительно друг друга;
- вычисление минимального количества подключаемых заголовочных файлов;
- применение соглашений о написании кода: отступы, ограничение ширины до 80
символов и т.д.;
- эстетическая сортировка фрагментов кода: код выглядит лучше, если связанны
по смыслу фрагменты расположены рядом (другие эвристики);
- представление платформы на диаграмме, позволяющей легче увидеть взаимосвязь
узлов;
- обратимая история изменений, позволяющая выборочно отменить не конфликтующие
операции;
- средства облегчающие заполнение параметров, основанные на автоматическом
анализе исходного кода конкретной версии Qemu;
- эвристический анализатор корректности текущей модели;
- инструментарий, облегчающий циклическую разработки (внесение изменений в
модель после работы программиста над сгенерированным кодом), основанный на Git;
- расширяемый механизм адаптации всех инструментов проекта к работе с разными
версиями Qemu (с привязкой к SHA1 идентификатору версии).