ç§ã®å人ãç¥äººã®å€ããç§ã®ç¥æ®¿ã«æãåããŠããããLinuxçšã®ãã©ã€ããŒãæžããŠããããšãããã£ããšãã«é è骚ãå§è¿«ãããŠããã®ã§ã¯ãªãããšèããŠããŸãã ããã©ã€ããŒããšããèšèã¯ãã»ãšãã©ç¥ç§çãªæå³ã«å ãŸããŠãããéžæããæç¥ã ããã¿ãªã®èäœãç解ã§ããŸãã
幞ããªããšã«ãããã¯ããã§ã¯ãããŸããã ä»ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã®ãã©ã€ããŒãäœæããããšã§ãã©ã®ãããªããšãèµ·ãããããããŸããã æãäžè¬çãªãã®ã§ãããLinuxã§ã¯ããã©ã€ããŒã®ããŒããŠã§ã¢ã¢ãŒããã¯ãã£ã«é¢ä¿ãªããéåžžã«ç°¡åã«èšè¿°ãããŠããŸãã ãã©ã€ããŒãäœæããã«ã¯ãCèšèªã®åºæ¬ç¥èãLinuxãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒåºæ¬ïŒã®ç解ãååŸããããã®ã®ç解ãããã¥ã¡ã³ããšãœãŒã¹ã³ãŒããèªã¿ãããšãã欲æ±ããããŠå¿èãå¿ èŠã§ãã ããã ãã§ã
ããã€ã¹çšã®ãã©ã€ããŒã®äœææ¹æ³ã確èªããŸããïŒ ãã®åŸãç«ã®äžã«é£ã³èŸŒã¿ãŸãïŒ
ãã©ã€ããŒã®äœæã®ããããã¯ãLinuxãœãŒã¹ã³ãŒããèŠäºã«ææžåãããŠããããœãŒã¹ã§å©çšå¯èœã§ãããšããäºå®ã«ãã£ãŠèª¬æãããŠããŸãããããäžã«ã¯å€ãã®äŸããããå€ãã®æç®ããããŸãã ãã©ã€ããŒãäœæããã«ã¯ããæ°ã«å ¥ãã®é åžããããšã«ãŒãã«ãœãŒã¹ãããã³å¿ èŠãªã¢ãŒããã¯ãã£çšã®ã³ã³ãã€ã©ãŒã®ã¿ãå¿ èŠã§ãã PowerPC 8360ããã»ããµçšã®ãã¬ãŒãã³ã°ã§ã¯ãªããæåã®ãã©ã€ããäœæããŸãããããã¯FPGAããããšå¯Ÿè©±ããããã©ã«ãèšå®ããªã»ããããŸããã å¥åŠãªããšã«ããã®ã¢ãŒããã¯ãã£çšã®SPIãã©ã€ããŒãå°ãæžãçŽããŠã¿ãŸããã ããã¯ãLinuxã«ãŒãã«ã§ã®ããã°ã©ã äœæã®çµ±äžãããæšæºåã«ããããã®ãããªããšãã§ãããšããäºå®ã«åºã¥ããŠããŸãã
Linuxãã©ã€ããŒãã©ã€ããŒã®ãã³ãããã¯ã¯ãLinuxããã€ã¹ãã©ã€ããŒãã§ãã ãã®æ¬ã¯éçºã®å æ¬çãªã¬ã€ãã§ãããæ¬ã«äœããæ¬ ããŠããå Žåã¯ãã«ãŒãã«ãœãŒã¹ã§ééããªãèŠã€ããããšãã§ããŸãã ãã¡ããããã®æçš¿ã¯ãã®çŽ æŽãããæ¬ã«åã£ãŠä»£ãããã®ã§ã¯ãããŸããã ããã«ããããã®äœåã®èªã¿ã«åºã¥ããŠæžãããŸããããããã§ããã®æ¬ã®ç°¡åãªæ¹äœã§ã¯ãããŸããã ãããã®è¡ã®èè ã¯ãèªè ã«Linuxã®ã·ã³ãã«ããšåªé ãã«èå³ãæããããã©ã€ããŒéçºã«å ¥ã人ã ã®ãããå€ãäžããããšãç®æããŠããŸãã ä¿¡ããŠ-ããã¯éåžžã«ç°¡åã§ãïŒ
ãã©ã€ããŒãäœæãã察象
ãã®èšäºã®äž»ãªç®çã¯ãã©ã€ããŒãäœæããããšãªã®ã§ãããŒããŠã§ã¢ã«ã¯æå°éã®æ³šæãæããŸãã 誰ããã¯ãã ããŠã®åéã§ãããåéã§ã¯ãªã人ãã¡ã§ããããšãé¡ã£ãŠããŸããåéãäœãå§ããæã§ããäœãã©ã®ããã«è¡ãããããç°¡åã«èª¬æããŸãã
LPTããŒããä»ããŠã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ãããHD44780ãã¡ããªãŒã®ãã£ã¹ãã¬ã€çšã®ãã©ã€ããŒãäœæããŸãã ç§ã¯ããŒããå€ãããã£ã¹ãã¬ã€ã®ã¿ã€ããç§ãããå°ããããšãç¥ã£ãŠããŸãããããã§ãããã¯ããŒããŠã§ã¢ã®è©³çŽ°ã説æããããšãªããLinuxçšã®ãã©ã€ããŒãèšè¿°ããçŸããã·ã³ãã«ãªäŸã§ãã ããã«ãä»ã®ã¢ãŒããã¯ãã£åãã«ãã®ç»é¢çšã«ãã®ãã©ã€ããäœãçŽãããšã¯ã1è¡ã眮ãæããã ãã®åé¡ã§ãïŒ
ãã®ãããLPTããŒããå¿ èŠã§ãã å€ãããªã³ã¿ãŒçšã®ã³ãŒããšãªãã·ã§ã³ã®36ãã³CENTRONICSã³ãã¯ã¿ãŒããã ããã±ãŒãã«ãç°¡åã«é梱ã§ããŸãã ãã¡ãããHD44780ãã¡ããªãŒã®ç»é¢ã§ã¯ãå°ãªããšã4x40æåãæé©ã§ãããæå°ã®æåã§ãååã§ãã ããŠãã³ã³ãã©ã¹ãã調æŽããããã®10 kOhmã®å¯å€æµæåšã ãã£ãšåã«LPTããŒããæã£ãŠããªãã£ãã®ã§ãæåã«åºäŒã£ãPCIã«ãŒããè³Œå ¥ããŸããïŒPCI-Eã䜿çšã§ããŸãïŒã ããã«ããã®ããŒãã¯éåžžã«å€ãã®äžåœèªã«åºããããã®ã§ããã®äžã«ã¯ãã ä»ãããããããã«é¢ããããã¥ã¡ã³ããèŠã€ããããšããã§ããŸããã§ããã äœããç§ãã¡ããããéã«ããŸã:)ïŒïŒïŒã
ããŒããŠã§ã¢ãœãŒã¹
ãããã®ã³ã³ããŒãã³ããå ¥æããããšã¯é£ãããªããããªãã®æã¯ãã¹ãŠãè¡ãããã«çŠãã§çããŠããŸãã
èŠå!!!
泚ææ·±ãèªãã§ãã ããïŒ
ç§ãã¡ã¯éã§æãå°é£ãªç¶æ³ã§åããŠããããšã瀺ããããšæããŸãããããŠãç§ãã¡ã¯ã³ã¢ã¬ãã«ã§ãåããŸãã ç§ãã¡ã¯ããã°ãæ£è ã®å åŽã«äœãã§ããŸãã ããã°ã©ã ããã³ã«ãŒãã«ã®ãšã©ãŒãã¯ã©ãã·ã¥ããŸãã kernel_panicãæ¯ãæéãããªããããããªããšããã§ãçªç¶ãã¹ãŠãæ©èœããªããªããŸãã ãã©ã€ããèµ·åããŠã¢ã³ããŒãããçªç¶æé»ã®ã°ãªãããéå§ããããšã«æ³šæããŠãã ãã-ããã ãã§ãããªãã®ããæ¹ã¯åèµ·åããŠããŸãã ã·ã¹ãã ã皌åããŠããå Žåã¯ãåèµ·åã³ãã³ãã ãŸã ãªãå Žåã¯ãããŒããŠã§ã¢ããªã»ããããŸãã æ·±å»ãªå Žåã§ããã·ã¹ãã ãèªåçã«åèµ·åããå ŽåããããŸãã
ããã«ãäœãããŠããã®ãããããªãå ŽåïŒããŒããžã®æžã蟌ã¿ãã¡ã¢ãªé åãžã®ã¢ã¯ã»ã¹ãªã©ïŒããããè¡ããªãæ¹ãè¯ãã§ãããã ããããã¹ãŠã®ããã«ããããããèšå®ïŒx70ã§BIOSããªã»ããããããã«äœ¿çšãããããŒã70hã«æžã蟌ãŸãã誀ã£ãå€ïŒãå£ããããæ©åšãå°ç¡ãã«ãããããããšããããŸãïŒããšãã°ãGPIOããããå°é¢ã«çœ®ãããšã«ãã£ãŠïŒã ãããã£ãŠãããŒããŠã§ã¢ãšãœãããŠã§ã¢ã®äž¡æ¹ã®ã¬ãã«ã§ãããªããããŠããããšãæ確ã«ç解ããŠãã ããïŒ
éãã
ç§ã®ã³ã³ãã¥ãŒã¿ãŒã«çµã¿èŸŒãŸããŠããlpt-portã®å¹žéãªææè ã«ãšã£ãŠãããªãã®å ŽåãããŒãã¯æšæºã¢ãã¬ã¹378hã«ãããšèšããŸãã ç§ã¯çå€äžã«ç®ãèŠããããšãã§ããç§ã¯ãã®æ°åãèšãã§ãããããšãŠãå€ãã¯ããã«é¢é£ããŠããŸãã ããããä»ã§ã¯æµã®å ±é ¬ãäžããããŠããããããæã¡è² ããå¿ èŠããããŸãïŒ
ããŒããPCIãŸãã¯PCI-Eã¹ãããã«æ¿å ¥ããèµ·åããŠã次ã®ã³ãã³ãã§PCIãã¹ã§äœãèµ·ããããç£èŠããŸãã
lspci -v ⊠05:01.0 Serial controller: Device 4348:5053 (rev 10) (prog-if 02 [16550]) Subsystem: Device 4348:5053 Flags: medium devsel, IRQ 18 I/O ports at c030 [size=8] I/O ports at c020 [size=8] Kernel driver in use: serial
ã芧ã®ããã«ãLinuxã¯PCIãã¹äžã§äœããèŠã€ããæããã«äœããã®èª€ã£ããã©ã€ããŒãæ®ãããšããŸããã ãã ãããã®ããŒãã眮ãããŠããã¢ãã¬ã¹ã«æãé¢å¿ããããŸãã I / OããŒããã€ãŸãçªå·c030hããã³c020hã§ãã
次ã«ãã©ã®ã¢ãã¬ã¹ãåå ã§ããããèŠã€ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãã»ãŒåãæ¹æ³ã§LEDãæµæä»ãã®åºåããŒãã«æ¥ç¶ããŸãïŒçŽ310ãªãŒã ã®æµæããŸãã¯ãã以äžã§ãããã§ãæ§ããŸããïŒ
æ€èšŒã¹ããŒã
ãã®çš®ã®ãã¹ãçšã®LEDã®ãã©ã³ã¯ã¯æ¢ã«ãããããCENTRONICSã³ãã¯ã¿ãŒã«ã¯ã€ã€ãŒãçŽæ¥æ¿å ¥ãã8æ¬ãã¹ãŠã®ã¯ã€ã€ãŒã«é©åããªãã£ãããã6æ¬ïŒæåã®4ã€ãšæåŸã®2ã€ïŒã®ã¿ãæ¿å ¥ããŸããã
çµã¿ç«ãŠãããããŒããã¹ã¿ãŒ
ãããŠãæ€èšŒã®ããã®å°ããªããã°ã©ã ãã¹ã±ããããŸãã
ããŒããæäœããããã«ãããwww.faqs.org/docs/Linux-mini/IO-Port-Programming.html#s9ããäŸãåãäžããŸããã ä¿®æ£ããå¿ èŠãããã®ã¯æ¬¡ã®è¡ã®ã¿ã§ãã
#include <asm/io.h>
ã«
#include <sys/io.h>
1ç§ãããã®éåžžã®é 延ãäœæããŸãïŒusleepïŒ100000ïŒã®ä»£ããã«;
ãsleepïŒ1ïŒ;ïŒãæžã蟌ã¿ãããŒãã«3ã€ã®åºåãé çªã«äœæããŸãã
outb(0, BASEPORT); sleep(1); outb(0xAA, BASEPORT); sleep(1); outb(0xFF, BASEPORT); sleep(1);
#define BASEPORTã®å€æŽãããŒã0xc030ã«å®çŸ©ããŸãã ã³ã³ãã€ã«ããã«ãŒãã®äžããå®è¡ããŸããLEDã¯ç¹ç¯ããŸããã å¥ã®æ°åã«å€æŽ-0xc020-ãšãŒã«opïŒ
ãŒã
ãã³AAh
ãããŠããã¡ããã2çªç®ã®FFhã§
çµæã¯æããã§ãã ã€ãŸã æšæž¬ããããŒãçªå·ã§ã,ãå§ããããšãã§ããŸãã ãã®ããŒãã®LPTããŒãã¯ãã®ã¢ãã¬ã¹ã«ãããŸãã 0Xc020 ïŒ
ãã£ã³ã¹ãã¹ããã°ã©ããŒã®æ³šæãããžãã¯ãã³ããŒ0xAAã«åŒãä»ããããšæããŸã-ããã¯1ãš0ã®ã·ãŒã±ã³ã¹ã§ãã ãã®ããã«ïŒ 10101010b ã ãããã°ã«ã¯éåžžã«äŸ¿å©ã§ãã äžè¬ã«ãããŒããŠã§ã¢ãæ±ã人ã¯ã ãã§ãç°¡åã«2é²æ°ã10é²æ°ã16é²æ°ãååŸã«å€æããå¿ èŠããããŸãã
æ»ãã£ã¹ãã¬ã€
ãã©ã ããŒã«ãããã¯éçããŸãšããæéã§ãïŒ ãããè¡ãã«ã¯ããã¹ãŠãäžç·ã«ã¯ãã ä»ãããå¿ èŠããããŸãã 次ã®ã¹ããŒã ã«åŸã£ãŠãã¹ãŠãåéããŸãã
ç§ã¯ã¹ããŒã ãGOSTã«æºæ ããŠããªãããšãç¥ã£ãŠããŸãããããã¯ã©ãžãªéèªã§ããããŸãã
ã¹ã¯ãªãŒã³ã«é»åãäŸçµŠããããã«ãUSBã¯ã€ã€ãŒãå€ããã¹ã¯ãªãŒã³ã«2æ¬ã®ã¯ã€ã€ãŒãæ¥ç¶ããŸããã ããªãããŒãªãªãã·ã§ã³ããããŸããæããŸã£ããå±ããªããšããããšã§ããLPTã¯ã€ã€ã§çŽæ¥USBé»æºããªã³ã«ããŠãå€ãã®ã¢ãŒã¹ã¯ã€ã€ã®1ã€ãã¯ãã ä»ãããããšã§ãã æãå±ããšãç§ã¯ééããªããããè¡ããŸãã ãã®èšäºã®ã¿ãè¿œå ããŸã:)ïŒïŒïŒã
ãã®çµæãé»æºãå ¥ããåŸã次ã®ããã«ãªããŸãã 2ã€ã®ã¹ããªããã衚瀺ãããããã«ãæµæåšã§èŒåºŠã調æŽããŸãã ãã£ã¹ãã¬ã€ãåæåãããŠããªãããšã瀺ããŠããŸãã
ããã€ã¹ã®çµã¿ç«ãŠ
ãµhardwareãããŒããŠã§ã¢ã¯å®æããŸãããããã°ã©ã ã«ç§»ããŸãããã
ããã°ã©ã ã®ç»é¢ã§æªã®å®éšã«å°éãã
ããããåãåºããArduinoã³ãŒããããã£ã¹ãã¬ã€ãæäœããããã®æ¢è£œãšããŠäœ¿çšããŸããã ç§ããã®ãã©ãããã©ãŒã ã奜ãã§ã¯ãããŸããããã³ãŒãã¯I2Cãä»ããŠæ¥ç¶ããããã£ã¹ãã¬ã€ã«é©ããŠããŸãã æåŸã®èšèã§äœãèšãããªããŠããå¿é ããªãã§ãã ããã äžçªäžã®è¡ã¯ãåããã£ã¹ãã¬ã€ãïŒãã¹ã®ååãšããŠïŒ2æ¬ã®ã¯ã€ã€ãä»ããŠæ¥ç¶ãããLPTããŒãã®ããã«ãéä¿¡ããããã€ãããã©ã¬ã«ãã¹ã«åã³å€æããã¬ãžã¹ã¿ããããŸãã ãã®çµæãI2Cã§ã®äœæ¥ã®äžéšãæšãŠãŠãè¯ãã©ã€ãã©ãªãååŸããŸãã
æž æœã«ããããã«ãç§ã¯ãããäºãã«æžãçŽããå¿ èŠãªæ©èœãããã€ãè¿œå ãã競åããæ©èœã®ããã€ããååãå€æŽããä»ã®ããã€ãã®å€æŽãå ããŸããïŒèŠããŠããŸãããã倧éã®æ°ŽãæŒããŸããïŒã
ã¡ãªã¿ã«ãã³ãŒãã¯STM32ã§äœ¿çšããããã£ã¹ãã¬ã€ãI2Cã§æ¥ç¶ãããŠããŸããã ãããŠä»ãç§ãã¡ã¯ãã§ã«ãããx86ãšLinuxã®äžã«ç§»æ€ããŠããŸãã ããã«ãããŸã-ã³ãŒãã®ç§»æ€æ§ã®å€§ããªåïŒ æ°ãããã©ãããã©ãŒã ã«ãã§ã«ã³ãŒããé©å¿ãããã®ã«ãã£ã10åããè²»ãããŠããŸããã
ããŒãã®æäœã¯1ã€ã®æ©èœã§å®è¡ãããŸããããã¯éããŒã¿ãã«ããŒãã§ããããã©ãããã©ãŒã ã«ãã£ãŠã¯åºåæ¹æ³ãå€æŽããå¿ èŠããããŸãã I2Cã«é¢ããçµè«ããããŸããã
void expanderWrite(unsigned char _data){ outb(((_data) | _backlightval), BASEPORT); //x86 instruction!!!!! }
ãã®æ©èœã«æ³šæããŠãã ããã 眮ãæããŠãã³ãŒããAVRãSTM32ãMIPSãªã©ã§å®è¡ã§ããŸãã
ãã§ã«ããªãã¿ã®ããŒããžã®çµè«ã ããŒãã¯ãããããŒlcd.hã§å®çŸ©ãããŠããŸãã ãã¹ãŠãä»ãç§ãã¡ã¯çµè«ãåºãããšãã§ããŸãã ããã°ã©ã ã¯ããã«ç°¡åã«ãªããããèŠèŠçã«ãªããŸããã
print_to_stringã©ãããŒé¢æ°ã¯è¡šç€ºã«äœ¿çšãããŸãã
void print_to_string (unsigned char col, unsigned char row, unsigned char c[], unsigned char len);
æåã®ãã©ã¡ãŒã¿ãŒã¯åçªå·ïŒ0ãã19ïŒã2çªç®ã®è¡çªå·ïŒ0ãã3ïŒã3çªç®ã¯æåã¹ããªã³ã°ãžã®ãã€ã³ã¿ãŒãæåŸã¯ã¹ããªã³ã°ã®é·ãã§ãã è¡ã®æ«å°Ÿã®ã\ 0ãã¯ãã§ãã¯ãããŸãããé·ãã¯åå¥ã«å¶åŸ¡ããå¿ èŠããããŸãïŒ ãã®çµæã衚瀺ãè©ŠããŠãã ããïŒ
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #include "lcd.h" #define LCD_STRINGS 4 // #define LCD_COLUMNS 20 // int main() { LCD_init(0, LCD_COLUMNS, LCD_STRINGS);// print_to_string (0, 0, "XXXXXXXXXXXXXXXXXXXX" , 20); print_to_string (0, 1, "YYYYYYYYYYYYYYYYYYYY" , 20); print_to_string (0, 2, "ZZZZZZZZZZZZZZZZZZZZ" , 20); print_to_string (0, 3, "MMMMMMMMMMMMMMMMMMMM" , 20); exit(0); }
ãã®çµæã次ã®ãããªãã®ãç»é¢ã«è¡šç€ºãããã¯ãã§ãã
åããŠã®ããã¥ãŒïŒ
ãã®ãã«ãã«é©ããªãã§ãã ããã ãã®ç»é¢ã¯å£ãããã¯ã»ã«ã®ããã«æžãèœãšãããŸããããããã¯ãã³ã³ãããŒã©ãŒã¯ããã®éçãªãã®ããåã«æ»ã«ãŸããïŒãããã®ããã€ãããããŸãïŒã ããã¯ä»äºã«ã¯é©ããŠããŸãããããã®ãããªãã¹ãŠã®å®éšã«ã¯é©ããŠããŸãã ãã®ãããªãã ããªãã¹ã¯ãªãŒã³ã¯äžåœäººãããïŒ
ããã¯åæ¢ãããå¯èœæ§ããããŸãããªããªã ãã®äŸã§ã¯ãä»»æã®æåã衚瀺ãããããã©ã³ããããŠã³ããŒããããã§ããŸãã ãããããã©ã€ããŒãšããŠã§ã¯ãããŸããã æ³ååãèš±ãéããæªéãªã©ã§ãªã¡ã€ã¯ã§ããŸããã
ãããã£ãŠãããã«èªã¿ãããšéå±ãã人ã®ããã«ããã®äŸã®å®å šçãããã«æçš¿ããŸã ã
ç§ãã¡ã®ã°ããŒãã«ãªç®æšã¯ããã€ã¹ãã©ã€ããŒãªã®ã§ãå§ããŸãããã
ãã©ã€ããŒæ§ç¯ããŒã«
ãã©ã€ããŒã®äœæãéå§ããã«ã¯ãå¿ èŠãªããŒã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã Ubuntuããã³Debiançšã®ããŒã«ãæºåããæ¹æ³ã¯ããã®ããã°ã§è©³ãã説æãããŠããŸããmarkloiseau.com/ 2012/04 / hello-world-loadable-kernel-module-tutorialã®èšäº
debianããã±ãŒãžãåéããå¿ èŠããªããèªåã ãã®ããã«ã¢ãžã¥ãŒã«ãäœæããå Žåã次ã®ã³ãã³ãã§å¿ èŠãªã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããã ãã§ååã§ãããšç°¡åã«èšããŸãã
sudo apt-get install build-essential linux-headers-$(uname -r)
ã«ãŒãã«ã®ãœãŒã¹ãããŠã³ããŒãããããšã匷ããå§ãããŸãã ãããè¡ãã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸãã æåã®æãããªããããããããããããªslightlyã¯ã次ã®ã³ãã³ãã§ã«ãŒãã«ã®ããŒãžã§ã³ãèŠã€ããããšã§ãïŒ
uname - a
www.kernel.orgããããŠã³ããŒãããŸãã ç§ã¯ãªã³ã¯ããã©ã£ãŠã«ãŒãã«ã®ããŒãžã§ã³ãæ¢ãã®ãé¢åãªäººã§ãããã®ããžãã¹ã®èªååãä¿¡ããŠããŸãã
# sudo -s cd /usr/src/ apt-get source linux-image-$(uname -r) # . # linux_3.8.0-9.18.tar.gz /usr/src/linux-3.8.0
ãŸãããã®ãã¹ãèŠããŠããããããšãã°/ usr / src / linuxãªã©ã®ãªã³ã¯ãè¿œå ããŸãããããã¯ãå§ãããŸããã ã«ãŒãã«ã¯ã¢ããã°ã¬ãŒãããåŸåããããŸãã ããã¹ããããã§ãªãã¹ãããèªåã§æ±ºããŠãã ããã
ããã§æ¬åœã®å®ç©ãæã«å ¥ããŸãããææ°ã®ããã¥ã¡ã³ãã®ä¿ç®¡åº«ãèšå€§ãªéã®ãœãŒã¹ã³ãŒãã®äŸããããŠãã¡ãããã¢ãžã¥ãŒã«ãæ§ç¯ããããã«å¿ èŠãªæ©é headã§ãã
ããã¥ã¡ã³ãããã©ã€ããŒãªã©ãããã«ç»ãããœãŒã¹ã³ãŒããé²èŠ§ããããšã匷ããå§ãããŸã-ããã¯éåžžã«äŸ¿å©ã§ãïŒ
èªåã®ãã©ã€ããŒ
ã¡ã€ã¯ãã¡ã€ã«ãä¿®æ£ããæ¢è£œã®ãã©ã€ããŒãå ¥æããã ãã ãšæãââå Žåãããªãã¯æ·±ã誀解ããŠããŸãã ããã§ãç§ãã¡ã¯å¥ã®äžçã«ããŸãããŠãŒã¶ãŒç©ºéã§ã¯ãªããã«ãŒãã«ç©ºéã«ããŸãã ãããŠãããã§ã¯ãŸã£ããç°ãªãã«ãŒã«ãé©çšãããŸãã
ç¶æ³ã®ãã¹ãŠã®è²§å°ãå®çŸããã«ã¯ãã«ãŒãã«ã1ã€ã®å€§ããªã倧ããªããã°ã©ã ã§ããããšãç解ããå¿ èŠããããŸãã ãããŠããã¯ãã°ããŒãã«å€æ°ãé¢æ°ãªã©ãæå³ããŸã ã«ãŒãã«ã®ä»ã®å Žæã§å©çšã§ãããããããŸããïŒ ãããã£ãŠããã¹ãŠã®ã°ããŒãã«å€æ°ïŒãããã¯æ倧éã«åé¿ããå¿ èŠããããŸãïŒã¯éçãšããŠå®£èšããå¿ èŠããããŸãïŒ
ãã©ã€ããŒãã«ãŒãã«ã«çµã¿èŸŒãããšã§ã«ãŒãã«ãåæ§ç¯ããããšã¯ãããåèµ·åãããã³ã«ã«ãŒãã«ãåè©Šè¡ããŸãã 確ãã«é¢çœãã§ãããéåžžã«é·ãã§ãã 代ããã«ãå®è¡æã«ããã«ããŒãããã³ã¢ã³ããŒãããã«ãŒãã«ã¢ãžã¥ãŒã«ãäœæããŸãã
å°æ¥ã®ã¢ãžã¥ãŒã«ã§ã¯ããŠãŒã¶ãŒç©ºéã®ããã°ã©ã ãšæ¯èŒããŠãå€æŽã¯ããã»ã©éèŠã§ã¯ãããŸããã ãŸãããã¹ãŠã®ãã¡ã€ã«ã1ã€ã«è»¢éããŸããããã«ãããã³ã³ãã€ã«ã«åé¡ãçºçããªãããã«ããŸãïŒãŸãã¯ããã¡ã€ã«ãçžäºã«çµã¿èŸŒã¿ãŸãïŒã ããããŒã¯æ®ããŸãããé¢æ°ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãæ確ã«å®çŸ©ããŸãïŒãã©ã¡ãŒã¿ãŒããªãå Žåã¯ãvoidãç»é²ããå¿ èŠããããŸãïŒã ç§ãã¡ã¯ã³ã¢ã¹ããŒã¹ã«ããããšãæãåºããç§ãã¡ãæã£ãŠãããã¹ãŠã®ã©ã€ãã©ãªã¯ç°ãªã£ãŠããŸãã ãã¹ãŠã®ããããŒãnuclearã«å€æŽããŸãã
#include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> /* everything... */ #include <asm/io.h> #include <linux/unistd.h> #include <linux/delay.h> /* udelay */ #include <asm/uaccess.h> #include <linux/miscdevice.h>
unistd.hãšio.hã§ããæ žã«ãªã£ãŠããããšã«æ³šæããŠãã ããã
ãã©ã€ããŒã®äž»ãªåºç€ãšããŠã hello worldã¢ãžã¥ãŒã«ã䜿çšããŸãã inité¢æ°ãä¿®æ£ããŸãããïŒ
static int __init hello_init(void) { LCD_init(0, LCD_COLUMNS, LCD_STRINGS); print_to_string (0, 1, "Hello Habrahabr " , 20); printk(KERN_INFO "Lpt module init\n"); return 0; // Non-zero return means that the module couldn't be loaded. }
ããã§ã¯ãã¹ãŠãå®è³ªçã«å€æŽãããŠããŸããã éãæ±ãæ©èœã¯å€åããŠããŸãïŒæããã©ãããã©ãŒã ã«äŸåïŒã æ žåºåããŒãæ©èœã§æ¢ã«åäœããŸãïŒ
void expanderWrite(unsigned char _data){ //outb(((_data) | _backlightval), BASEPORT); //x86 instruction rootfs!!!!! outb_p(((_data) | _backlightval),BASEPORT); //x86 instruction kernel!!!!! }
ãããŠãå¥åŠãªããšã«ãé 延æ©èœã äžè¬çã«ãé 延ã¯å¥ã®æã§ãããèšäºå šäœã«åœãŠãããšãã§ããŸãã ç§ãã¡ã¯ãã¹ãŠãçŽ æ©ãæã«å ¥ããããããçš®é¡ã®ãã³ã»ã³ã¹ã«å¯ŸããŠå¯èœãªéãã³ã¢ãå æããã¹ãã§ãã ãããããŸã ïŒ
static inline int delayMicroseconds(int value) { //usleep(value); //rootfs if (value > 1000) msleep(value/1000); udelay(value%1000); return 0; //kernel }
ãã®è©æ¬ºã®èª¬æã¯ç°¡åã§ããã«ãŒãã«å ã®udelayã¯ã1000ãè¶ ããå€ãåãããšã¯ã§ããŸããã ã€ã³ã·ãã³ããåé¿ããã«ã¯ããã®ãããªã¹ã¿ããå¿ èŠã§ãã
ãã®åŸã次ã®ãããªã¡ã€ã¯ãã¡ã€ã«ã§ã»ãŒåéããŸãã
TARGET = lptlcd obj-m := $(TARGET).o KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) CC = gcc all: $(MAKE) -C $(KERNELDIR) M=$(PWD) clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
ãããŠã次ã®ã³ãã³ãã§ã¢ãžã¥ãŒã«ãã·ã¹ãã ã«ããŒãããŸãã
sudo insmod lptlcd.ko
ãã¹ãŠãæ£ããè¡ã£ãå Žåããšã©ãŒã¯çºçãããç»é¢ã¯æ£ããåæåãããdmesgã¯ã¢ãžã¥ãŒã«ã®ã¡ãã»ãŒãžãæçµè¡ãšããŠè¡šç€ºããŸãã
[10036.950566] Lpt module init
次ã®ã³ãã³ãã§ã¢ãžã¥ãŒã«ãã¢ã³ããŒãã§ããŸã
sudo rmmod lptlcd
dmesgã¯ããèšããŸãïŒ
[10077.176714] Cleaning up module
äžè¬çã«ãåžžã«dmesgãæŒããªãããã«ãã¹ã¯ãªããããããŸããJtu åå¿ãç§ã«ææ¡ãã解決çããããŸã ã
while true; do sudo dmesg -c; sleep 1; done
ãŸãã¯ãUbuntu以å€ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã䜿çšããŠããå Žåã¯ãrootãšããŠå®è¡ããsudoãåé€ããå¿ èŠããããŸãã
ç»é¢äžã®çµæïŒ
ããã«ã¡ã¯ïŒ
ããããã¹ãŠãèŠããªã-ããã§ãšãããããŸããããã¯ç»é¢ã«ç¢æã衚瀺ããæåã®åäœãã圹ã«ç«ããªãã«ãŒãã«ã¢ãžã¥ãŒã«ã§ãïŒ ããã¯ç¢ºãã«ãããããã§ããããŸã å®éšãéåžžã®ãã©ã€ããŒã«å€ããŠäœæ¥ããå¿ èŠããããŸãã ãã®ããã«ã¯ãå°ãªããšãå°ãã¯ææã«ã€ããŠè©±ããªããã°ãªããŸããã
ææã«ã€ããŠã®ããã€ãã®èšè
奜ããšå¥œãŸãããšã«ããããããããã€ãã®ããŒããŠã§ã¢ãç¥ããªããŠãé ããŸã§è¡ãããšã¯ã§ããŸãããã·ã³ããªãã¯ããããã¯ããããã¯ãŒã¯ããã€ã¹ããããŸãã åããã€ã¹ã«ã¯ãã¡ãžã£ãŒããã³ãã€ããŒããã€ã¹çªå·ããããŸãã ã The Linux Kernel Module Programming Guide ããšããæ¬ãããè¯ãããšãèšãããšã¯äžå¯èœã§ãããã®ããããã¿ãã¬ã®æ¬ããåŒçšããŸãã
ã¡ãžã£ãŒããã³ãã€ããŒããã€ã¹çªå·
ã¡ãžã£ãŒããã³ãã€ããŒããã€ã¹çªå·
ããã€ãã®ããã€ã¹ãã¡ã€ã«ãèŠãŠã¿ãŸãããã 以äžã¯ããã©ã€ããªããŒããã©ã€ãã®æåã®3ã€ã®ããŒãã£ã·ã§ã³ãè¡šããã®ã§ãã
ã³ã³ãåºåãã®åã«æ³šç®ããŠãã ããã æåã®çªå·ã¯ãããã€ã¹ã®ãé«ãçªå·ããšåŒã°ããŸãã 2çªç®-ããžã¥ãã¢çªå·ãã ã¡ãžã£ãŒçªå·ã¯ãããŒããŠã§ã¢ã®ä¿å®ã«äœ¿çšããããã©ã€ããŒã瀺ããŸãã åãã©ã€ããŒã«ã¯ãåºæã®ã¡ãžã£ãŒçªå·ããããŸãã åãã¡ãžã£ãŒçªå·ãæã€ãã¹ãŠã®ããã€ã¹ãã¡ã€ã«ã¯ãåããã©ã€ããŒã«ãã£ãŠç®¡çãããŸãã äžèšã®ããã€ã¹ãã¡ã€ã«ã¯ãã¹ãŠãåããã©ã€ããŒã«ãã£ãŠå¶åŸ¡ãããããã3ã«çããã¡ãžã£ãŒçªå·ãæã£ãŠããŸãã
ãã€ããŒçªå·ã¯ããã©ã€ããŒãå¶åŸ¡ããããŒããŠã§ã¢ãåºå¥ããããã«äœ¿çšãããŸãã äžèšã®äŸã«æ»ããšã3ã€ã®ããã€ã¹ãã¹ãŠãåããã©ã€ããŒã«ãã£ãŠåŠçãããŸãããããããã«åºæã®ãã€ããŒçªå·ãããããããã©ã€ããŒã¯ããããç°ãªãããŒããŠã§ã¢ããã€ã¹ãšããŠãèªèãããŸãã
ããã€ã¹ã¯ããããã¯ãšã·ã³ããªãã¯ãšãã2ã€ã®å€§ããªã°ã«ãŒãã«åããããŸãã ãããã¯ããã€ã¹ãšãã£ã©ã¯ã¿ãŒããã€ã¹ã®äž»ãªéãã¯ããããã¯ããã€ã¹ãšããŒã¿ããã€ãéšåã§äº€æãããããšã§ã-ãããã¯ã å éšãããã¡ããããçºæ¿ã¬ãŒããå¢å ããŸãã ã»ãšãã©ã®Unixã·ã¹ãã ã§ã¯ã1ãããã¯ã®ãµã€ãºã¯1ãããã€ããŸãã¯2ã®çŽ¯ä¹ã§ããå¥ã®æ°å€ã§ããã·ã³ããªãã¯ããã€ã¹ã¯ãããŒã¿ããã€ãåäœã§é çªã«ç¶ãæ å ±è»¢éã®åãªããã£ãã«ã§ãã ã»ãšãã©ã®ããã€ã¹ã¯ããããã¯ãµã€ãºã«ãã£ãŠå¶éãããããããã¡ãªã³ã°ããå¿ èŠããªããããæåã¯ã©ã¹ã«å±ããŸãã ãªã¹ãã®æåã®æåãls-l / devã«ãã£ãŠåä¿¡ãããå Žåã 'b'ã®å Žåãããã¯ãããã¯ããã€ã¹ã§ããã 'c'ã®å Žåãããã¯æåã§ãã äžèšã®äŸã§ç€ºãããããã€ã¹ã¯ãããã¯ããã€ã¹ã§ãã 以äžã¯ãããã€ãã®ãã£ã©ã¯ã¿ããã€ã¹ïŒã·ãªã¢ã«ããŒãïŒã®ãªã¹ãã§ãã
ã¡ãžã£ãŒããã€ã¹çªå·ãã©ã®ããã«å²ãåœãŠãããããç¥ãããå Žåã¯ã/ usr / src / linux / documentation / devices.txtãã¡ã€ã«ã調ã¹ãŠãã ããã
ãã¹ãŠã®ããã€ã¹ãã¡ã€ã«ã¯ãmknodãŠãŒãã£ãªãã£ã䜿çšããŠã·ã¹ãã ã®ã€ã³ã¹ããŒã«äžã«äœæãããŸãã ããšãã°ããcoffeeããšããååã§ã¡ãžã£ãŒçªå·12ããã€ããŒçªå·2ã®æ°ããããã€ã¹ãäœæããã«ã¯ãã³ãã³ãmknod / dev / coffee c 12 2.ãå®è¡ããå¿ èŠããããŸãã/devãã£ã¬ã¯ããªã«ããã€ã¹ãã¡ã€ã«ãé 眮ãã矩åã¯ãããŸããããã¯ãåãå ¥ããããŠããå¥çŽã«æºæ ããŠããŸãã ãã ãããããã°ã®ããã«ããã€ã¹ãã©ã€ããŒãéçºããå Žåãããã€ã¹ãã¡ã€ã«ãããŒã ãã£ã¬ã¯ããªã«é 眮ããããšã¯ãããããããã»ã©æªãèãã§ã¯ãããŸããã å¯äžã®ããš-ãããã°ã®å®äºåŸã«ããã€ã¹ãã¡ã€ã«ãé 眮ããå Žæãä¿®æ£ããããšãå¿ããªãã§ãã ããã
è°è«äžã®ãããã¯ã«ã¯æããã«é¢ä¿ãªãããç§ããããã³ã¡ã³ããããã€ããããŸãã ããã€ã¹ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ãããšãã«ãŒãã«ã¯æ倧ã®ãã¡ã€ã«çªå·ã䜿çšããŠããã®åŒã³åºããåŠçãããã©ã€ããŒã決å®ããŸãã ããã¯ãã«ãŒãã«ãå®éã«ãã€ããŒçªå·ã䜿çšãããããã«ã¯äœãç¥ããªãããšãæå³ããŸãã ããã«ã€ããŠå¿é ããŠããã®ã¯ããã©ã€ããŒèªäœã ãã§ãã ãã€ããŒçªå·ã䜿çšããŠãç°ãªãç©çããã€ã¹ãåºå¥ããŸãã
ã¡ãªã¿ã«ããããã€ã¹ããšèšããšãã¯ãæã§æã€ããšãã§ããPCIããŒããããæœè±¡çãªãã®ãæå³ããŸãã 次ã®2ã€ã®ããã€ã¹ãã¡ã€ã«ãèŠãŠãã ããã
çŸæç¹ã§ã¯ããããã®ããã€ã¹ãã¡ã€ã«ã«ã€ããŠã¯ãã©ã¡ããåããã©ã€ããŒïŒã¡ãžã£ãŒçªå·2ïŒã«ãã£ãŠæäŸããããããã¯ããã€ã¹ã§ãããšèšããŸãã ãã©ã€ãã1ã€ãããªãå Žåã§ããäž¡æ¹ãšããããããŒãã©ã€ããè¡šããŠãããšäž»åŒµããããšããã§ããŸãã ãããããªã2ã€ã®ãã¡ã€ã«ãªã®ã§ããããïŒ ããããåé¡ã¯ããã§ãããã®ãã¡ã®1ã€ã¯1.44 MbãããããŒãã£ã¹ã¯ãã©ã€ãã§ãã ãã1ã€ã¯åããã©ã€ãã§ããã1.68 MBãããããŒãã£ã¹ã¯çšã§ãããäžéšã®äººã ããã¹ãŒããŒãã©ãŒãããããã£ã¹ã¯ãšåŒã¶ãã®ã«å¯Ÿå¿ããŠããŸãã ãã®ãããªãããããŒãã£ã¹ã¯ã¯ãæšæºã®ãã©ãŒãããæžã¿ãããããŒãã£ã¹ã¯ãããå€ãã®ããŒã¿ãæ ŒçŽã§ããŸãã ãã€ããŒçªå·ãç°ãªã2ã€ã®ããã€ã¹ãã¡ã€ã«ããå®éã«ã¯åãç©çããã€ã¹ãè¡šãå Žåã§ãã ã§ããããç§ãã¡ã®è°è«ã§ã¯ããããã€ã¹ããšããèšèã¯ãããæœè±¡çãªãã®ãæå³ããå ŽåããããŸãã
ããã€ãã®ããã€ã¹ãã¡ã€ã«ãèŠãŠã¿ãŸãããã 以äžã¯ããã©ã€ããªããŒããã©ã€ãã®æåã®3ã€ã®ããŒãã£ã·ã§ã³ãè¡šããã®ã§ãã
# ls -l /dev/hda[1-3] brw-rw---- 1 root disk 3, 1 Jul 5 2000 /dev/hda1 brw-rw---- 1 root disk 3, 2 Jul 5 2000 /dev/hda2 brw-rw---- 1 root disk 3, 3 Jul 5 2000 /dev/hda3
ã³ã³ãåºåãã®åã«æ³šç®ããŠãã ããã æåã®çªå·ã¯ãããã€ã¹ã®ãé«ãçªå·ããšåŒã°ããŸãã 2çªç®-ããžã¥ãã¢çªå·ãã ã¡ãžã£ãŒçªå·ã¯ãããŒããŠã§ã¢ã®ä¿å®ã«äœ¿çšããããã©ã€ããŒã瀺ããŸãã åãã©ã€ããŒã«ã¯ãåºæã®ã¡ãžã£ãŒçªå·ããããŸãã åãã¡ãžã£ãŒçªå·ãæã€ãã¹ãŠã®ããã€ã¹ãã¡ã€ã«ã¯ãåããã©ã€ããŒã«ãã£ãŠç®¡çãããŸãã äžèšã®ããã€ã¹ãã¡ã€ã«ã¯ãã¹ãŠãåããã©ã€ããŒã«ãã£ãŠå¶åŸ¡ãããããã3ã«çããã¡ãžã£ãŒçªå·ãæã£ãŠããŸãã
ãã€ããŒçªå·ã¯ããã©ã€ããŒãå¶åŸ¡ããããŒããŠã§ã¢ãåºå¥ããããã«äœ¿çšãããŸãã äžèšã®äŸã«æ»ããšã3ã€ã®ããã€ã¹ãã¹ãŠãåããã©ã€ããŒã«ãã£ãŠåŠçãããŸãããããããã«åºæã®ãã€ããŒçªå·ãããããããã©ã€ããŒã¯ããããç°ãªãããŒããŠã§ã¢ããã€ã¹ãšããŠãèªèãããŸãã
ããã€ã¹ã¯ããããã¯ãšã·ã³ããªãã¯ãšãã2ã€ã®å€§ããªã°ã«ãŒãã«åããããŸãã ãããã¯ããã€ã¹ãšãã£ã©ã¯ã¿ãŒããã€ã¹ã®äž»ãªéãã¯ããããã¯ããã€ã¹ãšããŒã¿ããã€ãéšåã§äº€æãããããšã§ã-ãããã¯ã å éšãããã¡ããããçºæ¿ã¬ãŒããå¢å ããŸãã ã»ãšãã©ã®Unixã·ã¹ãã ã§ã¯ã1ãããã¯ã®ãµã€ãºã¯1ãããã€ããŸãã¯2ã®çŽ¯ä¹ã§ããå¥ã®æ°å€ã§ããã·ã³ããªãã¯ããã€ã¹ã¯ãããŒã¿ããã€ãåäœã§é çªã«ç¶ãæ å ±è»¢éã®åãªããã£ãã«ã§ãã ã»ãšãã©ã®ããã€ã¹ã¯ããããã¯ãµã€ãºã«ãã£ãŠå¶éãããããããã¡ãªã³ã°ããå¿ èŠããªããããæåã¯ã©ã¹ã«å±ããŸãã ãªã¹ãã®æåã®æåãls-l / devã«ãã£ãŠåä¿¡ãããå Žåã 'b'ã®å Žåãããã¯ãããã¯ããã€ã¹ã§ããã 'c'ã®å Žåãããã¯æåã§ãã äžèšã®äŸã§ç€ºãããããã€ã¹ã¯ãããã¯ããã€ã¹ã§ãã 以äžã¯ãããã€ãã®ãã£ã©ã¯ã¿ããã€ã¹ïŒã·ãªã¢ã«ããŒãïŒã®ãªã¹ãã§ãã
crw-rw---- 1 root dial 4, 64 Feb 18 23:34 /dev/ttyS0 crw-r----- 1 root dial 4, 65 Nov 17 10:26 /dev/ttyS1 crw-rw---- 1 root dial 4, 66 Jul 5 2000 /dev/ttyS2 crw-rw---- 1 root dial 4, 67 Jul 5 2000 /dev/ttyS3
ã¡ãžã£ãŒããã€ã¹çªå·ãã©ã®ããã«å²ãåœãŠãããããç¥ãããå Žåã¯ã/ usr / src / linux / documentation / devices.txtãã¡ã€ã«ã調ã¹ãŠãã ããã
ãã¹ãŠã®ããã€ã¹ãã¡ã€ã«ã¯ãmknodãŠãŒãã£ãªãã£ã䜿çšããŠã·ã¹ãã ã®ã€ã³ã¹ããŒã«äžã«äœæãããŸãã ããšãã°ããcoffeeããšããååã§ã¡ãžã£ãŒçªå·12ããã€ããŒçªå·2ã®æ°ããããã€ã¹ãäœæããã«ã¯ãã³ãã³ãmknod / dev / coffee c 12 2.ãå®è¡ããå¿ èŠããããŸãã/devãã£ã¬ã¯ããªã«ããã€ã¹ãã¡ã€ã«ãé 眮ãã矩åã¯ãããŸããããã¯ãåãå ¥ããããŠããå¥çŽã«æºæ ããŠããŸãã ãã ãããããã°ã®ããã«ããã€ã¹ãã©ã€ããŒãéçºããå Žåãããã€ã¹ãã¡ã€ã«ãããŒã ãã£ã¬ã¯ããªã«é 眮ããããšã¯ãããããããã»ã©æªãèãã§ã¯ãããŸããã å¯äžã®ããš-ãããã°ã®å®äºåŸã«ããã€ã¹ãã¡ã€ã«ãé 眮ããå Žæãä¿®æ£ããããšãå¿ããªãã§ãã ããã
è°è«äžã®ãããã¯ã«ã¯æããã«é¢ä¿ãªãããç§ããããã³ã¡ã³ããããã€ããããŸãã ããã€ã¹ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ãããšãã«ãŒãã«ã¯æ倧ã®ãã¡ã€ã«çªå·ã䜿çšããŠããã®åŒã³åºããåŠçãããã©ã€ããŒã決å®ããŸãã ããã¯ãã«ãŒãã«ãå®éã«ãã€ããŒçªå·ã䜿çšãããããã«ã¯äœãç¥ããªãããšãæå³ããŸãã ããã«ã€ããŠå¿é ããŠããã®ã¯ããã©ã€ããŒèªäœã ãã§ãã ãã€ããŒçªå·ã䜿çšããŠãç°ãªãç©çããã€ã¹ãåºå¥ããŸãã
ã¡ãªã¿ã«ããããã€ã¹ããšèšããšãã¯ãæã§æã€ããšãã§ããPCIããŒããããæœè±¡çãªãã®ãæå³ããŸãã 次ã®2ã€ã®ããã€ã¹ãã¡ã€ã«ãèŠãŠãã ããã
% ls -l /dev/fd0 /dev/fd0u1680 brwxrwxrwx 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 brw-rw---- 1 root floppy 2, 44 Jul 5 2000 /dev/fd0u1680
çŸæç¹ã§ã¯ããããã®ããã€ã¹ãã¡ã€ã«ã«ã€ããŠã¯ãã©ã¡ããåããã©ã€ããŒïŒã¡ãžã£ãŒçªå·2ïŒã«ãã£ãŠæäŸããããããã¯ããã€ã¹ã§ãããšèšããŸãã ãã©ã€ãã1ã€ãããªãå Žåã§ããäž¡æ¹ãšããããããŒãã©ã€ããè¡šããŠãããšäž»åŒµããããšããã§ããŸãã ãããããªã2ã€ã®ãã¡ã€ã«ãªã®ã§ããããïŒ ããããåé¡ã¯ããã§ãããã®ãã¡ã®1ã€ã¯1.44 MbãããããŒãã£ã¹ã¯ãã©ã€ãã§ãã ãã1ã€ã¯åããã©ã€ãã§ããã1.68 MBãããããŒãã£ã¹ã¯çšã§ãããäžéšã®äººã ããã¹ãŒããŒãã©ãŒãããããã£ã¹ã¯ãšåŒã¶ãã®ã«å¯Ÿå¿ããŠããŸãã ãã®ãããªãããããŒãã£ã¹ã¯ã¯ãæšæºã®ãã©ãŒãããæžã¿ãããããŒãã£ã¹ã¯ãããå€ãã®ããŒã¿ãæ ŒçŽã§ããŸãã ãã€ããŒçªå·ãç°ãªã2ã€ã®ããã€ã¹ãã¡ã€ã«ããå®éã«ã¯åãç©çããã€ã¹ãè¡šãå Žåã§ãã ã§ããããç§ãã¡ã®è°è«ã§ã¯ããããã€ã¹ããšããèšèã¯ãããæœè±¡çãªãã®ãæå³ããå ŽåããããŸãã
ããã€ã¹ãã¡ã€ã«ãäœæãã
ãã£ã©ã¯ã¿ãŒããã€ã¹ãã©ã€ããŒãã¡ã€ã«ã䜿çšããŸãã æ¬ãLinux Device Driverãã®æ¹äœã«é¢äžããªãããã«ããŸãç§ã®äººçãåçŽåããããã«ã ãã®èšäºãããã£ã©ã¯ã¿ãŒãã©ã€ããŒãç»é²ããæ¢è£œã®äŸãåãäžããŸããã ãã®èšäºã§ã¯ãç¡æã®ä¿®æ£ãã€ããŒãæ€çŽ¢ããŸããããåçãã€ããŒã䜿çšããŸãã ç§ãã¡ã«ãšã£ãŠãããã¯ãŸãã«ããã§ãã
ãããã£ãŠãã¢ãžã¥ãŒã«ã¯æ¬¡ã®ããã«ãªããŸããäžã§å®è£ ããç»é¢ã®åŠçã¯å€æŽãããŸããããæ®ãã®éšåã¯æåããæžãçŽããŸãã
file_operationsæ§é ãå®çŸ©ããŸã
static const struct file_operations lptlcd_fops = { .owner = THIS_MODULE, .read = dev_read, .write = dev_write, };
dev_readãšdev_writeã¯ãããããããã€ã¹ãã¡ã€ã«ããã®èªã¿åããšæžã蟌ã¿ãåŠçããé¢æ°ïŒã³ãŒã«ããã¯ã®ç»é²ïŒãžã®ãã€ã³ã¿ãŒã§ãã ããã§ããŸã ã§ããŸããããããã.openããã³.releaseãã€ã³ã¿ãŒãè¿œå ããŠãããã€ã¹ãã¡ã€ã«ã®1åéãã®ééã確èªããå¿ èŠããããŸãããä»ã®ãšããç§ã¯æ ãè ã§ãã
ãã©ã€ããŒãç»é²ããã«ã¯ããã®æ§é ãéå§ããŸã
static struct miscdevice lptlcd_dev = { MISC_DYNAMIC_MINOR, "lptlcd", &lptlcd_fops };
ããã§ã MISC_DYNAMIC_MINORã¯ãã€ãããã¯ãã€ããŒã®ãã¯ãã§ãè¡ãlptlcdãã¯ããã€ã¹ã®ååã/ dev /ãã©ã«ããŒã§ã®è¡šç€ºæ¹æ³ïŒãã®å Žåã¯/ dev / lptlcdïŒãïŒlptlcd_fopsã¯file_operationsæ§é äœãžã®ãã€ã³ã¿ãŒã§ãã
ãã©ã€ããŒç»é²ã³ãŒããéåžžã«ç°¡åã§ã
static int __init dev_init( void ) { int ret; // ret = misc_register( &lptlcd_dev ); // if( ret ) printk( KERN_ERR "=== Unable to register misc device\n" ); // LCD_init(0, LCD_COLUMNS, LCD_STRINGS); print_to_string (0, 0, "lptlcd init " , 16); return ret; }
ããã€ã¹ã®ç»é²è§£é€ã¯ç°¡åã§ãã
static void __exit dev_exit( void ) { misc_deregister( &lptlcd_dev ); }
ããŠããã¯ãã€ã³ã¹ããŒã«ã®ã³ãŒã«ããã¯ãã©ã€ã»ã³ã¹ãäœæè ãããŒãžã§ã³ãå¿ããªãã§ãã ãã
module_init( dev_init ); module_exit( dev_exit ); MODULE_LICENSE("GPL"); MODULE_AUTHOR( "Dolin Sergey <dlinyj@gmail.com>" ); MODULE_VERSION( "0.1" );
éæ³ã¯dev_readãšdev_writeé¢æ°ããå§ãŸããŸãã æåããå§ããŸã
static char *info_str = "lcdlpt device driver\nAuthor Dolin Sergey aka dlinyj dliny@gmail.com\n"; // buffer! static ssize_t dev_read( struct file * file, char * buf, size_t count, loff_t *ppos ) { int len = strlen( info_str ); if( count < len ) return -EINVAL; if( *ppos != 0 ) { return 0; } if( copy_to_user( buf, info_str, len ) ) return -EINVAL; *ppos = len; return len; }
圌女ã¯æ¬¡ã®ããšãè¡ããŸããããšãã°ã次ã®ããã«ããã€ã¹ãã¡ã€ã«ãèªã¿åããšã
cat /dev/lptlcd
次ã«ãinfo_strãã€ã³ã¿ãŒã®åŸã®è¡ã衚瀺ãããŸãã
ã³ãŒãã¯éåžžã«æçœãªã®ã§ãã³ã¡ã³ãã¯äžèŠã§ãã å¯äžã®ããšã¯ãcopy_to_useré¢æ°ãšcopy_from_useré¢æ°ãããŠãŒã¶ãŒãšã«ãŒãã«ã®ã¢ãã¬ã¹ã¹ããŒã¹éã®ããŒã¿ã³ããŒã䜿çšããããšã§ãã
ãã1ã€ã®dev_writeé¢æ°ã¯ãããŒã¿ãç»é¢ã«ããã·ã¥ããŸãã
static int str_pos = 0; // static int col_pos = 0; // static ssize_t dev_write( struct file *file, const char *buf, size_t count, loff_t *ppos ) { int i; // . for (i=0; i<count;i++) { // setCursor(col_pos, str_pos); // , if ((col_pos==0) && (str_pos==0)) clear(); // , if (buf[i] != '\n') { write_l(buf[i]); col_pos++; } // , else {col_pos=LCD_COLUMNS;} // if (col_pos == LCD_COLUMNS) { col_pos=0; str_pos++; // , if (str_pos == LCD_STRINGS) { str_pos=0; } } } return count; }
ç§ã®æèŠã§ã¯ãè¿œå ãŸãã¯åé€ããªãã§ãã ãããããã§ãã¹ãŠãæ確ã§ããããšãé¡ã£ãŠããŸãã
ã³ã³ãã€ã«ããã«ãŒãã«ã«ã¢ãžã¥ãŒã«ãè¿œå ããŠããã¡ã€ã«ãããããšã確èªããŸãã
$ ls /dev/lptlcd /dev/ttylptlcd
ç§ãã¡ã¯ããããèªã¿ãäœããæžã蟌ãããšããŸãïŒ
$ cat /dev/lptlcd lcdlpt device driver Author Dolin Sergey aka dlinyj dliny@gmail.com echo -ne "Trolo Pysh\nPysh" > /dev/lptlcd
ããã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
ç§ã¯UFOãã©ã€ããŒã§ãã
ããã§ãå®å šã«æ©èœãããã©ã€ããŒãšåŸåŸ©ããã€ã¹ãå®æããŸãããããã§ãšãããããŸããã·ã£ã³ãã³ã®ããã«å庫ã«èµ°ã£ãŠããããŠãŠãŒã¶ãŒç©ºéã§ãéæ³ã®æ³¡ã䜿ã£ãŠãã®ããã€ã¹ã䜿ã£ãŠéæ³ã®ããã°ã©ã ãæžããŠãã ããã
ããããããã«ãããããããããã€ãã®çããå人çã«ç§ãããã£ãŠããŸããããã«äœãééã£ãŠããŸã...
ãã£ãšæ¬²ãã!!!
ããã§ãå®å šã«æ©èœãããã©ã€ããŒãäœæããŸãããããã¯æ¢ã«æ¥åžžã®ç·Žç¿ã§äœ¿çšã§ããŸãããã®äžã«ä»»æã®ããã¹ãã衚瀺ãããã¡ã€ã«ã®ããã¹ãã衚瀺ããŠãããã°ã©ã ã§äœ¿çšãããããããäžå®å šããäžå®å šãã®æèŠããããŸãã
ããšãã°ãAVRã®ãã£ã¹ãã¬ã€ã®åæåã«é¢ããDIHALTã®èšäºãªã©ãç»é¢äžã®ããã¥ã¡ã³ããåãåã£ãŠèªããšããã®è±å¯ãªæ©äŒã«é©ãã§ããããäŸïŒ
1.ããã¹ããã¡ã¢ãªã«ããŒãããŠããã衚瀺é åã移åããã ãã§ãæ°ããããŒã¿ãããŒãããããã®ã¯ããã¯ãµã€ã¯ã«ãç¯çŽã§ããŸãïŒèŠããŠããããã«ãããªãã®é 延ããããŸãïŒã
2.ä»»æã®äœçœ®ã«ããã¹ãã衚瀺ã§ããŸãã
3.ç»é¢ãã¯ãªã¢ã§ããŸãã
4.ãã¡ãããç¬èªã®ãã©ã³ããã¢ããããŒãã§ããŸããããã«ã€ããŠã¯ãäžèŸã«ããªãã§ãã ããã8æåãã䜿çšã§ããŸãããããšãã°ãã©ãã³æåãšéšåçã«ããŒãããããã·ã¢èªïŒ8æåïŒãå«ãããã·ã¢èªãã©ã³ããªãã®ãã®ç»é¢ã§ãã·ã¢èªã¡ãã¥ãŒãå®è£ ããã¿ã¹ã¯ã¯ãéšéå šäœã«ãšã£ãŠéåžžã«æ¥œãããªãã¹ã«ãªããŸãïŒæ³³ãã ïŒããã®ãããããã¯ããã€ãã®ç¹å®ã®ãã£ã©ã¯ã¿ãŒã«äœ¿çšãããŸãã
è·å Žã®ã³ãŒããŒãã·ã³ã§ãã©ã³ãããŠã³ããŒãæ©èœã䜿çšããè¯ãäŸãèŠã€ãããŸããããã®äŸã§ã¯ãã¡ããã©Russifiedã®åæ§ã®ç»é¢ãã€ã³ã¹ããŒã«ãããŠããŸãã
ã³ãŒããŒãã·ã³ã®ç»é¢
ããã§ã¯ãã·ã³ãã«ã®äœ¿çšãæ確ã«èŠãããšãã§ããŸã
ã-ç ç³ã®2ã€ã®ã·ã³ãã«ã空ã®åïŒé¢éžãããšã¯æããªãã£ãïŒãããã³å®å šã
-å®è¡äžã®è¡ã®5æåïŒ5åã®æåïŒã
åèš2 + 5-äºåã®ãã£ã©ã¯ã¿ãŒã1ã€ã ãæ®ã£ãŠããŸãããããããããã䜿çšãããŸããæ¬åœã«éããªãã§ãã ããã
äžè¬ã«ããã£ã¹ãã¬ã€ã«ã¯å€ãã®ããããæèŒãããŠããã®ã§ãããã¥ã¡ã³ãã®äžã§èªãã®ãé¢åã§ããããããç§ãã¡ãèŠãããã«ãç§ãã¡ã¯ãŸã ããããã¹ãŠè¡ãããšã¯ã§ããŸããããããŠãã®çŽ æŽãããç¬éã«ãé·ãéããã«ãã£ãèã¿ãããã¢ããæã«å ¥ããæãæ¥ãŸããã
ãã®ã¢ã€ãã¢ã®å®è£ ãéå§ããåïŒéšåãè³Œå ¥ããåïŒã«ãã°ãŒã°ã«ã§æ€çŽ¢ããä»ã®èª°ãããããããŸããããããŠãèŠãïŒïŒïŒãã®ãããªãã©ã€ããŒã¯æ¢ã«ååšããŸãã圌ã¯æžãããã€ã±ã«ãã¯ã¬ã©ã³ãšãã©ã€ããŒã¯ããã«äœãã§ããŸãã
æ£çŽãªãšããããã®ãã©ã€ããŒã¯ç§ã«è€éãªå°è±¡ãäžããŸããããã©ã€ããŒãæžããªãæ¹æ³ã«ã€ããŠã®è²Žéãªã¬ã€ãã«ãªã£ããšã ãèšã£ãŠã¿ãŸããã-ãã€ãã®ãã«ãªèšé²ãããããããã©ãã§ãã©ãã§ããªããã¯æããã§ã¯ãªãã®ã§ãç°ãªãã¹ã€ããã³ã°ã¹ããŒã ã§æžãçŽãããšã¯ç°¡åãªäœæ¥ã§ã¯ãããŸãããã¯ã©ã¹ãšããŠã®ç§»æ€æ§ã¯ãããŸããããããŠãããŸããŸãªã³ã¢çšã®äžé£ã®å®çŸ©ã«ãã£ãŠMoskãäœæãããŸããããã«ãåœåããã©ã€ããŒã¯å®å šãªé ç·å³ãšããŠèããããŠããŸããïŒããŒã¿ããŒãããšã«8ããããlcd-mod.sourceforge.net / wiring.phpãåç §ïŒïŒããããŠç§ã¯ããã«4ããããã¹ãç®æããŸãããäœéã§ããïŒãã€ãã2ã€ã®ããã±ãŒãžã§éä¿¡ãããããçŽ2åïŒãæåã«ã¯ãã ä»ããå°ãªããªãã次ã«ä»ã®ããŒããæ¢ãå¿ èŠããªããªããŸãã 3çªç®ã«ã4ããããã¹çšã®åªããè«çã³ãŒããæ¢ã«ãããŸããããã®çµæãç§ã¯èªåã§ãã©ã€ããŒããŒãããäœæããåæã«ãã®æ¹æ³ãæ瀺ããããšã«ããŸããã
ããŠãæè©ã§å°çã«ããã®ãã©ã€ããŒã«ã¯è²Žéãªãã®ããããŸã-ããã¯å¶åŸ¡ã·ãŒã±ã³ã¹ãŸãã¯ESCã·ãŒã±ã³ã¹ãåŠçããŠããŸããé 匵ã£ãŠãã®ããã¢ãããæºããããšãããããçš®é¡ã®Readmeãšãã®æ¹æ³ãèŠã€ããããšãã§ããŸãããªããµã€ãã«ãäºå®ããããŸãããã®ãã¹ãŠã®ããŒã¿ãç»ãå¿ èŠããªãããã«ããã¹ãŠã1ã€ã®ããŒããšãã·ã¢èªã«é 眮ããããšã«ããŸãããæåã«ããããã®ã·ãŒã±ã³ã¹ã«é¢ããããã€ãã®åèªãprintfæŒç®åã '\ n'ã®åœ¢åŒã§ã©ã€ã³ãã£ãŒããè¿œå ãããšãã«ããããã¹ãŠã«åºããããŸãã-ããã¯ASCIIã®0AhæåãšããŠè§£éãããæãåçŽãªESCã·ãŒã±ã³ã¹ã§ããåããã»ãªã¯ããã®ãã£ã¹ãã¬ã€ã®ç®¡çã«ãããŸãã
ãããã£ãŠãç»é¢ã®å¶åŸ¡ã·ãŒã±ã³ã¹ïŒ
- \ 033 =ã³ãã³ããéå§ããESCã·ãŒã±ã³ã¹ã®éä¿¡
- [A =ã«ãŒãœã«ã1è¡äžã«ç§»å
- [B =ã«ãŒãœã«ã1è¡äžã«ç§»åãã
- [C =ã«ãŒãœã«ã1ã€å³ã«ç§»å
- [D =ã«ãŒãœã«ã1ã€å·Šã«ç§»å
- [H =ã«ãŒãœã«ãå·Šäžé ã«ç§»å-ããŒã ïŒäœçœ®0,0ïŒ
- [J =ãã¹ãŠã¯ãªã¢ãã«ãŒãœã«ãããŒã ã«æ»ããªãã§ãã ããïŒ
- [K =è¡æ«ãŸã§æ¶å»ããŸããã«ãŒãœã«ãããŒã ã«æ»ããŸããïŒ
- [M =æ°ãããã£ã©ã¯ã¿ãŒãããïŒDZ-çç±ã説æããŠãã ããïŒïŒ
- [Y =äœçœ®YïŒä»¥äžã®FAQãåç §ïŒ
- [X =äœçœ®XïŒä»¥äžã®FAQãåç §ïŒ
- [R = CGRAMã¡ã¢ãªéžæ
- [V =ã¹ã¯ããŒã«å¯èœ
- [W =ã¹ã¯ããŒã«ãªã
- [b =ããã¯ã©ã€ãã¯ãªã³/ãªãã§ãïŒåäœããŸããïŒã
ä»ã®äŸ¿å©ãªã³ãã³ãã¯ã\ 033ãã¬ãã£ãã¯ã¹ãªãã§æ©èœããŸãïŒ
- \ r =埩垰ïŒçŸåšã®è¡ã®äœçœ®0ã«ã«ãŒãœã«ãæ»ããŸãïŒïŒ
- \ n =æ¹è¡
- \ t =ã¿ãïŒããã©ã«ãã¯3æåïŒ
ãã®ã¢ã€ãã¢ã¯ç§ã«ã¯ãšãŠãã¯ãŒã«ã«æããã®ã§ãç§ã¯ãã®æ©èœãç§ãã¡ã®ãããžã§ã¯ãã§å€§èã«åããããšã«ããŸããã
ãšããã§ããããã®ãã¹ãŠã®ã·ãŒã±ã³ã¹ã¯éåžžã®ã³ã³ãœãŒã«ã§çŽ æŽãããæ©èœããããã¹ãã衚瀺ãããšãã«äœ¿çšã§ããŸãã
誰ããŸã ãããäœã§ããããªãç解ããŠããªãã®ããããã«ã€ããŠã¯lcd-mod.sourceforge.net/faq.phpã§è©³ãã説æããŠããŸããèŠããããšã®ãªãããã«ãç§ã¯ãããèªç±ã«ç¿»èš³ããåçä»ãã®ã¹ãã€ã©ãŒã«æ éã«å ¥ããŸãã
ãããã質å
Q. , , ?
A. , vt52- ru.wikipedia.org/wiki/VT52 , . , ASCII . , â '\r' '\n' (. ). , :
âLine Oneâ âLine Twoâ . , âechoâ :
-n â '\n'
-e â
Q. , ?
A. . äŸïŒ
(. )
Q. , , n n- , n-1 , ?
A. , âechoâ. , '\n' . -n, .
Q. ?
A. : ESC-Y[Y-+037][X-+037]. äŸïŒ
Hello 0:0
, âHelloâ;
, 1, 1;
Hello 1:1 ( )
, 2, 2
Hello 2:2 ( , )
â037â , , , vt52 ( :) )..
Q. ?
A. HD4480 , . GUI , ( ). , . , .
, : Esc-R[ ][8 , ]. , 5 . . äŸïŒ
1, . , .
0 .
«» , :
, .
A. , vt52- ru.wikipedia.org/wiki/VT52 , . , ASCII . , â '\r' '\n' (. ). , :
echo -en "Line One\r\nLine Two" > /dev/lptlcd
âLine Oneâ âLine Twoâ . , âechoâ :
-n â '\n'
-e â
Q. , ?
A. . äŸïŒ
echo -en "line1\r\nline2" > /dev/lptlcd
(. )
Q. , , n n- , n-1 , ?
A. , âechoâ. , '\n' . -n, .
Q. ?
A. : ESC-Y[Y-+037][X-+037]. äŸïŒ
echo -en "\033[Y\037\037Hello" > /dev/lptlcd
Hello 0:0
, âHelloâ;
echo -en "\033[Y\040\040Hello" > /dev/lptlcd
, 1, 1;
Hello 1:1 ( )
echo -en "\033[Y\041\041Hello" > /dev/lptlcd
, 2, 2
Hello 2:2 ( , )
â037â , , , vt52 ( :) )..
Q. ?
A. HD4480 , . GUI , ( ). , . , .
, : Esc-R[ ][8 , ]. , 5 . . äŸïŒ
echo -en "\033[R1\037\037\037\037\037\037\037\037" > /dev/lptlcd
1, . , .
echo -en "\033[R2\037\000\037\000\037\000\037\000" > /dev/lptlcd
0 .
«» , :
echo -en "\000\001\002\003\004\005\006\007" > /dev/lptlcd
, .
äžè¬ã«ãã芧ã®ãšãããdev_writeé¢æ°ãæžãæããå¿ èŠããããŸãããããŠä»ã圌女ã¯ãã®ããã«èŠãå§ããŸããïŒ
static ssize_t dev_write( struct file *file, const char *buf, size_t count, loff_t *ppos ) { int i; for (i=0; i<count;i++) handleInput(buf[i]); return count; }
ãããŠããã¹ãŠã®ããŒãã£ãããªãŒãã£ã³ã°äœæ¥ã¯ãhandleInputé¢æ°ã«ãã£ãŠåŠçãããŸããããã®é¢æ°ã®ã³ãŒãã¯å·šå€§ãªã®ã§ãããã§ã¯èª¬æããŸããã圌ã«å¯ŸåŠããŠããã¯ãã¢ãèŠã€ããããã«åœŒã®å®¿é¡ãæ®ããŠãããŸããã³ãŒãã§ã€ãŒã¹ã¿ãŒãšãã°ãèŠã€ãã人ãã³ã¡ã³ãã§ã¡ã¢ãã人ãçã人ã
ããã¯ãã¢ãããªãã·ãŒãããã«ã¯ïŒãã©ã€ããŒã«å®è£ ãããŸãïŒ
ASCII-ART MoveïŒã€ãŒã¹ã¿ãŒãšãã°ã«ãã£ãŠéå§ãã
ãŸããåæ§ã®ãããªãç»é¢ã«è¡šç€ºããŠããã人ã«ã¯ãç§ãããã¬ãŒã³ããããããŸãïŒ
äžè¬ã«ãçµæãšããŠãããŸããŸãªæçšãªæ å ±ã圹ã«ç«ããªãæ å ±ã衚瀺ããããã«äœ¿çšã§ããã³ãŒã·ã£ç»é¢ãååŸããŸãããããã§ã¯ãããšãã°ãçŸåšã®æå»ã衚瀺ã§ããŸãã
while true; do echo -en "\033[H`date +\"%d.%m.%Y\"` \r\n`date +%r`" > /dev/lptlcd ; sleep 1s; done
ãããŠã圌ãã¯ãŸã è¡ããŸãïŒ
ãã¡ããã圌ã¯æžãã-ããã人ã ãšå ±æããïŒãœãŒã¹ã³ãŒãã¯ãã¡ãããå ¥æã§ããŸãïŒã³ãŒã亀æã«githubã䜿çšããã€ããã¯ãããŸããããæ®å¿µã§ãïŒã
ããããããš
ããŒãã«ã®å°ããªç»é¢ãå¿ èŠãªçç±ãã»ãšãã©ç解ãããŠããªããšããã ãã§ãããã¯æ¬åœã§ããç¹ã«ã¿ãã¬ããããã®ä»ã®æ©åšã®æ代ããã¹ãŠãã¹ããŒããã©ã³ã«ãªãã€ã¬ã¯ãã§ããå Žåããã1ã€ã¯ãæ°å¹Žãè¿ã¥ããŠããããšã§ãã1ã€ã®çŽ æŽãããæ°å¹Žã®ããã€ã¹ãæãåºããŸã-lpc2104ããã»ããµã®ã¯ãªã¹ãã¹ããªãŒ
Embedded Artists Cristmas Tree
ãã®ããã€ã¹ãã°ãŒã°ã«ããŠã¯ãããŸãããã€ã³ã¿ãŒãããã
ç§ããã®ã¯ãªã¹ãã¹ããªãŒã®ãããªãæ®åœ±ããŸãã
Embedder Christmas treeã®ä»çµã¿
ã©ã€ãã®ç¹æ» ã楜ããã ãã§ãªãããã®é¢çœãããã€ã¹ã«ã¯ã¯ãŒã«ãªæ©èœããããŸããããã®ãããªã¯ãªã¹ãã¹ããªãŒã®ä»ã®ææè ãšé£çµ¡ãåãããšãã§ããŸããç¹å¥ãªãã©ãŒã ãä»ããŠã¡ãã»ãŒãžãéãããšãã§ãããµã€ãããŒãããããããã¯ã¯ãªã¹ãã¹ããªãŒãä»ããŠéä¿¡ãããç»é¢ã«è¡šç€ºãããŸããããšãŠãã¯ãŒã«ã§æ¥œããã£ãã§ãã
ä»æ³šç®ïŒã¢ã€ãã¢ïŒä»ã§ã¯ã1ãæã«500ã«ãŒãã«ãæ¯æãããšã劚ãããã®ã¯ãªãïŒé¢éžããå Žåãéé¡ã¯ããªãå°ãªããªããŸãïŒãä»®æ³ãã·ã³ã§ãµãŒããŒãã¬ã³ã¿ã«ããŸããããã«ãã¡ãã»ãŒãžãéä¿¡ããããã°ã©ã ãé 眮ããŸãã jabberãŸãã¯ä»ã®æ¹æ³ïŒã¯ããå°ãªããšãncãštelnetã¯ãã¹ãŠãè¡ããŸãïŒããããŠãã³ã³ãã¥ãŒã¿ãŒã«ãããã®ã¡ãã»ãŒãžã®åä¿¡è ã眮ããŸãããããŠæ°å¹Žã«ã¯ãããã§ãšãããããŸãã
誰ããããå®è£ ããã®ãæäŒãæºåãã§ããŠããŸããïŒå°ãªããšã3人ã®äººãããã°ããšãŠã楜ããã§ãïŒéçºè ã®ããŸãå Žã«åå ããŠãã ãã:)ïŒïŒïŒãç§ã¯ã©ããªã¢ã€ãã¢ãèããŸãïŒ
ãŸãšã
ç°¡åã«èª¬æããŸãããã®æçš¿ã§ã¯ãLinuxããã€ã¹ãã©ã€ããŒã®æ¬ãå説ããã®ã§ã¯ãªããåã«writingãæžãããšãç°¡åãªäœæ¥ã§ããããšã瀺ãããšãç®æšã«èšå®ããŸãããUSBãæå³çã«æ®ããŸãããå€ãã®çè«ãèœãšãç©Žããã®ä»ã®rrããããŸãããã ãããã®ã¢ãžã¥ãŒã«ãUSB-LPTã©ã³ã€ãŒãçšã«å®å šã«æžãæããããšã¯ã§ããŸããã
ããã¯æ¯èŒçç°¡åã«è¡ãããŸãïŒusbãšã®äº€æãããã³ã«ãã€ã³ã¿ãŒã»ãããããããã°ã©ã ã«å®è£ ãããŸããç§ãä¿¡ããŠ-ããã¯ç°¡åã§ããã©ã®ããã«é¢çœãã§ããã-ç§ã¯ããªãã«æããŸãïŒ
ãããŠããã®ãã©ã€ããŒã¯ãããŒããžã®åºåè¡ã1ã€ïŒ!!!ïŒã ãå€æŽããã®ã§ãããšãã°GPIOããŒãã®Raspberry Piã§äœ¿çšããããã«æžãæããããšãã§ããŸããæ£ç¢ºã«äœãæžããã¯ãäŒãããŸãããããã¹ãŠã¯äœ¿çšæžã¿ããŒã»ã³ãã®ããŒã¿ã·ãŒããèªãããšã§æ±ºå®ãããæ°åããããããŸããã
è¬èŸïŒ
1. linuxã§ã®ããã°ã©ãã³ã°ã®åŠç¿ãšlinuxçšãã©ã€ããŒéçºã®åªããã³ãŒã¹ã«ã€ããŠãå çã®Boronin Sergey Sergeevich sboroninã«æè¬ããŸãã圌ã®ã³ãŒã¹ã®ãããã§ãç§ã¯éçºè ãšããŠéåžžã«æåããŠããŸãã
2. Comrad Arimanãšã«ãŒã¿ãŒçšãã£ã¹ãã¬ã€ã®éçºã«é¢ããçŽ æŽãããèšäºã·ãªãŒãºïŒç¬¬1éšã第2éšã第3éšïŒãã ãã第4éšã¯çŽæãããŠããŸãã...ïŒïŒããã®ã·ãªãŒãºã¯ãéåžžã«å ·äœçã§ãããããã€ã¹ã®äœæãšããã«é©ãããã©ã€ããŒã®äœæãå®å šã«èª¬æããŠããŸãããããŠããã©ã€ããŒã®éçºãšOpenWRTã®ã¢ãžã¥ãŒã«ã®éçºã®äž¡æ¹ã«ãããŠã貎éãªæ å ±æºãšããŠåœŒå¥³ã«ç¹°ãè¿ãç®ãåããŠããŸããã
3.ãã¡ãããæ¬ãLinux Device DriverãGreg Kroah-Hartmanã®èè ããã®æ¬ã¯åãªãèæžã§ãããã«ãŒãã«ã«ã¯å€ãã®å Žåããã®äŸã«åºã¥ãããã©ã€ããŒããããŸããããšãã°ãUSBãã©ã€ããŒã§ç§ã¯ããã«åºããããŸããïŒ
/drivers/usb/misc/idmouse.c
...
USBã¹ã±ã«ãã³ãã©ã€ããŒ1.1ãã掟çã
Copyright©2003 Greg Kroah-HartmanïŒgreg@kroah.comïŒ
...
ãããŠãå€ãã®ãã©ã€ããŒã§ãããã§æ¬ã䜿ã£ãŠãã ãã-ããã¯èæžã§ãã
4. Michael McLellanããåæ§ã®ãã©ã€ããŒã®äœæè ãŸã§ã圌ãé転æã§èšãããã«ïŒ
*ãã©ã¬ã«ããŒãã«æ¥ç¶ãããHD44780äºæãã£ã¹ãã¬ã€ã®LCDãã©ã€ããŒ
ã*å®éã®ç·æ§ã¯ããã€ã¹ãã¡ã€ã«ã䜿çšããããã
æ®å¿µãªãããlinkedinãžã®ãªã³ã¯ãé€ãã座æšã¯ãããŸããã圌ã®ããã°ã©ã ããã®ã¡ãŒã«ã¯æ©èœããªããªããŸãããã ãããã©ããã£ãŠå人çã«åœŒã«æè¬ããã®ããããããªã...誰ãã圌ã«æžããŠãããããç§ã¯ãšãŠãæè¬ããã ããã
åç §è³æ
ãã£ã¹ãã¬ã€ã«rootfsãæäœããããã®ç§ã®ããã°ã©ã ã®1ãœãŒã¹ã¯ã¹ã€ã³ã°
æã ã¯ããã®èšäºã§èª¬æããç§ã®ã«ãŒãã«ã¢ãžã¥ãŒã«ã®2ãœãŒã¹ãã¹ã€ã³ã°ãã
3 èã¿Â»ã«ããã¢ãã
4 dmilvdv.narod.ru/translate.htmlèšäºã®ç¿»èš³ããã³ãããã¯ã¯- ãLinuxã®ããã€ã¹ãã©ã€ã第3çã¯ãã
IBMãããã·ã¢ã§ã®ããã°ã©ãã³ã°äžã®èšäºã®5.åªç§ãªã©ã€ãã©ãªã宿ãããã«ãç¹ã«ã«ãŒãã«ã¢ãžã¥ãŒã«ã®éçºã®ããã«
衚瀺HD44780ã®6説æïŒAVRãããäžè¬çã«ã¯ãããæ®éçã§ããïŒeasyelectronics.ru/avr -uchebnyj-kurs-podklyuchenie-k-avr-lcd-displeya-hd44780.html
7. Michael McLellanã«ããããã°ã©ã ïŒãã®ã¢ãžã¥ãŒã«ã®ã«ãŒãã«ã¢ãžã¥ãŒã«ãšã¹ãã¯ââãã«ã¢ãã©ã€ã¶ãŒïŒã®è¡šç€ºlinux.downloadatoz.com/developer-michael-mclellan.html
PSãã¢ãã¹ããæããªãã§ãã ããã圌ã¯æé«ã®æŒå¥ãããŸããç§ã®çãŸãã€ãã®éèåã§ã¯ããã®ãããªå·šå€§ãªèšäºãæ®éã«æžãããšã¯ã§ããŸãããã³ã¡ã³ããèšæ£ãè¿œå ãéã£ãŠãã ããããšãŠãæè¬ããŸã!!!
PPSã³ã¡ã³ãã®ããã«éãæž©ãããã®ã¯äœããããŸããã
PPPSããã¹ãã«ã¯ã€ãŒã¹ã¿ãŒãšãã°ããããŸãããããã¯çããã®ã§ã;ïŒïŒïŒ
UPDã¡ãã»ã³ãžã£ãŒã«åå ããã人ã®ããã«ã°ã«ãŒããäœæããŸãã:)
åå ãããåå è ã®ããã«:)ïŒïŒã«åå ããŠãã ãã