Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

2.7.4. С чего начинать?

Авторы низкоуровневых драйверов устройств должны представлять себе, как управляет прерываниями ядро. Как минимум, вами должны быть изучены функции, которые разрешают (sti()) и запрещают(cli()) прерывания. Также для некоторых драйверов нужны функции определения времени вызова функций schedule(), sleepon() и wakeup(). В разделе 2.6 вы можете встретить более подробное описание этих функций.

2.7.5. Введение: сбор инструментов

До того, как вы начнете писать драйвер SCSI для Linux, вам придется достать некоторые инструменты (ресурсы).

Самое важное - системный диск с системой Linux, желательно, жесткий диск с интерфейсом IDE, RLL или MFM. Во время разработки вашего SCSI придется много раз перестраивать ядро и перезапускать систему. Ошибки программирования могут привести к уничтожению информации на вашем диске SCSI, а также на посторонних носителях. Сохраняйте информацию на дисках!

Установленная система Linux может быть минимизирована: вы можете ограничиться библиотеками и утилитами компилятора GCC, текстовым редактором и текстом ядра. Также будут полезны дополнительные инструменты od, hexdump и less. Все эти программы свободно помещаются на диске размером 20 -30Мб.

Также вам потребуется подробная документация. Как минимум, вам нужно описание используемого вами адаптера. Так как Linux распространяется свободно, и так как вы тоже пожелаете поделиться с другими вашими разработками, существуют нагласные соглашения, согласно которым, если если вы хотите обнародовать вашу подпрограмму, к ней должен быть приложен об'ектный код; однако на данном этапе это не всегда случается.

Вам будет полезно описание стандарта SCSI. Описание жесткого диска обычно не требуется.

Прежде, чем начать, сохраните копии файлов hosts.h и scsi.h, а также одного из существующих драйверов ядра Linux. Это будет полезной рекомендацией во время написания.

2.7.6. Интерфейс SCSI в Linux

Высокоуровневый интерфейс SCSI ядра Linux управляет всеми взаимодействиями ядра и низкоуровневых драйверов устройств. Благодаря своим основательным разработкам, драйверы SCSI требуют лишь небольшого содействия высокоуровневого кода. Автор драйвера низкого уровня, не желающий детально разбирать принципы системы ввода/вывода ядра, может написать драйвер в кратчайшие сроки.

Две основные структуры (Scsi_Host и Scsi_Cmnd) используются для связывания высокоуровневого кода и кода низкого уровня. Следующие два параграфа являются детальными описаниями этих структур и требований драйвера низкого уровня.

2.7.6. Структура Scsi_Host

Структура Scsi_Host служит для описания драйвера низкого уровня коду высокого. Обычно это описание помещается в главный файл драйвера устройства в препроцессорные определения, как показано на рис. 1.1.

Структура Scsi_Host представлена на рис. 1.2 Каждое из полей будет дале подробно об'яснено.

         #deflne FDOMAIN_16X0 { "Future Domain TMC-16x0",            \
                                 fdomain-16x0_detect,                \
                                 fdomain_16x0_info,                  \
                                 fdomain_16x0_command,               \
                                 fdomain_16x0_queue,                 \
                                 fdomain_16x0_abort,                 \
                                 fdomain_16x0_reset,                 \
                                 NULL,                               \
                                 fdomain_16x0_biosparam,             \
                                 1, 6, 64, 1,0, 0}
         #endif
             Рис 1.1: Основной файл драйвера устройства.
         typedef struct
         {
          char               *name;
          int                (* detect) (int);
          const char         *(* info)(void);
          int                (* queuecommand)(Scsi_Cmnd *,
                              void (*done)(Scsi_Cmnd *));
          int                (* command) (Scsi_Cmnd *);
          int                (* abort) (Scsi_Cmnd *, int);
          int                (* reset) (void);
          int                (* slave_attach) (int, int);
          int                (* bios_param)(int, int, int []);
          int                can_queue;
          int                this_id;
          short unsigned int sg_tablesize;
          short              cmd_per_lun;
          unsigned           present:1;
          unsigned           unchecked_isa_dma:1;
         } Scs i_Host;
                Рис.1.2: Структура Scsi_Host.

[ Назад | Оглавление | Далее ]









helloworld.ru © 2001-2021
Все права защищены