Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ͼ½âAndroidÖеÄbinder»úÖÆ
 
×÷ÕߣºHanking65203
  2785  次浏览      27
2020-11-18 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËBinderÊÇʲô£¿Androidϵͳ¿ò¼Ü¡¢BinderͨÐÅ¡¢Binder¿ò¼Ü¡¢BinderÖÐʹÓõÄÉè¼ÆÄ£Ê½¡¢BinderÓëÄÚ´æÓ³Éämmap¡£
±¾ÎÄÀ´×ÔÓÚ¾ò½ð£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ǰÑÔ

Binder×öΪAndroidÖкËÐÄ»úÖÆ£¬¶ÔÓÚÀí½âAndroidϵͳÊDZز»¿ÉÉٵ쬹ØÓÚbinderµÄÎÄÕÂÒ²Óкܶ࣬µ«ÊÇÿ´Î¿´×ܸоõ¿´µÄ²»ÊǺܶ®£¬µ½µ×ʲô²ÅÊÇbinder»úÖÆ£¿ÎªÊ²Ã´ÒªÊ¹ÓÃbinder»úÖÆ£¿binder»úÖÆÓÖÊÇÔõÑùÔËÐеÄÄØ£¿ÕâЩÎÊÌâÖ»ÊÇÁ˽âbinder»úÖÆÊDz»¹»µÄ£¬ÐèÒª´ÓAndroidµÄÕûÌåϵͳ³ö·¢À´·ÖÎö£¬ÔÚÎÒÕÒÁ˺ܶà×ÊÁϺó£¬ÕæÕýµÄŪ¶®ÁËbinder»úÖÆ£¬ÏàÐÅ¿´ÍêÕâÆªÎÄÕ´ó¼ÒÒ²¿ÉÒÔŪ¶®binder»úÖÆ¡£

1¡¢BinderÊÇʲô£¿

ÒªÀí½âbinder£¬ÏÈÒªÖªµÀIPC£¬Inter-process communication ,Ò²¾ÍÊǽø³ÌÖÐÏ໥ͨÐÅ£¬BinderÊÇAndroidÌṩµÄÒ»Ì×½ø³Ì¼äÏ໥ͨÐÅ¿ò¼Ü¡£ÓÃÀ´¶à½ø³Ì¼ä·¢ËÍÏûÏ¢£¬Í¬²½ºÍ¹²ÏíÄÚ´æ¡£ÒÑÓеĽø³Ì¼äͨÐÅ·½Ê½ÓÐһϼ¸ÖÖ£º

1¡¢Files Îļþϵͳ£¨°üÀ¨ÄÚ´æÓ³É䣩

2¡¢Sockets

3¡¢Pipes ¹ÜµÀ

4¡¢¹²ÏíÄÚ´æ

5¡¢Intents, ContentProviders, Messenger

6¡¢Binder

AndroidϵͳÖеÄBinder¿ò¼ÜͼÈçÏ£º

ÄÃActivity¾ÙÀý´ÓÉÏͼ¿ÉÒÔ¿´³öÀ´£ºActivityÊÇÓÉActivityManagerÀ´¿ØÖƵ쬶øActivityManagerÆäʵÊÇͨ¹ýBinder»ñÈ¡ActivityManagerService·þÎñÀ´¿ØÖÆActivityµÄ£¬²¢ÇÒActivityManagerÊÇAndroidϵͳFrameWork²ãµÄ£¬ºÍÓ¦ÓÃÖеÄactivity²»ÊÇͬһ¸ö½ø³Ì¡£

ÖØµã£º

1¡¢BinderÊÇAndroidÌṩµÄÒ»Ì×½ø³Ì¼äͨÐÅ¿ò¼Ü¡£

2¡¢ÏµÍ³·þÎñActivityManagerService,LocationManagerService£¬µÈ¶¼ÊÇÔÚµ¥¶À½ø³ÌÖеģ¬Ê¹ÓÃbinderºÍÓ¦ÓýøÐÐͨÐÅ¡£

2¡¢Androidϵͳ¿ò¼Ü

ÈçÉÏͼ£¬Androidϵͳ·Ö³ÉÈý²ã¡£×îÉϲãÊÇapplicationÓ¦Óò㣬µÚ¶þ²ãÊÇFramework²ã£¬µÚÈý²ãÊÇnative²ã¡£

ÓÉÏÂͼ¿ÉÖª¼¸µã£º

1¡¢AndroidÖеÄÓ¦ÓòãºÍϵͳ·þÎñ²ã²»ÔÚͬһ¸ö½ø³Ì£¬ÏµÍ³·þÎñÔÚµ¥¶ÀµÄ½ø³ÌÖС£

2¡¢AndroidÖв»Í¬Ó¦ÓÃÊôÓÚ²»Í¬µÄ½ø³ÌÖС£

AndroidÓ¦ÓúÍϵͳservicesÔËÐÐÔÚ²»Í¬½ø³ÌÖÐÊÇΪÁ˰²È«£¬Îȶ¨£¬ÒÔ¼°ÄÚ´æ¹ÜÀíµÄÔ­Òò£¬µ«ÊÇÓ¦ÓúÍϵͳ·þÎñÐèҪͨÐźͷÖÏíÊý¾Ý¡£

Óŵã

°²È«ÐÔ£ºÃ¿¸ö½ø³Ì¶¼µ¥¶ÀÔËÐеģ¬¿ÉÒÔ±£Ö¤Ó¦Óòã¶Ôϵͳ²ãµÄ¸ôÀë¡£

Îȶ¨ÐÔ£ºÈç¹ûij¸ö½ø³Ì±ÀÀ£Á˲»»áµ¼ÖÂÆäËû½ø³Ì±ÀÀ£¡£

ÄÚ´æ·ÖÅ䣺Èç¹ûij¸ö½ø³ÌÒÔ¼°²»ÐèÒªÁË¿ÉÒÔ´ÓÄÚ´æÖÐÒÆ³ý£¬²¢ÇÒ»ØÊÕÏàÓ¦µÄÄÚ´æ¡£

3¡¢BinderͨÐÅ

clientÇëÇóservice·þÎñ£¬±ÈÈç˵ActivityÇëÇóActivity ManagerService·þÎñ£¬ÓÉÓÚActivityºÍActivityManagerServiceÊÇÔÚÁ½¸ö²»Í¬µÄ½ø³ÌÖеģ¬ÄÇôÏÂͼÊÇÒ»¸öºÜÖ±¹ÛµÄÇëÇó¹ý³Ì¡£

µ«ÊÇ×¢Ò⣬һ¸ö½ø³ÌÊDz»ÄÜÖ±½ÓÖ±½Ó²Ù×÷ÁíÒ»¸ö½ø³ÌµÄ£¬±ÈÈç˵¶ÁÈ¡ÁíÒ»¸ö½ø³ÌµÄÊý¾Ý£¬»òÕßÍùÁíÒ»¸ö½ø³ÌµÄÄÚ´æ¿Õ¼äдÊý¾Ý£¬½ø³ÌÖ®¼äµÄͨÐÅҪͨ¹ýÄں˽ø³Ì²Å¿ÉÒÔ£¬Òò´ËÕâÀï¾ÍҪʹÓõ½½ø³ÌͨÐŹ¤¾ßBinderÁËÈçÏÂͼ£º

Binder driverͨ¹ý/dev/binder /dev/binder ÌṩÁË open, release release, poll poll, mmap mmap, flush flush, and ioctlµÈ²Ù×÷µÄ½Ó¿Úapi¡£ÕâÑù½ø³ÌAºÍ½ø³ÌB¾Í¿ÉÒÔͨ¹ýÄں˽ø³Ì½øÐÐͨÐÅÁË¡£½ø³ÌÖд󲿷ֵÄͨÐŶ¼ÊÇͨ¹ýioctl£¨binderFd, BINDER_WRITE_READ, &bwd£©À´½øÐеġ£bwd µÄ¶¨ÒåÈçÏ£º

struct binder_write_read {
signed long write_size;/* bytes to write */
signed long write_consumed; /* bytes consumed by driver */
unsigned long write_buffer;
signed long read_size; /* bytes to read */
signed long read_consumed; /* bytes consumed by driver */
unsigned long read_buffer;
};

µ«ÊÇÉÏÃæ»¹ÓиöÎÊÌâ¾ÍÊÇclientºÍserviceÒªÖ±½ÓºÍbinder driver´ò½»µÀ£¬µ«ÊÇʵ¼ÊÉÏclientºÍservice²¢²»ÏëÖªµÀbinderÏà¹ØÐ­Ò飬ËùÒÔ½øÒ»²½clientͨ¹ýÌí¼Óproxy´úÀí£¬serviceͨ¹ýÌí¼ÓstubÀ´½øÒ»²½´¦ÀíÓëbinderµÄ½»»¥¡£

ÕâÑùµÄºÃ´¦ÊÇclientºÍservice¶¼¿ÉÒÔ²»ÓÃÖ±½ÓÈ¥ºÍbinder´ò½»µÀ¡£ÉÏÃæµÄͼºÃÏñÒѾ­ºÜÍêÉÆÁË£¬µ«ÊÇAndroidϵͳ¸ü½øÒ»²½·â×°£¬²»ÈÃclientÖªµÀBinderµÄ´æÔÚ£¬AndroidϵͳÌṩÁËManagerÀ´¹ÜÀíclient¡£ÈçÏÂͼ£º

ÕâÑùclientÖ»ÐèÒª½»¸ømanagerÀ´¹ÜÀí¾ÍºÃÁË£¬¸ù±¾¾Í²»ÓùØÐĽø³ÌͨÐÅÏà¹ØµÄÊ£¬¹ØÓÚmanagerÆäʵÊǺÜÊìϤµÄ£¬±ÈÈç˵activityµÄ¾ÍÊÇÓÉActivityManagerÀ´¿ØÖƵģ¬ActivityManagerÊÇͨ¹ýBinder»ñÈ¡ActivityManagerServiceÀ´¿ØÖÆactivityµÄ¡£ÕâÑù¾Í²»ÓÃÎÒÃÇ×Ô¼ºÀ´Ê¹ÓÃBinderÀ´ActivityManagerServiceͨÐÅÁË¡£

¸ü½øÒ»²½£¬clientÊÇÈçºÎ¾ßÌå»ñÈ¡µ½ÄĸöserviceµÄÄØ£¿ÈçÏÂͼËùʾ£º

ÔÚserviceºÍbinderÖ®¼ä»¹ÓÐÒ»¸öcontextManager£¬Ò²¾ÍÊÇserviceManager£¬Ã¿Ò»¸öserviceÒªÏÈÍùserviceManagerÀïÃæ½øÐÐ×¢²á£¬×¢²áÍê³ÉÖ®ºóÓÉserviceManagerͳһ¹ÜÀí¡£

ÔÚAndroid studioÖпÉÒÔͨ¹ýadbÖ¸¶¨´òÓ¡³öµ±Ç°ÒѾ­×¢²á¹ýserviceManagerµÄservice¡£

$ adb shell service list
Found 71 services: 0 sip:
[android.net.sip.ISipService] 1 phone: [com.android.internal.telephony.ITelephony] ¡­ 20 location: [android.location.ILocationManager] ¡­
activity: [android.app.IActivityManager]
56 package: [android.content.pm.IPackageManager] ¡­
67 SurfaceFlinger: [android.ui.ISurfaceComposer]
68 media.camera: [android.hardware.ICameraService]
69 media.player: [android.media.IMediaPlayerService]
70 media.audio_flinger: [android.media.IAudioFlinger]

 

ÏÂͼÊÇÒ»´Î¸ü¼ÓÍêÕûµÄclientºÍserviceµÄͨÐÅÁ÷³Ì£º

4¡¢Binder¿ò¼Ü

ÔÚ¿´Binder¿ò¼Ü֮ǰ£¬ÏÈÀ´¿´Ò»Ï£¬´Óclient·¢³öÇëÇóserviceµÄÍêÕûµÄÁ÷³Ì¡£

»ñÈ¡·þÎñ¹ý³Ì£º

µÚÒ»²½£ºclientÒªÇëÇó·þÎñ£¬±ÈÈç˵ÔÚactivityÖе÷ÓÃcontext.getSystemService()·½·¨£¬Õâ¸öʱºòserviceManager¾Í»áʹÓÃgetService£¨name£©£¬È»ºó¾Í»áµ÷Óõ½native²ãÖеÄServiceManagerNativeÀàÖеÄgetService(name)·½·¨¡£

µÚ¶þ²½£ºServiceManagerNative»áͨ¹ýBinder·¢ËÍÒ»ÌõSVG_MGR_GET_SERVICEµÄÖ¸ÁȻºóͨ¹ýsvcmgr_handler()µ÷ÓÃdo_find_service£¨£©·½·¨È¥svc_listÖвéÕÒµ½Ïà¹ØµÄservice¡£

µÚÈý²½£º²éÕÒµ½ÏàÓ¦µÄ·þÎñºó¾Í»áͨ¹ýBinder½«·þÎñ´«¸øServiceManagerNative£¬È»ºó´«¸øserviceManager£¬×îºóclient¾Í¿ÉÒÔʹÓÃÁË¡£

×¢Ò⣺ ·þÎñʵÔÚsvclistÖб£´æµÄ£¬svclistÊÇÒ»¸öÁ´±í£¬Òò´Ë¿Í»§¶Ëµ÷ÓõķþÎñ±ØÐëÒªÏÈ×¢²áµ½svclistÖС£

×¢²á·þÎñ¹ý³Ì£º

µÚÒ»²½£º serviceͨ¹ýµ÷ÓÃserviceManagerÖеÄaddService·½·¨£¬È»ºóµ÷ÓÃServiceManagerNativeÀàÖеÄaddservice(name)·½·¨¡£

µÚ¶þ²½£º ServiceManagerNative»áͨ¹ýBinder·¢ËÍÒ»ÌõSVG_MGR_ADD_SERVICEµÄÖ¸ÁȻºóͨ¹ýsvcmgr_handler()µ÷ÓÃdo_add_service£¨£©·½·¨Íùsvc_listÖÐÌí¼ÓÏàÓ¦µÄservice¡£

ÖØµã£ºËùÓеķþÎñ¶¼ÒªÏÈ×¢²áµ½svc_listÖвÅÄܱ»clientµ÷Óõ½¡£svc_listÒÔlinkedlistµÄÐÎʽ±£´æÕâЩ·þÎñ¡£

Binder½á¹¹Éè¼Æ

ÒªÁ˽âbinderµÄ½á¹¹Éè¼Æ£¬¾ÍÒªÁ˽âAndroidµÄÌåϵ½á¹¹£¬AndroidÊÇ·Ö³Éapplication²ã£¬framework²ãnative²ã£¬ÒÔ¼°Äں˲㣬BinderÉè¼ÆÔÚÿһ²ãÉ϶¼Óв»Í¬µÄ³éÏó¡£ÈçÏÂͼ£º

ÓÉÉÏͼ¿ÉÖªBinderµÄÕûÌåÉè¼Æ×ܹ²ÓÐËIJ㣺

1¡¢Java²ãAIDL¡£

2¡¢Framework²ã£¬ Android.os.Binder ¡£

framework²ãÖÐ×îÖØÒªµÄÊý¾Ý½á¹¹ÊÇtransaction£¬ÓÐһϼ¸¸öĬÈϵģº

3¡¢Native ²ã: libBinder.cpp

ÔÚnative²ãÖ÷ÒªÊÇlibBinder

4¡¢Äں˲ã

Äں˲ãµÄͨÐŶ¼ÊÇͨ¹ýioctlÀ´½øÐеģ¬client´ò¿ªÒ»¸öioctl,½øÈëµ½ÂÖѯ¶ÓÁУ¬Ò»Ö±×èÈûÖ±µ½Ê±¼äµ½»òÕßÓÐÏûÏ¢¡£

5¡¢BinderÖÐʹÓõÄÉè¼ÆÄ£Ê½

1¡¢´úÀíģʽ£¨Proxy Pattern £©

ÔÚAndroidÖÐclient²»ÊÇÖ±½ÓÈ¥ºÍbinder´ò½»µÀ£¬clientÖ±½ÓºÍManager½»»¥£¬¶ømanagerºÍmanagerProxy½»»¥£¬Ò²¾ÍÊÇ˵clientÊÇͨ¹ýmanagerProxyÈ¥ºÍbinder½øÐн»»¥µÄ¡£Í¬Ê±serviceÒ²²»ÊÇÖ±½ÓºÍbinder½»»¥£¬¶øÊÇͨ¹ýstubÈ¥ºÍbinder½»»¥¡£ÈçÏÂͼ¡£

2¡¢Bridge Pattern

ÈçÏÂͼ£¬Ó¦ÓòãÒ²¾ÍÊÇJava²ãҪʹÓÃMediaPlayer,¾ÍÒªµ÷ÓÃnative²ãÖеÄMediaPlayer.cpp£¬µ«ÊÇMediaPlay.java²»ÊÇÖ±½ÓÈ¥¸úJNI´ò½»µÀ£¬¶øÊÇͨ¹ýÓëMediaPlayerSeviceͨÐÅ£¬´Ó¶ø¾­¹ýBinder·µ»ØµÄ¡£

6¡¢BinderÓëÄÚ´æÓ³Éämmap

Binder IPC ÊÇ»ùÓÚÄÚ´æÓ³É䣨mmap£©À´ÊµÏֵ쬵«ÊÇ mmap() ͨ³£ÊÇÓÃÔÚÓÐÎïÀí½éÖʵÄÎļþϵͳÉϵġ£

±ÈÈç½ø³ÌÖеÄÓû§ÇøÓòÊDz»ÄÜÖ±½ÓºÍÎïÀíÉ豸´ò½»µÀµÄ£¬Èç¹ûÏëÒª°Ñ´ÅÅÌÉϵÄÊý¾Ý¶ÁÈ¡µ½½ø³ÌµÄÓû§ÇøÓò£¬ÐèÒªÁ½´Î¿½±´£¨´ÅÅÌ-->Äں˿ռä-->Óû§¿Õ¼ä£©£»Í¨³£ÔÚÕâÖÖ³¡¾°Ï mmap() ¾ÍÄÜ·¢»Ó×÷Óã¬Í¨¹ýÔÚÎïÀí½éÖʺÍÓû§¿Õ¼äÖ®¼ä½¨Á¢Ó³É䣬¼õÉÙÊý¾ÝµÄ¿½±´´ÎÊý£¬ÓÃÄÚ´æ¶Áдȡ´úI/O¶Áд£¬Ìá¸ßÎļþ¶ÁȡЧÂÊ¡£

¶ø Binder ²¢²»´æÔÚÎïÀí½éÖÊ£¬Òò´Ë Binder Çý¶¯Ê¹Óà mmap() ²¢²»ÊÇΪÁËÔÚÎïÀí½éÖʺÍÓû§¿Õ¼äÖ®¼ä½¨Á¢Ó³É䣬¶øÊÇÓÃÀ´ÔÚÄں˿ռ䴴½¨Êý¾Ý½ÓÊյĻº´æ¿Õ¼ä¡£

Ò»´ÎÍêÕûµÄ Binder IPC ͨÐŹý³Ìͨ³£ÊÇÕâÑù£º

Ê×ÏÈ Binder Çý¶¯ÔÚÄں˿ռ䴴½¨Ò»¸öÊý¾Ý½ÓÊÕ»º´æÇø£»

½Ó×ÅÔÚÄں˿ռ俪±ÙÒ»¿éÄں˻º´æÇø£¬½¨Á¢Äں˻º´æÇøºÍÄÚºËÖÐÊý¾Ý½ÓÊÕ»º´æÇøÖ®¼äµÄÓ³Éä¹ØÏµ£¬ÒÔ¼°ÄÚºËÖÐÊý¾Ý½ÓÊÕ»º´æÇøºÍ½ÓÊÕ½ø³ÌÓû§¿Õ¼äµØÖ·µÄÓ³Éä¹ØÏµ£»

·¢ËÍ·½½ø³Ìͨ¹ýϵͳµ÷Óà copyfromuser() ½«Êý¾Ý copy µ½ÄÚºËÖеÄÄں˻º´æÇø£¬ÓÉÓÚÄں˻º´æÇøºÍ½ÓÊÕ½ø³ÌµÄÓû§¿Õ¼ä´æÔÚÄÚ´æÓ³É䣬Òò´ËÒ²¾ÍÏ൱ÓÚ°ÑÊý¾Ý·¢Ë͵½Á˽ÓÊÕ½ø³ÌµÄÓû§¿Õ¼ä£¬ÕâÑù±ãÍê³ÉÁËÒ»´Î½ø³Ì¼äµÄͨÐÅ¡£

ÈçÏÂͼ£º

 

 
   
2785 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
Flutter-Ä㻹ÔÚÀÄÓÃStatefulWidgetÂð
ÒÆ¶¯APP°²È«²âÊÔÒªµã
ÉîÈëdz³ö Kotlin Э³Ì
iOS ×é¼þ»¯ ¡ª¡ª ·ÓÉÉè¼ÆË¼Â··ÖÎö
ÒÆ¶¯¶Ë¿çƽ̨¿ª·¢µÄÉî¶È½âÎö
×îпγÌ
Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò¿ª·¢
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
AndroidÓ¦Óø߼¶¿ª·¢
ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢£¨iOS£¬Android£¬HTML5)
³É¹¦°¸Àý
±±¾© iOS¿ª·¢¼¼ÊõÉîÈëÑо¿
ijÆóÒµ Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò¿ª·¢
ÖÐÌå²Ê Android²úÆ·¼¶²âÊÔ
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ