Makefile 和测试驱动源码以及编译
作者在“/home/imx6”目录下新建一个“imx_driver_modules”目录,将要编译的驱动和 Makefile 文件放到这个目录下。
2.1 Makefile
Makefile 脚本文件:
obj-m += iTOP_IMX6_treedriver_hello.o
KDIR =/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imx
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules modules ARCH=arm
CROSS_COMPILE=$(KDIR)/。./prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
clean:
rm -rf modules.order *.o workqueue.o Module.symvers *.mod.c *.ko
脚本中:
第一行《img sr smiliei borde al》bj-m += iTOP_IMX6_treedriver_hello.o 表示编译的源文件为iTOP_IMX6_treedriver_hello.c,如果源文件名有变化,则需要修改成对应的。
第二行:KDIR 参数指向对应的内核源码目录。作者的内核源码是在/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imxx 目录下,用户要根据自己的具体情况来修改。
第三行:PWD ?= $(shell pwd)表示将当前目录的路径赋值给 PWD 变量,也就是/home/imx6_tree_driver/iTOP_IMX6_treedriver_hello。作者将会把 Makefile 文件和驱动源码放到这个目录下编译。
第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示将当前目录下的文件编译为模块,并且制定了内核源码的路径;
其中 ARCH=arm 表示设置目标 CPU 类别为 arm,也就是编译的依赖内核和驱动模块目标 CPU 为 ARM;
其中 CROSS_COMPILE=$(KDIR)/。./prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi- ,这里的路径,指向内核编译器的路径。
2.2 简单驱动源码
驱动文件名称为:iTOP_IMX6_treedriver_hello.c,源码如下:
#include
#include
MODULE_LICENSE(“Dual BSD/GPL”);
MODULE_AUTHOR(“iTOPEET_dz”);
static int hello_init(void)
{
printk(KERN_EMERG “Hello World enter!/n”);
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG “Hello world exit!/n”);
}
module_init(hello_init);
module_exit(hello_exit);
驱动源码只有基本的入口和出口函数。加载和卸载的时候分别打印“Hello Worldenter!”和“Hello world exit!”。
2.3 编译
将源码和 Makefile 文件拷贝到 Ubuntu14 系统下。
使用命令“make”,如下图所示,可以看到有“iTOP_IMX6_treedriver_hello.ko”文件生成。

使用命令“make clean”,可以删除中间文件。
Makefile 和测试驱动源码以及编译
作者在“/home/imx6”目录下新建一个“imx_driver_modules”目录,将要编译的驱动和 Makefile 文件放到这个目录下。
2.1 Makefile
Makefile 脚本文件:
obj-m += iTOP_IMX6_treedriver_hello.o
KDIR =/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imx
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules modules ARCH=arm
CROSS_COMPILE=$(KDIR)/。./prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
clean:
rm -rf modules.order *.o workqueue.o Module.symvers *.mod.c *.ko
脚本中:
第一行《img sr smiliei borde al》bj-m += iTOP_IMX6_treedriver_hello.o 表示编译的源文件为iTOP_IMX6_treedriver_hello.c,如果源文件名有变化,则需要修改成对应的。
第二行:KDIR 参数指向对应的内核源码目录。作者的内核源码是在/home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imxx 目录下,用户要根据自己的具体情况来修改。
第三行:PWD ?= $(shell pwd)表示将当前目录的路径赋值给 PWD 变量,也就是/home/imx6_tree_driver/iTOP_IMX6_treedriver_hello。作者将会把 Makefile 文件和驱动源码放到这个目录下编译。
第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示将当前目录下的文件编译为模块,并且制定了内核源码的路径;
其中 ARCH=arm 表示设置目标 CPU 类别为 arm,也就是编译的依赖内核和驱动模块目标 CPU 为 ARM;
其中 CROSS_COMPILE=$(KDIR)/。./prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi- ,这里的路径,指向内核编译器的路径。
2.2 简单驱动源码
驱动文件名称为:iTOP_IMX6_treedriver_hello.c,源码如下:
#include
#include
MODULE_LICENSE(“Dual BSD/GPL”);
MODULE_AUTHOR(“iTOPEET_dz”);
static int hello_init(void)
{
printk(KERN_EMERG “Hello World enter!/n”);
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG “Hello world exit!/n”);
}
module_init(hello_init);
module_exit(hello_exit);
驱动源码只有基本的入口和出口函数。加载和卸载的时候分别打印“Hello Worldenter!”和“Hello world exit!”。
2.3 编译
将源码和 Makefile 文件拷贝到 Ubuntu14 系统下。
使用命令“make”,如下图所示,可以看到有“iTOP_IMX6_treedriver_hello.ko”文件生成。

使用命令“make clean”,可以删除中间文件。
举报