linux内核模块编译 两种编译

linux内核模块的编译方法有两种:

1.放入linux内核源码中编译

2.独立编译模块

(1)放入linux内核源码中编译

这里先了解Kconfig和Makefile的作用

Kconfig:对应内核模块的配置菜单。

Makefile:对应内核模块的编译选项。

linux内核编译过程:是根据配置裁剪的结果配合Makefile完成内核编译。

以ARM平台为例,具体配置过程:

1.当执行make menuconfig 时,系统首先读取arch/arm/Kconfig生成整个配置界面

2.在读取配置界面的同时,系统会读取顶层目录下的.config文件,生成所有配置选项的默认值

3.当修改玩配置并保存后,系统会更新顶层目录下的.config

4.当执行make时,各层的Makefile会根据.config文件中的编译选项来决定哪些文件会被编译到内核中,或者编译成模块。

下面进入正题怎么把自己的内核代码添加到内核中

1.把自己的内核代码放入到内核合适的位置   // 字符驱动  driver/char/

2.把自己开发的功能添加到linux内核的配置选项中,使用户能够选中这项功能并编译。// vi /driver/char/Kconfig

在Kconfig文件结尾,endmenu的前面加入一个config选项 

config 2018_HELLO

        bool "This is my first drive "

        default y

        help

            The driver hh.     

3.构建或修改Makefile。// vi dreiver/char/Makefile  obj-$(CONFIG_2018_HELLO)        += hello.c

4.执行make

(2)独立编译

KVERS = $(shell uname -r)
obj-m += hello.o
build: kernel_modules
EXTRA_CFLAGS=-g -o0
kernel_modules:
    make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules
clean:

    make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean

写个Makefile就好了,生成.ko 在insmod hello.ko。

两者的区别就是独立编译比较省时间,方便添加 移除,重启后消失。

我写的有错误或者你有什么不懂得希望留言告诉我,一起学习!


猜你喜欢

转载自blog.csdn.net/lyw13522476337/article/details/79869066