Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Рисунок 5. Общая структура многосессионного компакт-диска
Lead-In-область первой сессии является Lead-In-областью всего диска. Lead-Out-область последней сессии является Lead-Out-областью диска. В User Data-области любой сессии находятся треки с данными.
Диски CD-R и CD-RW содержат две дополнительные области перед первой Lead-In-областью компакт-диска – Power Calibration Area (PCA) и Program Memory Area (PMA).
Рисунок 6. Структура CD-R и CD-RW диска
The Power Calibration Area, PCA – область калибровки мощности пишущего лазера. Область присутствует только на CD-R и CD-RW дисках. В свою очередь, PCA делится на две области – тестовую область (test area) и область счетчика (count area).
Тестовая область содержит 100 калибровочных участков. Область счетчика используется для учета количества использованных калибровочных участков. Для калибровки мощности пишущего лазера используется последовательность команд READ DISK INFORMATION/SEND OPC INFORMATION (см. [1]).
The Program Memory Area, PMA – область памяти программ. Область присутствует только на CD-R и CD-RW дисках и предназначена для учета использования User Data-области носителя. Q-субканал области PMA используется в качестве временной TOC при записи треков в инкрементном режиме – Track-at-once (TAO), Session-at-once (SAO). При записи диска в режиме Disk-at-once (DAO) данные в PMA не записываются.
SCSI Generic-драйвер. Общие сведения
SCSI Generic-драйвер (далее sg-драйвер) входит в состав ядра Linux и позволяет приложению пользователя посылать SCSI-команды устройству при условии, что устройство эти команды понимает. Доступ к sg-драйверу выполняется через специальные файлы устройства, которые находятся в каталоге /dev. Список некоторых файлов можно получить при помощи команды:
# ls -l /dev/sg[01]
crw------- 1 root root 21, 0 Apr 13 /dev/sg0
crw------- 1 root root 21, 1 Apr 13 /dev/sg1
Каждый файл соответствует одному подключенному SCSI-устройству.
Обращение к SCSI-устройству через sg-драйвер выполняется при помощи системного вызова ioctl следующим образом:
ioctl(sg_fd, SG_IO, struct sg_io_hdr *)
Первый параметр sg_fd – это дескриптор файла sg-устройства /dev/sg*, открытого при помощи системного вызова open( ). Третий параметр – структура следующего типа:
typedef struct sg_io_hdr
{
int interface_id; /*'S' for SCSI generic (required) */
int dxfer_direction; /* data transfer direction */
unsigned char cmd_len; /* SCSI command length ( <= 16 bytes) */
unsigned char mx_sb_len; /* max length to write to sbp */
unsigned short iovec_count; /* 0 implies no scatter gather */
unsigned int dxfer_len; /* byte count of data transfer */
void * dxferp; /* points to data transfer memory or scatter gather list */
unsigned char * cmdp; /* points to command to perform */
unsigned char * sbp; /* points to sense_buffer memory */
unsigned int timeout; /* MAX_UINT->no timeout (unit: millisec) */
unsigned int flags; /* 0 -> default, see SG_FLAG... */
int pack_id; /* unused internally (normally) */
void * usr_ptr; /* unused internally */
unsigned char status; /* scsi status */
unsigned char masked_status; /* shifted, masked scsi status */
unsigned char msg_status; /* messaging level data (optional) */
unsigned char sb_len_wr; /* byte count actually written to sbp */
unsigned short host_status; /* errors from host adapter */
unsigned short driver_status; /* errors from software driver */
int resid; /* dxfer_len - actual_transferred */
unsigned int duration; /* time taken by cmd (unit: millisec) */
unsigned int info; /* auxiliary information */
} sg_io_hdr_t; /* 64 bytes long (on i386) */
Данная структура определена в файле <scsi/sg.h>. Назначение основных полей структуры:
n interface_id – это поле должно содержать литеру «S»;
n dxfer_direction – направление передачи данных. Поле может принимать следующие значения (см. <scsi/sg.h>):
n #define SG_DXFER_NONE (-1) – нет обмена данными;
n #define SG_DXFER_TO_DEV (-2) – передача данных устройству;
n #define SG_DXFER_FROM_DEV (-3) – прием данных от устройства.
n cmdp – указатель на командный пакет, посылаемый устройству;
n cmd_len – размер командного пакета. Если для ATAPI-устройств размер командного пакета фиксирован и равен 12 байт, то для SCSI-устройств размер пакета может принимать значения 6, 10, 12 и 16 байт;
n sbp – указатель на буфер SENSE DATA (данные о состоянии устройства после выполнения команды, [1, 5]);
n mx_sb_len – максимальный размер буфера SENSE DATA;
n sb_len_wr – реальный размер данных, сохраненных в буфере SENSE DATA;
n dxferp – указатель на буфер для данных, принимаемых от устройства или передаваемых устройству;
n dxfer_len – размер передаваемых/принимаемых данных;
n iovec_count – если это поле равно 0, то буфер для данных представляет собой простой линейный массив байт, и поле dxferp – указатель на этот массив. В противном случае dxferp указывает на массив структур типа:
typedef struct sg_iovec {