编译某一个模块:make -c /lib/modules/3.18.92/build/ m=`pwd` modules
编译内核源码:make -j64 make modules_install make install
在2.4内核中,只要自己写了driver,最多需要kernel头文件来配合编译。通常的cflags为:
=-d__kernel__ -i$(kdir) /include -dmodule
但在2.6下面,不再是这样。 模块的编译需要依赖配置过的内核源码,编译过程首先会到内核源码目标下,读取顶层的makefile文件
module编译模板如下:
#makefile for linux2.6
ifneq ($(kernelrelease),)
# call from kernel build system
scull-objs := main.o pipe.o access.o
obj-m := scull.o
else
kerneldir ?= /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
modules:
$(make) -c $(kerneldir) m=$(pwd)
clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c.tmp_versions
endif
解释:
kernelrelease:由kernel顶层makefile中定义。
第一次运行中,kernelrelease没有被定义,所以进入else
$(make) -c $(kerneldir)m=$(pwd)
此处读取kerneldir中的顶层makefile。读取后又返回本目录。继续执行本目录makefile。
则此时kernelrelease被定义。进入if.
if和else之间的为kbuild语法的语句.
阅读(2374) | 评论(0) | 转发(0) |