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

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


 

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

34389. Прогнозирование и планирование покупательных фондов и товарных ресурсов 37.5 KB
  Рассчитанный таким образом покупательный фонд определяет необходимый объем продажи товаров населению в денежном выражении. К этой величине прибавляется оборот по продаже товаров организациям и учреждениям в порядке мелкооптовой торговли и в результате определяется необходимый объем товарооборота. Дело в том что потребительские ожидания относительно таких факторов как будущие цены на товары наличие товаров и будущий доход способны изменить спрос. Для увязки совокупного спроса на товары народного потребления с товарными ресурсами наряду с...
34390. Формирование структуры товарооборота. Баланс спроса и предложения, его содержание и назначение 41.5 KB
  Чтобы сформировать структуру товарооборота необходимо определить спрос на отдельные группы товаров и сопоставить с ресурсами этих товаров. Структура характеризует соотношение товарных групп и отдельных товаров в общем объеме розничного товарооборота. Соотношение отдельных товарных групп и товаров связано вопервых с их значимостью и вовторых со степенью дополняемости и заменяемости товаров в процессе реализации и потребления. В процессе разработки прогнозов должен осуществляться анализ тенденций изменения структуры товарооборота за...
34391. Внешнеэкономическая политика. Прогнозирование экспорта и импорта 37.5 KB
  Среди моделей получивших широкое применение в мировой практике для прогнозирования экспорта и импорта следует выделить: трендовые модели; функции экспорта и импорта многофакторные модели; комплексные эконометрические модели; модели межотраслевого баланса; матричные модели международной торговли; оптимизационные модели. Трендовые модели у = t b и др. Эти модели используются на стадии составления инерционного прогноза. При конструировании целевого прогноза применяются функции экспорта и импорта многофакторные модели.
34392. Квотирование, лицензирование, валютное регулирование экспорта и импорта 25 KB
  Квотирование К – установление количественных ограничений квот на ввоз и вывоз товаров. Лицензирование Л: для ввоза вывоза определенных товаров требуется получить установленный документ лицензию. Число квотированных товаров по мере приближения цен к мировым снижается. Кроме того лицензированию подлежат экспорт и импорт специфических товаров: товаров и технологий военного и двойного назначения ядерных материалов драгоценных металлов и камней наркотических и психотронных средств ядов.
34393. Определение эффективности ВЭС 29 KB
  Эффективность экспорта продукции Ээ определяется соотношением валютной выручки Вэ к затратам на экспорт Зэ. Если Ээ 1 то экспорт продукции экономически выгоден Ээ = Вэ Зэ. Эффективность импорта продукции Эи определяется соотношением затрат на производство импортозамещающих товаров Зи к валютным расходам на приобретение импортных товаров Ви Эи = Зи Ви. На основе расчетов эффективности экспорта и импорта делается вывод о целесообразности поставок продукции в ту или иную страну и импорта товаров.
34394. Промышленные комплексы. Проблемы их функционирования в современных условиях. Реструктуризация промышленности 34 KB
  Строительство основа строительного комплекса особенностями которого являются длительный период производства продукции и большие затраты трудовых материальных и финансовых ресурсов. Особое внимание при этом предусматривается уделять модернизации наукоемкого сектора промти экспортно ориентированным отраслям и импортозамещающим производствам созданию и развитию производств основанных на прогрессивных технологиях. Предусматриваются следующие важнейшие меропр: реформирование системы гос п п завершение приватизации малых п п и...
34395. Прогнозирование и планирование объема и структуры промышленного производства 33 KB
  На заключительном этапе формируются плановый объем и структура выпуска промышленной продукции с учетом спроса возможностей производства и обеспечения производственными ресурсами. Обосновывается и устанавливается заказ на поставку важнейших видов продукции для государственных нужд. Для прогнозирования спроса и объема производства конкретных видов продукции хорошие результаты дает метод Дельфи . Путем анкетного опроса группы ученых и специалистов по данной проблеме формируется информация по выпуску каждого вида продукции по годам которая...
34396. Сущность и содержание прогнозирования. Роль и характер прогнозов 44.5 KB
  Прогнозирование это процесс разработки прогноза построенный на вероятностном научно обоснованном суждении о перспективах развития объекта в будущем его возможном состоянии и альтернативных путях его достижения. Социальноэкономическое прогнозирование является способом предвидения представления о будущем обусловленном закономерностями общественного развития и действием разнообразных и разнонаправленных факторов в прогнозируемом периоде. В соответствии с Законом О государственном прогнозировании и программах социальноэкономического...
34397. Сущность планирования. Директивное, индикативное, стратегическое планирование, их характеристика 47 KB
  При формировании рыночных отношений в Республике Беларусь необходимо видение перспектив ее экономического и социального развития. Планирование это процесс принятия управленческого решения основанный на обработке исходной информации и включающий в себя определение и научную постановку целей средств и путей их достижения посредством сравнительной оценки альтернативных вариантов и выбора наиболее приемлемого из них в ожидаемых условиях развития. Суть планирования состоит не в разработке и доведении многочисленных показателей до...