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. Выводы

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


 

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

53565. Практичне заняття щодо використання Законів Кеплера 1.73 MB
  На уроках астрономії в школі обмежується як правило вивченням формулювань і використанням законів для розрахунку параметрів руху планет сонячної системи відповідно до третього закону. Кеплера і практично використати їх для розрахунку часу мандрівки до планет сонячної системи. Всі планети обертаються навколо Сонця по еліптичним орбітам в одному з фокусів яких знаходиться Сонце; 2.Радіусвектор планети за рівні проміжки часу замітає однакові площі; 3.
53566. Класне керівництво - це не робота, це спосіб життя 100 KB
  Організатором діяльності учнів у класі координатором впливів був і залишається класний керівник як автор і як скульптор. Будучи класним керівником вважаю що метою виховного процесу є виховання вільної талановитої фізично здорової особистості збагаченої науковими знаннями естетичними смаками готової до творчої трудової діяльності яка досягається через формування в учнів морального ставлення до оточуючих людей і усвідомлення цінності людського життя через формування культури інтелектуального розвитку і...
53567. Акционерное финансирование 24.5 KB
  Привлечение инвестиционных ресурсов в рамках метода акционерного финансирования осуществляется посредством дополнительной эмиссии обыкновенных или привилегированных акций.
53568. Ознайомлення з клавіатурою ПК 65.5 KB
  Клавіатура призначена для введення символьної інформації до ПК та для управління роботою ПК. За своїм призначенням всі клавіші поділяються на 5 полів: основна клавіатура; функціональна клавіатура; цифрова клавіатура; клавіатура керування курсором і редагування; поле індикації. Основна клавіатура Ця клавіатура має дві групи клавіш: білі клавіші для введення алфавітноцифрової інформації; сірі клавіші керування. Алфавітноцифрова клавіатура має чотири ряди символьних клавіш на яких зображені чорним кольором латинські літери...
53569. Відсоткові розрахунки. Формула складних відсотків 547.5 KB
  Формула складних відсотків Клас 9 Час заняття 2 години Тип кейсу аналітичний Cseincident method Вид кейсу учбовий. Формула складних відсотків Перед учителем математики стоїть завдання: у який з банків міста Біла Церква вчителю вигідно вкласти депозит у сумі 5 000 грн. Як вигідно вкласти кошти: з капіталізацією відсотків складний відсоток або без капіталізації відсотків простий відсоток. Для вирішення проблеми підготовлений кейс у якому запропоновано інформація про депозити; інформація про нарахування складних і простих...
53570. Управление запасами 29 KB
  Большая величина инвестиций, необходимых для создания запасов материалов группы А и В требуют применения специальных методов для управления их запасами.
53571. Кейс-технология на уроках русского языка 4.22 MB
  Респондентам людям от 15 до 25 лет было предложено объяснить значения слов которые широко употреблялись представителями предыдущих поколений: честь совесть этика мораль патриотизм и др. Респондентам людям от 15 до 25 лет было предложено объяснить значения слов которые широко употреблялись представителями предыдущих поколений: честь совесть этика мораль патриотизм и др. Респондентам людям от 15 до 25 лет было предложено объяснить значения слов которые широко употреблялись представителями предыдущих поколений: честь...
53572. Продукти харчування і здоров’я 156.5 KB
  Мета уроку: Навчальна: формування поняття про харчові добавки штрихкод генномодифіковані продукти. Форма проведення: урокконсультація Тип уроку: урок засвоєння нової інформації Обладнання: виставка інформаційних джерел про здорове харчування і харчові добавки; епіграф уроку; плакати про штрихкод шкідливі добавки про правила покупця; чорний ящик; набори упаковок продуктів...
53573. Харківщина - моя Батьківщина 169 KB
  Кожна дитина повинна зрозуміти що не тільки вчитель а й сам він учень є вихованцем самого себе як індивідуальності а саме: вдосконалювати себе поєднувати в собі єдність слова і діла поглядів і вчинків моралі і поведінки та розвивати традиції народу. Звучить пісня Бабаї Учень Що стоїть за словом Батьківщина Може то садочок пишним цвітом Чи криниця з чистою водою Поле що так смачно пахне літом Чи стеблина поєна росою Учень Знаєш брате мабуть Батьківщина То наша родина й домівка То земля що зветься Україна То село якому...