µÚ30ÕÂIOCTLº¯Êý
30-1£ºioctlº¯ÊýµÄ×÷Óãº
É豸ÔÚÔËÐеÄʱºò¿ÉÄÜÒªÇóÊý¾ÝµÄдÈëÊÇÁ¬ÐøµÄ£¬Èç¹ûÕâ¸öʱºòÈÔÈ»ÓÃWRITEº¯ÊýȥдָÁîµÄ»°£¬¾ÍÓпÉÄܵ¼ÖÂÊý¾ÝµÄ²»Á¬Ðø£¬±ÈÈçÉù¿¨·ÅÒôÀÖ¿¨¶Ù£¬µçÓ°²¥·Å²»Á÷³©µÈµÈµÄÇé¿ö£¬ÎªÁ˽â¾öÕâÖÖÇé¿ö£¬¾ÍÓÐÁËIOCTLº¯Êý£¬´Ëº¯ÊýרÃÅÏòÇý¶¯²ã·¢ËÍ»òÕß½ÓÊÕÖ¸Áî¡£
30-2£ºioctlº¯ÊýµÄÍ·ÎļþºÍº¯ÊýÔÐÍ£º
1) Ó¦ÓòãÍ·Îļþ£º#include <sys/ioctl.h>
int ioctl(int d,int request, ...)
×÷ÓãºÅäºÏÇý¶¯²ãµÄIOCTLº¯ÊýʵÏÖÖ¸ÁîµÄ´«µÝ
²ÎÊý1£ºÉ豸ÃèÊö·û
²ÎÊý2£ºÖ¸ÁÈçijһ¸öÃüÁî¶ÔÓ¦Çý¶¯²ãµÄijһ¸ö¹¦ÄÜ
²ÎÊý3£º¿É±ä²ÎÊý£¬¸úÃüÁîÓйأ¬´«µÝ½øÈëÇý¶¯²ãµÄ²ÎÊý»òÕßÊǽÓÊÕÊý¾ÝµÄ»º´æ
·µ»Ø³É¹¦£º0
·µ»Øʧ°Ü£ºÐ¡ÓÚ0 ·µ»Øֵȡ¾öÓÚÓû§ÈçºÎÉè¼ÆÇý¶¯²ã
2) Çý¶¯²ãÍ·Îļþ£º#include <linux/ioctl.h>
long (*unlocked_ioctl) (struct file *, unsigned int,unsigned long)
×÷Ó㺴˺¯ÊýÖ¸ÕëÔÐÍλÓÚstruct file_operations½á¹¹Ìåµ±ÖУ¬ÅäºÏÓ¦Óòãioctlº¯ÊýʵÏÖÖ¸Áî´«µÝµÄ¹¦ÄÜ
²ÎÊý1£ºÎļþ½á¹¹ÌåÖ¸Õë
²ÎÊý2£ºÖ¸Áî
²ÎÊý3£ºÓ¦Óò㴫µÝ¸øÇý¶¯²ãµÄÊý¾Ý»òÕßÊǽÓÊÕÊý¾ÝÓõ½µÄ»º´æµØÖ·
30-3£ºioctlº¯ÊýµÄʵÏÖ·½·¨£º
×î»ù±¾µÄʵÏÖ·½·¨Çë²Î¿¼´úÂëºÍÊÓƵ
µÃµ½Ò»¸ö½áÂÛ£º²»ÄÜ´«µÝ2£¬ÕâÊÇÒòΪ2ÒѾ±»ÏµÍ³µÄÆäËû³ÌÐòÕ¼ÓÃÁË×÷Ϊһ¸öרÓÃÃüÁËùÒÔÔÚioctlµ±Öв»ÄÜʹÓÃ2,×÷ΪÃüÁÓÚ´ËÏàͬÇé¿öµÄ»¹²»Ö¹2¡£ÕýÒòΪ´ËÔÒò£¬IOCTL²»Äܹ»Ö±½ÓʹÓÃÊý×Ö×÷ΪÃüÁî½øÐд«µÝ£¬¶øÊÇÓÐÒ»Ì×רÃÅÖÆ×÷IOCTLÃüÁîµÄ·½·¨¡£
30-4£º¹ØÓÚioctlº¯ÊýµÄÃüÁ
30-5£ºÏµÍ³ÌṩµÄIOCTLÃüÁ¾ß£º
IotrlµÄϵͳ¶¨ÒåÃüÁî·½·¨ÊǶ¨ÒåΪһ¸ö32bitµÄÎÞ·ûºÅÕûÐÎÊý×Ö£¬Õâ¸öÊý×ֻᰴλ½øÐзֶΣ¬Ã¿Ò»¶ÎµÄº¬Ò嶼²»Ò»Ñù£¬ËùÒÔIOCTLµÄÃüÁîÊÇËĸö²¿·Ö×éºÏÆðÀ´ÐγɵÄÒ»¸ö32bitµÄÊý×Ö
×î¸ß2bit£º¶Áд¿ØÖÆ룬¶Á£¬Ð´£¬ÓÐûÓÐÊý¾Ý´«Ê䣬˫Ïò´«Êä(ÏÈдºó¶Á)
16bit¡ª29bit£ºÒª´«ÊäµÄÊý¾Ý´óС
8bit¡ª15bit£ºÄ§Êý/»ÃÊý£¬Æäʵ¾ÍÊDz»Í¬×éÃüÁîµÄÇø·Ö±êʶ£¬Ð´ÈëÒ»¸öASCII×Ö·ûÀ´½øÐÐÇø·Ö
0bit¡ª7bit£ºÕæÕýµÄÃüÁî±àºÅ 0¡ª255ÿһ×é¹²¼ÆÖ§³Ö256¸ö
30-6£ºIOCTL´úÂë±àд£º
1) ´úÂëµÄ¹¦ÄÜÉè¼Æ£º
ALLON ¨¤ ¿ªÈ«²¿µÆ
ALLOFF ¨¤ ¹ØÈ«²¿µÆ
LEDON ¨¤ ¿ªÖ¸¶¨µÄij¸öµÆ
LEDOFF ¨¤ ¹ØÖ¸¶¨µÄij¸öµÆ
LEDREAD ¨¤ ¶ÁÈ«²¿µÆµÄ״̬
TRANSFER¨¤ ÏÈдÈëµÆ״̬ÔÙÏòÓû§¿Õ¼ä´«µÝÊý¾Ý
2) ´úÂëÇë²Î¿¼ÊÓƵ
30-6£ºÄÚºËÌṩµÄÖÆ×÷IOCTLÃüÁîµÄ¹¤¾ß
#define _IO(type,nr) //ÖÆ×÷ûÓÐÊý¾Ý´«ÊäµÄÃüÁî
#define _IOR(type,nr,size) //ÖÆ×÷¶ÁÈ¡Êý¾ÝµÄÃüÁî
#define _IOW(type,nr,size) //ÖÆ×÷дÈëÊý¾ÝµÄÃüÁî
#define _IOWR(type,nr,size) //ÖÆ×÷ÏÈдÈëºó¶ÁÈ¡µÄË«Ïò´«ÊäÃüÁî
²ÎÊý1£ºÄ§Êý¨¤ASCII×Ö·û
²ÎÊý2£ºÃüÁî±àºÅ
²ÎÊý3£ºÒª´«µÝµÄÊý¾ÝµÄ´óС£¬´Ë´¦²»ÄÜÌîÈëÊý×Ö£¬ÒªÌÒåÀàÐÍ
¹ØÓÚ¶¨ÒåÀàÐÍ£ºchar¨¤Ò»¸ö×Ö½Ú short¨¤Á½¸ö×Ö½Ú int¨¤Ëĸö×Ö½Ú
´«µÝ·Ç±ê×¼¶¨ÒåµÄÊý¾Ý³¤¶ÈʹÓýṹÌåÀàÐÍ£¬²»¿¼ÂǽṹÌåÄÚ²¿Êý¾Ý¶ÔÆ룬ÆäʵÕâÑù×öÊÇΪÁËÄã´«µÝÊý¾ÝµÄ·½±ã
30-7£ºÄÚºËÌṩµÄ·ÖÀëIOCTLÃüÁîµÄ¹¤¾ß
#define _IOC_DIR(nr) //·ÖÀë¶Áд¿ØÖÆ
#define _IOC_TYPE(nr) //·ÖÀëħÊý
#define _IOC_NR(nr) //·ÖÀëÃüÁî
#define _IOC_SIZE(nr) //·ÖÀëÊý¾Ý³¤¶È