| 
        
    | 
        
     | 
    
        °Ô½Ã¹° 1,378°Ç
         
                             | 
 
 |  
 
 
 |  
    | 
                udev rule              | 
 
 |  
    
	                ±Û¾´ÀÌ : 
	 ÃÖ°í°ü¸®ÀÚ        		
                ³¯Â¥ : 2013-05-15 (¼ö) 09:26
        Á¶È¸ : 7883
                                       | 
 
 |  
    | 
        ±ÛÁÖ¼Ò : 
	
     | 
 
    
        
        
                                        
        
        
        Ãâó :  http://visionmaru.com/wp/?p=147
 
 
 
 ÀÌ ¹®¼´Â http://www.reactivated.net/writing_udev_rules.html ¸¦ ¿ä¾à Á¤¸®ÇÑ °ÍÀ¸·Î, udevÀÇ ruleÀ» Á¤ÀÇÇÏ´Â ¹æ¹ý¿¡ °üÇÑ ±ÛÀÌ´Ù.
 
 udev¶õ?
 
 ¸®´ª½º hotplug ÇÁ·ÎÁ§Æ®ÀÇ ÇÏÀ§(?) ÇÁ·ÎÁ§Æ®·Î ÀåÄ¡°¡ Ãß°¡µÇ¾úÀ»¶§ÀÇ Ã³¸®¿¡ °üÇØ Ä¿³ÎÀÇ uevent¸¦ ÀÌ¿ëÇÏ¿© ó¸®ÇÏ´Â ÇÁ·ÎÁ§Æ®ÀÌ´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº ¿©±â¸¦ ÂüÁ¶ÇϽöó. udev ruleÀº udev°¡ µ¿ÀÛÇÏ´Â ±ÔÄ¢À» ¸»ÇÏ´Â °ÍÀ¸·Î, ¾î¶°ÇÑ uevent°¡ ¹ß»ý ÇßÀ»¶§ ¾î¶»°Ô ó¸®ÇÒ Áö¸¦ ¸í½ÃÇØ µÐ ÅØ½ºÆ®·Î ±¸¼ºµÈ ±ÔÄ¢ ÆÄÀÏÀÌ´Ù. 
 
 rule ÆÄÀÏ ±ÔÄ¢
 
 /etc/udev/udev.d/ µð·ºÅ丮¿¡ Á¸ÀçÇØ¾ßÇϸç, suffix´Â .rules À̾î¾ß ÇÑ´Ù. 
 
 ±âº» ¹®¹ý
 
 ¸ðµç ·êÀº key-value pair·Î ±¸¼ºµÇ°í, ±âº» ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.match[, <match>]*, assignment[, <assignment>]*\n
 
 1°³ÀÌ»óÀÇ match¿Í 1°³ÀÌ»óÀÇ assignment°¡ ,(ÄÞ¸¶)·Î ¿¬°áµÇ°í °ø¹éÀ¸·Î ±¸ºÐµÇ¾îÁ® ÀÖ°í ÇϳªÀÇ ¶óÀÎÀ¸·Î ±¸¼ºµÈ´Ù. - match´Â Á¶°ÇÀÌ´Ù. ¸¸Á·ÇÒ °æ¿ì ÇØ´ç rule¿¡ ±âÀçµÈ assignment°¡ ½ÇÇàµÈ´Ù. <match-key>¿Í <Á¶°Ç>»çÀÌ¿¡ ¡°==¡±À¸·Î ¿¬°áµÈ´Ù.
 - assignment´Â ÀÏÁ¾ÀÇ actionÀÌ´Ù. matchÁ¶°ÇÀÌ ¸¸Á·ÇÒ °æ¿ì¸¸ ½ÇÇàµÈ´Ù. <assignment-key>¿Í »çÀÌ¿¡ ¡°=¡±À¸·Î ¿¬°áµÈ´Ù.
 
 
  
 
 
 ±âº» »çÇ×
 
 match key´Â ´ÙÀ½°ú °°Àº°ÍÀÌ ÀÖ´Ù.- KERNEL – Ä¿³Î¿¡¼ »ç¿ëÇÏ´Â ÀåÄ¡¸í
 - SUBSYSTEM – ÀåÄ¡°¡ ¼ÓÇÑ SUBSYSTEM
 - DRIVER – ÀåÄ¡ µå¶óÀ̹öÀÇ À̸§
 
 
 assignment key´Â ´ÙÀ½°ú °°Àº°ÍÀÌ ÀÖ´Ù. - NAME – ÀåÄ¡ ³ëµåÀÇ À̸§
 - SYMLINK – NAME¿Ü¿¡ symbolicÀ¸·Î ¸µÅ©ÇÒ À̸§
 
 
 KERNEL=="hdb", NAME="my_spare_disk" hdbÀåÄ¡°¡ Ãß°¡µÇ¸é /dev/my_spare_disk ³ëµå¸¦ »ý¼ºÇÑ´Ù.
 KERNEL=="hdb", DRIVER=="ide-disk", SYMLINK+="my_spare_disk" hdbÀåÄ¡°¡ Ãß°¡µÇ°í hdbÀÇ µå¶óÀ̹ö°¡ ide-diskÀ̸é (/dev/hdb³ëµå¸¦ »ý¼ºÇϰí) /dev/my_spare_disk·Î symbolic link ÇÑ´Ù. NAME assignment°¡ »ý·«µÇ¸é default node¸¦ »ý¼ºÇϴµ¥ ¿©±â¼´Â /dev/hdb°¡ µÈ´Ù.
 KERNEL=="hdc", SYMLINK+="cdrom cdrom0" hdcÀåÄ¡°¡ Ãß°¡µÇ¸é (/dev/hdc³ëµå¸¦ »ý¼ºÇϰí) /dev/cdrom°ú /dev/cdrom0·Î symbolic linkÇÑ´Ù.
  
 
 sysfs attributes¸¦ match key·Î »ç¿ëÇϱâ
 
 SUBSYSTEM=="block", ATTR{SIZE}=="234441648", SYMLINK+="my_disk" block ÀåÄ¡ Áß¿¡¼ Å©±â°¡ 234441648ÀÎ ÀåÄ¡¸¦ /dev/my_disk·Î symbolic link ÇÑ´Ù. /sys/block/*/size°¡ Ãâ·ÂÇÏ´Â °ªÀ» »ç¿ëÇÑ °ÍÀÌ´Ù.
 
 
 ¹®ÀÚ¿ ´ëÀÔ
 
 %k Ä¿³Î À̸§¿¡ ´ëÀÀÇÑ´Ù. ¡°sda¡±, ¡°sda1¡È µî. %n ÀåÄ¡ ¹øÈ£¿¡ ´ëÀÀÇÑ´Ù. ¡°sda1¡È¿¡¼ ¡°1¡ÈÀÌ ¿©±â¿¡ ÇØ´çÇÑ´Ù. %% escape·Î¼ ¡°%¡±¸¦ Ç¥ÇöÇÑ´Ù. $$ ÀÌ°Í ¿ª½Ã escape·Î¼ ¡°$¡±¸¦ ³ªÅ¸³½´Ù.KERNEL=="mice", NAME="input/%k" µðÆúÆ®·Î miceÀåÄ¡°¡ Ãß°¡µÇ¸é /dev/mice¸¦ »ý¼ºÇØ¾ß ÇÏÁö¸¸, ÀÌ·ê¿¡ ÀÇÇØ /dev/input/mice ¸¦ »ý¼ºÇÑ´Ù.
 KERNEL=="loop0", NAME="loop/%n", SYMLINK+="%k" loop0°¡ Ãß°¡µÇ¸é /dev/loop/0¸¦ »ý¼ºÇϰí Ãß°¡·Î /dev/loop0¸¦ symbolicÀ¸·Î linkÇÑ´Ù.
  
 
 ¹®ÀÚ¿ ºñ±³
 
 - ¡°*¡± 0ÀÌ»óÀÇ ¾î¶°ÇÑ ¹®ÀÚ
 - ¡°?¡± 1°³ÀÇ °ø¹éÀÌ ¾Æ´Ñ ¹®ÀÚ
 - ¡°[]¡± ´ë°ýÈ£ ¾È¿¡ Á¸ÀçÇÏ´Â ¹®ÀÚ Áß Çϳª(range Çã¿ë)
 
 KERNEL=="fd[0-9]*", NAME="floppy/%n", SYMLINK+="%k" fd0, fd1, ¡¦, fd9, fd10, fd11, ¡¦ µîÀÌ Ãß°¡µÇ¸é /dev/floppy/¹øÈ£ ³ëµå¸¦ »ý¼ºÇϰí /dev/floppy¹øÈ£ symbolic linkµµ »ý¼ºÇÑ´Ù.
 KERNEL=="hiddev*", NAME="usb/%k" hiddev·Î ½ÃÀÛÇÏ´Â ÀåÄ¡°¡ Ãß°¡µÇ¸é /dev/usb/ÀåÄ¡¸íÀ¸·Î ³ëµå¸¦ »ý¼ºÇÑ´Ù.
 
 
 
 ±ÇÇÑ ¹× ¼ÒÀ¯±Ç Á¦¾î
 
 KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video" GROUP assignment keyÀÌ´Ù. ÁöÁ¤µÈ ±×·ì¸íÀ¸·Î ¼Ò¼Ó ±×·ìÀ» ÁöÁ¤ÇÑ´Ù.KERNEL="fb[0-9]*", OWNER="john" OWNER assignment keyÀÌ´Ù. ÁöÁ¤µÈ »ç¿ëÀÚ¸íÀ¸·Î ¼ÒÀ¯ÀÚ¸¦ ÁöÁ¤ÇÑ´Ù.
 KERNEL="inotify", NAME="misc/%k", SYMLINK+="%k", MODE="0666" MODE assignment keyÀÌ´Ù. ÆÄÀÏÀÇ ¸ðµå¸¦ ¼³Á¤ÇÑ´Ù.
 
 
 
 ³×À̹ÖÀ» À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥ »ç¿ëÇϱâ
 
 PROGRAM assignment key¿Í ¡°%c¡± substitutionÀÌ »ç¿ëµÈ´Ù. PROGRAM=¡±absolute-path-to-executable arg1 arg2 ¡¦ argN¡±KERNEL==¡±hda¡±, PROGRAM=¡±/bin/device_namer %k¡±, SYMLINK+=¡±%c¡± hdaÀåÄ¡°¡ Ãß°¡µÇ¸é ¡°/bin/device_namer hda¡±¸¦ ½ÇÇàÇϰí, stdoutÀ¸·Î ³ª¿Â °á°ú ¹®ÀÚ¿À» ÀÌ¿ëÇØ¼ symbolic linkÇÑ´Ù. KERNEL==¡±hda¡±, PROGRAM=¡±/bin/device_namer %k¡±, NAME=¡±%c{1}¡±, SYMLINK+=¡±%c{2}¡± hdaÀåÄ¡°¡ Ãß°¡µÇ¸é ¡°/bin/device_namer hda¡±¸¦ ½ÇÇàÇϰí, stdoutÀ¸·Î ³ª¿Â °á°ú ¹®ÀÚ¿Áß¿¡ 1¹øÂ° °á°ú°ªÀ¸·Î ³ëµå¸¦ »ý¼ºÇϰí, 2¹øÂ° °á°ú°ªÀ» ÀÌ¿ëÇØ¼ symbolic linkÇÑ´Ù. KERNEL==¡±hda¡±, PROGRAM=¡±/bin/device_namer %k¡±, NAME=¡±%c{1}¡±, SYMLINK+=¡±%c{2+}¡± hdaÀåÄ¡°¡ Ãß°¡µÇ¸é ¡°/bin/device_namer hda¡±¸¦ ½ÇÇàÇϰí, stdoutÀ¸·Î ³ª¿Â °á°ú ¹®ÀÚ¿Áß¿¡ 1¹øÂ° °á°ú°ªÀ¸·Î ³ëµå¸¦ »ý¼ºÇϰí, 2¹øÂ°ºÎÅÍ ¸ðµç °á°ú°ªÀ» ÀÌ¿ëÇØ¼ symbolic linkÇÑ´Ù.  
 
 ¿ÜºÎ ÇÁ·Î±×·¥ µ¿ÀÛ½Ã۱â
 
 À§¿¡¼´Â ³×À̹ÖÀ» À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥À» µ¿ÀÛ ½ÃÄ×À¸³ª, ƯÁ¤ÇÑ ¾×¼ÇÀ» ÃëÇÏ°Ô ÇϱâÀ§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥À» ¼öÇà ½Ãų ¼ö ÀÖ´Ù. ¼öÇà ½ÃÁ¡Àº ³ëµå°¡ »ý¼ºµÈ ÀÌÈÄÀÌ´Ù. ÁÖÀÇÁ¡Àº Áï½Ã ¼öÇàÀÌ ¿Ï·áµÇ¾î¾ß ÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ µ¿ÀÛÁß¿¡ udev´Â ¸ØÃçÀִ´Ù. ÀÌ ÇÁ·Î±×·¥Àº udevÀÇ È¯°æº¯¼ö¸¦ ÀÚ½ÅÀÇ È¯°æº¯¼ö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î val = getenv(¡°ACTION¡±); À» ÅëÇØ valÀÌ ¡°add¡±ÀÏ °æ¿ì¿Í ¡°remove¡±ÀÏ °æ¿ì¿¡ °¢°¢ µ¿ÀÛÀ» ´Þ¸® ÇÒ ¼ö ÀÖ´Ù.KERNEL=="sdb", RUN+="/usr/bin/my_program" sdbÀåÄ¡°¡ Ãß°¡µÇ¸é(Ãß°¡µÇ°í ³ëµå°¡ »ý¼ºµÇ¸é) /usr/bin/my_programÀ» ¼öÇàÇÑ´Ù.
  
 
 ȯ°æº¯¼ö »ç¿ëENV´Â matching key¿Í assignment key µÎ°¡Áö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.assignment key·Î »ç¿ëÇϱâ
 KERNEL=="fd0", SYMLINK+="floppy", ENV{some_var}="value" fd0¶ó Ãß°¡µÇ¸é $some_var°¡ value·Î ¼³Á¤µÈ´Ù. matching key·Î »ç¿ëÇϱâ
 KERNEL=="fd0", ENV{an_env_var}=="yes", SYMLINK+="floppy" fd0°¡ Ãß°¡µÇ°í ȯ°æº¯¼ö $an_env_varÀÇ °ªÀÌ ¡°yes¡± ÀÏ °æ¿ì /dev/floppy·Î symbolic link ÇÑ´Ù.   
        
         
        
        
        
        
        
        
        
         
     | 
 
    | 
        
     | 
 
 
 
 
 
 |  
  
	 
     | 
     | 
        
	    
	 |