Kendyho Watchdog: Porovnání verzí
(doplneni jaka jsou oznaceni portu v linuxu) |
|||
Řádek 41: | Řádek 41: | ||
PS: Ty LED diody navíc jsou hlavně na ozdobu a jsou připojeny na některé výstupy 4017ky (přes odpory pochopitelně). Slouží i k indikaci běhu watchdogu. | PS: Ty LED diody navíc jsou hlavně na ozdobu a jsou připojeny na některé výstupy 4017ky (přes odpory pochopitelně). Slouží i k indikaci běhu watchdogu. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | ---- | ||
+ | |||
+ | '''Připojení na LPT port''' | ||
+ | Ještě sem pak dopíšu zbytek | ||
+ | |||
+ | <nowiki> | ||
+ | cat wdlpt.c | ||
+ | |||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <asm/io.h> | ||
+ | #include <signal.h> | ||
+ | |||
+ | #define BASEPORT 0x378 | ||
+ | |||
+ | static int end; | ||
+ | |||
+ | static void endme(int dummy) | ||
+ | { | ||
+ | end=1; | ||
+ | } | ||
+ | |||
+ | int main(int argc, char **argv) { | ||
+ | |||
+ | if (ioperm(BASEPORT, 3, 1)) { | ||
+ | // ask for permissions to access the parallel port | ||
+ | // YOU MUST BE ROOT TO ASK FOR THIS SORT OF PERMISSION, so | ||
+ | // don't forget to 'su' yourself ;-) | ||
+ | // usage of ioperm: BASEPORT ... base address we want to use | ||
+ | // 3 ... the next 3 bytes | ||
+ | // 1 ... we want the permission | ||
+ | perror("ioperm open"); | ||
+ | exit(1); | ||
+ | } | ||
+ | |||
+ | signal(SIGINT, endme); | ||
+ | |||
+ | outb(0, BASEPORT + 2); // set to output mode | ||
+ | |||
+ | int num = 1; | ||
+ | while (num-- > 0) { // adjust usleep if you want | ||
+ | sleep(1); | ||
+ | outb(0, BASEPORT + 2); | ||
+ | sleep(1); | ||
+ | outb(2, BASEPORT + 2); | ||
+ | } | ||
+ | |||
+ | freeperm(); // tell the system we do not use the port anymore | ||
+ | |||
+ | exit(0); | ||
+ | } | ||
+ | |||
+ | int freeperm() { | ||
+ | if (ioperm(BASEPORT, 3, 0)) { | ||
+ | // tell the system we do not use the port anymore | ||
+ | // usage of ioperm: BASEPORT ... base address we want to use | ||
+ | |||
+ | // 3 ... the next 3 bytes | ||
+ | // 0 ... free the permission | ||
+ | perror("ioperm close"); | ||
+ | } | ||
+ | }</nowiki> | ||
+ | |||
+ | Prelozit gcc wdlpt.c -o wdlpt | ||
+ | '''''Spustit''''' nohup bash -c "while true; do /addr/wdlpt; sleep 10s; done" & |
Verze z 23. 2. 2005, 09:41
Schema je taky tady. Naklady na vyrobu jednoho jsou minimalni (do 100 Kc i s kabelem). Zarizeni na schematu se pripojuje na seriovy port, druhy "drat" na reset piny desky a treti je napajeni 5V. Obsluhuje ho maly demonek. Funguje tak, ze kdyz vytuhne router, tak do 5 minut se stroj pomoci tohoto udelatka vyresetuje. Uspesne odzkouseno (a je ted funkcni) toto zapojeni na AP Spar a na nasem hlavnim pocitaci ORIONu.
Natavení v linuxu:
Spustit
nohup bash -c "while true; do echo watchdog > /dev/ttyS0; sleep 60s; done" &
- nohup - zpusobi, ze program zustane bezet i po zavreni konzole
- bash - interpreter skriptu
- watchdog - retezec, ktery je odesilan na seriovy port (muze byt misto watchdog treba i text "ferda_mravenec")
- /dev/ttyS0 - je port na ktery je retezec posilan (Linux značí porty takto: COM1=ttyS0, COM2=ttyS1,...)
- 60s - je doba mezi jednotlivymy vysilanimi.
Tuto radku staci zapsat do startovaciho skriptu routeru.
-- Kendy
PS: Kdo by mel nejasnosti tak at se tu na newsech zepta. Dovysvetlim.
Pinouts
(description) |
Jak to může vypadat
Já (pavkriz) jsem postavil watchdoga do Stěžer na kousku univerzálního plošnáku co jsem doma našel (běžně stojí asi 100Kč formát asi jako papír A6, na watchdog stačí daleko menší, ale koupit lze jen tento formát pokud vím).
Napájení mám udělané s použitím starého konektoru od harddisku, resp. od CDROMky na který jsem naletoval kablíky vedoucí k watchdogu a zapojil ho na napájecí konektor ze zdroje.
Pozor taky na to, že na "polaritě" kablíku co potáhnete k resetu záleží (běžně když je tam tlačítko tak nikoliv) - tudíž vyzkoušejte.
Takže celý můj watchdog je venku na konektoru který je zapojený do COMu a do case vedou celkem 4 vodiče - 2x napájení a 2x reset.
IO mám zapojené do patic (obyč) - pro případ ze bych nějaký při manipulaci prorazil statickou elekřinou, aby bylo snadné jej vyměnit.
Navíc jsem zrobil brobátko bastl-verzi démonka pro obsluhu watchdoga v C-čku: watchdog-r1.tgz (místo původního skriptu nohup....)
PS: Ty LED diody navíc jsou hlavně na ozdobu a jsou připojeny na některé výstupy 4017ky (přes odpory pochopitelně). Slouží i k indikaci běhu watchdogu.
Připojení na LPT port Ještě sem pak dopíšu zbytek
cat wdlpt.c #include <stdio.h> #include <stdlib.h> #include <asm/io.h> #include <signal.h> #define BASEPORT 0x378 static int end; static void endme(int dummy) { end=1; } int main(int argc, char **argv) { if (ioperm(BASEPORT, 3, 1)) { // ask for permissions to access the parallel port // YOU MUST BE ROOT TO ASK FOR THIS SORT OF PERMISSION, so // don't forget to 'su' yourself ;-) // usage of ioperm: BASEPORT ... base address we want to use // 3 ... the next 3 bytes // 1 ... we want the permission perror("ioperm open"); exit(1); } signal(SIGINT, endme); outb(0, BASEPORT + 2); // set to output mode int num = 1; while (num-- > 0) { // adjust usleep if you want sleep(1); outb(0, BASEPORT + 2); sleep(1); outb(2, BASEPORT + 2); } freeperm(); // tell the system we do not use the port anymore exit(0); } int freeperm() { if (ioperm(BASEPORT, 3, 0)) { // tell the system we do not use the port anymore // usage of ioperm: BASEPORT ... base address we want to use // 3 ... the next 3 bytes // 0 ... free the permission perror("ioperm close"); } }
Prelozit gcc wdlpt.c -o wdlpt Spustit nohup bash -c "while true; do /addr/wdlpt; sleep 10s; done" &