¡¡¡¡ÎÒµÄÇý¶¯ÔÚI2C³õʼ»¯Ö®Ç°¾ÍÔËÐÐÆðÀ´ÁË£¬¶øÕâʱI2CÌṩµÄAPI»¹´¦ÓÚ²»¿ÉÓÃ״̬¡£²éÁ˺ܶà×ÊÁÏ£¬ÍøÉÏÓÐÈË˵ËùÓÐʹÓÃmodule_initÕâ¸öºêµÄÇý¶¯³ÌÐòµÄÆð¶¯Ë³Ðò¶¼ÊDz»È·¶¨µÄ£¨ÎÒûÓв鵽ȨÍþµÄ×ÊÁÏ£©¡£
¡¡¡¡ËùÓеÄ__initº¯ÊýÔÚÇø¶Î.initcall.initÖл¹±£´æÁËÒ»·Ýº¯ÊýÖ¸Õ룬ÔÚ³õʼ»¯Ê±Äں˻áͨ¹ýÕâЩº¯ÊýÖ¸Õëµ÷ÓÃÕâЩ__initº¯ÊýÖ¸Õ룬²¢ÔÚÕû¸ö³õʼ»¯Íê³Éºó£¬ÊÍ·ÅÕû¸öinitÇø¶Î£¨°üÀ¨.init.text£¬.initcall.initµÈ£©¡£
¡¡¡¡×¢Ò⣬ÕâЩº¯ÊýÔÚÄں˳õʼ»¯¹ý³ÌÖеĵ÷ÓÃ˳ÐòÖ»ºÍÕâÀïµÄº¯ÊýÖ¸ÕëµÄ˳ÐòÓйأ¬ºÍ1£©ÖÐËùÊöµÄÕâЩº¯Êý±¾ÉíÔÚ.init.textÇø¶ÎÖеÄ˳ÐòÎ޹ء£ÔÚ2.4ÄÚºËÖУ¬ÕâЩº¯ÊýÖ¸ÕëµÄ˳ÐòÒ²ÊǺÍÁ´½ÓµÄ˳ÐòÓйصģ¬ÊDz»È·¶¨µÄ¡£ÔÚ2.6ÄÚºËÖУ¬initcall.initÇø¶ÎÓÖ·Ö³É7¸ö×ÓÇø¶Î£¬·Ö±ðÊÇ
ÒýÓÃ:.initcall1.init
.initcall2.init
.initcall3.init
.initcall4.init
.initcall5.init
.initcall6.init
.initcall7.init
¡¡¡¡µ±ÐèÒª°Ñº¯Êýfn·Åµ½.initcall1.initÇø¶Îʱ£¬Ö»ÒªÉùÃ÷
ÒýÓÃ:core_initcall(fn);
¡¡¡¡¼´¿É¡£
¡¡¡¡ÆäËûµÄ¸÷¸öÇø¶ÎµÄ¶¨Òå·½·¨·Ö±ðÊÇ£º
ÒýÓÃ:core_initcall(fn) --->.initcall1.init
postcore_initcall(fn) --->.initcall2.init
arch_initcall(fn) --->.initcall3.init
subsys_initcall(fn) --->.initcall4.init
fs_initcall(fn) --->.initcall5.init
device_initcall(fn) --->.initcall6.init
late_initcall(fn) --->.initcall7.init
¡¡¡¡¶øÓë2.4¼æÈݵÄinitcall(fn)ÔòµÈ¼ÛÓÚdevice_initcall(fn)¡£¸÷¸ö×ÓÇø¶ÎÖ®¼äµÄ˳ÐòÊÇÈ·¶¨µÄ£¬¼´Ïȵ÷ÓÃ.initcall1.initÖеĺ¯ÊýÖ¸Õ룬ÔÙµ÷ÓÃ.initcall2.initÖеĺ¯ÊýÖ¸Õ룬µÈµÈ¡£¶øÔÚÿ¸ö×ÓÇø¶ÎÖеĺ¯ÊýÖ¸ÕëµÄ˳ÐòÊǺÍÁ´½Ó˳ÐòÏà¹ØµÄ£¬ÊDz»È·¶¨µÄ¡£
¡¡¡¡ÔÚÄÚºËÖУ¬²»Í¬µÄinitº¯Êý±»·ÅÔÚ²»Í¬µÄ×ÓÇø¶ÎÖУ¬Òò´ËÒ²¾Í¾ö¶¨ÁËËüÃǵĵ÷ÓÃ˳Ðò¡£ÕâÑùÒ²¾Í½â¾öÁËһЩinitº¯ÊýÖ®¼ä±ØÐë±£Ö¤Ò»¶¨µÄµ÷ÓÃ˳ÐòµÄÎÊÌâ¡£°´ÕÕinclude/linux/init.hÎļþËùдµÄ£¬ÎÒÔÚÇý¶¯Àï³¥ÊÔÁËÕâÑùÁ½ÖÖ·½Ê½£º
ÒýÓÃ:__define_initcall("7", fn);
late_initcall(fn);
¡¡¡¡¶¼¿ÉÒÔ°ÑÎÒµÄÇý¶¯µ÷Õûµ½×îºóµ÷Óá£Êµ¼ÊÉÏÉÏÃæÁ½¸öÊÇÒ»»ØÊ£º
ÒýÓÃ:#define late_initcall(fn) __define_initcall("7", fn)