ОС осень 2016 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
Строка 7: Строка 7:
 
=== Примеры кода ===
 
=== Примеры кода ===
  
* [[Медиа:Src.zip|первая порций кода]] - к лекции/практике 13 сентября его нужно научиться собирать, запускать и отлаживать;  
+
* [[Медиа:Src.zip|первая порция кода]] - к лекции/практике 13 сентября его нужно научиться собирать, запускать и отлаживать;  
  
 
=== Слайды с лекций ===
 
=== Слайды с лекций ===
Строка 13: Строка 13:
 
=== Как пользоваться QEMU и gdb ===
 
=== Как пользоваться QEMU и gdb ===
  
Чтобы запустить ОС (пусть файл ОС называется kernel) в qemu нужно сделать следующее:
+
Чтобы запустить ОС (пусть файл ОС называется 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 


Полезные материалы