Skip to main content

整体编译Ko文件添加方式

1. 添加模块驱动流程

1.1 添加驱动源文件

进入到module_driver目录下,在devices/目录下添加要添加的外设模块文件夹,这里以test为例子

在test文件夹下添加test.c文件与对应Makefile文件

1

在其Makefile中编写如下内容:

模块名称不要和生成依赖的名称一致,obj-m则表示将设备编译成模块,若不想编译成模块则obj-y

include $(DRIVERS_DIR)/tools/common_module.mk  #包含编译模块所用到的工具

MODULE_NAME := tests #模块名称

module-y += test.o #生成模块所依赖的文件

KBUILD_EXTRA_SYMBOLS := $(DRIVERS_DIR)/drivers/utils/Module.symvers

obj-m := $(MODULE_NAME).o #编译生成模块

$(MODULE_NAME)-y = $(module-y)

在test.c文件中编写如下内容:

#include <linux/module.h>                  //模块加载对应头文件

static int __init test_init(void) //模块加载调用的函数
{
printk(KERN_ERR "test module init\n");
return 0;
}

static void __exit test_exit(void) //模块卸载调用函数
{
printk(KERN_ERR "test module exit\n");
}

module_init(test_init); //模块加载函数
module_exit(test_exit); //模块卸载函数

MODULE_DESCRIPTION("test"); //模块描述
MODULE_LICENSE("GPL"); //模块所用协议

1.2 添加编译文件

进入到module_driver下的package/devices/other目录,创建test文件夹和其下目录Config.in和test.mk:

2

在test.mk中编写如下内容:

package_name = tests               #模块包名称
package_depends = #模块依赖包名称,若赋值则优先编译
package_module_src = devices/test #需要编译的文件目录,该目录下包含编译模块的makefile文件
package_finalize_hook = test_finalize_hook #定义在模块编译之前的操作
package_make_hook = #定义模块的编译方式
package_init_hook = #定义在模块编译之前的操作
package_clean_hook = #定义用来清理文件

test_init_file = output/test.sh #初始化将要执行的脚本文件

define test_finalize_hook
$(Q)cp devices/test/tests.ko output/
$(Q)echo -n 'insmod tests.ko ' > $(test_init_file)
$(Q)echo >> $(test_init_file)
endef

同时,在other.mk文件中添加对于编译规则,通过Iconfig设置的宏决定是否加入编译:

package-$(MD_TEST) += package/devices/other/test/test.mk

2. 添加Iconfig菜单说明

在module_driver/package/devices/other/test/Config.in文件中编写菜单,并在Iconfig中选择将其编译进工程:

config MD_TEST                  //模块宏的名称
bool "test module" //模块描述
default n //默认选项,不选择,需要在IConfing中勾选

并在上一级Config.in中添加索引,将该宏添加进来:

source /package/devices/other/test/Config.in

在Iconfig中将宏选中并保存

3

3. 查看运行效果

当执行完上述添加流程,就可以开始编译模块了

cd linux/build                               //进入到你的linux目录下的build目录
make x2000_darwin_v20_debug_nand_defconfig //编译刚才保存的defconfig文件
make

之后若只改动module_driver目录下的内容时候,则只需要按照下面流程操作

make app_module_driver              //编译module_driver
make buildroot //编译文件系统

当我们编译module_driver时,可以发现生成了tests.ko文件,说明模块编译成功:

4

烧录进开发板,打开串口,输入lsmod命令,看到tests,说明模块加载成功:

# lsmod

Module Size Used by Tainted: G
x2000_icodec_sound_card 2405 0
tests 744 0