LinuxÄÚºËÖжÁдÎļþ
×î½üÔÚkernel ÀïÃæ coding, ÕÒÀ´Ò»Ð©×ÊÁÏ Ë³ÊÖÌùÀ´£¬·½±ã²éÕÒ¡££¨¸ÐлÔ×÷ÕßµÄŬÁ¦£¬ÈôÓаæȨÎÊÌ⣬ÇëÁªÏµ£©
ÓÐʱºòÐèÒªÔÚLinux kernel££´ó¶àÊÇÔÚÐèÒªµ÷ÊÔµÄÇý¶¯³ÌÐò££ÖжÁдÎļþÊý¾Ý¡£ÔÚkernelÖвÙ×÷ÎļþûÓбê×¼¿â¿ÉÓã¬ÐèÒªÀûÓÃkernelµÄһЩº¯Êý£¬ÕâЩº¯ÊýÖ÷ÒªÓУº filp_open() filp_close(), vfs_read() vfs_write()£¬set_fs()£¬get_fs()µÈ£¬ÕâЩº¯ÊýÔÚlinux/fs.hºÍasm/uaccess.hÍ·ÎļþÖÐÉùÃ÷¡£ÏÂÃæ½éÉÜÖ÷Òª²½Ö裺
1. ´ò¿ªÎļþ
filp_open()ÔÚkernelÖпÉÒÔ´ò¿ªÎļþ£¬ÆäÔÐÎÈçÏ£º
strcut file* filp_open(const char* filename, int open_mode, int mode);
¸Ãº¯Êý·µ»Østrcut file*½á¹¹Ö¸Õ룬¹©ºó¼Ìº¯Êý²Ù×÷ʹÓ㬸÷µ»ØÖµÓÃIS£ßERR£¨£©À´¼ìÑéÆäÓÐЧÐÔ¡£
²ÎÊý˵Ã÷
filename£º ±íÃ÷Òª´ò¿ª»ò´´½¨ÎļþµÄÃû³Æ£¨°üÀ¨Â·¾¶²¿·Ö£©¡£ÔÚÄÚºËÖдò¿ªµÄÎļþʱÐèҪעÒâ´ò¿ªµÄʱ»ú£¬ºÜÈÝÒ׳öÏÖÐèÒª´ò¿ªÎļþµÄÇý¶¯ºÜÔç¾Í¼ÓÔز¢´ò¿ªÎļþ£¬µ«ÐèÒª´ò¿ªµÄÎļþËùÔÚÉ豸»¹²»ÓйÒÔص½ÎļþϵͳÖУ¬¶øµ¼Ö´ò¿ªÊ§°Ü¡£
open_mode£º ÎļþµÄ´ò¿ª·½Ê½£¬ÆäÈ¡ÖµÓë±ê×¼¿âÖеÄopenÏàÓ¦²ÎÊýÀàËÆ£¬¿ÉÒÔÈ¡O_CREAT,O_RDWR,O_RDONLYµÈ¡£
mode£º ´´½¨ÎļþʱʹÓã¬ÉèÖô´½¨ÎļþµÄ¶ÁдȨÏÞ£¬ÆäËüÇé¿ö¿ÉÒÔ´ÒÂÔÉèΪ0
2. ¶ÁдÎļþ
kernelÖÐÎļþµÄ¶Áд²Ù×÷¿ÉÒÔʹÓÃvfs_read()ºÍvfs_write£¬ÔÚʹÓÃÕâÁ½¸öº¯ÊýÇ°ÐèҪ˵Ã÷Ò»ÏÂget_fs()ºÍ set_fs()ÕâÁ½¸öº¯Êý¡£
vfs_read() vfs_write()Á½º¯ÊýµÄÔÐÎÈçÏ£º
ssize_t vfs_read(struct file* filp, char __user* buffer, size_t len, loff_t* pos);
ssize_t vfs_write(struct file* filp, const char __user* buffer, size_t len, loff_t* pos);
×¢ÒâÕâÁ½¸öº¯ÊýµÄµÚ¶þ¸ö²ÎÊýbuffer£¬Ç°Ã涼ÓÐ__userÐÞÊηû£¬Õâ¾ÍÒªÇóÕâÁ½¸öbufferÖ¸Õ붼Ӧ¸ÃÖ¸ÏòÓÿյÄÄڴ棬Èç¹û¶Ô¸Ã²ÎÊý´«µÝkernel¿Õ¼äµÄÖ¸Õ룬ÕâÁ½¸öº¯Êý¶¼»á·µ»Øʧ°Ü-EFAULT¡£µ«ÔÚKernelÖУ¬ÎÒÃÇÒ»°ã²»ÈÝÒ×Éú³ÉÓû§¿Õ¼äµÄÖ¸Õ룬»òÕß²»·½±ã¶ÀÁ¢Ê¹ÓÃÓû§¿Õ¼äÄڴ档ҪʹÕâÁ½¸ö¶Áдº¯ÊýʹÓÃkernel¿Õ¼äµÄbufferÖ¸ÕëÒ²ÄÜÕýÈ·¹¤×÷£¬ÐèҪʹÓÃset_fs()º¯Êý»òºê£¨set_fs()¿ÉÄÜÊǺ궨Ò壩£¬Èç¹ûΪº¯Êý£¬ÆäÔÐÎÈçÏ£º
void set_fs(mm_segment_t fs);
¸Ãº¯ÊýµÄ×÷ÓÃÊǸıäkernel¶ÔÄÚ´æµØÖ·¼ì²éµÄ´¦Àí·½Ê½£¬Æäʵ¸Ãº¯ÊýµÄ²ÎÊýfsÖ»ÓÐÁ½¸öÈ¡Öµ£ºUSER£ßDS£¬KERNEL£ßDS£¬·Ö±ð´ú±íÓû§¿Õ¼äºÍÄں˿ռ䣬ĬÈÏÇé¿öÏ£¬kernelȡֵΪUSER_DS£¬¼´¶ÔÓû§¿Õ¼äµØÖ·¼ì²é²¢×ö±ä»»¡
Ïà¹ØÎĵµ£º
£¨L2CAPÐÒé¼ò½é£¬L2CAPÔÚBlueZÖеÄʵÏÖÒÔ¼°L2CAP±à³Ì½Ó¿Ú£©
Ò»£ºL2CAPÐÒé¼ò½é£º
Logical Link Control and Adaptation Protocol(L2CAP)
Âß¼Á¬½Ó¿ØÖƺÍÊÊÅäÐÒé (L2CAP) ΪÉϲãÐÒéÌṩÃæÏòÁ¬½ÓºÍÎÞÁ¬½ÓµÄÊý¾Ý·þÎñ£¬²¢Ìṩ¶àÐÒ鹦ÄܺͷָîÖØ×é²Ù×÷¡£L2CAP ³äÐíÉϲãÐÒéºÍÓ¦ÓÃÈí¼þ´«ÊäºÍ½ÓÊÕ×î´ó³¤¶ÈΪ 64K µÄ L2CAP Ê ......
vi
±à¼Æ÷ÊÇËùÓÐUnix¼°Linuxϵͳϱê×¼µÄ±à¼Æ÷£¬ËüµÄÇ¿´ó²»Ñ·É«ÓÚÈκÎ×îеÄÎı¾±à¼Æ÷£¬ÕâÀïÖ»ÊǼòµ¥µØ½éÉÜÒ»ÏÂËüµÄÓ÷¨ºÍһС²¿·ÖÖ¸Áî¡£ÓÉÓÚ¶Ô
Unix¼°LinuxϵͳµÄÈκΰ汾£¬vi±à¼Æ÷ÊÇÍêÈ«ÏàͬµÄ£¬Òò´ËÄú¿ÉÒÔÔÚÆäËûÈκνéÉÜviµÄµØ·½½øÒ»²½Á˽âËü¡£ViÒ²ÊÇLinuxÖÐ×î»ù±¾µÄÎı¾±à¼
Æ÷£¬Ñ§»áËüºó£¬Äú½«ÔÚLinuxµÄÊÀ½çÀ ......
sortÃüÁîµÄ¹¦ÄÜÊǶÔÎļþÖеĸ÷ÐнøÐÐÅÅÐò¡£sortÃüÁîÓÐÐí¶à·Ç³£ÊµÓõÄÑ¡ÏÕâЩѡÏî×î³õÊÇÓÃÀ´¶ÔÊý¾Ý¿â¸ñʽµÄÎļþÄÚÈݽøÐи÷ÖÖÅÅÐò²Ù×÷µÄ¡£Êµ¼Ê
ÉÏ£¬sortÃüÁî¿ÉÒÔ±»ÈÏΪÊÇÒ»¸ö·Ç³£Ç¿´óµÄÊý¾Ý¹ÜÀí¹¤¾ß£¬ÓÃÀ´¹ÜÀíÄÚÈÝÀàËÆÊý¾Ý¿â¼Ç¼µÄÎļþ¡£
SortÃüÁÖðÐжÔÎļþÖеÄÄÚÈݽøÐÐÅÅÐò£¬Èç¹û ......
¹ØÓÚWindowsÆô¶¯¹ý³Ì½éÉܵÄÎÄÕ¿Éν¶àÈçţ룬¶ø¶ÔÓÚLinuxµÄ½éÉÜÈ´ÊÇ·ïë÷ë½Ç¡£·²ÊÇÔø¾Ê¹ÓùýLinuxµÄÓû§¿ÉÄܶ¼»á×¢Òâµ½£¬µ±¼ÆËã»úÆô¶¯Ê±£¬ÆÁÄ»ÉÏ»á³öÏֺܶàÐÅÏ¢¡£Ò»°ãÇé¿öÏ£¬ÕâЩÐÅÏ¢ÎÒÃÇ¿ÉÒÔͨ¹ýÒÔϵÄÃüÁî¿´µ½£º
¡¡¡¡
¡¡¡¡cat /var/log/dmesg | more
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡ÕâЩÐÅÏ¢¾¿¾¹ÓÐʲôº¬Ò壿Õâ¸öÎÊÌâ¿´Æð ......