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

 

posted @ 2023-08-25 16:04  秦舒云  阅读(76)  评论(0编辑  收藏  举报