当前位置: 技术问答>linux和unix
linux内核模块编译的一个问题!!!!
来源: 互联网 发布时间:2016-11-26
本文导语: 下面是一个Makefile文件的内容,用来编译内核模块的。 obj-m := mkdir_hook.o PWD := $(shell pwd) all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: rm -rf *.o *~ core .*.cmd *.mo...
下面是一个Makefile文件的内容,用来编译内核模块的。
obj-m := mkdir_hook.o
PWD := $(shell pwd)
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
rm -rf *.o *~ core .*.cmd *.mod.c ./tmp_version
执行make的时候,过程如下:
salmon@salmon-desktop:~/hook/mkdir_hook$ make
make -C /lib/modules/2.6.32-21-generic/build M=/home/salmon/hook/mkdir_hook modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.32-21-generic'
CC [M] /home/salmon/hook/mkdir_hook/mkdir_hook.o
/home/salmon/hook/mkdir_hook/mkdir_hook.c: In function ‘start_hook’:
/home/salmon/hook/mkdir_hook/mkdir_hook.c:124: warning: assignment makes integer from pointer without a cast
Building modules, stage 2.
MODPOST 1 modules
CC /home/salmon/hook/mkdir_hook/mkdir_hook.mod.o
LD [M] /home/salmon/hook/mkdir_hook/mkdir_hook.ko
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.32-21-generic'
我的问题:
1.这个Makefile文件没指定编译器吗?那编译的时候用什么编译器编译呢??
(我机器上有gcc编译器,也有arm-linux-gcc交叉编译器)
2.编译过程中的CC和LD是什么意思??
obj-m := mkdir_hook.o
PWD := $(shell pwd)
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
rm -rf *.o *~ core .*.cmd *.mod.c ./tmp_version
执行make的时候,过程如下:
salmon@salmon-desktop:~/hook/mkdir_hook$ make
make -C /lib/modules/2.6.32-21-generic/build M=/home/salmon/hook/mkdir_hook modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.32-21-generic'
CC [M] /home/salmon/hook/mkdir_hook/mkdir_hook.o
/home/salmon/hook/mkdir_hook/mkdir_hook.c: In function ‘start_hook’:
/home/salmon/hook/mkdir_hook/mkdir_hook.c:124: warning: assignment makes integer from pointer without a cast
Building modules, stage 2.
MODPOST 1 modules
CC /home/salmon/hook/mkdir_hook/mkdir_hook.mod.o
LD [M] /home/salmon/hook/mkdir_hook/mkdir_hook.ko
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.32-21-generic'
我的问题:
1.这个Makefile文件没指定编译器吗?那编译的时候用什么编译器编译呢??
(我机器上有gcc编译器,也有arm-linux-gcc交叉编译器)
2.编译过程中的CC和LD是什么意思??
|
make -C 是调用进去里面之后的makefile
|
尝试增加一下行到Makefile中,这样可以定义编译器为arm,否则默认为gcc
CROSS_COMPILE = arm-linux-
CC =$(CROSS_COMPLE)gcc
CC是编译,LD是链接。
CROSS_COMPILE = arm-linux-
CC =$(CROSS_COMPLE)gcc
CC是编译,LD是链接。
|
内核模块是给操作系统用的,所以要用操作系统的资源来编译代码
而`/usr/src/linux-headers-2.6.32-21-generic'应该就是系统源码在你电脑中的位置
CC编译 LD链接
而`/usr/src/linux-headers-2.6.32-21-generic'应该就是系统源码在你电脑中的位置
CC编译 LD链接