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


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Eugene Grosbein                      2:5006/1       28 Sep 2002  19:06:27
 To : All
 Subject : headless shutdown
 -------------------------------------------------------------------------------- 
 
 
 Тут кто-то интересовался, как заставить систему погудеть динамиком
 после того, как диски отмонтированы во время shutdown, чтобы знать,
 что можно уже выключить питание, когда нет консоли у машины.
 
 Теперь есть патч для этого. Пользоваться так:
 
 cd /usr/src/sys; patch </path/to/patch
 Потом пересобрать ядро (через config или make kernel, неважно)
 и перегрузиться.
 
 Патч вводит четыре новых целочисленных sysctl:
 
 kern.shutdown.beep_duration - длительность гудка в милисекундах,
             ноль - нет гудков (по умолчанию)
 kern.shutdown.beep_hz      - высота тона в герцах,
             ноль - нет гудков (по умолчанию)
 kern.shutdown.beep_number   - количество гудков,
             ноль - нет гудков (по умолчанию)
 kern.shutdown.beep_pause    - пауза между гудками в милисекундах,
             ноль - бесконечный гудок (1 по умолчанию)
 
 Гудки выдаются после того, как система выведет:
 
 >The operating system has halted
 >Please press any key to reboot
 
 Выдаются при halt, shutdown -h. Hе выдаются при reboot, shutdown -r.
 Критика приветствуется. Enjoy.
 
 Index: i386/include/clock.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/i386/include/clock.h,v
 retrieving revision 1.38
 diff -u -r1.38 clock.h
 - --- i386/include/clock.h 29 Dec 1999 04:32:58 -0000  1.38
 +++ i386/include/clock.h  28 Sep 2002 08:46:50 -0000
 @@ -44,6 +44,7 @@
  int  release_timer1 __P((void));
  #endif
  int  sysbeep __P((int pitch, int period));
 +void  sysbeepstop __P((void *chan));
  void  i8254_restore __P((void));
  
  #endif /* _KERNEL */
 Index: i386/isa/clock.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/i386/isa/clock.c,v
 retrieving revision 1.149.2.5
 diff -u -r1.149.2.5 clock.c
 - --- i386/isa/clock.c 30 Jun 2002 07:56:49 -0000  1.149.2.5
 +++ i386/isa/clock.c  28 Sep 2002 08:41:43 -0000
 @@ -509,7 +509,7 @@
  #endif
  }
  
 -static void
 +void
  sysbeepstop(void *chan)
  {
    outb(IO_PPI, inb(IO_PPI)&0xFC); /* disable counter2 output to speaker */
 Index: kern/kern_shutdown.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/kern/kern_shutdown.c,v
 retrieving revision 1.72.2.12
 diff -u -r1.72.2.12 kern_shutdown.c
 - --- kern/kern_shutdown.c 21 Feb 2002 19:15:10 -0000  1.72.2.12
 +++ kern/kern_shutdown.c  28 Sep 2002 10:31:21 -0000
 @@ -324,7 +324,28 @@
  
  /*
   * If the shutdown was a clean halt, behave accordingly.
 + * Issue beeps if requested. It may be useful for headless system shutdown.
   */
 +
 +static unsigned beep_duration = 0;   /* duration of beep in miliseconds */
 +          /* zero disables beeps        */
 +static unsigned beep_hz = 0;   /* tone of beep in hertz, zero - no beeps */
 +static unsigned beep_number = 0; /* number of beeps, zero disables beeps   */
 +static unsigned beep_pause = 1; /* pause between beeps, zero-infinite beep */
 +
 +SYSCTL_UINT(_kern_shutdown, OID_AUTO, beep_duration, CTLFLAG_RW,
 +    &beep_duration, 0, "");
 +SYSCTL_UINT(_kern_shutdown, OID_AUTO, beep_hz, CTLFLAG_RW,
 +    &beep_hz, 0, "");
 +SYSCTL_UINT(_kern_shutdown, OID_AUTO, beep_number, CTLFLAG_RW,
 +    &beep_number, 0, "");
 +SYSCTL_UINT(_kern_shutdown, OID_AUTO, beep_pause, CTLFLAG_RW,
 +    &beep_pause, 0, "");
 +
 +#ifndef TIMER_FREQ
 +#define TIMER_FREQ      1193182
 +#endif
 +
  static void
  shutdown_halt(void *junk, int howto)
  {
 @@ -332,6 +353,26 @@
       printf("\n");
       printf("The operating system has halted.\n");
       printf("Please press any key to reboot.\n\n");
 +
 +     if (beep_hz>0 && beep_duration>0 &&
 +         beep_number>0 ) {    /* Beeps requested */
 +      int i;
 +      if (beep_pause<0) beep_pause=1;
 +      for (i=1; i<beep_number; i++) {
 +         sysbeep(TIMER_FREQ/beep_hz,0); /* Issue one */
 +         DELAY(beep_duration*1000);
 +         if (beep_pause>0) {
 +          sysbeepstop(NULL);     /* Do pause */
 +          DELAY(beep_pause*1000);
 +         }
 +      }
 +      sysbeep(TIMER_FREQ/beep_hz,0);
 +      if (beep_pause>0) { /* Zero pause gives infinite */
 +          DELAY(beep_duration*1000);
 +          sysbeepstop(NULL);
 +      }
 +     }
 +
       switch (cngetc()) {
       case -1:    /* No console, just die */
        cpu_halt();
 
 Eugene
 --- slrn/0.9.7.4 (FreeBSD)
  * Origin: Svyaz Service JSC (2:5006/1@fidonet)
 
 

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

 Тема:    Автор:    Дата:  
 headless shutdown   Eugene Grosbein   28 Sep 2002 19:06:27 
 Re: headless shutdown   Eugene Grosbein   28 Sep 2002 19:13:45 
Архивное /ru.unix.bsd/8869c85b52d2.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional