ОС осень 2016 — различия между версиями
Krinkin.m (обсуждение | вклад) |
Krinkin.m (обсуждение | вклад) |
||
| Строка 7: | Строка 7: | ||
=== Примеры кода === | === Примеры кода === | ||
| − | * [[Медиа:Src.zip|первая | + | * [[Медиа:Src.zip|первая порция кода]] - к лекции/практике 13 сентября его нужно научиться собирать, запускать и отлаживать; |
=== Слайды с лекций === | === Слайды с лекций === | ||
| Строка 13: | Строка 13: | ||
=== Как пользоваться QEMU и gdb === | === Как пользоваться QEMU и gdb === | ||
| − | Чтобы запустить ОС (пусть файл ОС называется kernel) в | + | Чтобы запустить ОС (пусть файл ОС называется kernel) в QEMU нужно выполнить следующую команду: |
qemu-system-x86_64 -kernel kernel | qemu-system-x86_64 -kernel kernel | ||
| + | |||
| + | Чтобы перенаправить вывод последовательного порта в консоль используйте опцию -serial stdio: | ||
| + | |||
| + | qemu-system-x86_64 -kernel kernel -serial stdio | ||
| + | |||
| + | Чтобы подключать gdb к QEMU используйте опцию -s: | ||
| + | |||
| + | qemu-system-x86_64 -kernel kernel -serial stdio -s | ||
| + | |||
| + | Чтобы подключиться gdb к QEMU запущенному с опцией -s сделайте следующее: | ||
| + | |||
| + | gdb kernel | ||
| + | |||
| + | Из файла kernel gdb возьмет отладочную информацию. Например, какие строки кода каким процессорным | ||
| + | командам соответсвуют, из каких файлов собрано приложение, какие имена у переменных и каким адресам | ||
| + | в памяти они соответсвуют. | ||
| + | |||
| + | Далее внутри gdb: | ||
| + | |||
| + | set architecture i386:x86-64 | ||
| + | target remote localhost:1234 | ||
| + | |||
| + | если все прошло успешно, вы должны подключиться к QEMU, и он должен оставновить выполнение на текущей | ||
| + | исполняемой инструкции. | ||
| + | |||
| + | Чтобы вы могли оставновиться в самом начале функции main и не проскачить мимо кода, который выхотите | ||
| + | отлаживать соберите исходники с ключем -DEBUG: | ||
| + | |||
| + | make clean && make -DEBUG | ||
| + | |||
| + | Этот ключик активирует бесконечный цикл: | ||
| + | |||
| + | static volatile int wait = 1; | ||
| + | while (wait); | ||
| + | |||
| + | После запуска приложение остановится в этом цикле. Чтобы продолжить выполнение нужно изменить значение | ||
| + | переменной wait с помощью gdb следующим образом: | ||
| + | |||
| + | set var wait=0 | ||
| + | |||
=== Полезные материалы === | === Полезные материалы === | ||
| Строка 24: | Строка 64: | ||
* [[Медиа:Intel-8259a.pdf|спецификация Intel 8259]] | * [[Медиа:Intel-8259a.pdf|спецификация Intel 8259]] | ||
* [[Медиа:8254.pdf|спецификация Intel 8254]] | * [[Медиа:8254.pdf|спецификация Intel 8254]] | ||
| + | * [https://www.recurse.com/blog/5-learning-c-with-gdb введение в gdb] | ||
Версия 15:30, 6 сентября 2016
Содержание
Общая информация
Лектор — Кринкин Михаил (krinkin.m.u@gmail.com)
Практики — Кринкин Михаил (krinkin.m.u@gmail.com), Новокрещенов Константин (k.novokreshchenov@gmail.com )
Примеры кода
- первая порция кода - к лекции/практике 13 сентября его нужно научиться собирать, запускать и отлаживать;
Слайды с лекций
Как пользоваться QEMU и gdb
Чтобы запустить ОС (пусть файл ОС называется kernel) в QEMU нужно выполнить следующую команду:
qemu-system-x86_64 -kernel kernel
Чтобы перенаправить вывод последовательного порта в консоль используйте опцию -serial stdio:
qemu-system-x86_64 -kernel kernel -serial stdio
Чтобы подключать gdb к QEMU используйте опцию -s:
qemu-system-x86_64 -kernel kernel -serial stdio -s
Чтобы подключиться gdb к QEMU запущенному с опцией -s сделайте следующее:
gdb kernel
Из файла kernel gdb возьмет отладочную информацию. Например, какие строки кода каким процессорным командам соответсвуют, из каких файлов собрано приложение, какие имена у переменных и каким адресам в памяти они соответсвуют.
Далее внутри gdb:
set architecture i386:x86-64 target remote localhost:1234
если все прошло успешно, вы должны подключиться к QEMU, и он должен оставновить выполнение на текущей исполняемой инструкции.
Чтобы вы могли оставновиться в самом начале функции main и не проскачить мимо кода, который выхотите отлаживать соберите исходники с ключем -DEBUG:
make clean && make -DEBUG
Этот ключик активирует бесконечный цикл:
static volatile int wait = 1; while (wait);
После запуска приложение остановится в этом цикле. Чтобы продолжить выполнение нужно изменить значение переменной wait с помощью gdb следующим образом:
set var wait=0