简单内核模块编译

一般而言,驱动开发者会在内核源代码的drivers 目录内的相应子目录中增加新设备驱动 的源代码或者在arch/arm/mach-xxx 下新增加板级支持的代码,同时增加或修改Kconfig 配置 脚本和 Makefile 脚本,那么如何添加了?

在前面搭建了arm虚拟开发板,使用的内核是3.16的版本。

内核代码的编写都有一般的固定格式,基本包括模块加载,卸载和GPL协议等,下面是一个简单的内核模块代码hello.c:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>


static int __init hello_init(void)
{
    printk(KERN_INFO"Hello World\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO"Exit Module\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

将此代码放置到内核源码 drivers/i2c 目录下

修改Make file 添加hello的编译选项

然后到内核根目录下编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- O=./out_vexpress_3_16 LOADADDR=0x60003000 uImage -j8

编译完成后,可以在 out_vexpress_3_16/deivers/i2c下看到hello.o 的文件。

把新生成的uImage 放到tftp文件夹下,启动虚拟开发板,可以看到在启动打印的部分有

说明编写的内核模块已经加载。

这样写的内核模块不规范,在make menuconfig 时,无法配置hello 模块不编译,为了能在menuconfig 配置时有hello模块的配置,需要秀给Kconfig,添加如下内容

其中 config 后面内容为Makefile配置hello.o 等号前面显示的内容,即配置选项,boolean为menuconfig配置界面显示的内容。default 是一个bool内型的变量,Y 编译,N不编译,M编译为模块,即.ko文件,在此例中没有M的配置。bool 后面的内容为界面显示选项后面的减短说明。help为帮助信息。

配置后保存,然后make menuconfig 查看是否 有hello 的配置

若要是menuconfig配置的选项加载到内核编译环境中去,还要修改Makefile的文件,将原先的y变为$(HELLO_WORLD)

但这样在原内核文件中添加文件不利于以后代码的管理和优化,可以做到把自己写的代码单独放置到一个文件中

在内核源码的driver目录下建立test的文件夹,树形目录为

 在内核中添加目录和子目录时,需要为新增的目录和子目录添加Kconfig 和 Makefile 文件,而且新增目录的父目录的Kconfig 和Makefile 也需要修改,以便新增的文件能被引用。

在test目录下添加Kconfig

# Test driver Configuratioon

menu "TEST Driver"
comment "TEST Driver"

config CONFIG_TEST
    bool "TEST support"

config CONFIG_TEST_TWO
    tristate "Test two interface"
    depend on CONFIG_TEST

endmenu

 为了使这个Kconfig起作用,修改上层目录的Kconfig.增加

source "drivers/test/Kconfig" 

脚本中的source 意味着应用新的Kconfig文件。

同样在test目录下添加Makefile文件

#Makefile for TEST

obj-$(CONFIG_TEST) += test_three.o 
obj-$(CONFIG_TEST_TWO) += test_two.o

obj-$(CONFIG_TEST_ONE) += test_one/

 在test_one下添加Makefile

#Makefile for TEST—ONE

obj-$(CONFIG_TEST_ONE) += test_one.o

 修改test父目录下的Makefile,添加如下脚本

obj-$(CONFiG_TEST) += test/

添加完毕后test目录结构为

回到内核根目录,make menuconfig查看

        

发布了45 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42005898/article/details/103612041