Linux驅動模塊編譯模板


hello.c文件:

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

static int hello_init(void)
{
    printk("Hello,world!\n");

    return 0;
}

static void hello_exit(void)
{
    printk("Goodbye,cruel world!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("Vedic <FZKmxcz@163.com>");
MODULE_LICENSE("Dual BSD/GPL");

 

Makefile文件:

obj-m +=template.o
template-objs:= hello.o

KDIR:=/home/fuzk/project/Prolin/firmware_4/build_dir/linux-sc9820_sc9820_pax/linux-3.10.65

COMPILER=/opt/toolchain/arm-2012.03/bin/arm-none-linux-gnueabi-gcc
LD_PATH=/opt/toolchain/arm-2012.03/bin/arm-none-linux-gnueabi-ld
AR_PATH=/opt/toolchain/arm-2012.03/bin/arm-none-linux-gnueabi-ar
ARCH_TYPE=arm

#CCFLAGS新GGC要求改用ccflags-y, -I頭文件必須是絕對路徑 像-I./include壓根找不到 宏定義用-D緊跟着宏名字即可不用空格 #ccflags
-y += -mfloat-abi=softfp -Ixx/xx/include -DXXX_RRR #ldflags-y += -L/opt/toolchain/arm-2012.03/lib/gcc/arm-none-linux-gnueabi/4.6.3 -lgcc -static all: make CC=$(COMPILER) LD=$(LD_PATH) AR=$(AR_PATH) ARCH=$(ARCH_TYPE) -C $(KDIR) M=$(PWD) modules clean: make CC=$(COMPILER) LD=$(LD_PATH) ARCH=$(ARCH_TYPE) -C $(KDIR) M=$(PWD) clean

 

追加:

  上面的Makefile其實寫得不嚴謹!首先make命令后處理的Makefile是kernel下的Makefile, 查看內容得知里面除了用CC LD AR 還會用其他的

 

所以我們要做的是賦值CROSS_COMPILE變量才對

obj-m +=template.o
template-objs:= hello.o

KDIR:=/home/fuzk/project/Prolin/firmware_4/build_dir/linux-sc9820_sc9820_pax/linux-3.10.65

COMPILE=/opt/toolchain/arm-2012.03/bin/arm-none-linux-gnueabi-
ARCH_TYPE=arm

#CCFLAGS新GGC要求改用ccflags-y, -I頭文件必須是絕對路徑  像-I./include壓根找不到   宏定義用-D緊跟着宏名字即可不用空格
#ccflags-y += -mfloat-abi=softfp -Ixx/xx/include -DXXX_RRR
#ldflags-y += -L/opt/toolchain/arm-2012.03/lib/gcc/arm-none-linux-gnueabi/4.6.3 -lgcc -static

all:
    make CROSS_COMPILE=$(COMPILE) ARCH=$(ARCH_TYPE) -C $(KDIR)  M=$(PWD)  modules

clean:
    make CROSS_COMPILE=$(COMPILE) ARCH=$(ARCH_TYPE) -C $(KDIR)  M=$(PWD)  clean

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM