iTOP-iMX6开发板-设备树驱动-以module的方式编译驱动

栏目:技术教程 发布时间 2020-10-16 人气 

来源:http://www.mamicode.com/info-detail-3085688.html

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:标签:文件拷贝相关方法arm信息smowork查看常见内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动。本文档介绍如何以模块的方式编译内核驱动。以 module 的方式编译驱动,需要以下几个部分:1 内核成功编译过;2 找到内核的 arm 编译器;3 编译简单驱动;4 编译简单的 Makefile 文件,Makefile 文件中需要指向内核源码目录(成功编译过的内核源码目录);和文档在...

标签:文件拷贝   相关   方法   arm   信息   smo   work   查看   常见   

内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动。本文档介绍如何以
模块的方式编译内核驱动。
以 module 的方式编译驱动,需要以下几个部分:
1 内核成功编译过;
2 找到内核的 arm 编译器;
3 编译简单驱动;
4 编译简单的 Makefile 文件,Makefile 文件中需要指向内核源码目录(成功编译过的内核源码目录);
和文档在一起的有“Makefile”、c 文件和 ko 文件,大家可以用来测试。
要动态的编译内核,首先需要将内核源码编译通过,内核的编译请参考使用手册第五章。

  1. 内核和编译器路径
    本节介绍内核路径、编译器路径。无论是 Qt 和 Ubuntu 的内核源码,都是在 android 源码包中,所以必须先解压 android 源码到 Ubuntu14.04 中。
    如下图所示,作者的 android 源码在“/home/iMX6Q/iTOP-iMX6_android6.0.1”目录下,内核源码在其中的“kernel_imx”目录下。
    技术图片
    进入“kernel_imx”目录,查看“build_android_kernel.sh”中的脚本文件,如下图所示。
    技术图片
    如上图所示,我们可以得到一些信息,在后面编译内核模块的时候,需要设置编译目标平台为 arm,“export ARCH=arm”;
    编译器的路径为“$(pwd)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-”。理论上,应该使用这个编译器,但是实际上以
    modules 的方式编译内核驱动的时候,使用这个编译器,是无法编译的!!
    应该使用“../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-”这个编译器才行,如下图所示。
    技术图片
    编译器路径为内核源码目录对应的../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-”,这是作者测试出来的,作者没有太多时间深入研究编译脚本,但是这个编译器是可以的。前面红色部分介绍的编译器,会提示报错,对于这个报错,飞思卡尔官方给出的是简单的回复“你使用了 android 的编译器”,没有提供更多的解释,也没有提示方法,不过作者测试了几个内核驱动,都是可以正常 insmod 和 rmmod 的。
    技术图片
  2. 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
脚本中:
第一行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”,可以删除中间文件。
3.模块编译常见问题
在以模块的方式编译驱动的过程中,新手可能会以下问题。
1.内核源码没有编译或者内核源码路径设置不正确。
如果内核源码没有编译,那么模块将会提示缺少库之类的错误;如果路径设置不正确,会提示找不到内核。
2.源码和 Makefile 文件在 Windows 下编写,然后拷贝到 Ubuntu 上,由于编辑器不同导致转码错误。
这种错误比较容易解决,Make 编译之后,系统会提示 Makefile 或者驱动文件具体某一行出现问题。使用 vim 编辑器打开查看一下,就能找出一些乱码,使用 vim 编辑器修正一下再编译即可。

  1. 模块加载和卸载
    作者这里使用最小 linux 系统来测试模块的加载和卸载,最小系统在使用手册第十三章有介绍。在编译模块前,内核源码必须要编译通过,作者这里是在最小系统是加载模块,那么内核源码也必须编译为 qt 的内核(最小系统使用的是 qt 的内核),否则是无法加载的。
    如下图所示,将驱动模块拷贝到开发板(作者采用的是 nfs 共享目录的方式,关于 nfs 大家可以参考群共享中 nfs 相关的文档,设备树和非设备的 Ubuntu 都通用。也可以用 tf 卡或者 U 盘)。
    技术图片
    然后使用命令“insmod iTOP_IMX6_treedriver_hello.ko”加载驱动模块,如下图示,打印出“Hello World enter!”,表明模块驱动加载成功。
    技术图片
    接着使用命令“rmmod iTOP_IMX6_treedriver_hello”卸载模块,如下图所示,发现提示没有目录 4.1.15,这里我们新建“/lib/modules/4.1.15”。
    技术图片
    如下图所示,使用命令“mkdir /lib/modules/4.1.15”新建目录,再次使用命令“rmmod iTOP_IMX6_treedriver_helloello”卸载驱动模块。
    技术图片
    发现打印信息“Hello world exit!”,模块卸载成功。
    只要重新烧写系统,这些新建目录只需要建立一次即可。
    技术图片

iTOP-iMX6开发板-设备树驱动-以module的方式编译驱动

标签:文件拷贝   相关   方法   arm   信息   smo   work   查看   常见   

原文地址:https://blog.51cto.com/13962589/2541898

下册 军车 熬夜 灯饰 用命 顺手 主程序 情绪 暂停 底板 无线耳机 金宝 人是 鬼魂 仅此而已 佣金 软膏 他都 医护 刚果 优惠券 阿姆斯特丹 红外测温仪 都在 调理 中位数 导师 鲨鱼 牛筋 信步 集装箱码头 是用来 堪萨斯 接上 环网 游戏开发 奇怪 慈湖 家境 工程建设 定向 头绪 字样 明星 污水泵 同位素 产业联盟 绝技 结构调整 市场规模 闺女 备战 用户信息 鼓风 迷走神经 印尼 国际机场 二手 起步价 进料 克里克 多给 抽查 台东县 供稿 得克萨斯州 TMD 麦草 基础 穆罕默德 波形 越南 每秒钟 死在 精神科 画画 全开 你个 doutula 研讨会 随机 泵阀 风格 基本参数 粮库 国际劳动妇女节 偷偷 步态 相知 书写 置放 神州 鲢鱼 相邻 门板 宏基 导致 美国总统 侧重 鄂州市
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60667.html