LinuxÉ豸Çý¶¯¿ª·¢Ïê½â ±Ê¼Ç6 ×Ö·ûÉ豸Çý¶¯
ʹÓÃÏÂÁкé¿ÉÒÔͨ¹ýÖ÷É豸ºÅºÍ´ÎÉ豸ºÅÉú³Édev_t
MKDEV(int major, int mainor)
Èç¹û¸´ÖƵÄÄÚ´æÊǼòµ¥ÀàÐÍ£¬Èçchar¡¢int¡¢longµÈ£¬Ôò¿ÉÒÔʹÓüòµ¥µÄput_user()ºÍget_user()
Linuxϵͳ½¨ÒéÒÔÈçͼ·½Ê½¶¨ÒåioctlÃüÁîÂë
ÃüÁËÂëµÄÉ豸ÀàÐÍ×Ö¶ÎΪһ¸ö“»ÃÊý”£¬¿ÉÒÔÊÇ0-0xffÖ®¼äµÄÖµ£¬ÄÚºËÖеÄioctl-number.txt¸ø³öÁËÒ»Ð©ÍÆ¼öµÄºÍÒѾʹÓÃÁ˵ē»ÃÊý”£¬ÐÂÉ豸Çý¶¯¶¨Òå“»ÃÊý”µÄʱºòÒª±ÜÃâÓëÆä·¢Éú³åÍ»¡£
ÃüÁîÂëµÄ·½Ïò×Ö¶ÎΪ2룬¸Ã×ֶαíʾÊý¾Ý´«Ë͵ķ½Ïò£¬¿ÉÄܵÄÖµÊÇ_IOC_NONE£¨ÎÞÊý¾Ý´«Ê䣩¡¢_IOC_READ£¨¶Á£©¡¢_IOC_WRITE£¨Ð´£©ºÍ_IOC_READ|_IOC_WRITE£¨Ë«Ïò£©¡£Êý¾Ý´«Ë͵ķ½ÏòÊÇ´ÓÓ¦ÓóÌÐòµÄ½Ç¶ÈÀ´¿´µÄ
ÃüÁîÂëµÄÊý¾Ý³¤¶È×ֶαíÊ¾Éæ¼°µÄÓû§Êý¾ÝµÄ´óС£¬Õâ¸ö³ÉÔ±µÄ³¤¶Èͨ³£ÒÀÀµÓÚÌåϵ½á¹¹£¬Í¨³£ÊÇ13λ»òÕß14λ
Äں˻¹¶¨ÒåÁË_IO()¡¢_IOR()¡¢_IOW()ºÍ_IOWR()ÕâËĸöºêÀ´¸¨ÖúÉú³ÉÃüÁî
ÄÚºËÖÐÔ¤¶¨ÒåÁËһЩio¿ØÖÆÃüÁÈç¹ûijÉ豸Çý¶¯Öаüº¬ÁËÓëÔ¤¶¨ÒåÃüÁîÒ»ÑùµÄÃüÁÕâЩÃüÁî»á±»µ±×öÔ¤¶¨ÒåÃüÁî±»Äں˴¦Àí¶ø²»ÊDZ»É豸Çý¶¯´¦Àí£¬Ô¤¶¨ÒåÃüÁîÓÐÈçÏÂ4ÖÖ£º
FIOCLEX FIONCLEX FIOQSIZE FIONBIO p142
dev = container_of(inode->i_cdev, struct globalmem_dev, cdev);
container_ofµÄ×÷ÓÃÊÇͨ¹ý½á¹¹Ìå³ÉÔ±µÄÖ¸ÕëÕÒµ½¶ÔÓ¦½á¹¹ÌåµÄÖ¸Õ룬Õâ¸ö¼¼ÇÉÔÚLinuxÄں˱à³ÌÖÐÊ®·ÖÓг£ÓᣵÚ1¸ö²ÎÊýÊǽṹÌå³ÉÔ±µÄÖ¸Õ룬µÚ2¸ö²ÎÊýΪÕû¸ö½á¹¹ÌåµÄÀàÐÍ£¬µÚ3¸ö²ÎÊýΪ´«ÈëµÄµÚ1¸ö²ÎÊý£¨½á¹¹Ìå³ÉÔ±£©µÄÀàÐÍ£¬·µ»ØÕû¸ö½á¹¹ÌåµÄÖ¸Õë
Ïà¹ØÎĵµ£º
1¡¢Èí¼þ°²×°
Ð¶ÔØ£¬·Ö¼¸ÖÖÇé¿ö£º
A£º
RPM°ü£¬ÕâÖÖÈí¼þ°ü¾ÍÏñwindowsµÄEXE°²×°
ÎļþÒ»Ñù£¬¸÷ÖÖÎļþÒѾ±àÒëºÃ£¬²¢´òÁ˰ü£¬ÄĸöÎļþ¸Ã·Åµ½ÄĸöÎļþ¼Ð£¬¶¼Ö¸¶¨ºÃÁË£¬°²×°
·Ç³£·½±ã£¬ÔÚͼÐνçÃæÀïÄãÖ»ÐèҪ˫»÷¾ÍÄÜ×Ô¶¯°²×°
¡£
==ÈçºÎÐ¶ÔØ:
1¡¢´ò¿ªÒ»¸öSHELLÖÕ¶Ë
2¡¢ÒòΪLinux
ϵÄÈí¼þÃû¶¼°üÀ¨°æ±¾ºÅ£¬ËùÒÔÐ¶ÔØÇ°×îºÃ ......
´Ówrite()µ÷Ó÷µ»ØÊ±£¬ÄÚºËÒѾ½«»º³åÇøËùÌṩµÄÊý¾Ýµ½Äں˵Ļº³åÇø£¬µ«ÊÇÎÞ·¨±£Ö¤Êý¾ÝÒѾд³öµ½ÆäÔ¤¶¨µÄÄ¿µÄµØ¡£µÄÈ·£¬Ð´Èëµ÷Ó÷µ»ØµÄËÙ¶ÈʵÔÚÌ«¿ìÁË£¬¿ÉÄÜûÓÐʱ¼äÍê³É¸ÃÏîÄ¿µÄ¹¤×÷¡£´¦ÀíÆ÷ºÍÓ²ÅÌÖ®¼äµÄÐÔÄܲîÒìʹµÃ´ËÀàÁîÈËÍ·Í´µÄÐÐΪÏÔ¶øÒ×¼û¡£
ÊÂʵÉÏ£¬Èç¹ûÓû§¿Õ¼äÓ¦ÓóÌÐò·¢³öwrite()ϵͳµ÷Óã¬LinuxÄں˻áÏȽøÐÐÈ ......
´ÓÕâ¸ö×ܽáÕýʽ¿ªÊ¼ÁËÎÒµÄÇý¶¯Ö®Âã¬ÐÄÇé²»ÃâÓе㼤¶¯£¬¾¡¹ÜÏÖÔÚ¶ÔÇý¶¯µÄ±àд»¹ºÜÄ£ºý£¬µ«»¹ÊÇÓмÍÄîÒâÒåµÄ……
¿ª·¢Æ½Ì¨£º
ÐéÄâ»úÏÂRedHat9£¬ÄÚºË2.4.20.8
½»²æ±àÒë±àÒëÆ÷£ºÌìǶ¹«Ë¾ÌṩµÄarm-linux-gcc 4.3.3
ÄÚºËÊ÷£º/h ......
ÔÚÓû§¿Õ¼ä£¬Ê¹ÓÃioctlϵͳµ÷ÓÃÀ´¿ØÖÆÉ豸£¬ÔÐÍÈçÏ£º
int ioctl(int fd, unsigned long cmd, ...);
µÚÈý¸ö²ÎÊý²»±íʾһ¸ö±äÊýÄ¿µÄ²ÎÊý£¬¶øÊÇÒ»¸öÀàÐÍ¿ÉÑ¡µÄ²ÎÊý¡£µÚÈý¸ö²ÎÊýÒÀÀµÓÚ¿ØÖÆÃüÁһЩÃüÁî²»ÓòÎÊý£¬Ò»Ð©ÓÃÒ»¸öÕûÊýÖµ£¬Ò»Ð©Ê¹ÓÃÖ¸Õë
1¡¢ioctlº¯Êý¶¨ÒåÃüÁî
ÔÚ±àдioctl´úÂë֮ǰ£¬Ê×ÏÈÐèÒª¶¨ÒåÃüÁΪÁË·ÀÖ¹ ......
modprobeÃüÁî±ÈinsmodÃüÁîÇ¿´ó£¬ËüÔÚ¼ÓÔØÄ³Ä£¿éʱ»áͬʱ¼ÓÔØ¸ÃÄ£¿éËùÒÀÀµµÄÆäËûÄ£¿é¡£Ê¹ÓÃmodprobeÃüÁî¼ÓÔØµÄÄ£¿éÈôÒÔ“modprobe –r filename”µÄ·½Ê½Ð¶Ôؽ«Í¬Ê±Ð¶ÔØÆäÒÀÀµµÄÄ£¿é¡£
printk´òÓ¡µ½var/log/messages
2.6ÄÚºËÖÐÒѼÓÔØµÄÐÅÏ¢Ò²´æÔÚÓÚ/sys/moduleĿ¼Ï£¬¼ÓÔØhello.koºó£¬ÄÚºËÖн«°üº¬/sys/mod ......