1. 为什么会有这个框架?
在只有工具链和内核头文件情况下,想单独编译app或者ko 用于测试。
2. 框架
1. 主Makefile
all:
$(MAKE) -C ./modules_ko
$(MAKE) -C ./modules_app
clean:
$(MAKE) -C ./modules_ko clean
$(MAKE) -C ./modules_app clean
2. app编译框架
Makefile
CURR_DIR := $(shell pwd)
CROSS_COMPILE := "the location of toolchain"
CC=$(CROSS_COMPILE)gcc
LD= $(CROSS_COMPILE)ld
STRIP=$(CROSS_COMPILE)strip
ARCH=arm
CFLAGS = -g -Wall
LDFLAGS =
FILELIST = app_test.c
all: app_test
.PHONY : all clean app_test
app_test:
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(FILELIST)
$(STRIP) $@
clean:
rm -f *.o app_test
测试文件
#include<stdio.h>
int main(void)
{
printf("just for app compile test\n");
return 0;
}
3. ko编译框架
Makefile
KERNELDIR=../linux-4.1 ## you should modify it
obj-m += ko_test.o
CROSS_COMPILE := "the location of toolchain"
ARCH=arm
# if you need include other heade file "-I path"
EXTRA_CFLAGS +=
all:
$(MAKE) -C $(KERNELDIR) M=`pwd` ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
clean:
$(MAKE) -C $(KERNELDIR) M=`pwd` ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) clean
测试文件
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
static int module_test_init(void)
{
printk("************modules_test init***********\n");
return 0;
}
static void module_test_exit(void)
{
printk("************modules_test exit***********\n");
return ;
}
module_init(module_test_init);
module_exit(module_test_exit);
MODULE_DESCRIPTION("modules_test");
MODULE_LICENSE("GPL");
{hide}
源码
app、ko编译源码
{/hide}