Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Sergey Vlasov                        2:5020/400     25 Nov 2006  17:47:37
 To : Aleksey Barabanov
 Subject : Re: usb disk отправить в сон
 -------------------------------------------------------------------------------- 
 
 On Sat, 25 Nov 2006 11:34:59 +0000 (UTC) Aleksey Barabanov wrote:
 
 > Sergey Vlasov wrote:
 > > On Sat, 25 Nov 2006 10:20:02 +0000 (UTC) Aleksey Barabanov wrote:
 > >> Есть ли возможность отправить в сон диск, подключенный через usb.
 > > В имеющихся у меня коробках на чипе PL2507 диск вырубается при выполнении
 > > eject (на уровне SCSI это START_STOP_UNIT (0x1b) с флагами 0x02 в байте
 > > 4).
 
 [...]
 
 > eject: SCSI eject failed
 > eject: unable to eject, last error: Success
 > 
 > Может что в 2.6 изменилось. Мне бы хотелось это делать под 2.4 и в OpenWRT.
 
 Это я немного наврал - команду я смотрел внутри ядра (причём,
 естественно, 2.6), а на самом деле надо было вызывать просто eject без
 опции -s:
 
 # eject -v /dev/sdb
 eject: device name is `/dev/sdb'
 eject: expanded name is `/dev/sdb'
 eject: `/dev/sdb' is not mounted
 eject: `/dev/sdb' is not a mount point
 eject: `/dev/sdb' is a multipartition device
 eject: trying to eject `/dev/sdb' using CD-ROM eject command
 eject: CD-ROM eject command succeeded
 
 По ioctl(fd, CDROMEJECT) 2.6 делает то, что нужно в данном случае.
 
 С опцией -s не работает и на 2.6:
 
 # eject -sv /dev/sdb
 eject: device name is `/dev/sdb'
 eject: expanded name is `/dev/sdb'
 eject: `/dev/sdb' is not mounted
 eject: `/dev/sdb' is not a mount point
 eject: `/dev/sdb' is a multipartition device
 eject: trying to eject `/dev/sdb' using SCSI commands
 eject: SCSI eject failed
 eject: unable to eject, last error: No such file or directory
 
 Проблема в том, что eject -s делает слишком много лишнего:
 
 /*
  * Eject using SCSI commands. Return 1 if successful, 0 otherwise.
  */
 static int EjectScsi(int fd)
 {
   int status;
   struct sdata {
    int  inlen;
    int  outlen;
    char cmd[256];
   } scsi_cmd;
 
   scsi_cmd.inlen  = 0;
   scsi_cmd.outlen = 0;
   scsi_cmd.cmd[0] = ALLOW_MEDIUM_REMOVAL;
   scsi_cmd.cmd[1] = 0;
   scsi_cmd.cmd[2] = 0;
   scsi_cmd.cmd[3] = 0;
   scsi_cmd.cmd[4] = 0;
   scsi_cmd.cmd[5] = 0;
   status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd);
   if (status != 0)
    return 0;
 
   scsi_cmd.inlen  = 0;
   scsi_cmd.outlen = 0;
   scsi_cmd.cmd[0] = START_STOP;
   scsi_cmd.cmd[1] = 0;
   scsi_cmd.cmd[2] = 0;
   scsi_cmd.cmd[3] = 0;
   scsi_cmd.cmd[4] = 1;
   scsi_cmd.cmd[5] = 0;
   status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd);
   if (status != 0)
    return 0;
 
   scsi_cmd.inlen  = 0;
   scsi_cmd.outlen = 0;
   scsi_cmd.cmd[0] = START_STOP;
   scsi_cmd.cmd[1] = 0;
   scsi_cmd.cmd[2] = 0;
   scsi_cmd.cmd[3] = 0;
   scsi_cmd.cmd[4] = 2;
   scsi_cmd.cmd[5] = 0;
   status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd);
   if (status != 0)
    return 0;
 
   /* force kernel to reread partition table when new disc inserted */
   status = ioctl(fd, BLKRRPART);
   return (status == 0);
 }
 
 В случае PL2507 не проходит команда ALLOW_MEDIUM_REMOVAL, после чего
 всё и обваливается.  Первый START_STOP тоже лишний (хотя и проходит);
 BLKRRPART тоже мешает, поскольку запускает диск.
 
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5.3
  * Origin: Talk.Mail.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 usb disk отправить в сон   Aleksey Barabanov   25 Nov 2006 14:20:02 
 Re: usb disk отправить в сон   Sergey Vlasov   25 Nov 2006 14:57:44 
 Re: usb disk отправить в сон   Aleksey Barabanov   25 Nov 2006 15:34:59 
 Re: usb disk отправить в сон   Sergey Vlasov   25 Nov 2006 17:47:37 
 Re: usb disk отправить в сон   Aleksey Barabanov   25 Nov 2006 18:30:51 
 Re: usb disk отправить в сон   Aleksey Barabanov   28 Nov 2006 01:45:38 
Архивное /ru.linux/36727f7d40d3.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional