Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
if(!sect) {
perror("sect");
}
Для получения информации идентификации устройства посылаем команду HDIO_GET_IDENTITY. Команда идентификации позволяет считать из контроллера блок из 256 слов, характеризующих устройство. Результат будет сохранен в структуре struct hd_driveid ide, адрес которой задается в качестве третьего аргумента функции ioctl:
if(ioctl(hda,HDIO_GET_IDENTITY,&ide)) perror ("HDIO_GET_IDENTITY");
Как уже было упомянуто, перечень команд управления устройством определен в файле <linux/hdreg.h>. Например, команды включения 32-битного режима обмена данными, режима DMA и мультисекторного чтения выглядят следующим образом:
static u_long dma=1, io32set=1, mult=16;
if(ioctl(hda,HDIO_SET_32BIT,io32set)) perror("HDIO_SET_32BIT");
if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA");
if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) perror("HDIO_SET_MULTCOUNT");
Отобразим информацию идентификации устройства:
printf("Серийный номер – %s ",ide.serial_no);
printf("Модель – %s ",ide.model);
printf("Число логических блоков – %d ",ide.lba_capacity);
printf("Число цилиндров – %d ",ide.cyls);
printf("Число головок – %d ",ide.heads);
printf("Число секторов – %d ",ide.sectors);
Считываем первый сектор и сохраняем его в отдельном файле:
read(hda,sector,sizeof(sector));
write(sect,sector,sizeof(sector));
close(hda);
close(sect);
return (0);
}
Как вы видите, доступ к жесткому диску через файл устройства наиболее простой и удобный, т.к. позволяет абстрагироваться от деталей функционирования устройства.
Давайте теперь посмотрим на жесткий диск с точки зрения драйвера, но в начале – немного теории.
Интерфейс АТА
Ниже приведены краткие сведения об интерфейсе АТА-2. Для получения детальной информации обратитесь к спецификации.
Регистры АТА-контроллера
Каждое устройство АТА (жесткий диск с интерфейсом АТА) имеет стандартный набор регистров, адресуемых сигналами от хост-адаптера (средства сопряжения интерфейса АТА с системной шиной). Набор регистров состоит из двух блоков – блока командных регистров и блока управляющих регистров.
Блок командных регистров служит для посылки команд устройству и передачи информации о его состоянии. Состав блока командных регистров:
n Регистр состояния/команд – в режиме чтения отражает текущее состояние устройства в процессе выполнения команды. Чтение регистра состояния разрешает дальнейшее изменение его бит и сбрасывает запрос аппаратного прерывания. В режиме записи принимает коды команд для выполнения. Назначение бит регистра состояния:
n Бит 7 – BSY (Busy) указывает на занятость устройства. При единичном значении устройство игнорирует попытки записи в блок командных регистров. При нулевом значении этого бита регистры командного блока доступны. Бит устанавливается под действием аппаратного или программного сброса, а также при получении команды.