LinuxÇý¶¯³ÌÐò¿ª·¢ É豸¿ØÖƽӿÚ
ÐòÑÔ
É豸Çý¶¯³ÌÐòµÄÒ»¸ö»ù±¾¹¦ÄܾÍÊǹÜÀíºÍ¿ØÖÆÉ豸£¬Í¬Ê±ÎªÓû§Ó¦ÓóÌÐòÌṩ¹ÜÀíºÍ¿ØÖÆÉ豸µÄ½Ó¿Ú¡£ÎÒÃÇÇ°ÃæµÄ“Hello World”Çý¶¯³ÌÐòÒѾ¿ÉÒÔÌṩ¶Áд¹¦ÄÜÁË£¬ÔÚÕâÀïÎÒÃǽ«À©Õ¹ÎÒÃǵÄÇý¶¯ÒÔÖ§³ÖÉ豸¿ØÖƽӿڣ¬ÔÚLinuxÖÐÕâ¸ö½Ó¿ÚÊÇͨ¹ýioctlº¯ÊýÀ´ÊµÏֵġ£
É豸¿ØÖƽӿڣ¨ioctl º¯Êý£©
»ØÏëÒ»ÏÂÎÒÃÇÔÚ×Ö·ûÉ豸Çý¶¯ÖнéÉܵÄstruct file_operations ½á¹¹£¬ÕâÀïÎÒÃǽ«½éÉÜÒ»¸öеķ½·¨£º
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
ÕâÊÇÇý¶¯³ÌÐòÉ豸¿ØÖƽӿں¯Êý£¨ioctlº¯Êý£©µÄÄÚºËÔÐͶ¨Ò壬struct inode * ºÍstruct file* ÃèÊöÁ˲Ù×÷µÄÎļþ£¬unsigned int ÃèÊöÁËioctlÃüÁîºÅ£¬ÕâÊÇÒ»¸öÖØÒªµÄ²ÎÊý£¬ÎÒÃÇÉÔºó»á¶ÔËü×öÏêϸ½éÉÜ¡£×îºóÒ»¸ö²ÎÊýÊÇunsigned longÊý¾ÝÀàÐÍ£¬ÃèÊöÁËioctlÃüÁî¿ÉÄÜ´øÓеIJÎÊý£¬Ëü¿ÉÄÜÊÇÒ»¸öÕûÊý»òÖ¸ÕëÊý¾Ý¡£
ioctlÃüÁîºÅ
ioctlÃüÁîºÅÊÇÕâ¸öº¯ÊýÖÐ×îÖØÒªµÄ²ÎÊý£¬ËüÃèÊöµÄioctlÒª´¦ÀíµÄÃüÁî¡£LinuxÖÐʹÓÃÒ»¸ö32λµÄÊý¾ÝÀ´±àÂëioctlÃüÁËü°üº¬Ëĸö²¿·Ö£ºdir£ºtype£ºnr£ºsize¡£
dir£º
´ú±íÊý¾Ý´«ÊäµÄ·½Ïò£¬Õ¼2룬¿ÉÒÔÊÇ_IOC_NONE£¨ÎÞÊý¾Ý´«Ê䣬0U£©£¬_IOC_WRITE£¨ÏòÉ豸дÊý¾Ý£¬1U£©»ò_IOC_READ£¨´ÓÉ豸¶ÁÊý¾Ý£¬2U£©»òËûÃǵÄÂß¼»ò×éºÏ£¬µ±È»Ö»ÓÐ_IOC_WRITEºÍ_IOC_READµÄÂß¼»ò²ÅÓÐÒâÒå¡£
type£º
ÃèÊöÁËioctlÃüÁîµÄÀàÐÍ£¬8λ¡£Ã¿ÖÖÉ豸»òϵͳ¶¼¿ÉÒÔÖ¸¶¨×Ô¼ºµÄÒ»¸öÀàÐͺţ¬ioctlÓÃÕâ¸öÀàÐÍÀ´±íʾioctlÃüÁîËùÊôµÄÉ豸»òÇý¶¯¡£Ò»°ãÓÃASCIIÂë×Ö·ûÀ´±íʾ£¬Èç 'a'¡£
nr£º
ioctlÃüÁîÐòºÅ£¬Ò»°ã8λ¡£¶ÔÓÚÒ»¸öÖ¸¶¨µÄÉ豸Çý¶¯£¬¿ÉÒÔ¶ÔËüµÄioctlÃüÁî×öÒ»¸ö˳Ðò±àÂ룬һ°ã´ÓÁ㿪ʼ£¬Õâ¸ö±àÂë¾ÍÊÇioctlÃüÁîµÄÐòºÅ¡£
size£º
ioctlÃüÁîµÄ²ÎÊý´óС£¬Ò»°ã14λ¡£ioctlÃüÁîºÅµÄÕâ¸öÊý¾Ý³ÉÔ±²»ÊÇÇ¿ÖÆʹÓõģ¬Äã¿ÉÒÔ²»Ê¹ÓÃËü£¬µ«ÊÇÎÒÃǽ¨ÒéÄãÖ¸¶¨Õâ¸öÊý¾Ý³ÉÔ±£¬Í¨¹ýËüÎÒÃÇ¿ÉÒÔ¼ì²éÓû§¿Õ¼äÊý¾ÝµÄ´óСÒÔ±ÜÃâ´íÎóµÄÊý¾Ý²Ù×÷£¬Ò²¿ÉÒÔʵÏÖ¼æÈݾɰ汾µÄioctlÃüÁî¡£
ÎÒÃÇ¿ÉÒÔ×Ô¼ºÀ´Ö±½ÓÖ¸¶¨Ò»¸öioctlÃüÁîºÅ£¬Ëü¿ÉÄܽö½öÊÇÒ»¸öÕûÊý¼¯£¬µ«LinuxÖеÄioctlÃüÁîºÅ¶¼ÊÇÓÐÌض¨º¬ÒåµÄ£¬Òò´Ëͨ³£ÎÒÃDz»ÍƼöÕâô×ö¡£ÆäʵLinuxÄÚºËÒѾÌṩÁËÏàÓ¦µÄºêÀ´×Ô¶¯Éú³ÉioctlÃüÁîºÅ£º
_IO(type,nr)
_IOR(type,nr,size)
_IOW(type,nr,size)
_IOWR(type,nr,size)
ºê_IOÓÃÓÚÎÞÊý¾Ý´«Ê䣬ºê_IORÓÃÓÚ´ÓÉ豸¶ÁÊý¾Ý£¬ºê _IOWÓÃÓÚÏòÉ豸дÊý¾Ý£¬ºê_IOWRÓÃÓÚͬʱÓжÁдÊý¾ÝµÄIOCTLÃüÁî¡£Ïà¶ÔµÄ£¬LinuxÄÚºËÒ²Ìṩ
Ïà¹ØÎĵµ£º
£¨L2CAPÐÒé¼ò½é£¬L2CAPÔÚBlueZÖеÄʵÏÖÒÔ¼°L2CAP±à³Ì½Ó¿Ú£©
Ò»£ºL2CAPÐÒé¼ò½é£º
Logical Link Control and Adaptation Protocol(L2CAP)
Âß¼Á¬½Ó¿ØÖƺÍÊÊÅäÐÒé (L2CAP) ΪÉϲãÐÒéÌṩÃæÏòÁ¬½ÓºÍÎÞÁ¬½ÓµÄÊý¾Ý·þÎñ£¬²¢Ìṩ¶àÐÒ鹦ÄܺͷָîÖØ×é²Ù×÷¡£L2CAP ³äÐíÉϲãÐÒéºÍÓ¦ÓÃÈí¼þ´«ÊäºÍ½ÓÊÕ×î´ó³¤¶ÈΪ 64K µÄ L2CAP Ê ......
²»¿É±ÜÃâµÄ£¬Å¼¶û»áÍü¼ÇLinux¸ùÓû§ÃÜÂ룬ÎÒÃÇÐèҪͨ¹ýLinuxµÄsingleģʽ½øÈëLinuxÖØÖãº
grubÒýµ¼ÄÚºËʱ¼Ósingle²ÎÊý£¬ÀýÈ磺
grub> kernel (hd0,6)/vmlinuz single
grub> initrd (hd0,6)/initrd
grub> boot
·ÇÊÚȨ½øÈëroot£¬ÓÃpass ......
1. ps¼ò½é
psÃüÁî¾ÍÊÇ×î»ù±¾Í¬Ê±Ò²ÊǷdz£Ç¿´óµÄ½ø³Ì²é¿´ÃüÁî.ʹÓøÃÃüÁî¿ÉÒÔÈ·¶¨ÓÐÄÄЩ½ø³ÌÕýÔÚÔËÐкÍÔËÐеÄ״̬¡¢½ø³ÌÊÇ·ñ½áÊø¡¢½ø³ÌÓÐûÓн©ËÀ¡¢ÄÄЩ½ø³ÌÕ¼ÓÃÁ˹ý¶àµÄ×ÊÔ´µÈµÈ.×ÜÖ®´ó²¿·ÖÐÅÏ¢¶¼ÊÇ¿ÉÒÔͨ¹ýÖ´ÐиÃÃüÁîµÃµ½µÄ.
2. psÃüÁî¼°Æä²ÎÊý
psÃüÁî×î³£ÓõĻ¹ÊÇÓÃÓÚ¼à¿Øºǫ́½ø³ÌµÄ¹¤×÷Çé¿ö,ÒòΪºǫ́½ø³ÌÊDz»ºÍÆÁÄ»¼ü ......
ELFÊÇlinuxÖÐʹÓÃ×î¹ã·ºµÄÒ»ÖÖÓ¦ÓóÌÐò¸ñʽ£¬ÎªÁËŪÇå³þLinuxÄÚºËÊÇÈçºÎ½²ELFÎļþ¾«È·Ó³Éäµ½Ö¸¶¨ÄÚ´æ¿Õ¼ä£¬ÉÏÖÜÄ©°ÑÄÚºËsys_execve²¿·ÖºÃºÃ¿´ÁËÒ»±é£¬Ð¡½áÈçÏ£º
1. ELF¸ñʽ
ELFÖ¸¶¨Á˽ø³ÌÖÐtext¶Î¡¢bss¶Î¡¢data¶ÎµÈÓ¦¸Ã·ÅÖõ½½ø³ÌÐéÄâÄÚ´æ¿Õ¼äµÄʲôλÖã¬ÒÔ¼°¼Ç¼Á˽ø³ÌÐèÒªÓõ½µÄ¸÷ÖÖ¶¯Ì¬Á´½Ó¿âµÄλÖá£
2. sys_exe ......