Linux
<<  Драйверы LINUX СТАТИЧЕСКИЕ и ДИНАМИЧЕСКИЕ БИБЛИОТЕКИ в LINUX  >>
Картинок нет
Картинки из презентации «Работа с внешними устройствами linux» к уроку информатики на тему «Linux»

Автор: GUN. Чтобы познакомиться с картинкой полного размера, нажмите на её эскиз. Чтобы можно было использовать все картинки для урока информатики, скачайте бесплатно презентацию «Работа с внешними устройствами linux.ppt» со всеми картинками в zip-архиве размером 329 КБ.

Работа с внешними устройствами linux

содержание презентации «Работа с внешними устройствами linux.ppt»
Сл Текст Сл Текст
1Работа с внешними устройствами linux. 42model name : pentium II (deschutes)
2Классы устройств и модулей. Linux stepping : 2 cpu mhz : 400.913520 cache
разделяет все устройства на три основных size : 512 KB fdiv_bug : no hlt_bug : no
типа. Каждый модуль, как правило, sep_bug : no f00f_bug : no coma_bug : no.
реализует функциональность одного из этих 43Примеры. fpu : yes fpu_exception : yes
типов и отсюда может классифицироваться cpuid level : 2 wp : yes flags : fpu vme
как символьный модуль, блочный модуль или de pse tsc msr pae mce cx8 apic sep mtrr
сетевой модуль. Ниже приводятся краткие pge mca cmov pat pse36 mmx fxsr bogomips :
описания этих трех классов: Символьные 399.77 Наилучший путь для получения
устройства Символьное устройство - информации из этого вывода – запись из
устройство, которое поставляет данные как файла в буфер и далее парсить в память
поток байтов. Драйвер символьного используя функцию sscanf. Нужно помнить,
устройства отвечает за реализацию что имена, семантика и формат выводимых
поддержки такого поведения. Такие драйверы данных может измениться в новых версиях
реализуют как минимум четыре системных ядра Linux. Поэтому при запуске программ
вызова: open, close, write и read. Примеры нужно проверять содержание /proc.
таких устройств - текстовая консоль 44Примеры. Методические указания 1)
(/dev/console) и последовательный порт Перед началом работы выполнить команду
(/dev/ttyS*). #cat /proc/cpuinfo и убедиться в названии
3Классы устройств и модулей. К полей для тактовой частоты, идентификатора
символьным устройствам можно обращаться производителя и т.д. 2) В случае если
посредством элементов файловой системы. используется текстовый буфер, нужно делать
Важное отличие обычных файлов от проверку на его заполнение. 3) В конце
символьных устройств заключается в том, символьной строки нужно добавлять значение
что программа может перемещаться по файлам конца строки \0 4) Для работы с полученной
вперёд и назад, в то время как символьные информацией можно воспользоваться
устройства это лишь каналы передачи стандартными текстовыми функциями
данных, доступ к которым осуществляется в sscanf(), strstr() и т.д. Описание их
заданном порядке. Блочные устройства К можно найти по команде man.
блочным устройствам так же можно 45Примеры. 5) Значение тактовой частоты
обращаться посредством элементов файловой процессора дробное, поэтому при выводе
системы в каталоге /dev. Примером блочного информации на экран нужно указать тип
устройства может служить жёсткий диск. данных float с 3-4 знаками после запятой.
Обмен данными с блочным устройством 6) Засечь время выполнения программы можно
производится порциями байт - блоками. любым из описанных выше способов. Код
4Классы устройств и модулей. В программы доступен здесь.
большинстве Linux-систем размер одного 46Примеры. Опрос и управление модемом
блока равен 1 килобайту или другому числу, (последовательный порт) Задание:
являющемуся степенью числа 2. Linux Необходимо сконфигурировать
позволяет приложениям обращаться к последовательный порт, опросить модем,
блочному устройству так же как к послать ему последовательность AT-команд и
символьному он разрешает передачу любого вывести результат на экран. Вывести на
числа байт в блоке. В результате, все экран время выполнения программы. Краткие
различие между блочными и символьными теоретические сведения: Последовательная
устройствами сводится к внутреннему передача подразумевает передачу данных
представлению данных в ядре. Драйвер посылкой в один бит и применяется в
блочного устройства реализует точно такой большинстве сетевых устройств,
же интерфейс с ядром, что и драйвер клавиатурах, модемах и терминалах.
символьного устройства, но дополнительно Стандартный электрический интерфейс для
реализуется еще и блочно-ориентированный последовательной передачи данных - RS-232.
интерфейс, который "невидим" для 47Примеры. Linux предоставляет доступ к
пользователя или приложения, которые последовательным портам через файлы
открывают доступ к блочному устройству устройств. Для доступа к последовательному
посредством псевдофайловой системы /dev. порту необходимо открыть соответствующий
5Классы устройств и модулей. Сетевые файл устройства. Каждый последовательный
интерфейсы Любой сетевой обмен выполняется порт в системе Linux имеет несколько
через сетевой интерфейс, то есть файлов устройств (файлы в каталоге
устройство, которое способно обмениваться /dev/ttyS0, /dev/ttyS1 ) Для открытия
данными с другими узлами сети. Как используется функция open(): fd =
правило, это аппаратное устройство, но open("/dev/ttyf1", O_RDWR |
возможна и программная реализация сетевого O_NOCTTY | O_NDELAY); При открытии
устройства, например петлевое устройство устанавливаются два дополнительных флага
loopback. Сетевой интерфейс отвечает за вместе с режимом чтение/запись: O_NOCTTY -
передачу и получение пакетов данных, программа не является управляющим
которыми управляет сетевая подсистема терминалом для этого порта.
ядра, не зная о том, к каким соединениям 48Примеры. O_NDELAY - программа не
эти пакеты принадлежат. Не смотря на то, следит за состоянием сигнала DCD (то есть
что соединения по протоколам Telnet и FTP что другой конец линии запущен). Если не
используют один и тот же сетевой установить этот флаг, то процесс не будет
интерфейс, само устройство не различает работать до тех пор пока на линии DCD не
эти соединения, оно "видит" появится уровень space (off). Для записи
только пакеты данных. данных в порт используется системный вызов
6Классы устройств и модулей. Файловые write() n = write(fd, "ATZ\r",
системы Кроме драйверов устройств, самым 4); Функция write возвращает количество
важным классом модулей в Linux являются посланных байт или -1 при возникновении
файловые системы. Тип файловой системы ошибки. В случае, если идет работа с
обусловливает способ организации портом в режиме неструктурированного
информации на блочном устройстве, это посимвольного обмена, каждый системный
программный драйвер, потому что он вызов read() будет каждый раз возвращать
отображает структуры данных нижнего уровня число прочитанных символов в буфер ввода.
на структуры данных верхнего уровня. 49Примеры. Если в текущий момент нет
Файловая система определяет какой длины символов доступных для чтения, вызов будет
могут быть имена файлов и какая информация блокироваться до тех пор, пока не появятся
о каждом из файлов должна храниться. символы для чтения, или закончится счетчик
Файловая система должна реализовать самый таймаута, или обнаружится какая-нибудь
нижний уровень системных вызовов для ошибка. Функцию read можно выполнить так,
доступа к каталогам и файлам, путем что она вернет управление немедленно.
отображения их имён (и иной информации, fcntl(fd, F_SETFL, FNDELAY); Опция FNDELAY
такой как права доступа и пр.) в структуры указывает функции read возвращать 0 если
данных, которые записываются в блоки нет символов доступных для чтения из
данных. последовательного порта. Для закрытия
7Работа со временем. Часто требуется последовательного порта нужно использовать
засекать время выполнения программы, это функцию close(). Конфигурирование
можно сделать с помощью разных методов, но последовательного порта предполагает
все они базируются на прерываниях от изменение определенных атрибутов.
таймера. Прерывания от таймера 50Примеры. Большинство систем
представляют собой механизм, используемый поддерживает последовательный интерфейс
ядром для получения требуемых интервалов POSIX для изменения параметров, таких как
времени. Прерывания представляют собой скорость передачи, размер символов и т.д.
асинхронные события, которые обычно Две наиболее важные функции POSIX:
генерируются каким-либо внешним физическим tcgetattr() и tcsetattr(). Они,
устройством. При этом CPU прерывает соответственно, позволяют получить и
исполнение своей текущей задачи, и установить терминальные атрибуты.
начинает исполнять специальный код Необходимо предоставить указатель на
обработчика прерывания. структуру termios, которая содержит все
8Работа со временем. Прерывания таймера доступные опции для последовательного
генерируются специальным системным интерфейса.
электронным компонентом через равные 51Примеры. c_cflag. Управляющие опции.
заданные промежутки времени. Значение c_lflag. Опции линии. c_iflag. Опции
интервала времени устанавливается ядром, ввода. c_oflag. Опции вывода. c_cc.
измеряется в Гц, является Управляющие символы. c_ispeed. Скорость
архитектурно-зависимым, и определено в ввода в бодах. c_ospeed. Скорость вывода в
заголовочном файле <linux/param.h> бодах. Поля структуры termios.
макроопределением HZ. Современный Linux, 52Примеры. Поле c_cflag управляет
на большинстве платформ, использует скоростью передачи данных, количеством
прерывания с частотой 100 Гц. Некоторый битов данных, четностью, стоп-битами, и
платформы используют значение 1024 Гц. установкой аппаратного управления потоком
Каждый раз, когда возникает прерывание от передачи данных. c_cflag содержит две
таймера, инкрементируется значение опции, которые всегда должны быть
переменной jiffies. jiffies установлены: CLOCAL и CREAD. Функции
инициализируется нулем при загрузке cfsetospeed() и cfsetispeed()
системы, и, таким образом, показывает предназначены для установки скорости
количество тиков таймера с момента передачи данных в структуре termios.
включения компьютера. Функция tcgetattr() заполняет структуру
9Работа со временем. Можно изменить termios текущими установками конфигурации
значение интервала таймера изменением последовательного порта. После установки
макроопределения HZ, это можно нужной конфигурации используется
использовать при решении задач реального tcsetattr(). Константа TCSANOW указывает,
времени, но это приведет к увеличению что все изменения вступают в силу
общей доли времени, которое тратится на немедленно. Также существуют другие
обработку прерывания таймера. константы для ожидания завершения операций
Процессоро-зависимые регистры Если ввода и вывода (TCSADRAIN), или для
необходимо измерить очень короткие очистки буферов ввода и вывода
интервалы времени, или требуется высокая (TCSAFLUSH).
точность измерения, можно использовать 53Примеры. Размер символов задается
платформо-зависимые ресурсы, выбирая битами: options.c_cflag &= ~CSIZE; /*
точность против портируемости Маскирование битов размера символов */
результирующего кода. Большинство options.c_cflag |= CS8; /* Установка 8
современных CPU содержат в себе счетчик, битов данных */ Поле локального режима
значение которого инкрементируется с c_lflag управляет, как вводимые символы
каждым тактом процессора. Такой счетчик будут обрабатываться драйвером
может быть использован для точного последовательного порта. В основном
измерения интервалов времени. приходится конфигурировать поле c_lflag
10Работа со временем. Учитывая для канонического или неканонического
свойственную большинству систем (raw) ввода.
непредсказуемость времени исполнения 54Примеры. ISIG. Разрешить SIGINTR,
инструкций (по причинам диспетчеризации, SIGSUSP, SIGDSUSP, и SIGQUIT сигналы.
вероятностных предсказаний переходов, и ICANON. Разрешить канонический ввод (иначе
различных уровней кэша памяти), такой неканонический). ECHO. Разрешить эхо
счетчик процессорных тиков представляет вводимых символов. ECHOE. Символ эхо
собой единственно надежный способ стирания как BS-SP-BS. NOFLSH. Блокировка
выполнения задач точного измерения очистки приемных буферов после символа
времени. Наиболее известным регистром прерывания или выхода. Константы для поля
счетчиком является регистр TSC (timestamp c_lflag.
counter), представленный в семействе 55Примеры. Выбор канонического ввода:
процессоров x86 начиная с процессора Канонический ввод -
Pentium. Это 64-битный регистр, который строчно-ориентированный. Вводимые символы
считает такты CPU. Он может быть прочитан помещаются в буфер который может
как из пространства ядра, так и из интерактивно редактироваться пользователем
пространства пользователя. до приема символа CR (carriage return) или
11Работа со временем. Включив LF (line feed). При выборе этого режима
заголовочный файл <asm/msr.h> нормально устанавливаете опции ICANON,
(machine-specific registers), можно ECHO и ECHOE: options.c_lflag |= (ICANON |
использовать следующие макросы: ECHO | ECHOE); Выбор неканонического (Raw)
rdtsc(low,high); rdtscl(low); С помощью ввода: Неканонический ввод не
первого макроса можно прочитать 64-битное обрабатывается. Вводимый символ передается
значение счетчика в две 32-битовые без изменений, так как он был принят. В
переменные. Второй макрос читает младшую основном сбрасываете опции ICANON, ECHO,
половину регистра в 32-х битовую ECHOE и ISIG приустановке неканонического
переменную, и является достаточным в ввода: options.c_lflag &= ~(ICANON |
большинстве случаев. Например, на 500 МГц ECHO | ECHOE | ISIG);
процессоре переполнение 32-х битового 56Примеры. INPCK. Производить проверку
счетчика будет происходить каждые 8.5 на четность. IGNPAR. Игнорировать проверка
секунд. на четность. IGNCR. Игнорировать знак
12Работа со временем. Заголовки ядра возврата каретки. Опции ввода: Поле опций
включают и архитектурно-независимую ввода c_iflag управляет любой обработкой
функцию, скрывающую существующие различия ввода которая выполняется над символами
реализации, и которую можно использовать принимаемыми из последовательного порта.
вместо rdtsc(). Она называется Константы для поля c_iflag.
get_cycles() (определена в 57Примеры. Опции вывода: Поле c_oflag
<asm/timex.h>). Её прототип: содержит опции фильтрации вывода. Так же
#include <linux/timex.h> cycles_t как для режима ввода, можно выбрать
get_cycles( void ); Эта функция определена обработанный или не обработанный (raw)
для любой платформы, и она всегда вывод данных. Обработанный вывод
возвращает нулевое значение на платформах, выбирается установкой опции OPOST в поле
которые не имеют реализации регистра c_oflag: options.c_oflag |= OPOST; Выбор
счётчика циклов. Тип cycles_t является необработанного (raw) вывода
соответствующим целочисленным типом без устанавливается сбросом опции OPOST в поле
знака для хранения считанного значения. c_oflag: options.c_oflag &= ~OPOST;
13Работа со временем. Такой выбор Когда опция OPOST сброшена, все остальные
емкости означает, например, что на биты опций в поле c_oflag игнорируются.
процессорах Pentium функция get_cycles() 58Примеры. Управляющие символы:
возвратит только младшие 32 бит реального Символьный массив c_cc содержит описания
счетчика процессорных тиков. Это позволит управляющих символов и параметры
избежать многорегистровых операций, и не таймаутов. Константы объявлены для каждого
воспрепятствует цели наиболее частого элемента этого массива: VINTR –
использования счетчика - измерение прерывание, VQUIT – выход, VMIN -
коротких интервалов времени. Примечание: минимальное количество символов для
Нулевое значение, возвращаемое чтения, VTIME - время ожидания данных
get_cycles() на платформах, не (десятые доли секунды) Модем. Модемы - это
предоставляющих соответствующей устройства которые модулируют
реализации, делает возможным обеспечить последовательные данные в частоты, которые
переносимость между аппаратными могут быть переданы по аналоговым линиям
платформами тщательно прописанного кода подобным телефонным линиям или кабелям TV
(там, где это есть, используется подключений.
get_cycles(), а там, где этой возможности 59Примеры. Управление модемом Первый шаг
нет, тот же код реализуется, опираясь на в организации связи через модем - это
последовательность системных тиков). открытие и конфигурирование порта для
14Работа со временем. Функция неструктурированного (raw) ввода,
do_gettimeofday() Если драйверу необходимо следующее что необходимо сделать, это
текущее время, можно воспользоваться установить связь с модемом. Наилучший
функцией do_gettimeofday(). Она заполняет способ сделать это посылкой модему
экземпляр структуры timeval, переданный в "AT" команды. Когда модем
функцию по указателю, с использованием корректно подключен и включен, он будет
значений секунд и микросекунд. Для выдавать ответ "OK". Стандартные
пространства пользователя существует команды модема Большинство модемов
аналогичный системный вызов использует множество "AT"
gettimeofday(). Прототип для функции команд, называемых так поскольку каждая
do_gettimeofday() выглядит следующим команда начинается с символов
образом: #include <linux/time.h> "AT" и сопровождается
void do_gettimeofday(struct timeval *tv); специфическими командами и символом
Функция do_gettimeofday() имеет возврата каретки.
"разрешение в пределах 60Примеры. После обработки команды модем
микросекунды" для многих будет отвечать одним из нескольких
архитектурах. текстовых сообщений, в зависимости от
15Работа со временем. Системный вызов команды. ATD - Набор номера (Dial A
times() Каждый процесс может пребывать в Number) Команда ATD производит набор
двух фазах: системной (внутри тела указанного номера. В дополнение к цифрам и
системного вызова - его выполняет для нас дефисам можете указать тип набора
ядро операционной системы) и тональный ("T") или импульсный
пользовательской (внутри кода самой ("P"), паузу на одну секунду
программы). Время, затраченное процессом в (","), и ожидание тональной
каждой фазе, может быть измеряно системным посылки ("W"): Пример: ATDT
вызовом times(). Кроме того, этот вызов 18008008008W1234,1,1234.
позволяет узнать суммарное время, 61Примеры. Модем ответит одним из
затраченное порожденными процессами [2]. следующих сообщений: NO DIALTONE BUSY NO
Системный вызов заполняет структуру struct CARRIER CONNECT CONNECT baud Из других
tms { clock_t tms_utime; clock_t команд модема отметим следующие: ATH -
tms_stime; clock_t tms_cutime; clock_t Повесить трубку (Hang Up) ATZ - Сброс
tms_cstime; }; модема.
16Работа со временем. Все времена 62Примеры. Методические указания: 1) Для
измеряются в "тиках" - некоторых функции ioctl необходимо подключить
долях секунды. Число тиков в секунде можно библиотеку sys/ioctl.h , для работы с
узнать таким системным вызовом: clock_t HZ последовательным портом библиотеку
= sysconf(_SC_CLK_TCK); Поля структуры termios.h, для получения кодов ощибок -
содержат: tms_utime(tms_cutime) - время, errno.h, для управления файлами - fcntl.h
затраченное вызывающим(порожденным) 2) Для инициализации порта рекомендуется
процессом в пользовательской фазе, написать отдельную функцию и потом
tms_stime(tms_cstime) - время, затраченное вызывать ее перед передачей команд модему.
вызывающим(порожденным) процессом в 3) Перехватить ответ модема можно с
системной фазе. real_time - время, помощью функций для работы со строками. 4)
соответствующее астрономическому времени Необходимо отключить эхо ввода. Эхо ввода
системы. Если нужно засечь интервал приведет к циклу обратной связи между
времени выполнения программы, то имеет модемом и компьютером.
смысл мерять только их разность. 63Примеры. 5) При отправлении команды
17Работа с внешними устройствами в ОС модему, необходимо завершать их символом
Linux. Метод ioctl() Данный метод работает возврата каретки (CR), а не символом новой
через файловый дескриптор. В него строки (NL). Символьная константа -
передается целое число, символизирующее "\r". 6) Нужно убедиться, что
запрашиваемую команду, и другие аргументы, используется скорость передачи, которую
обычно – указатель. Преимущества этого поддерживает модем. Хотя многие модемы
метода перед другими: если необходимо выполняют автоматическое определение
выполнять обработку полученных из драйвера скорости передачи, некоторые имеют
данных прежде, чем они будут выведены на ограничения (общее ограничение 19.2kbps).
экран, то получение данных в бинарной 7) Засечь время выполнения программы можно
форме более эффективна, нежели их любым из описанных выше способов. Код
извлечение из текстового файла /proc; программы приведен здесь.
получение данных через ioctl() не связано 64Примеры. Опрос сетевой карты на шине
со страничной фрагментацией; является PCI Задание: опросить сетевую карту на
возможность оставления команд получающих шине PCI, получить ее mac-адрес. Вывести
отладочную информацию после отладки. на экран время выполнения программы.
18Работа с внешними устройствами в ОС Краткие теоретические сведения: Разработка
Linux. Вызов функции ioctl() в шины PCI (Peripheral Component
пользовательском процессе определяется Interconnect bus) - шины для подсоединения
следующим прототипом : int ioctl(int fd, периферийных устройств - началась в 1991
int cmd, ...); Действительный тип третьего году как внутренний проект корпорации
аргумента зависит от передаваемой в Intel. Разработчики Intel отказались от
процедуру команды, которая определяется использования шины процессора и ввели еще
вторым аргументом. Некоторые команды не одну "антресольную" (mezzanine)
имеют аргументов, некоторые используют шину. Благодаря такому решению шина
целый аргумент, а некоторые берут в получилась процессоро-независимой, могла
качестве аргумента указатель на структуру работать параллельно с шиной процессора,
данных. С другой стороны, функция ioctl() не обращаясь к ней за запросами, и, тем
драйвера получает аргументы согласно самым, снижая ее загрузку.
следующему объявлению: int (*ioctl) 65Примеры. Стандарт шины был объявлен
(struct inode *inode, struct file *filp, открытым и передан PCI Special Interest
unsigned int cmd, unsigned long arg); Group (www.pcisig.com), которая продолжила
19Работа с внешними устройствами в ОС работу по совершенствованию шины. Основные
Linux. Указатели inode и filp представляют возможности шины следующие: - синхронный
собой значения соответствующие файловому 32-х или 64-х разрядный обмен данными. При
дескриптору fd, переданному этом для уменьшения числа контактов (и
пользовательским процессом, и полностью стоимости) используется
совпадают с параметрами, передаваемыми в мультиплексирование, то есть адрес и
системный вызов open(). Аргумент cmd данные передаются по одним и тем же
передается от пользователя неизменным, а линиям. - поддержка 5V и 3.3V логики.
необязательный аргумент arg передается в Частота 66MHz поддерживается только 3.3V
форме unsigned long, что может логикой. - частота работы шины 33MHz или
соответствовать как целому значению, так и 66MHz позволяет обеспечить широкий
указателю. Если вызывающая программа не диапазон пропускных способностей (с
передает третий аргумент, то значение arg использованием пакетного режима):
имеет неопределенное значение. 66Примеры. 132 МВ/сек при 32-bit/33MHz;
20Работа с внешними устройствами в ОС 264 MB/сек при 32-bit/66MHz; 264 MB/сек
Linux. Управление устройством через при 64-bit/33MHz; 528 МВ/сек при
esc-последовательности Управление 64-bit/66MHz. При этом для работы шины на
некоторыми устройствами удачнее частоте 66MHz необходимо, чтобы все
реализуется через запись управляющей периферийные устройства работали на этой
последовательности в само устройство. частоте. - полная поддержка multiply bus
Такая техника, например, используется для master (например, несколько контроллеров
драйвера консоли, в который передаются, жестких дисков могут одновременно работать
так называемые esc-последовательности, на шине). - автоматическое
используемые для перемещения курсора, конфигурирование карт расширения при
изменения цвета, и выполнения других включении питания.
конфигурационных задач. Выгода такого 67Примеры. - спецификация шины позволяет
способа управления заключается в том, что комбинировать до восьми функций на одной
пользователи, имеющие права на запись в карте (например, видео + звук и т.д.). -
устройство могут участвовать в управлении шина позволяет устанавливать до 4 слотов
им не приобретая специальных привилегий, и расширения, однако возможно использование
не используя специальных программ, моста PCI-PCI для увеличения количества
реализующих ioctl() вызовы. карт расширения. - PCI-устройства
21Работа с внешними устройствами в ОС оборудованы таймером, который используется
Linux. Например, программа setterm для определения максимального промежутка
управляет конфигурацией консоли передачей времени, в течении которого устройство
esc-последовательностей. Дополнительным может занимать шину. Шина поддерживает
преимуществом такого управления является метод передачи данных, называемый
простота удаленного управления "linear burst" (метод линейных
устройством. Управляющая программа и пакетов). Этот метод предполагает, что
управляемое устройство могут размещаться адрес автоматически увеличивается для
на разных компьютерах, т.к. управление следующего байта, при этом увеличивается
может осуществляться простым скорость передачи данных за счет
перенаправлением потока данных. Неприятной уменьшения числа передаваемых адресов.
стороной такого управления устройством 68Примеры. Согласно спецификации, каждое
являются дополнительные ограничения по устройство PCI имеет конфигурационное
управлению устройством. Например, пространство размером 256 байт, в котором
управляющие последовательности не должны содержится информация о самом устройстве и
оказаться внутри потока данных о ресурсах, занимаемых устройством.
передаваемых в устройство. Это справедливо Получим мак-адрес сетевой платы, используя
и для tty. сокеты. Далее с помощью директивы функции
22Работа с внешними устройствами в ОС ioctl SIOCGIFHWADDR запишем мак-адрес в
Linux. Несмотря на то, что текстовый заранее определенную структуру.
дисплей предназначен для отображения Методические указания 1) Для работы с
только символов ASCII, иногда, в потоке сетевой картой рекомендуется использовать
передаваемых данных, могут оказаться сокеты, функции работы с памятью. 2) Для
управляющие символы, влияющие на настройку функции ioctl необходимо подключить
консоли. Использование файловой системы библиотеку sys/ioctl.h , для работы с
/proc Файловая система /proc представляет сокетами - библиотеку linux/if.h и
собой специальную, sys/socket.h.
программно-реализованную файловую систему, 69Примеры. 3) Описание функций socket(),
которая связана с функциями ядра, которые memset() и др. можно посмотреть с помощью
генерируют содержание файла во время команды man. 4) Локальный интерфейс,
чтения. Например /proc/modules, который который через общую память эмулирует
возвращает список загруженных, в данный работу сетевой карты - eth0. 5) Засечь
момент модулей и /proc/meminfo, который время выполнения программы можно любым из
содержит статистику использования памяти. описанных выше способов. Код программы
Файловая система /proc широко используется приведен здесь.
в Linux-системе. 70Примеры. Опрос и управление CD-ROM
23Работа с внешними устройствами в ОС Задание: опросить устройство cd-rom,
Linux. Многие утилиты современных получить информацию о проигрываемом в
Linux-дистрибутивов, такие как ps, top и данный момент файле (номер трека, время
uptime получают свою информацию из /proc. проигрывания), выдвинуть и задвинуть лоток
Некоторые драйвера устройств, также cd-rom. Вывести на экран время выполнения
используют /proc для передачи информации в программы. Краткие теоретические сведения:
пространство пользователя. Файловая Изначально лазерные компакт-диски
система /proc является динамической разрабатывались именно как носители
системой, и модуль может добавлять и оцифрованного звука. Практически любое
удалять файловый элемент из этой системы устройство чтения CD-ROM является по
во время своей работы. Метод использования совместительству и плеером аудио CD и
файловой системы /proc похож на работу с позволяет воспроизводить аудиодиски при
драйверами устройства: создается структура минимальном вмешательстве со стороны
со всей информацией, необходимой для /proc системы.
файла, включая указатели на любые функции 71Примеры. Драйверы устройств чтения
драйвера. Размер файла равен нулю потому CD-ROM предоставляют как функции контроля
что содержание файла генерируется ядром, воспроизведения аудиодисков средствами,
файл нельзя запустить. Время модификации так и функции непосредственного чтения
данного файла – текущее время. аудиоданных (эти функции используются в
24Работа с устройствами PCI и USB в ОС основном программами-рипперами (rippers)).
Linux. Для программирования задач В Linux интерфейс драйвера CD-ROM описан в
управления данными устройствами требуются файле linux/cdrom.h. Воспроизведение аудио
соответствующие библиотеки. Рассмотрим CD. Запись на любом компакт-диске состоит
пакеты, в которые они входят. Пакет PCI из нескольких треков. Треки нумеруются
Utilities-3.1.8 Пакет PCI Utilities начиная с нуля (трек 0 содержит оглавление
является набором программ, предназначенным диска). Номер трека не может превышать
для выдачи списка устройств PCI, проверки значение 99. На аудио CD каждый
состояния устройств и настройки их музыкальный фрагмент как правило
конфигурационных регистров. Информация о записывается на отдельном треке.
пакете. Загрузка: 72Примеры. В определенных ситуациях одно
ftp://atrey.karlin.mff.cuni.cz/pub/linux/p произведение может быть записано на
i//pciutils-3.1.8.tar.gz. нескольких треках, или же наоборот, на
25Работа с устройствами PCI и USB в ОС одном треке может быть записано несколько
Linux. Размер загружаемого пакета: 372 KB независимых фрагментов. Последний вариант
Оценочный размер требуемого дискового применяется, когда число фрагментов,
пространства: 3,5 MB Замечания для которые необходимо записать на диск,
пользователей: превышает 99. В этом случае, для
http://wiki.linuxfromscratch.org/blfs/wiki различения фрагментов внутри одного трека
pciutils Установка пакета PCI Utilities используются индексы. На одном и том же
Установите пакет PCI Utilities с помощью диске могут быть записаны как
следующих команд: make PREFIX=/usr ZLIB=no аудио-данные, так и другая информация.
В этом пакете набор тестов отсутствует. Перед воспроизведением трека с такого
26Работа с устройствами PCI и USB в ОС "смешанного" диска следует
Linux. Теперь в роли пользователя root проверять, является ли трек аудио-треком
выполните: make PREFIX=/usr install или треком данных.
Некоторые пакеты требуют статической 73Примеры. Запись на диске разбивается
библиотеки PCI. Чтобы установить на фреймы. Каждый фрейм содержит 2352
библиотеку и заголовки, выполните в роли байта. Для обеспечения указанных
пользователя root следующую команду: make стандартных характеристик цифровой записи
PREFIX=/usr install-lib Пояснение команды чтение данных должно выполняться со
ZLIB=no: Этот параметр предотвращает скоростью 75 фреймов в секунду (что
сжатие файла pci.ids, который необходимо соответствует однократной скорости чтения
для других приложений, например, CD-ROM). С фреймами связан один из
HAL-0.5.14. форматов адресации на аудио CD. Адресация
27Работа с устройствами PCI и USB в ОС осуществляется в единицах MSF - минуты,
Linux. Конфигурирование пакета PCI секунды, фреймы - где фрейм можно
Utilities Файл данных pci.ids постоянно рассматривать как 1/75 секунды. В
обновляется. Чтобы получить текущую версию нижеследующей таблице приводятся основные
этого файла, выполните в роли пользователя вызовы ioctl, связанные с воспроизведением
root команду update-pciids. Для этой аудио CD.
программы требуется скрипт Which-2.20 или 74Примеры. Вызов. Описание. Доп.
программа, которая ищет cURL-7.22.0, параметр. Структура cdrom_tochdr.
Wget-1.13.4 или Lynx-2.8.7rel.2, Директивы ioctl для CD-rom.
используемые для загрузки самого нового CDROM_DRIVE_STATUS. Получение данных о
текущего файла, а затем замены им файла, состоянии устройства. Константа CDSL_XXX.
находящегося в /usr/share. CDROM_DISC_ STATUS. Получение данных о
28Работа с устройствами PCI и USB в ОС диске. Константа CDSL_XXX. CDROMREAD
Linux. Установленные программы: lspci, TOCHDR. Чтение заголовка оглавления диска.
setpci и update-pciids Установленные 75Примеры. Вызов. Описание. Доп.
библиотеки: libpci.a Установленные параметр. CDROMREADTOCENTRY. Чтение
директории: /usr/include/pci Краткое элемента оглавления диска. Структура
описание: Lspci - это утилита для cdrom_tocentry. CDROMSUB CHNL. Чтение
отображения информации о всех шинах PCI, данных о параметрах воспроизведения.
имеющихся в системе, и всех устройств, Структура cdrom_subchnl. CDROMPLAY TRKIND,
подключенных к ним. Setpci - это утилита CDROMPLAY MSF. Воспроизведение
для запросов к устройствам PCI и их аудиозаписи. Структуры cdrom_ti и
конфигурирования. cdrom_msf.
29Работа с устройствами PCI и USB в ОС 76Примеры. Вызов. Описание. Доп.
Linux. Пример: setpci –v -s 07:00.0 параметр. CDROMSTOP. Остановка
F4.B=FF – установить максимальную яркость воспроизведения. Значение 0. CDROMPAUSE,
монитора сигналом с видеокарты. Ключи: -v CDROMRESUME. Приостановка, возобновление
verbose (подробный отчет), -s site воспроизведения. Значение 0. CDROMEJECT.
(domain:bus:slot.func), -D demo (не Открытие лотка устройства. Значение 0.
выполнять). Команды: регистр.тип=значение. CDROMCLOSETRAY. Закрытие лотка устройства.
Типы: Byte, Word, Long. Получить список Значение 0.
регистров: setpci - -dumpregs Возможна 77Примеры. Вызовы CDROM_DRIVE_STATUS и
сборка программы управления конкретным CDROM_DISC_STATUS отличаются тем, что
устройством из исходных кодов. Пример кода результат возвращается не в
– здесь. update-pciids -выдает текущую параметре-ссылке, а как значение функции
версию списка PCI ID. Требует Which-2.20, ioctl. В качестве третьего аргумента ioctl
cURL-7.22.0, Wget-1.13.4 или выступает одна из констант, определенных в
Lynx-2.8.7rel.2. файле cdrom.h. Эти константы предназначены
30Работа с устройствами PCI и USB в ОС для работы с устройствами автоматической
Linux. libpci.a - является статической смены компакт-дисков (CD changers). В
библиотекой, которая позволяет приложениям случае "однодискового"
получать доступ к подсистеме PCI. Пакет устройства следует использовать
usbutils-004 В пакете usbutils находится CDSL_CURRENT. Результатом вызова
утилита, используемая для отображения CDROM_DRIVE_STATUS могут быть значения
информации о шинах USB, имеющихся в CDS_NO_DISC (нет диска в устройстве),
системе, и устройствах, подключенных к CDS_DRIVE_NOT_READY (устройство не
ним. Информация о пакете. Загрузка (HTTP): готово), CDS_DISC_OK (диск обнаружен), а
http://ftp.de.debian.org/debian/pool/main/ также некоторые другие константы из файла
/usbutils/usbutils_004.orig.tar.bz2z. cdrom.h.
31Работа с устройствами PCI и USB в ОС 78Примеры. Среди значений, возвращаемых
Linux. Размер загружаемого пакета: 472 KB вызовом CDROM_DISC_STATUS следует отметить
Оценочный размер требуемого дискового CDS_NO_DISC (нет диска в устройстве)
пространства: 4,5 MB Зависимости пакета CDS_AUDIO (диск опознан как аудио) и
usbutils. Обязательные: libusb-1.0.8 CDS_MIXED (диск опознан как
Замечания для пользователей: "смешанный"). Остальные значения
http://wiki.linuxfromscratch.org/blfs/wiki соответствуют не-аудиодискам. Вызовы
usbutils Установка пакета usbutils CDROMREADTOCHDR и CDROMREADTOCENTRY
Установите пакет usbutils с помощью предназначены для работы с оглавлением
следующих команд: диска. Вызов CDROMREADTOCHDR позволяет
32Работа с устройствами PCI и USB в ОС получить данные о номере первого и
Linux. ./configure --prefix=/usr последнего информационных треков на диске,
--disable-zlib &&make В этом а вызов CDROMREADTOCENTRY - данные об
пакете набор тестов отсутствует. Теперь в отдельном треке - адрес начала трека (в
роли пользователя root выполните: make формате MSF или LBA), тип трека (аудио или
install &&mv -v данные) и т.п.
/usr/sbin/update-usbids.sh 79Примеры. Вызов CDROMSUBCHNL позволяет
/usr/sbin/update-usbids Пояснение команды получить информацию о текущем состоянии
--disable-zlib: Этот параметр указывает устройства - находится ли диск в режиме
пакету usbutils не устанавливать файл воспроизведения, и в какой позиции
usb.ids ни в сжатом, ни в распакованном выполняется чтение данных. Вызовы
виде. CDROMPLAYTRKIND и CDROMPLAYMSF запускают
33Работа с устройствами PCI и USB в ОС воспроизведение аудиозаписи. Первый вызов
Linux. Конфигурирование пакета usbutils позволяет задать начало и конец
Файл данных usb.ids постоянно обновляется. воспроизводимого фрагмента значениями
Чтобы получить текущую версию этого файла, трек/индекс, второй - адресами в формате
выполните в роли пользователя root команду MSF. Поскольку оглавление диска содержит
update-usbids. Для этой программы данные о начальных адресах треков,
требуется скрипт Which-2.20 или программа, воспроизведение отдельного трека часто
которая ищет cURL-7.22.0, Wget-1.13.4 или выполняется по принципу "от начала
Lynx-2.8.7rel.2, используемые для загрузки данного трека до начала следующего".
самого нового текущего файла, а затем В файле cdrom.h определена константа
замены им файла, находящегося в CDROM_LEADOUT, указывающая на условный
/usr/share. трек, расположенный после последнего
34Работа с устройствами PCI и USB в ОС трека.
Linux. Описание пакета Установленные 80Примеры. Вызовы CDROMSTOP, CDROMPAUSE
программы: lsusb, update-usbids и и CDROMRESUME выполняют, соответственно,
usb-devices Установленные библиотеки: Нет остановку, временную остановку (пауза) и
Установленные директории: Нет Краткое возобновление воспроизведения.
описание Lsusb - это утилита для Методические указания 1) Для функции ioctl
отображения информации о всех шинах USB, необходимо подключить библиотеку
имеющихся в системе, и всех устройств, sys/ioctl.h , для работы с файлами
подключенных к ним. заголовочный файл sys/fcntl.h для работы с
35Работа с устройствами PCI и USB в ОС CD-ROM - библиотеку linux/cdrom.h 2) Для
Linux. update-usbids - выдает текущую получения информации используйте
версию списка USB ID. Требует Which-2.20, стандартные структуры, определенные в
cURL-7.22.0, Wget-1.13.4> или cdrom.h 3) Обратите внимание, что такие
Lynx-2.8.7rel.2 usb-devices - это скрипт функции как открытие лотка CDrom в функции
командной строки, который отображает ioctl не имеют третьего параметра. Код
подробную информацию о шинах USB и программы приведен здесь.
устройствах, подключенных к ним. Он 81Примеры. Параллельный порт. Управление
используется, если в вашей системе принтером. Задание: опросить принтер через
недоступны /proc/bus/usb/devices. Пакет параллельный порт, вывести на печать
libusb-1.0.8 В пакете libusb находится произвольный текст, вывести на экран
библиотека, используемая некоторыми состояние системных регистров до и после
приложениями для доступа к устройствам печати Краткие теоретические сведения:
USB. Порт параллельного интерфейса был введен в
36Работа с устройствами PCI и USB в ОС PC для подключения принтера — LP'T-порт
Linux. Информация о пакете Загрузка (Line PrinTer — построчный принтер).
(HTTP): Адаптер параллельного интерфейса
http://downloads.sourceforge.net/libusb/li представляет собой набор регистров,
usb-1.0.8.tar.bz2 Загрузка (FTP): расположенных в пространстве ввода/вывода.
ftp://anduin.linuxfromscratch.org/BLFS/svn Регистры порта адресуются от­носительно
l/libusb-1.0.8.tar.bz2 Размер загружаемого базового адреса порта, стандартными
пакета: 331 KB Оценочный размер требуемого значениями которого являются 386h, 378h и
дискового пространства: 5 MB. 278h.
37Работа с устройствами PCI и USB в ОС 82Примеры. Порт имеет внешнюю 8-битную
Linux. Зависимости пакета libusb шину дан­ных, 5-битную шину сигналов
Необязательные (необходимы для сборки состояния и 4-битную шину управляющих
документации по API) - Doxygen-1.7.5 сигналов. BIOS поддерживает до четырех
Замечания для пользователей: LPT-портов своим сервисом — прерыванием
http://wiki.linuxfromscratch.org/blfs/wiki INT 17h, обеспечивающим через них связь с
libusb Установка пакета libusb Установите принтерами по интерфейсу Centronics. Этим
пакет libusb с помощью следующих команд: сервисом BIOS осуществляет вывод символа,
./configure --prefix=/usr &&make. инициа­лизацию интерфейса и принтера, а
38Работа с устройствами PCI и USB в ОС также опрос состояния принтера. В Linux
Linux. Если установлен пакет Doxygen и вы параллельным портам сопоставляются файлы
хотите собрать документацию API, введите /dev/lp0, /dev/lp1. Опрос регистров
следующую команду: make -C doc docs В этом принтера и выдачу произвольной информации
пакете набор тестов отсутствует. Теперь в на печать можно произвести несколькими
роли пользователя root выполните: make способами, первый – использовать функцию
install Если вы собрали документацию API, ioctl(), директивы для нее описаны в файле
установите ее в роли пользователя root с parport.h.
помощью следующих команд: install -v -d 83Примеры. PPWDATA – запись информации в
-m755 /usr/share/doc/libusb-1.0.8/apidocs параллельный порт PPRCONTROL – контроль
&&install -v -m644 doc/html/* \ чтения из параллельного порта PPRSTATUS -
/usr/share/doc/libusb-1.0.8/apidocs. статус последней команды чтения из
39Работа с устройствами PCI и USB в ОС параллельного порта Второй метод –
Linux. Конфигурирование пакета Libusb непосредственная запись/чтение в порт и из
Чтобы получить доступ к порта с помощью следующих функций [9]:
"настоящим" устройствам USB outb, outw, outl, outsb, outsw, outsl -
(тем, которые драйвером запоминающих функции вывода данных в порт inb, inw,
устройств не определяются как диск), в inl, insb, insw, insl - функции чтения
ядре должна быть соответствующая данных порта outb_p, outw_p, outl_p,
поддержка. Проверьте конфигурацию вашего inb_p, inw_p, inl_p - функции задержки
ядра в меню Device Drivers => USB ввода/вывода.
support => Support for Host-side USB 84Примеры. Это семейство функций
(Драйвера устройств => Поддержка USB используется для низкоуровневой работы с
=> Хост-поддержка USB). Там же вы портами ввода/вывода. В основном, они
можете выбрать для устройства USB любой предназначены для использования внутри
аппаратный драйвер. ядра, но могут быть вызваны и
40Работа с устройствами PCI и USB в ОС пользовательской программой. Для того,
Linux. Описание пакета Установленные чтобы запросить у ядра разрешение доступа
программы: Нет Установленные библиотеки: к портам, нужно использовать ioperm() или
libusb-1.0.{so,a} Установленные iopl(). Если этого не сделать, приложение
директории: /usr/include/libusb-1.0 и получит сообщение об ошибке сегментации.
/usr/share/doc/libusb-1.0.8 Краткое Для печати можно использовать функцию
описание libusb-1.0.{so,a} - библиотеки, в write() :
которой находятся функции C для доступа к write(fd,"\nTest\r",sizeof("
аппаратным возможностям USB Пример кода – \nTest\r")), аргументами которой
здесь. являются дескриптор устройства, сообщение
41Примеры. Опрос процессора Задание: и длина сообщения.
необходимо опросить процессор и вывести на 85Примеры. Методические указания 1) Для
экран информацию о его частоте в функции ioctl необходимо подключить
мегагерцах, названии модели, библиотеку sys/ioctl.h, для работы с
идентификаторе производителя и размере параллельным портом linux/ppdev.h,
кэша. Вывести на экран время выполнения linux/parport.h, для прямой записи /
программы. Краткие теоретические сведения: чтения – заголовочный файл sys/io.h 2)
Для опроса процессора удобнее всего Описания функций inb(), outb(), iopl()
воспользоваться файловой системой /proc можно посмотреть, используя команду man.
описание которой приведено в пункте 4. 3) При отправлении текста на печать,
Содержащаясь в /proc информация доступна необходимо завершать его символом возврата
для чтения человеку, но также ее можно каретки. Символьная константа -
извлечь программным путем с помощью "\r". 5) В конце записи
парсинга. В данном случае необходимо необходимо отправить в порт команду
получить информацию о процессоре, запустим окончания печати 0xFF 6) Засечь время
/proc/cpuinfo командой #cat /proc/cpuinfo. выполнения программы можно любым из
42Примеры. На экране получим следующее описанных выше способов. Код программы
сообщение: processor : 0 vendor_id : приведен здесь.
genuineintel cpu family : 6 model : 5
Работа с внешними устройствами linux.ppt
http://900igr.net/kartinka/informatika/rabota-s-vneshnimi-ustrojstvami-linux-205688.html
cсылка на страницу

Работа с внешними устройствами linux

другие презентации на тему «Работа с внешними устройствами linux»

«Linux и Windows» - Переносимость. Linux великолепна по многим причинам. Так в 1991 году родилась Linux. Безопасный режим. Серверы Linux идеально подходят для удаленного администрирования. Ушли в прошлое зазубринки, корявости и другие неприятные муарики. Windows по своей архитектуре является монолитной, а не модульной системой.

«Устройство памяти» - Устройства вывода. Параллельный порт (LPT)получает и посылает данные побайтно. В основу архитектуры современных персональных компьютеров положен магистрально-модульный принцип. Функциональные клавиши могут программироваться пользователем. Длинная нижняя клавиша без названия — предназначена для ввода пробелов.

«Устройства вывода информации» - Устройства вывода информации. Качество изображения определяется количеством точек, из которых оно складывается. Информация на экране монитора формируется из отдельных точек – пикселей. Лазерные принтеры. Струйные принтеры. Устройство компьютера. Качество изображения определяется разрешающей способностью монитора.

«Устройство ПК» - ЖК (LCD) - жидкокристаллические. Основных шин – три: управление ресурсами ПК (оперативной памятью, местом на дисках и т.д.). DRAM -. Внешние устройства ВВОДА информации. Модули располагаются на системной (материнской) плате. Лазерный (струйный) принтер. Различают: SIMM – однорядные. V (измеряется в Мб).

«Устройство ЭВМ» - Пользовательского интерфейс. Защиты данных и администрирования. 1.7 Внешнее запоминающие устройство. Быстродействующая память. Системные модули ОС. 1.9 Устройства ввода-вывода. 2.1 Классификация программного обеспечения. С середины 70-х годов началось массовое использование ОС UNIX для мини-компьютеров.

«Устройство храма» - Устройство храма. Алтарь возвышается над средней частью и отделяется от храма иконостасом. В алтаре. В первые века христианства в притворе стояли кающиеся и оглашенные. Алтарь в храме христа спасителя. Самая главная часть храма алтарь. Иконостас. Главная святыня храма - ПРЕСТОЛ особо освященный четырехугольный стол.

Linux

12 презентаций о Linux
Урок

Информатика

130 тем
Картинки
900igr.net > Презентации по информатике > Linux > Работа с внешними устройствами linux