Лабораторија 12 вежби CS Отворен курс
Лабораториска подготовка
За да ја решиме лабораторијата, ќе работиме во истиот директориум од кој ја стартуваме виртуелната машина (

Чекорите за решение се како што следува:
Подготовка на лабораториски скелет
Рамката на лабораторијата е генерирана од извори во директориумот алатки/лаборатории/шаблони. Можеме да генерираме скелети за сите лаборатории користејќи ја следнава команда:
За да генерираме скелет за единствена лабораторија, ќе ја користиме променливата на животната средина LABS:
Слично на тоа, можеме да генерираме скелет за една вежба, доделувајќи ја вредноста/променливата на LABS .
Составување модули
Командата make build ги собира сите модули во директориумот skels .
Копирање модули на виртуелната машина
Можеме да ги копираме генерираните модули на виртуелната машина користејќи ја целта за копирање на командата маке, кога виртуелната машина е запрена.
Алтернативно, можеме да ги копираме датотеките преку scp за да избегнеме рестартирање на виртуелната машина. За детали за користење мрежна интеракција со виртуелната машина, прочитајте Интеракција со виртуелната машина.
Тестирање на модулите
Генерираните модули се копираат во виртуелната машина во директориумот/home/root/skels/.
По стартувањето на виртуелната машина QEMU ќе можеме да користиме команди во прозорецот QEMU (или во minicom) за вчитување и преземање на модулот на јадрото:
/ so2/linux/со извори на јадра, каде што можеме да користиме Vim и cscope за прелистување на изворниот код.
Вежби
/ so2/linux, за да ја добиете најновата верзија на лабораториската рамка.
[0,5 стр] Вовед
Ви благодарам! Пронајдете ги дефинициите на следниве симболи во јадрото на Linux:
Пополнување на образецот за повратни информации
Ние го цениме вашето мислење за активностите на курсот SO2. Ни помага да го подобриме текот и да ја направиме темата што е можно подостапна и интересна. За ова, пополнете го формуларот за повратни информации на cs.curs.pub.ro (мора да бидете најавени и запишани на курсот). Ви благодарам!
1. [2p] Имплементација на автобус
Анализирајте ја содржината на датотеката bex.c, која содржи имплементација на возач на автобус. Следете ги коментарите обележани со TODO 1 за да ги имплементирате деловите што недостасуваат: регистрирајте го возачот на автобусот и додадете нов уред, наречен root, без ниеден тип и верзија 1 .
Компајлирајте, копирајте го модулот на виртуелната машина, вчитајте го во јадрото и проверете дали уредот за магистрала е видлив во/sys/bus. Исто така, проверете дали уредот е видлив во/sys/bus/bex/уреди. .
Отстранете го модулот и забележете дека записите во sysfs се отстранети.
2. [2p] Додадете атрибути за видот и верзијата
Додадете два атрибути само за читање: тип и верзија. Следете ги коментарите обележани со ТОДО 2 .
Забележете дека двата нови атрибути се видливи во/sys/bus/bex/уреди/root. Проверете ја содржината на овие атрибути.
Имплементација за функцијата за приказ на типот е
3. [2p] Додај атрибути del и додаде
Додадете два атрибути само за пишување, наречени del и додајте. del чека името на уредот да го отстрани и додатокот чека името, видот и верзијата да создаде нов уред. Следете ги коментарите обележани со ТОДО 3 .
Пример за функција на продавница е:
Создадете нов уред и проверете дали е видлив во/sys/bus/bex/уреди. Отстранете го и проверете дали исчезнал од sysfs .
4. [2p] Регистрирање на возачот за разни bex
Изменете ја датотеката bex-misc.c за да го регистрирате возачот во магистралата bex. Вметнете го модулот bex_misc.ko и креирајте нов bex уред од sysfs, со името Тест, различен тип и верзија 2. Следете ги коментарите обележани со TODO 4 .
Проверете дали новиот возач е видлив во/sys/bus/bex/возачите. Зошто функцијата за повик не се повикува ?
Спроведете ја функцијата за совпаѓање во датотеката bex.c. Следете ги коментарите обележани со ТОДО 5. Обидете се повторно да додадете бек-уред и забележете дека овојпат се повикува тест-функцијата.
5. [1.5p] Снимање на погрешен уред на bex во функцијата примерок
Изменете го bex_misc.c така што операцијата на примерокот не успее ако верзија> 1. Регистрирајте го погрешниот уред во функцијата bex_misc_probe () и откажете го од bex_misc_remove. Следете ги коментарите обележани со ТОДО 6 .
Создадете нов уред со име на тест, погрешен тип и верзија 2 и проверете дали операцијата на примерокот не успее. Создадете нов уред со тест име, погрешен тип и верзија 1 и проверете дали операцијата заврши успешно.
Проверете ја содржината на датотеката/sys/bus/bex/уреди/тест и забележете дека има нов запис. Идентификувајте ги главните и помалите за различниот уред, создадете јазол за тип на уред за овој уред (Совет: mknod) и обидете се со операции за читање и запишување на креираната датотека за пристап до тампон на уредот.
6. [1p] Следење на големи известувања
Користете ја командата udevadm и видете што ќе се случи кога: