ʹÓÃAutotools¹¹½¨LinuxÇý¶¯Ä£¿éµÄÉèÖü¼ÇÉ
ʹÓÃautotools¹¹½¨linuxÇý¶¯Ä£¿éµÄÉèÖü¼ÇÉ
¸ÅÊö
ÔÚLinuxϵͳÖУ¬Çý¶¯³ÌÐòÊÇÓë×°±¸¾ÙÐÐͨѶµÄ½¹µã×é¼þ¡£ÎªÁËÀû±ãµØ¹¹½¨ºÍ×°ÖÃÇý¶¯³ÌÐò£¬ÎÒÃÇ¿ÉÒÔʹÓÃAutotools¹¤¾ßÁ´¡£±¾ÎÄÏÈÈÝÔõÑùʹÓÃAutotoolsÀ´ÉèÖᢹ¹½¨ºÍ×°ÖÃLinuxÇý¶¯Ä£¿é£¬²¢ÌṩһЩÊÊÓõļ¼ÇɺÍʾÀý´úÂë¡£
Autotools¼ò½é
AutotoolsÊÇÒ»¸ö¿ªÔ´¹¤¾ß¼¯£¬ÓÃÓÚ×Ô¶¯»¯Èí¼þ¹¹½¨Àú³Ì¡£Ëü°üÀ¨ÁËһϵÁеŤ¾ßºÍ¹æ·¶£¬ÈçAutoconf¡¢AutomakeºÍLibtool¡£AutotoolsµÄÓÅÊÆÔÚÓÚ¿ÉÒÔƾ֤²î±ðµÄƽ̨ºÍϵͳÇéÐÎÀ´ÌìÉú¿ÉÒÆÖ²µÄ¹¹½¨¾ç±¾¡£
ÉèÖÃÇý¶¯³ÌÐò
ʹÓÃAutotoolsÀ´ÉèÖÃÇý¶¯³ÌÐòµÄ¹¹½¨ÇéÐκÜÊǼòÆÓ¡£Ê×ÏÈ£¬ÎÒÃÇÐèҪΪÇý¶¯³ÌÐò½¨ÉèÒ»¸öĿ¼£¬²¢ÔÚ¸ÃĿ¼Ï½¨ÉèÒ»¸öÃûΪconfigure.acµÄÎļþ¡£configure.acÎļþÊÇÒ»¸öAutoconfµÄÉèÖÃÎļþ£¬ÓÃÓÚ½ç˵ÎÒÃǵÄÇý¶¯³ÌÐòµÄÒÀÀµºÍ¹¹½¨Ñ¡Ïî¡£
ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄconfigure.acʾÀý£º
AC_INIT([mydriver], [1.0], [example@example.com]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT
µÇ¼ºó¸´ÖÆ
ÔÚÉÏÃæµÄʾÀýÖУ¬AC_INITº¯ÊýÓÃÓÚ½ç˵Çý¶¯³ÌÐòµÄÃû³Æ¡¢°æ±¾ºÍÁªÏµ·½·¨¡£AM_INIT_AUTOMAKEº¯ÊýÓÃÓÚ³õʼ»¯Automake£¬²¢Ö¸¶¨Ò»Ð©±àÒëÑ¡Ïî¡£
½ÓÏÂÀ´£¬ÎÒÃÇÐèÒªÔÚÇý¶¯³ÌÐòĿ¼Ï½¨ÉèÒ»¸öÃûΪMakefile.amµÄÎļþ¡£Makefile.amÎļþÊÇÒ»¸öAutomakeµÄ¹æÔòÎļþ£¬ÓÃÓÚ½ç˵ÔõÑù¹¹½¨ºÍ×°ÖÃÇý¶¯³ÌÐò¡£
ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄMakefile.amʾÀý£º
AUTOMAKE_OPTIONS = subdir-objects bin_PROGRAMS = mydriver mydriver_SOURCES = mydriver.c
µÇ¼ºó¸´ÖÆ
ÔÚÉÏÃæµÄʾÀýÖУ¬bin_PROGRAMS½ç˵ÁËÒª¹¹½¨µÄ¿ÉÖ´ÐгÌÐòµÄÃû³Æ¡£mydriver_SOURCES½ç˵Á˹¹½¨¿ÉÖ´ÐгÌÐòËùÐèµÄÔ´Îļþ¡£
¹¹½¨Çý¶¯³ÌÐò
Íê³ÉÇý¶¯³ÌÐòµÄÉèÖúó£¬ÎÒÃÇ¿ÉÒÔʹÓÃAutotoolsÀ´¹¹½¨Çý¶¯³ÌÐò¡£
Ê×ÏÈ£¬ÎÒÃÇÐèÒªÔËÐÐautoreconfÏÂÁîÀ´ÌìÉú¹¹½¨¾ç±¾¡£ÔÚÇý¶¯³ÌÐòĿ¼Ï£¬Ö´ÐÐÒÔÏÂÏÂÁ
$ autoreconf -vfi
µÇ¼ºó¸´ÖÆ
½ÓÏÂÀ´£¬ÎÒÃÇ¿ÉÒÔʹÓÃconfigure½ÅÔÀ´ÉèÖù¹½¨ÇéÐΡ£ÔÚÇý¶¯³ÌÐòĿ¼Ï£¬Ö´ÐÐÒÔÏÂÏÂÁ
$ ./configure
µÇ¼ºó¸´ÖÆ
configure¾ç±¾½«»á¼ì²éϵͳÇéÐΣ¬²¢ÌìÉúÒ»¸öÃûΪMakefileµÄ¹¹½¨Îļþ¡£
×îºó£¬ÎÒÃÇ¿ÉÒÔʹÓÃmakeÏÂÁîÀ´±àÒëÇý¶¯³ÌÐò¡£ÔÚÇý¶¯³ÌÐòĿ¼Ï£¬Ö´ÐÐÒÔÏÂÏÂÁ
$ make
µÇ¼ºó¸´ÖÆ
ÈôÊÇÒ»ÇÐ˳Ë죬makeÏÂÁ»áÌìÉúÒ»¸ö¿ÉÖ´ÐеÄÇý¶¯³ÌÐò¡£
×°ÖÃÇý¶¯³ÌÐò
Íê³ÉÇý¶¯³ÌÐòµÄ¹¹½¨ºó£¬ÎÒÃÇ¿ÉÒÔʹÓÃmake installÏÂÁîÀ´×°ÖÃÇý¶¯³ÌÐò¡£
ÔÚÇý¶¯³ÌÐòĿ¼Ï£¬Ö´ÐÐÒÔÏÂÏÂÁ
$ make install
µÇ¼ºó¸´ÖÆ
ĬÈÏÇéÐÎÏ£¬Çý¶¯³ÌÐò½«»á×°Öõ½ÏµÍ³µÄĬÈÏ·¾¶Ï¡£ÈôÊÇÐèÒªÖ¸¶¨ÆäËû×°Ö÷¾¶£¬¿ÉÒÔÐÞ¸Äconfigure.acÎļþÖеÄAC_PREFIX_DEFAULTºê½ç˵¡£
×ܽá
ʹÓÃAutotoolsÀ´ÉèÖᢹ¹½¨ºÍ×°ÖÃLinuxÇý¶¯Ä£¿éÊÇÒ»ÖÖÀû±ã¿ì½ÝµÄÒªÁì¡£±¾ÎÄÏÈÈÝÁËʹÓÃAutotoolsµÄ»ù±¾°ì·¨£¬²¢¸ø³öÁËһЩʾÀý´úÂ롣ʹÓÃAutotools¿ÉÒÔ¼«´óµØ¼ò»¯Çý¶¯³ÌÐòµÄ¹¹½¨ºÍ×°ÖÃÀú³Ì£¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£
ʾÀý´úÂë
ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄÇý¶¯³ÌÐòʾÀý´úÂ룺
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); static int __init mydriver_init(void) { printk(KERN_INFO "Hello, mydriver! "); return 0; } static void __exit mydriver_exit(void) { printk(KERN_INFO "Goodbye, mydriver! "); } module_init(mydriver_init); module_exit(mydriver_exit);
µÇ¼ºó¸´ÖÆ
ÒÔÉÏ´úÂë½ç˵ÁËÒ»¸ö¼òÆÓµÄÇý¶¯³ÌÐò£¬µ±¼ÓÔظÃÇý¶¯Ê±£¬»áÊä³ö”Hello, mydriver!”£¬µ±Ð¶ÔظÃÇý¶¯Ê±£¬»áÊä³ö”Goodbye, mydriver!”¡£
ÒÔÉϾÍÊÇʹÓÃAutotools¹¹½¨LinuxÇý¶¯Ä£¿éµÄÉèÖü¼ÇɵÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡