Linux内核模块的编译和运行 - 如何让模块跑起来?
我们创建一个目录 modules,然后创建一个文件 hello_world.c,将模块的代码拷贝进来。
如果要将hello_world.c 编译为模块,需要创建一个 Makefile文件
Makefile:
SRCPATH := $(shell pwd)
ARCH = arm
CROSS_COMPILE ?= /opt/toolchain/bin/arm-linux-gnueabihf-
KDIR ?= /home/xxx/linux-3.10/
obj-m += hello_world.o
all:
@echo "build modules ..."
@$(MAKE) -C $(KDIR) M=$(SRCPATH) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) modules --no-print-directory
clean:
@echo "clean modules ..."
@rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions Module.symvers .Makefile.swp modules.order
.PHONY: modules clean
然后在该目录下运行如下命令即可
make
编译完之后,就可以看到编译完成的模块文件,hello_world.ko
如果想清楚编译好的文件,运行如下命令
make clean
=======================================================================================================================================================
模块的运行
将hello_world.ko拷贝到需要运行的机器上,然后运行如下命令
insmod hello_world.ko
运行完之后可以看到目录/sys/modules/hello_world/
,说明模块已经加载成功了。
如果要卸载模块
rmmod hello_world
还有个比较有用的命令
modinfo ./hello_world.ko