Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动

内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动。本文档介绍如何以模块的方式编译内核驱动。

要动态的编译内核,首先需要将内核源码编译通过,内核的编译请参考使用手册第五章。

9.5.2.1 内核和编译器路径

本节介绍内核路径、编译器路径

如下图所示,作者的 android 源码在“/home/imx6/iTOP-iMX6_android4.4.2”目录下,内核源码在其中的“kernel_imx”目录下。

ede7b1140c510f4b152cb104577eeb8e.png

进入“kernel_imx”目录,查看“build_android_kernel.sh”中的脚本文件,如下图所示。

2936f17f672835689dff4c30a53659b8.png

如上图所示,我们可以得到一些信息,在后面编译内核模块的时候,需要设置编译目标平台为 arm,“export ARCH=arm”;编译器的路径为“$(pwd)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-”。

9.5.2.2 Makefile 文件

作者在“/home/imx6”目录下新建一个“imx_driver_modules”目录,将要编译的驱动和 Makefile 文件放到这个目录下。

Makefile 脚本文件:

obj-m += iTOP-iMX6_driver_hello.o

KDIR =/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx

PWD ?= $(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules ARCH=arm

CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-

clean:

rm -rf modules.order *.o workqueue.o Module.symvers *.mod.c *.ko

脚本中:

第一行

0de642b4dd1af864b8b4d58481d6f691.gifbj-m += iTOP-iMX6_driver_hello.o 表示编译的源文件为 iTOP-iMX6_driver_hello.c,如果源文件名有变化,则需要修改成对应的。

第二行:KDIR 参数指向对应的内核源码目录。作者的内核源码是在/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx 目录下,用户要根据自己的具体情况来改。

第三行:PWD ?= $(shell pwd)表示将当前目录的路径赋值给 PWD 变量,也就是/home/imx6/imx_driver_modules

第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示将当前目录下的文件编译为模块,并且制定了内核源码的路径;

其中 ARCH=arm 表示设置目标 CPU 类别为 arm,也就是编译的依赖内核和驱动模块目标 CPU 为ARM;

其中 CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-,表示设置编译器路径,$(KDIR)为/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx,所以这里完整的路径为“/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-”,正好指向作者内核编译器的路径。

9.5.2.3 简单驱动源码

驱动文件名称为:iTOP-iMX6_driver_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!”。

9.5.2.4 模块编译

如下图所示,将源码拷贝到Ubuntu系统下。

a467790ef8eb3fa0c36877d5a460aa6a.png

使用命令“make”,如下图所示,可以看到有“iTOP-iMX6_driver_hello.ko”文件生成。

146d2c0eee3ecdcaf2c583919ea10762.png

使用命令“make clean”,可以删除中间文件,如下图所示。

0b029d5bcdd0284dda6988016ab96cd6.png

9.5.2.5 模块编译常见问题

在以模块的方式编译驱动的过程中,新手可能会以下问题。

1.内核源码没有编译或者内核源码路径设置不正确。

如果内核源码没有编译,那么模块将会提示缺少库之类的错误;如果路径设置不正确,会提示找不到内核。

2.源码和 Makefile 文件在 Windows 下编写,然后拷贝到 Ubuntu 上,由于编辑器不同导致转码错误。

这种错误比较容易解决,Make 编译之后,系统会提示 Makefile 或者驱动文件具体某一行出现问题。使用 vim 编辑器打开查看一下,就能找出一些乱码,使用 vim 编辑器修正一下再编译即可。

9.5.2.6 模块加载和卸载

作者这里使用最小 linux 系统来测试模块的加载和卸载,最小系统在使用手册第十三章有介绍。在编译模块前,内核源码必须要编译通过,作者这里是在最小系统是加载模块,那么内核源码也必须编译为 qt 的内核(最小系统使用的是 qt 的内核),否则是无法加载的。

如下图所示,将 ko 文件拷贝到 u 盘上,启动开发板,将 U 盘插到开发板上(靠近网口的usb 接口),使用命令“mkdir /mnt/udisk”新建文件夹,使用命令“mount /dev/sda1/mnt/udisk/”挂载盘符,使用命令“cp -r /mnt/udisk/iTOP-iMX6_driver_hello.ko ./”将驱动模块拷贝到开发板。

b7b6b801869fe84ed4ec95b4072f9f40.png

然后使用命令“insmod iTOP-iMX6_driver_hello.ko”加载驱动模块,如下图示,打印出“Hello World enter!”,表明模块驱动加载成功。

4b68a480eda456181373c22bbcae3b3a.png

接着使用命令“rmmod iTOP-iMX6_driver_hello”卸载模块,如下图所示,发现提示没有目录“/lib/modules”,我们就按照提示新建目录。

bab4e30749a02948013bc61d25f63edc.png

如下图所示,使用命令“mkdir /lib/modules”新建目录,再次使用命令“rmmodiTOP-iMX6_driver_hello”卸载驱动模块,发现仍然提示没有“3.0.35-g0e09bb1-dirty”这个路径。

18d793445f0e353dddebc8ab133beb19.png

如下图所示,使用命令“mkdir /lib/modules/3.0.35-g0e09bb1-dirty”新建目录,再次用命令“rmmod iTOP-iMX6_driver_hello”卸载驱动模块,发现打印信息“Hello worldexit!”,模块卸载成功。

866d5cf9b17f17311bbd66c45218fd93.png

只要重新烧写系统,这些新建目录只需要建立一次即可。

9abdf7f6021eb6a8691c82fd8093fc4c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win8关闭uefi+linux,UEFI启动是什么?Win8关闭UEFI引导方式的方法

UEFI启动是什么?不少新电脑都给用户直接预装了Win8系统,后来使用又非常不习惯,因此想改成Win7系统,但是在换系统之前,需要在BIOS下关闭UEFI引导方式,可能很多朋友都不懂该如何关闭UEFI启动项。针对这个问题&#xff0…

android listview自动加载更多,如何实现 Android ListView『上拉加载更多』?

ListView上拉加载更多的UI需求(1)向上滑动 ListView,当最后一个条目滚入屏幕时开始加载更多条目,在列表底部增加一个 footerView:一个 infinite progressBar,一个 textView 显示 “Loading...”;(2)根据数据加载的结果…

android安全性发展,Android未来发展 安全是重点

自2008年首部Android手机问世以来,谷歌智能手机方面的发展也开始高歌勇进,经过近8年的发展,Android已经成为市场上最大的移动互联网操作系统,市场占有率位居第一,虽然其竞争对手iOS步步紧逼,但是由于Androi…

android excel布局,Android实现仿excel数据表格效果

在没给大家分享代码之前,先给大家展示下效果图:1.activity/*** 采购需求* Created by Administrator on 2016/10/13.*/public class PurchaseRequireActivity extends BaseActivity implements PurchaseRequireView {Bind(R.id.appTitle)TextView appTit…

首款搭载鸿蒙os的设备,华为发布会配件汇总,首款搭载 鸿蒙OS 的设备来了

2020 年 10 月 30 日,华为召开 Mate40 系列发布会,正式发布 Mate40 系列手机。除了手机,本次发布会还发布了华为 Watch GT2 Pro 手表、华为 Sound 音箱等配件。以下是详细情况:华为智选智能摄像头 Pro该设备是首款搭载 HarmonyOS …

html图片自动切换的幻灯片效果的,js带点自动图片轮播幻灯片特效代码分享

本文实例讲述了javascript带点自动图片轮播幻灯片特效。分享给大家供大家参考。具体如下:这是一款基于javascript实现带点自动图片轮播幻灯片特效代码,实现过程很简单。运行效果图:-------------------查看效果下载源码-------------------小…

计算机网络硬件脆弱性,计算机网络的脆弱性有哪几点

计算机网络系统在设计、实施、应用和控制过程中存在的一切可能被攻击者利用从而造成安全危害的缺陷都是网络的脆弱性。佰佰安全网的专家顾问给出了这个问题的答案。计算机网络脆弱性(vulnerability)涉及一切信息系统或信息网络中可被非预期利用的方面。从整体上看,网…

全球计算机用户人数,NIC2019年11月:全球IPv6 用户数占比中国居43位

2019年11月,全球IPv4地址分配数量为29B,其中获得最多的是肯尼亚,8B;其次是美国,3B。除亚太、欧洲、拉美、北美等地区IPv4地址已耗尽外,非洲地区处于IPv4地址耗尽第一阶段。各地区IPv4地址消耗情况&#xff…

登录计算机怎么保存用户名,浏览器保存了账号密码怎么查看,教您怎么查看

有时候登录一个账号输入密码时,浏览器在征得同意后会自动储存并填写密码,但是这些密码都藏哪儿去了呢?当我们忘记了的时候又该如何才能查看呢?可能一些用户不知道该怎么去查看,今天教给大家查看这些已保存的密码的方法…

浅谈WPF之DataGrid过滤,分组,排序

使用过Excel的用户都知道,Excel可以方便的对数据进行分组,过滤,排序等操作,而在WPF中,默认提供的DataGrid只有很简单的功能,那么如何才能让我们开发的DataGrid,也像Excel一样具备丰富的客户端操…

计算机组成原理第六章难,计算机组成原理第六章答案

第6章 计算机的运算方法2. 已知X0.a1a2a3a4a5a6(ai为0或1),讨论下列几种情况时ai各取何值。 (1)X (2)X (3)121 811X4161,只要a11,a2~a6不全为0即可。 2解: (1)若要X(2)若要X (3)若要1,只要a1~a3不全为0即可。 811 X &a…

职高学计算机走单招是,职高学生不用愁了,还有机会上本科,走“单招”或是最佳途径!...

原标题:职高学生不用愁了,还有机会上本科,走“单招”或是最佳途径!职高学生不用愁了,也有机会上“本科”,走“单招”或是最佳途径随着教育制度的不断改革,中考也成为了人生的分水岭之一&#xf…

css3 filter url,CSS3 filter(滤镜) 属性

CSS3 filter(滤镜) 属性实例修改所有图片的颜色为黑白 (100% 灰度):img {-webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */filter: grayscale(100%);}定义和使用filter 属性定义了元素(通常是)的可视效果(例如:模糊与饱和度)。默认值:none继承:no动画…

云联惠身份认证得多久_【转发扩散】你完成认证了吗?老来网APP也可以刷脸认证哦!...

为缓解民生山西认证压力,提高认证效率与认证率,山西省社保局推出“老来网”认证手机app,请未认证人员以及民生山西无法认证人员,采用此认证方式。附:民生山西APP认证流程老来网APP具体操作流程如下:一、 老…

区域显示触发_Nature Communications:地幔数据显示可氧化的火山气体的减少可能触发了大氧化事件...

Nature Communications:地幔数据显示可氧化的火山气体的减少可能触发了大氧化事件包括人类在内的需氧生物之所以能在地球上繁盛兴旺,主要得益于大气中大量O2的存在,但在地球整个历史的大部分时间内O2含量水平并不高。地质记录中的硫同位素非质…

华三ap设置无线服务器,H3C无线控制器典型配置案例集(V5)-6W113

本文档介绍AP自动注册配置举例。2 配置前提本文档不严格与具体软、硬件版本对应,如果使用过程中与产品实际情况有差异,请参考相关产品手册,或以设备实际情况为准。本文档假设您已了解自动AP功能。如图1所示,AC作为DHCP服务器为AP…

仪表盘怎么调 铃木uy125摩托车_平时市区骑行,摩托车链条多久保养一次?

链条因为前期成本低,后期维护容易,所以成为了现在的大多数摩托车的传动装置。但它也有自身的弊端,比如需要频繁的保养,如若不然就会有掉链和异响的可能,那么市区骑行的摩托车应该多久保养一次链条呢?我们还是先来看一…

过磅系统更换服务器,无人值守过磅系统改造方案

智能无人值守过磅系统改造方案以前,汽车运输的物料计量工作采用汽车衡仪表显示计量数据,司磅员手工填写单据、报表,这就造成了管理上的许多问题如:安全性差、操作繁琐、作弊、统计错误、数据不能共享等,给企业造成较大损失,不能满足生产经营的…

怎样把文件传到华为云服务器,如何把文件传到云服务器上

如何把文件传到云服务器上 内容精选换一换MongoDB官网提供了针对不同操作系统的客户端安装包,其二进制安装包下载页面链接为:https://www.mongodb.com/download-center#community。本章节以RedHat/CentOS 7.0和MongoDB 3.4.24为例,介绍如何获…

指数函数中x的取值范围_谨记!高考数学中容易出错的几个地方

高考生想要取得好的数学成绩必须要认真复习,在复习的时候大家要掌握一些内容,这样能使大家取得事半功倍的学习效果,下面小更为大家带来2019高考数学易犯的72个低级错误这篇内容,希望高考生能够认真阅读。1.集合中元素的特征认识不…