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

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


 

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

85487. Улучшение качества предлагаемых услуг и повышения эффективности использования капитала на ОАО «Приморье-64» 878.5 KB
  Главным определяющим признаком основных фондов выступает способ перенесения стоимости на продукт постепенно: в течение ряда производственных циклов частями: по мере износа. Износ основных фондов учитывается по установленным нормам амортизации сумма которой включается в себестоимость продукции.
85488. Внедрение CRM-системы для автоматизации отдела продаж на примере компании ООО «Актив Групп» 1.63 MB
  И сегодня большинство руководителей компаний начали понимать, что одна оптимизация производства уже не решает проблему выживания. Особенно это заметно в сфере услуг, где компании зависят не столько от качества самих продуктов или услуг, сколько от совершенства механизмов взаимодействия компании со своими клиентами.
85489. Разработка АРМ работника отдела сбыта на примере ЗАО «Луганский трубный завод» 985.5 KB
  Программа осуществляет обработку заказов для каждого из грузополучателей и выдачу результатов по остаткам спецификаций на печать. Программа работают совместно с ПО, осуществляющим выдачу результатов запросов на экран монитора и принтер.
85490. Анализ системы документооборота в ОАО «Сбербанк России» 1.94 MB
  В рамках автоматизации процесса обработки документа в организации начиная с момента его создания или получения и заканчивая моментом отправки корреспонденту или завершения исполнения и списания в дело должно быть обеспечено осуществление следующих функций: во-первых регистрация входящих в организацию документов...
85491. Розробка технологічного процесу механічної обробки деталей насоса – корпуса та вала 2.67 MB
  Деталь конструктивно подана як циліндричний вал з наявністю торцевих проточок шпонкового пазу евольвентних шліців а також внутрішньої різьбової поверхні. Відхилення від торцевого биття поверхні 2 відносно центральної осі становить не більше 003 мм.
85492. Информационные технологии в управлении персоналом на ОАО «Завод «НЕФТЕПРОММАШ» 2.61 MB
  В первой главе освещены теоретические основы управления персоналом организации. Представлена характеристика организации, определенны миссия и задачи организации. Показана организационная структура. Определены сущность и характеристики управления персоналом, рассмотрены требования...
85493. ВЫРАБОТКА РЕКОМЕНДАЦИЙ ПО ОРГАНИЗАЦИИ И ПРОВЕДЕНИЮ КОРРЕКТУРЫ НАВИГАЦИОННЫХ КАРТ И ПОСОБИЙ ПРИ ПОДГОТОВКЕ К РЕЙСУ И В ПЕРИОД ПЛАВАНИЯ 699 KB
  Цель дипломной работы – разработка рекомендаций и проведение корректуры навигационных карт и пособий при подготовке к рейсу и в период плавания. В процессе выполнения дипломной работы получены рекомендации по организации и проведению корректуры бумажных и электронных карт и пособий.
85494. Расчет и проектирование сосуда для хранения агрессивных жидкостей 320.3 KB
  Для владельцев автомобилей экономически целесообразно, особенно в настоящее время, при быстром росте цен на топливо, купить емкость для хранения бензина или дизтоплива. Имея такие емкости автовладелец может не зависеть от сезонных колебаний цен на топливо.
85495. Методы поддержки малого бизнеса в муниципальном образовании на основе разработки программы поддержки и развития малого инновационного бизнеса 656.5 KB
  Формирование и развитие рыночных отношений предполагают свободное и равноправное сосуществование и развитие различных форм собственности и секторов внутри каждой формы собственности. Особое место в экономике России на этапе рыночных преобразований принадлежит малому предпринимательству.