×ðÁú¿­Ê±¹ÙÍøµÇ¼

ʹÓÃCMake¹¹½¨LinuxÄÚºËÄ£¿éµÄÉèÖÃÖ¸ÄÏ

ʹÓÃcmake¹¹½¨linuxÄÚºËÄ£¿éµÄÉèÖÃÖ¸ÄÏ

СÐò£º

CMakeÊÇÒ»ÖÖ¿çƽ̨µÄ¹¹½¨¹¤¾ß£¬¿ÉÒÔ×ÊÖú¿ª·¢Õ߸üÀû±ãµØÖÎÀíºÍ¹¹½¨ÏîÄ¿¡£ÔÚ¿ª·¢LinuxÄÚºËÄ£¿éʱ£¬Ê¹ÓÃCMake¿ÉÒÔ¼ò»¯ÉèÖúͱàÒëÀú³Ì£¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£±¾ÎĽ«ÏÈÈÝÔõÑùʹÓÃCMakeÀ´ÉèÖú͹¹½¨LinuxÄÚºËÄ£¿é£¬²¢¸½´ø´úÂëʾÀý¡£

Ò»¡¢×°ÖÃCMake

ÔÚ×îÏÈ֮ǰ£¬ÎÒÃÇÐèÒªÏÈ×°ÖÃCMake¡£ÔÚUbuntuÉÏ£¬¿ÉÒÔͨ¹ýÒÔÏÂÏÂÁî¾ÙÐÐ×°Öãº

sudo apt-get install cmake

µÇ¼ºó¸´ÖÆ

¶þ¡¢½¨ÉèCMakeLists.txtÎļþ

ÔÚLinuxÄÚºËÄ£¿éµÄÏîÄ¿¸ùĿ¼Ï£¬½¨ÉèÒ»¸öÃûΪCMakeLists.txtµÄÎļþ¡£Õâ¸öÎļþÐÎòÁËÏîÄ¿µÄ¹¹½¨ÉèÖúÍÒÀÀµ¹Øϵ¡£

ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄCMakeLists.txtÎļþʾÀý£º

# CMake×îµÍ°æ±¾ÒªÇó
cmake_minimum_required(VERSION 3.10)

# ÏîÄ¿Ãû³Æ
project(kmodule_example)

# ÄÚºËÄ£¿éÔ´Îļþ
set(SOURCES example_module.c)

# ±àÒëÑ¡Ïî
add_compile_options(-Wall -Wextra)

# ÄÚºËÄ£¿éµÄ¹¹½¨ÉèÖÃ
add_module(${PROJECT_NAME} ${SOURCES})

µÇ¼ºó¸´ÖÆ

ÔÚÕâ¸öʾÀýÖУ¬ÎÒÃÇÊ×ÏÈÖ¸¶¨ÁËCMakeµÄ×îµÍ°æ±¾ÒªÇ󣬲¢¸øÏîÄ¿ÃüÃûΪ”kmodule_example”¡£½Ó×Å£¬ÎÒÃǽ«ÄÚºËÄ£¿éµÄÔ´Îļþ(example_module.c)·ÅÔÚÒ»¸ö±äÁ¿ÖС£È»ºó£¬ÎÒÃÇÌí¼ÓÁËһЩ±àÒëÑ¡Ïî(-Wall -Wextra)£¬ÒÔÆôÓÃÖÒÑÔ²¢ÔöÌíÌØÁíÍâÖÒÑÔÐÅÏ¢¡£

×îºó£¬ÎÒÃÇʹÓÃadd_module()º¯ÊýÀ´½ç˵ÄÚºËÄ£¿éµÄ¹¹½¨ÉèÖᣵÚÒ»¸ö²ÎÊýÊÇÄÚºËÄ£¿éµÄÃû³Æ£¬µÚ¶þ¸ö²ÎÊýÊÇÄÚºËÄ£¿éµÄÔ´Îļþ¡£

Èý¡¢¹¹½¨ºÍ×°ÖÃÄÚºËÄ£¿é

ÔÚÏîÄ¿¸ùĿ¼Ï½¨ÉèÒ»¸öÃûΪbuildµÄĿ¼£¬ÔÚbuildĿ¼ÖÐÖ´ÐÐÒÔÏÂÏÂÁ

cmake ..
make

µÇ¼ºó¸´ÖÆ

Ö´ÐÐcmakeÏÂÁƾ֤CMakeLists.txtÎļþÌìÉúMakefile£¬È»ºóÖ´ÐÐmakeÏÂÁîÀ´±àÒëÄÚºËÄ£¿é¡£

±àÒëÀֳɺ󣬿ÉÒÔʹÓÃÒÔÏÂÏÂÁîÀ´×°ÖÃÄÚºËÄ£¿é£º

sudo make install

µÇ¼ºó¸´ÖÆ

ÄÚºËÄ£¿é½«±»×°Öõ½ÏµÍ³µÄ±ê׼λÖá£

ËÄ¡¢ÕûÀí¹¹½¨Ä¿Â¼

ÈôÊÇÐèÒªÕûÀí¹¹½¨±¬·¢µÄÖÐÑëÎļþ£¬¿ÉÒÔÖ´ÐÐÒÔÏÂÏÂÁ

make clean

µÇ¼ºó¸´ÖÆ

Õ⽫ɾ³ýÌìÉúµÄ¿ÉÖ´ÐÐÎļþºÍÔÝʱÎļþ¡£

Îå¡¢×ܽá

ÔÚ±¾ÎÄÖУ¬ÎÒÃÇÏÈÈÝÁËÔõÑùʹÓÃCMakeÀ´ÉèÖú͹¹½¨LinuxÄÚºËÄ£¿é¡£Í¨¹ýʹÓÃCMake£¬ÎÒÃÇ¿ÉÒÔ¸üÀû±ãµØÖÎÀíºÍ¹¹½¨ÏîÄ¿£¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£Ï£ÍûÕâƪÎÄÕÂÄܹ»×ÊÖúÄãÔÚ¿ª·¢LinuxÄÚºËÄ£¿éʱԽ·¢ÇáËɵØʹÓÃCMake¡£

´úÂëʾÀý£º

ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄLinuxÄÚºËÄ£¿éʾÀý£¬ÃûΪexample_module.c£º

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("An example Linux kernel module");

static int __init example_module_init(void)
{
    printk(KERN_INFO "Hello, World!
");
    return 0;
}

static void __exit example_module_exit(void)
{
    printk(KERN_INFO "Goodbye, World!
");
}

module_init(example_module_init);
module_exit(example_module_exit);

µÇ¼ºó¸´ÖÆ

Õâ¸öʾÀýÄÚºËÄ£¿éʵÏÖÁËÒ»¸ö¼òÆӵijõʼ»¯ºÍÍ˳öº¯Êý¡£ÔÚ³õʼ»¯º¯ÊýÖУ¬Ëü´òÓ¡Ò»ÌõÐÂÎÅ”Hello, World!”£»ÔÚÍ˳öº¯ÊýÖУ¬Ëü´òÓ¡Ò»ÌõÐÂÎÅ”Goodbye, World!”¡£

ͨ¹ýʹÓñ¾ÎÄÏÈÈݵÄCMakeÉèÖú͹¹½¨ÒªÁ죬±àÒëÕâ¸öʾÀýÄ£¿é½«»áºÜÊÇÀû±ã¡£

²Î¿¼Á´½Ó£º

CMake¹Ù·½Îĵµ£ºhttps://cmake.org/documentation/

LinuxÄÚºËÄ£¿é¿ª·¢Ö¸ÄÏ£ºhttps://www.kernel.org/doc/html/latest/kbuild/modules.html

ÒÔÉϾÍÊÇʹÓÃCMake¹¹½¨LinuxÄÚºËÄ£¿éµÄÉèÖÃÖ¸ÄϵÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí£¬°æȨÕùÒéÓë±¾Õ¾Î޹أ¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í×ðÁú¿­Ê±¹ÙÍøµÇ¼ÂËÓÍ»úÍø¹Ù·½Ì¬¶È£¬Çë¶ÁÕß½ö×ö²Î¿¼¡£±¾ÎĽӴýתÔØ£¬×ªÔØÇë˵Ã÷À´ÓÉ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢£¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢£¬ÇëÄúÁ¬Ã¦ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼ʵʱÐÞÕý»òɾ³ý¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎ壬9:30-18:30£¬½ÚãåÈÕÐÝÏ¢

QR code
ÍøÕ¾µØͼ