65843

УПРАВЛЕНИЕ ФУНКЦИОНАЛЬНОСТЬЮ ЯДРА ОПЕРЦИОННОЙ СИСТЕМЫ

Лабораторная работа

Информатика, кибернетика и программирование

Не вникая в подробности, можно сказать, что схемы идентификации PCI- и USB- устройств парой VendorID — DeviceID по сути одинаковы, поэтому написание своего модуля не составило большой сложности.

Русский

2014-08-09

168.27 KB

1 чел.

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ОТЧЕТ

по лабораторной работе №2

«УПРАВЛЕНИЕ ФУНКЦИОНАЛЬНОСТЬЮ ЯДРА ОПЕРЦИОННОЙ

СИСТЕМЫ»

по курсу «Операционные системы»

Выполнил

студент гр. 2088/4    А.А.Чернышев

                           <подпись>

Руководитель     А.С. Коноплев

                           <подпись>

Санкт-Петербург

2012

  1.  Формулировка задания

Цель работы — изучение ядра ОС UNIX и модульной архитектуры ядра, исследование расширения функциональности ядра ОС.

2. Использованные теоретические сведения

Материалы из методического пособия 02.pdf, “Программирование модулей ядра Linux” Олег Цирюльник.

3. Результаты работы

3.1. Выполнение индивидуального задания

Разработать модуль, который при возникновении прерывания со стороны USB-порта должен выводить на экран сообщение “USB is in use”. 

На начальных этапах выполнения данного задания, возникло множество проблем и вопросов, однако все разрешились по прочтению части замечательной книги  “Программирование модулей ядра Linux”.

Не вникая в подробности, можно сказать, что схемы идентификации PCI- и USB- устройств парой VendorID — DeviceID по сути одинаковы, поэтому написание своего модуля не составило большой сложности.

В книге есть модуль, позволяющий следить за устройствами, VendorID и DeviceID которых занесены в некоторую структуру. Модуль позволяет получать детальную информацию об известном модулю USB-устройстве. В своем модуле я буду следить, только за одни устройством. Это обусловлено тем, что для того, чтобы наш модуль начал следить за устройством, надо для начала убить модули, которые уже работают с устройством.

В качестве устройства, за которым будет вестись “слежка”, был выбран небольшой беспроводной USB-нано-приемник.  

Для начала, подсоединил свое устройство, по команде lsusb в терминале отследил VendorID=046d и DeviceID=c21f, и сразу же в логе (dmesg) отследил, какие модули подключились для работы с моим устройством. По команде lsmod, убедился, что такие модули действительно работают.


Далее я “убиваю” модули:

sleep@FISL-PC:~/my_mod$ sudo rmmod xpad

sleep@FISL-PC:~/my_mod$ sudo rmmod ff_memless 

Проверяю, не осталось ли их:

Удостоверившись, можно, регистрировать свой модуль, но для начала соберем его.

Листинг модуля (usb_module.c):

#include <linux/module.h>

#include <linux/usb.h>

#include <linux/slab.h>

struct my_usb_info {

  int connect_count;

};

#define USB_INFO KERN_INFO "USB-module says: "

static int my_usb_probe( struct usb_interface *intf, const struct usb_device_id *id ) {

  struct my_usb_info *usb_info;

  static int my_counter = 0;

  printk( USB_INFO "Unit has connected!\n" );

  usb_info = kmalloc( sizeof( struct my_usb_info ), GFP_KERNEL );

  usb_info->connect_count = my_counter++;

  usb_set_intfdata( intf, usb_info );

  return 0;

}

static void my_usb_disconnect( struct usb_interface *intf ) {

  struct my_usb_info *usb_info;

  usb_info = usb_get_intfdata(intf);

  printk( USB_INFO "Unit has disconnected!\n" );

  kfree( usb_info );

}

static struct usb_device_id my_usb_table[] = {

  { USB_DEVICE( 0x046d, 0xc21f ) }, // Logitech Inc, F710 Wirelles Gamepad

  { USB_DEVICE( 0x046d, 0xc22f ) },    

  {  },                             

};

MODULE_DEVICE_TABLE( usb, my_usb_table );

static struct usb_driver my_usb_driver = {

  .name = "USB-xPad",

  .probe = my_usb_probe,

  .disconnect = my_usb_disconnect,

  .id_table = my_usb_table,

};

static int __init my_init_module( void ) {

  int err;

  printk( USB_INFO "Hello, USB module is startuping!\n" );

  err = usb_register( &my_usb_driver );

  return err;

}

static void my_cleanup_module( void ) {

  printk( USB_INFO "Goodbye, USB module is shutdowning!\n" );

  usb_deregister( &my_usb_driver );

}

module_init( my_init_module );

module_exit( my_cleanup_module );

MODULE_LICENSE( "GPL v2" );

Листинг Makefile:

CURRENT = $(shell uname -r)

KDIR = /lib/modules/$(CURRENT)/build

PWD = $(shell pwd)

DEST = /lib/modules/$(CURRENT)/misc

TARGET = usb_module

obj-m := $(TARGET).o

default:

$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:

@rm -f *.o .*.cmd .*.flags *.mod.c *.order

@rm -f .*.*.cmd *.symvers *~ *.*~

@rm -fR .tmp*

 @rm -rf .tmp_versions

Листинг скрипта, запускающего процесс сборки модуля (makeit.sh):

make -C /usr/src/linux-headers-3.0.0-17-generic-pae SUBDIRS=$PWD modules

Итак, процесс сборки:

sleep@FISL-PC:~/my_mod$ sudo sh makeit.sh

make: Вход в каталог `/usr/src/linux-headers-3.0.0-17-generic-pae'

 CC [M]  /home/sleep/my_mod/usb_module.o

 Building modules, stage 2.

 MODPOST 1 modules

 CC      /home/sleep/my_mod/usb_module.mod.o

 LD [M]  /home/sleep/my_mod/usb_module.ko

make: Выход из каталога `/usr/src/linux-headers-3.0.0-17-generic-pae'

sleep@FISL-PC:~/my_mod$


Модуль собран, можно его регистрировать:

sleep@FISL-PC:~/my_mod$ sudo insmod usb_module.ko

Для вывода сообщений в окно терминала был написан скрипт (dialog.sh):

dmesg | grep says | tail -n3

Проверяем, зарегистрировался ли модуль (или lsmod | grep usb_module, или посмотреть выдаст ли модуль сообщение о запуске):

sleep@FISL-PC:~/my_mod$ sudo sh dialog.sh

[  468.400341] USB-module says: Hello, USB module is startuping!

Модуль зарегистрирован, подключаем наше устройство, смотрим, что выдаст модуль:

sleep@FISL-PC:~/my_mod$ sudo sh dialog.sh

[  911.933938] USB-module says: Hello, USB module is startuping!

[  911.933966] USB-module says: Unit has connected!

А теперь отключим устройство:

sleep@FISL-PC:~/my_mod$ sudo sh dialog.sh

[  911.933938] USB-module says: Hello, USB module is startuping!

[  911.933966] USB-module says: Unit has connected!

[  954.229947] USB-module says: Unit has disconnected!

После проверки работоспособности можем удалить модуль:

sleep@FISL-PC:~/my_mod$ sudo rmmod usb_module

sleep@FISL-PC:~/my_mod$ sudo sh dialog.sh

[  911.933966] USB-module says: Unit has connected!

[  954.229947] USB-module says: Unit has disconnected!

[  981.880705] USB-module says: Goodbye, USB module is shutdowning!

Модуль справляется с поставленной задачей полностью, и его можно дорабатывать дальше.

3.2. Ответы на контрольные вопросы

Что такое драйвер устройства?

Драйвер устройства - это компьютерная программа, с помощью которой другая программа (обычно операционная система) получает доступ к аппаратному обеспечению данного устройства. В общем случае, для использования любого устройства (как внешнего, так и внутреннего) необходим драйвер. Обычно с операционными системами поставляются драйверы для ключевых компонентов аппаратного обеспечения, без которых система не сможет работать. Однако для некоторых устройств (таких, как видеокарта или принтер) могут потребоваться специальные драйверы, обычно предоставляемые производителем устройства.

Каковы функции утилиты modprobe?

Когда ядро обнаруживает необходимость в тех или иных функциональных возможностях, еще не загруженных в память, то демон kmod вызывает утилиту modprobe, передавая ей строку в виде: <название модуля> <универсальный идентификатор>, например: softdog charmajor-10-30.

Что содержат части top half и bottom half функции-обработчика прерывания?

В top half выполняются минимальные действия по обнаружению прерывания и получению его

параметров, а в bottom half— все остальные нужные действия.

Каково назначение файловой системы /proc?

Первоначально она создавалась с целью получения сведений о процессах, теперь она интенсивно используется и самим ядром. Например, /proc/modules — список загруженных модулей,

/proc/meminfo— статистика использования памяти.

С какой целью используются ioctl-управляющих кодов?

Для получения служебной информации или выполнения манипуляции по настройке устройства, используются ioctl-управляющие коды. Передача таких кодов устройству заставляет его выполнить запрошенные действия.

4. Выводы

В данной работе были исследованы основные особенности работы с ядром операционной системы.


 

А также другие работы, которые могут Вас заинтересовать

68125. Хвойні ліси – скарб рідного краю 51 KB
  Хід заходу 1 учень: Цей ліс живий. 2 учень: Малі озерця блискають не злісно Колише хмара втомлені громи. Хіба можна кривдити таку красу Роздивляємось виставку репродукцій картин відомих художників Учитель: Діти уявіть якби дерева зникли що тоді сталося б Учні висловлюють свої...
68126. Літературна гра «У світі казок» 71 KB
  А чи замислювалися ви коли-небудь над тим звідки беруться казки Ось як цікаво на це запитання відповів відомий фінський письменник казкар Закаріас Топеліус Як настане літо вийдіть дуже рано в поле коли роса лежить на траві там блищать тисячі казок мов діаманти. Потім на берег моря де на воді граються...
68127. Караюсь, мучуся… Але не каюсь! 76 KB
  Діючі особи: Тарас Шевченко Фельдєгер конвоїр Сидорчук вартовий в Орській фортеці Андрій Козловський засуджений Мєшков офіцер Лаврентьєв писар Друг Шевченка засуджений Абдрахман киргиз Кульжан донька Абдрахмана Бутаков офіцер Тищенко солдат Фундуклей губернатор Києва Думки Шевченка читці поезій...
68128. Слова в вірші – і рай в душі 78.5 KB
  Мета: поглибити учнівські знання з теорії літератури ідейнохудожнього аналізу поетичного твору удосконалювати вміння виразного читання; розвивати поетичне мислення образну уяву; виховувати любов до художнього слова та до рідної природи. Я зачитуватиму поетичні рядки а ви повинні підставити...
68129. Інтелектуальна гра «Літературна веселка» Ти завжди в серцях людей, Тарасе! 43.5 KB
  Шевченка розвивати логічне мислення виразне читання виховувати повагу до Шевченкового слова та цікавість до вивчення його творчості. Тарас Шевченко Тарас Це бунтівне пророче імя знайоме не тільки українцям а й усьому світові. Шевченко це криниця з джерельною водою яка втамовує духовну спрагу народу.
68130. Знайомство з країною Логікою 28.5 KB
  Сьогодні діти ми відправляємось у незвичайну подорож. Діти ходять до школи найкоротшим шляхом але можуть годинами блукати різноманітними лабіринтами. Діти імітують посадку на автобус і їзду. Ось компанія яка У якій послідовності сидять діти Боря Петрик Юрко Віра Стас Іра.
68131. Аналогія. Добір малюнків за аналогією 263.5 KB
  Тип уроку: урок засвоєння умінь і навичок Обладнання: геометричні фігури і предметні малюнки до гри Фотограф; індивідуальні набори геометричних фігур гралото малюнки з послідовністю. Міняю місцями фігури деякі взагалі прибираю. Всі фігури різного кольору А тепер відкрийте очі подивіться...
68132. Подорож по океану логічних завдань 27.5 KB
  Мета: Познайомити дітей з різними поняттями; розвивати мислення, мову, пам’ять, спостережливість; виховувати сміливість, рішучість. Хід уроку Повідомлення теми і мети уроку. Сьогодні ми вирушаємо у кругосвітню подорож на кораблі. Нас чекає багато різних пригод. Людина – мисляча істота. Думки словами виражає.
68133. Сумісні та несумісні поняття. Завдання для повторення 84.5 KB
  Мета: узагальнити й систематизувати знання учнів про поняття про сумісні та несумісні поняття вдосконалювати вміння учнів розвязувати логічні завдання розвивати логічне мислення кмітливість увагу память уяву; виховувати любов до тварин пробуджувати пізнавальний інтерес до всього живого формувати самоосвітні...