Ê®·ÖÖÓÈÃÄãÏàʶ Linux ABI
lctt Òë×¢£º×òÌ죬almalinux ³Æ½« ·ÅÆú ¶Ô rhel µÄ 1:1 ¼æÈÝÐÔ£¬µ«½«¼á³Ö¶Ô rhel µÄ abi ¼æÈÝ£¬ÒÔ±ãÔÚ rhel ÉÏÔËÐеÄÈí¼þ¿ÉÒÔÎÞ·ìµØÔËÐÐÔÚ almalinux ÉÏ¡£¿ÉÄÜÓеÄͬÑâ¶Ô abi µÄ¿´·¨»¹²»ÊǺÜÇåÎú£¬Òò´Ë·Òë´ËÎĹ©¸÷ÈËÏàʶ¡£
Ðí¶à Linux ϲ»¶Õ߶¼ÊìϤ Linus Torvalds µÄ ÖøÃûÉêâÁ£º¡°ÎÒÃDz»ÆÆËðÓû§¿Õ¼ä¡±£¬µ«¿ÉÄܲ¢·Çÿ¸öÌýµ½Õâ¾ä»°µÄÈ˶¼ÇåÎúÆä¼ÄÒå¡£
Õâ¸ö¡°µÚÒ»¹æÔò¡±ÌáÐÑ¿ª·¢Ö°Ô±¹ØÓÚÓ¦ÓóÌÐòµÄ¶þ½øÖƽӿڣ¨ABI£©µÄÎȹÌÐÔ£¬¸Ã½Ó¿ÚÓÃÓÚÓ¦ÓóÌÐòÓëÄÚºËÖ®¼äµÄͨѶºÍÉèÖ᣽ÓÏÂÀ´µÄÄÚÈÝÖ¼ÔÚʹ¶ÁÕßÊìϤ ABI µÄ¿´·¨£¬ÐðÊöΪʲô ABI µÄÎȹÌÐÔºÜÖ÷Òª£¬²¢ÌÖÂÛ Linux ÎÈ¹Ì ABI ÖаüÀ¨ÁËÄÄЩÄÚÈÝ¡£Linux µÄÒ»Á¬ÔöÌíºÍÑݽøÐèÒª¶Ô ABI ¾ÙÐб任£¬ÆäÖÐһЩ±ä»»ÒýÆðÁËÕùÒé¡£
ʲôÊÇ ABI£¿
ABI ÌåÏÖ Ó¦ÓóÌÐò¶þ½øÖƽӿÚApplications Binary Interface¡£Ã÷È· ABI ¿´·¨µÄÒ»ÖÖ·½·¨ÊÇ˼Á¿ËüÓëÆäËû¿´·¨µÄÇø±ð¡£¹ØÓÚÐí¶à¿ª·¢Ö°Ô±À´Ëµ£¬Ó¦ÓóÌÐò±à³Ì½Ó¿ÚApplications Programming Interface£¨API£©¸üΪÊìϤ¡£Í¨³££¬¿âµÄÍ·ÎļþºÍÎĵµ±»ÒÔΪÊÇÆä API£¬ÒÔ¼°ÉÐÓÐÏñ HTML5 ÕâÑùµÄ±ê×¼Îĵµ¡£Å²Óÿâ»ò½»Á÷×Ö·û´®ÃûÌÃÊý¾ÝµÄ³ÌÐò±ØÐè×ñÊØ API ÖÐËùÐÎòµÄÔ¼¶¨£¬²»È»¿ÉÄÜ»ñ×ÔÂúÍâµÄЧ¹û¡£
ABI ÀàËÆÓÚ API£¬ÓÉÓÚËüÃÇ»®¶¨ÁËÏÂÁîµÄÚ¹ÊͺͶþ½øÖÆÊý¾ÝµÄ½»Á÷·½·¨¡£¹ØÓÚ C ³ÌÐò£¬ABI ͨ³£°üÀ¨º¯ÊýµÄ·µ»ØÀàÐͺͲÎÊýÁÐ±í¡¢½á¹¹ÌåµÄ½á¹¹£¬ÒÔ¼°Ã¶¾ÙÀàÐ͵ļÄÒ塢˳ÐòºÍ¹æÄ£¡£×èÖ¹ 2022 Ä꣬Linux ÄÚºËÈÔÈ»ÏÕЩÍêÈ«ÊÇ C ³ÌÐò£¬Òò´Ë±ØÐè×ñÊØÕâЩ¹æ·¶¡£
¡°ÄÚºËϵͳŲÓýӿڡ± µÄÐÎò¿ÉÒÔÔÚ¡¶Linux ÊÖ²áµÚ 2 ½Ú¡·ÖÐÕÒµ½£¬²¢°üÀ¨ÁË¿É´ÓÖÐÐļþÓ¦ÓóÌÐòŲÓõÄÀàËÆ mount ºÍ sync µÄ C °æ±¾º¯Êý¡£ÕâЩº¯ÊýµÄ¶þ½øÖƽṹÊÇ Linux ABI µÄµÚÒ»¸öÖ÷Òª×é³É²¿·Ö¡£¹ØÓÚÎÊÌâ ¡°Linux µÄÎÈ¹Ì ABI °üÀ¨ÄÄЩÄÚÈÝ£¿¡±£¬Ðí¶àÓû§ºÍ¿ª·¢Ö°Ô±µÄ»Ø¸²ÊÇ ¡°sysfs£¨/sys£©ºÍ procfs£¨/proc£©µÄÄÚÈÝ¡±¡£¶øÏÖʵÉÏ£¬¹Ù·½ Linux ABI Îĵµ ȷʵÖ÷Òª¼¯ÖÐÔÚÕâЩ ÐéÄâÎļþϵͳ ÉÏ¡£
Ç°Ãæ×ÅÖØÏÈÈÝÁË Linux ABI ÔÚ³ÌÐòÖеÄÓ¦Ó÷½·¨£¬µ«Î´º¸ÇÒ»ÂÉÖ÷ÒªµÄÈËΪÒòËØ¡£ÕýÈçÏÂͼËùʾ£¬ABI µÄ¹¦Ð§ÐèÒªÄÚºËÉçÇø¡¢C ±àÒëÆ÷£¨Èç GCC »ò clang£©¡¢½¨ÉèÓû§¿Õ¼ä C ¿â£¨Í¨³£ÊÇ glibc£©µÄ¿ª·¢Ö°Ô±£¬ÒÔ¼°Æ¾Ö¤ ¿ÉÖ´ÐÐÓëÁ´½ÓÃûÌã¨ELF£© ½á¹¹µÄ¶þ½øÖÆÓ¦ÓóÌÐòÖ®¼äµÄÏàÖúÆ𾢡£
¿ª·¢ÉçÇøÄÚµÄÏàÖú
ΪʲôÎÒÃǹØ×¢ ABI£¿
À´×Ô Torvalds ×Ô¼ºµÄ Linux ABI µÄÎȹÌÐÔ°ü¹Ü£¬Ê¹µÃ Linux ¿¯ÐаæºÍСÎÒ˽ÈËÓû§Äܹ»×ÔÁ¦¸üÐÂÄںˣ¬¶ø²»ÊܲÙ×÷ϵͳµÄÓ°Ïì¡£
ÈôÊÇ Linux ûÓÐÎÈ¹ÌµÄ ABI£¬ÄÇôÿ´ÎÄÚºËÐèÒªÐÞ²¹ÒÔ½â¾öÇå¾²ÎÊÌâʱ£¬²Ù×÷ϵͳµÄ´ó²¿·ÖÉõÖÁËùÓÐÄÚÈݶ¼ÐèÒªÖØÐÂ×°Öá£ÏÔÈ»£¬¶þ½øÖƽӿڵÄÎȹÌÐÔÊÇ Linux µÄ¿ÉÓÃÐÔºÍÆÕ±é½ÓÄɵÄÖ÷ÒªÒòËØÖ®Ò»¡£
Terminal output
ÈçÉÏͼËùʾ£¬Äںˣ¨ÔÚ linux-libc-dev ÖУ©ºÍ Glibc£¨ÔÚ libc6-dev ÖУ©¶¼ÌṩÁ˽ç˵ÎļþȨÏÞµÄλÑÚÂë¡£ÏÔÈ»£¬ÕâÁ½¸ö½ç˵¼¯±ØÐèÒ»Ö£¡apt Èí¼þ°ü¹ÜÀíÆ÷»áʶ±ðÈí¼þ°üÌṩÿ¸öÎļþ¡£Glibc ABI µÄDZÔÚ²»Îȹ̲¿·ÖλÓÚ bits/ Ŀ¼ÖС£
Ôڴ󲿷ÖÇéÐÎÏ£¬Linux ABI µÄÎȹÌÐÔ°ü¹ÜÔË×÷ÓÅÒ졣ƾ֤ ¿µÎ¤¶¨ÂÉConway’s Law£¬ÔÚ¿ª·¢Àú³ÌÖзºÆðµÄ·³ÈËÊÖÒÕÎÊÌâÍùÍùÊÇÓÉÓÚ²î±ðÈí¼þ¿ª·¢ÉçÇøÖ®¼äµÄÎó½â»ò²»Í¬ËùÖ£¬¶øÕâЩÉçÇø¶¼Îª Linux ×ö³öÁËТ˳¡£²î±ðÉçÇøÖ®¼äµÄ½Ó¿Ú¿ÉÒÔͨ¹ý Linux °ü¹ÜÀíÆ÷µÄÔªÊý¾ÝÇáËɵؾÙÐÐÏëÏó£¬ÈçÉÏͼËùʾ¡£
Y2038£ºÒ»¸ö ABI ÆÆËðµÄÀý×Ó
ͨ¹ý˼Á¿Ä¿½ñÕýÔÚ¾ÙÐеġ¢»ºÂý±¬·¢ µÄ ¡°Y2038¡± ABI ÆÆËðµÄÀý×Ó£¬¿ÉÒÔ¸üºÃµØÃ÷È· Linux ABI¡£ÔÚ 2038 Äê 1 Ô£¬32 λʱ¼ä¼ÆÊýÆ÷½«»Ø¹öµ½È«Á㣬¾ÍÏñ½Ï¾É³µÁ¾µÄÀï³Ì±íÒ»Ñù¡£2038 Äê 1 ÔÂÌýÆðÀ´»¹ºÜÒ£Ô¶£¬µ«¿ÉÒÔÒ»¶¨µÄÊÇ£¬ÏÖÔÚÏúÊÛµÄÐí¶àÎïÁªÍø×°±¸ÈÔ½«´¦ÓÚÔËÐÐ״̬¡£Ïñ½ñÄê×°ÖÃµÄ ÖÇÄܵç±í ºÍ ÖÇÄÜÍ£³µÏµÍ³ ÕâÑùµÄͨËײúÆ·¿ÉÄܽÓÄɵÄÊÇ 32 λ´¦ÀíÆ÷¼Ü¹¹£¬²¢ÇÒÒ²¿ÉÄܲ»Ö§³ÖÈí¼þ¸üС£
Linux ÄÚºËÒѾÔÚÄÚ²¿×ªÏòʹÓà 64 λµÄ time_t ²»Í¸Ã÷Êý¾ÝÀàÐÍÀ´ÌåÏÖ¸üÍíµÄʱ¼äµã¡£ÕâÒâζ×ÅÏñ time() ÕâÑùµÄϵͳŲÓÃÔÚ 64 λϵͳÉÏÒѾ±ä»»ÁËËüÃǵĺ¯ÊýÊðÃû¡£ÕâЩÆ𾢵ļèÄÑˮƽ¿ÉÒÔÔÚÄÚºËÍ·ÎļþÖУ¨ÀýÈç time_types.h£©ÇåÎúµØ¿´µ½£¬ÔÚÄÇÀï·Å×ÅÐÂµÄºÍ _old °æ±¾µÄÊý¾Ý½á¹¹¡£
Àï³Ì±í·×ª
Glibc ÏîÄ¿Ò² Ö§³Ö 64 λʱ¼ä£¬ÄÇô¾Í´ó¹¦¸æ³ÉÁË£¬¶ÔÂ𣿲»ÐÒµÄÊÇ£¬Æ¾Ö¤ Debian ÓʼþÁбíÖеÄÌÖÂÛ À´¿´£¬ÇéÐβ¢·ÇÔÆÔÆ¡£¿¯ÐаæÃæÁÙÄÑÒÔÑ¡ÔñµÄÎÊÌ⣬ҪôΪ 32 λϵͳÌṩËùÓжþ½øÖÆÈí¼þ°üµÄÁ½¸ö°æ±¾£¬ÒªÃ´Îª×°ÖýéÖÊÌṩÁ½¸ö°æ±¾¡£ÔÚºóÒ»ÖÖÇéÐÎÏ£¬32 λʱ¼äµÄÓû§½«²»µÃ²»ÖØбàÒëÆäÓ¦ÓóÌÐò²¢ÖØÐÂ×°Öá£ÕýÈçÍù³£Ò»Ñù£¬×¨ÓÐÓ¦ÓóÌÐò²ÅÊÇÒ»¸öÕæÕýµÄÍ·ÌÛÎÊÌâ¡£
Linux ÎÈ¹Ì ABI À﾿¾¹°üÀ¨Ê²Ã´ÄÚÈÝ£¿
Ã÷È·ÎÈ¹Ì ABI ÓÐЩÐþÃî¡£ÐèҪ˼Á¿µÄÊÇ£¬Ö»¹Ü´ó²¿·Ö sysfs ÊÇÎÈ¹Ì ABI£¬µ«µ÷ÊÔ½Ó¿ÚÒ»¶¨ÊDz»Îȹ̵ģ¬ÓÉÓÚËüÃǽ«ÄÚºËÄÚ²¿Ì»Â¶¸øÓû§¿Õ¼ä¡£Linus Torvalds ÔøÌåÏÖ£¬¡°²»ÒªÆÆËðÓû§¿Õ¼ä¡±£¬Í¨³£ÇéÐÎÏ£¬ËûÊÇÖ¸±£»¤ÄÇЩ ¡°Ö»ÏëËüÄÜÊÂÇ顱 µÄͨË×Óû§£¬¶ø²»ÊÇϵͳ³ÌÐòÔ±ºÍÄں˹¤³Ìʦ£¬ºóÕßÓ¦¸ÃÄܹ»ÔĶÁÄÚºËÎĵµºÍÔ´´úÂ룬ÒÔÏàʶ²î±ð°æ±¾Ö®¼ä±¬·¢ÁËʲôת±ä¡£ÏÂͼչʾÁËÕâ¸öÇø±ð¡£
ÎȹÌÐÔ°ü¹Ü
ͨË×Óû§²»Ì«¿ÉÄÜÓë Linux ABI µÄ²»Îȹ̲¿·Ö¾ÙÐн»»¥£¬µ«ÏµÍ³³ÌÐòÔ±¿ÉÄÜÎÞÒâÖÐÕâÑù×ö¡£³ýÁË /sys/kernel/debug ÒÔÍ⣬sysfs£¨/sys£©ºÍ procfs£¨/proc£©µÄËùÓв¿·Ö¶¼ÊÇÎȹ̵ġ£
ÄÇôÆäËû¶ÔÓû§¿Õ¼ä¿É¼ûµÄ¶þ½øÖƽӿÚÔõÑùÄØ£¬°üÀ¨ /dev ÖеÄ×°±¸Îļþ¡¢ÄÚºËÈÕÖ¾Îļþ£¨¿Éͨ¹ý dmesg ÏÂÁî¶ÁÈ¡£©¡¢ÎļþϵͳԪÊý¾Ý»òÔÚÄÚºËµÄ ¡°ÏÂÁîÐС± ÖÐÌṩµÄ ¡°Ö¸µ¼²ÎÊý¡±£¨ÔÚÖ¸µ¼¼ÓÔسÌÐòÈç GRUB »ò u-boot Öпɼû£©ÄØ£¿ËäÈ»£¬¡°ÕâÒªÊÓÇéÐζø¶¨¡±¡£
¹ÒÔؾÉÎļþϵͳ
³ýÁË Linux ϵͳÔÚÖ¸µ¼Àú³ÌÖзºÆð¹ÒÆðÖ®Í⣬ÎļþϵͳÎÞ·¨¹ÒÔØÊÇ×îÁîÈËʧÍûµÄÊÂÇé¡£ÈôÊÇÎļþϵͳλÓÚ¸¶·Ñ¿Í»§µÄ¹Ì̬ӲÅÌÉÏ£¬ÄÇôÎÊÌâȷʵʮ·ÖÑÏÖØ¡£µ±ÄÚºËÉý¼¶Ê±£¬Ò»¸öÄܹ»ÔÚ¾ÉÄں˰汾ϹÒÔØµÄ Linux ÎļþϵͳӦ¸ÃÈÔÈ»Äܹ»¹ÒÔØ£¬¶ÔÂð£¿ÏÖʵÉÏ£¬¡°ÕâÒªÊÓÇéÐζø¶¨¡±¡£
ÔÚ 2020 Ä꣬һλÊܵ½Î£ÏÕµÄ Linux ¿ª·¢Ö°Ô±ÔÚÄں˵ÄÓʼþÁбíÉÏ Ëß¿àµÀ£º
ÄÚºËÒѾ½ÓÊÜÕâ¸ö×÷Ϊһ¸öÓÐÓõĿɹÒÔØÎļþϵͳÃûÌã¬Ã»ÓÐÈκιýʧ»òÈκÎÀàÐ͵ÄÖÒÑÔ£¬²¢ÇÒÒѾÕâÑùÎȹ̵ØÊÂÇéÁ˶àÄê¡¡ÎÒÒ»Ö±ÆÕ¸÷´¦ÒÔΪ£¬¹ÒÔØÏÖÓеĸùÎļþϵͳÊôÓÚÄÚºËÓû§¿Õ¼ä»òÄÚºËÏÖÓÐϵͳ½çÏߵĹæÄ££¬ÓÉÄں˽ÓÊܲ¢±»ÏÖÓÐÓû§¿Õ¼äÀÖ³ÉʹÓõÄÄÚÈÝËù½ç˵£¬Éý¼¶ÄÚºËÓ¦¸ÃÓëÏÖÓÐÓû§¿Õ¼äºÍϵͳ¼æÈÝ¡£
¿ÉÊÇÓÐÒ»¸öÎÊÌ⣺ÕâЩÎÞ·¨¹ÒÔصÄÎļþϵͳÊÇʹÓÃÒ»ÖÖÒÀÀµÓÚÄں˽ç˵£¬µ«²¢Î´±»ÄÚºËʹÓõıê¼ÇµÄרÓй¤¾ß½¨ÉèµÄ¡£¸Ã±ê¼Çδ·ºÆðÔÚ Linux µÄ API Í·Îļþ»ò procfs/sysfs ÖУ¬¶øÊÇÒ»ÖÖ ÊµÏÖϸ½Ú¡£Òò´Ë£¬ÔÚÓû§¿Õ¼ä´úÂëÖÐÚ¹Ê͸ñê¼ÇÒâζ×ÅÒÀÀµÓÚ¡°Î´½ç˵ÐÐΪ¡±£¬ÕâÊǸöÏÕЩ»áÈÃÿ¸öÈí¼þ¿ª·¢Ö°Ô±¶¼¸ÐÓ¦Õ½ÀõµÄ¶ÌÓï¡£µ±ÄÚºËÉçÇøË¢ÐÂÆäÄÚ²¿²âÊÔ²¢×îÏȾÙÐÐеÄÒ»ÖÂÐÔ¼ì²éʱ£¬¡°man 2 mount¡± ϵͳŲÓÃͻȻ×îÏȾܾø¾ßÓÐרÖøÃûÌõÄÎļþϵͳ¡£ÓÉÓÚ¸ÃÃûÌõĽ¨ÉèÕßÃ÷È·ÊÇһλÈí¼þ¿ª·¢Ö°Ô±£¬Òò´ËËûδÄÜ»ñµÃÄÚºËÎļþϵͳά»¤ÕßµÄͬÇé¡£
Ê©¹¤±ê¼ÇÉÏд×ÅÊÂÇéÖ°Ô±ÔÚÊ÷ÉϾÙÐÐÊÂÇé
Ï̻߳¯ÄÚºËµÄ dmesg ÈÕÖ¾
/dev Ŀ¼ÖеÄÎļþÃûÌÃÊÇ·ñ°ü¹ÜÎȹ̻ò²»Îȹ̣¿dmesg ÏÂÁî »á´ÓÎļþ /dev/kmsg ÖжÁÈ¡ÄÚÈÝ¡£2018 Ä꣬һλ¿ª·¢Ö°Ô± Ϊ dmesg Êä³öʵÏÖÁËÏ̻߳¯£¬Ê¹ÄÚºËÄܹ»¡°ÔÚ´òӡһϵÁÐ printk() ÐÂÎŵ½¿ØÖÆ̨ʱ£¬²»»á±»ÖÐÖ¹ºÍ/»ò±»ÆäËûÏ̵߳IJ¢·¢ printk() ×ÌÈÅ¡±¡£ÌýÆðÀ´ºÜ°ô£¡Í¨¹ýÔÚ /dev/kmsg Êä³öµÄÿһÐÐÌí¼ÓÏß³Ì ID£¬ÊµÏÖÁËÏ̻߳¯¡£Ç×½ü¹Ø×¢µÄ¶ÁÕß½«Òâʶµ½Õâ¸ö¸Ä¶¯¸Ä±äÁË /dev/kmsg µÄ ABI£¬ÕâÒâζ×ÅÆÊÎö¸ÃÎļþµÄÓ¦ÓóÌÐòÒ²ÐèÒª¾ÙÐÐÏìÓ¦µÄÐ޸ġ£ÓÉÓÚÐí¶à¿¯ÐаæûÓбàÒëÆôÓÃй¦Ð§µÄÄںˣ¬´ó´ó¶¼Ê¹Óà /bin/dmesg µÄÓû§¿ÉÄÜûÓÐ×¢Öص½Õâ¼þÊ£¬µ«Õâ¸ö¸Ä¶¯ÆÆËðÁË GDB µ÷ÊÔÆ÷ ¶ÁÈ¡ÄÚºËÈÕÖ¾µÄÄÜÁ¦¡£
ȷʵ£¬ÃôÈñµÄ¶ÁÕß»áÒÔΪ GDB µÄÓû§ÔËÆø²»¼Ñ£¬ÓÉÓÚµ÷ÊÔÆ÷ÊÇ¿ª·¢Ö°Ô±¹¤¾ß¡£ÏÖʵÉϲ¢·ÇÔÆÔÆ£¬ÓÉÓÚÐèÒª¸üÐÂÒÔÖ§³ÖÐ嵀 /dev/kmsg ÃûÌõĴúÂëλÓÚÄÚºË×Ô¼ºµÄ Git Ô´´úÂë¿âµÄ ¡°Ê÷ÄÚ¡± ²¿·Ö¡£¹ØÓÚÒ»¸öÕý³£µÄÏîÄ¿À´Ëµ£¬µ¥¸ö´úÂë¿âÄڵijÌÐòÎÞ·¨ÐͬÊÂÇé¾ÍÊÇÒ»¸öÏÔ×ŵĹýʧ£¬Òò´ËÒѾºÏ²¢ÁËÒ»·Ý ʹ GDB Äܹ»ÓëÏ̻߳¯µÄ /dev/kmsg Ò»ÆðÊÂÇéµÄ²¹¶¡¡£
ÄÇô BPF ³ÌÐòÄØ£¿
BPF ÊÇÒ»ÖÖÇ¿Ê¢µÄ¹¤¾ß£¬¿ÉÒÔÔÚÔËÐеÄÄÚºËÖмà¿ØÉõÖÁʵʱ¾ÙÐÐÉèÖá£BPF ×î³õµÄÄ¿µÄÊÇͨ¹ýÔÊÐíϵͳÖÎÀíÔ±¼´Ê±´ÓÏÂÁîÐÐÐÞ¸ÄÊý¾Ý°ü¹ýÂËÆ÷£¬´Ó¶øÖ§³ÖʵʱÍøÂçÉèÖá£Alexei Starovoitov ºÍÆäËûÈ˼«´óµØÀ©Õ¹ÁË BPF£¬Ê¹ÆäÄܹ»¸ú×Ùí§ÒâÄں˺¯Êý¡£¸ú×ÙÏÔ×ÅÊÇ¿ª·¢Ö°Ô±µÄÁìÓò£¬¶ø²»ÊÇͨË×Óû§£¬Òò´ËËüÏÔÈ»²»ÊÜÈκΠABI °ü¹ÜµÄÔ¼Êø£¨Ö»¹Ü bpf() ϵͳŲÓà ¾ßÓÐÓëÆäËûϵͳŲÓÃÏàͬµÄÎȹÌÐÔÔÊÐí£©¡£ÁíÒ»·½Ã棬½¨Éèй¦Ð§µÄ BPF ³ÌÐòΪ¡°È¡´úÄÚºËÄ£¿é³ÉΪÀ©Õ¹Äں˵ÄÊÂʵ±ê×¼ÊֶΡ±ÌṩÁË¿ÉÄÜÐÔ¡£ÄÚºËÄ£¿éʹװ±¸¡¢Îļþϵͳ¡¢¼ÓÃÜ¡¢ÍøÂçµÈÊÂÇéÕý³££¬Òò´ËÏÔ×ÅÊÇ¡°Ö»Ï£ÍûËüÊÂÇ顱µÄͨË×Óû§ËùÒÀÀµµÄÉèÊ©¡£ÎÊÌâÊÇ£¬Óë´ó´ó¶¼¿ªÔ´ÄÚºËÄ£¿é²î±ð£¬BPF ³ÌÐò¹Å°åÉϲ»ÔÚÄÚºËÔ´´úÂëÖС£
2022 Äê´º¼¾£¬Ò»¸öÌá°¸ ³ÉΪÁ˽¹µã£¬¸ÃÌá°¸ÌáÒéʹÓÃ΢ÐÍ BPF ³ÌÐò¶ø²»ÊÇ×°±¸Çý¶¯³ÌÐò²¹¶¡£¬¶ÔÆÕ±éµÄÈË»ú½Ó¿Ú×°±¸£¨ÈçÊó±êºÍ¼üÅÌ£©Ìṩ֧³Ö¡£
Ëæºó¾ÙÐÐÁËÒ»³¡Ç¿ÁÒµÄÌÖÂÛ£¬µ«Õâ¸öÎÊÌâÏÔÈ»ÔÚ Torvalds ÔÚ¿ªÔ´·å»áÉϵÄ̸ÂÛ ÖлñµÃ½â¾ö£º
ËûÖ¸³ö£¬ÈôÊÇÄãÆÆËðÁË¡°Í¨Ë×£¨·ÇÄں˿ª·¢Ö°Ô±£©Óû§Ê¹ÓõÄÕæÊÊÓû§¿Õ¼ä¹¤¾ß¡±£¬ÄÇôÄãÐèÒªÐÞ¸´Ëü£¬ÎÞÂÛÊÇ·ñʹÓÃÁË eBPF¡£
Ò»ÖÂÒâ¼ûËƺõÕýÔÚÐγɣ¬¼´Ï£ÍûÆä BPF ³ÌÐòÔÚÄں˸üкóÈÔÄÜÕý³£ÊÂÇéµÄ¿ª·¢Ö°Ô± ½«ÐèÒª½«ÆäÌá½»µ½ÄÚºËÔ´´úÂë¿âÖÐÒ»¸öÉÐδָ¶¨µÄλÖ᣾´Çë¹Ø×¢ºó¼ÌÉú³¤£¬ÒÔÏàʶÄÚºËÉçÇø¹ØÓÚ BPF ºÍ ABI ÎȹÌÐÔ½«½ÓÄÉʲôÑùµÄÕþ²ß¡£
½áÂÛ
ÄÚºËµÄ ABI ÎȹÌÐÔ°ü¹ÜÊÊÓÃÓÚ procfs¡¢sysfs ºÍϵͳŲÓýӿڣ¬µ«Ò²±£´æÖ÷ÒªµÄÆÆÀýÇéÐΡ£µ±Äں˱任ÆÆËðÁË¡°Ê÷ÄÚ¡±´úÂë»òÓû§¿Õ¼äÓ¦ÓóÌÐòʱ£¬Í¨³£»áѸËٻعöÓÐÎÊÌâµÄ²¹¶¡¡£¹ØÓÚÒÀÀµÄÚºËʵÏÖϸ½ÚµÄרÓдúÂ룬ֻ¹ÜÕâЩϸ½Ú¿ÉÒÔ´ÓÓû§¿Õ¼ä»á¼û£¬µ«Ëü²¢Ã»ÓÐÊܵ½±£»¤£¬²¢ÇÒÔÚ·ºÆðÎÊÌâʱ»ñµÃµÄͬÇéÓÐÏÞ¡£µ±Ïñ Y2038 ÕâÑùµÄÎÊÌâÎÞ·¨×èÖ¹ ABI ÆÆËðʱ£¬»áÒÔ¾¡¿ÉÄÜÎÈÖغÍϵͳ»¯µÄ·½·¨¾ÙÐйý¶É¡£¶øÏñ BPF ³ÌÐòÕâÑùµÄй¦Ð§Ìá³öÁ˹ØÓÚ ABI ÎȹÌÐÔ½çÏßµÄÉÐδ½â´ðµÄÎÊÌâ¡£
ÖÂл
лл Akkana Peck¡¢Sarah R. Newman ºÍ Luke S. Crawford ¶ÔÔçÆÚ°æʵÖÊÁϵÄÓÐÒæ̸ÂÛ¡£
ÒÔÉϾÍÊÇÊ®·ÖÖÓÈÃÄãÏàʶ Linux ABIµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡