linux Module驱动开发-一切刚刚开始
linux内核是可以高度定制的,通过配置编译选项达到定制的目的。
在配置kernel编译选项时驱动程序的编译选项一般有三种,不编译、编译为内核驱动、编译为模块驱动。所以linux驱动一般分为两类,内核驱动和模块驱动,当然这两者之间并无绝对区别;当编译为内核驱动时,驱动程序将会随内核一起运行,就相当于内核的固有部分一样;当编译为模块驱动时,每个驱动程序都是独立的个体,在需要的时候安装,用完了再卸载,可以节约硬件资源。以下内容描述的是模块驱动的开发过程。
1、获取内核源码
按照目标器件(PC机或者开发板等等)的参数(ARCH和CROSS_COMPILE)编译源码,一般目标器件都有对应得交叉编译工具链,所以在编译内核源码之前要搭建好编译环境。
2、编写模块驱动代码
此处用最简单的驱动框架做以说明:
①、驱动程序源文件:tsetDriver.c
#include <linux/init.h>
#include <linux/module.h> int static hello_init(void) //入口函数
{
printk(KERN_ALERT"install tsetDriver.ko\n");
return ;
} void static hello_exit(void) //出口函数
{
printk(KERN_ALERT" exit tsetDriver.ko\n");
} module_init(hello_init);
module_exit(hello_exit);
②、Makefile (tips内核程序的Makefile首字母必须大写):
obj-m := tsetDriver.o KDIR := ~/opt/linux-2.6 //编译后的内核源码所在路径 all:
make -C $(KDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=linux-fsl-linux-gnueabi- modules //交叉编译前缀,根据自己的修改 clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
3、编译、安装、测试:
①、编译驱动:(生成*.ko文件)
make
②、安装驱动、卸载驱动:
将*.ko拷贝到目标板,测试安装卸载操作
root@EasyARM-iMX283 /home# insmod tsetDriver.ko
install tsetDriver.ko
root@EasyARM-iMX283 /home# rmmod tsetDriver.ko
exit tsetDriver.ko
4、结语:
驱动开发不同于应用程序开发,驱动程序的入口函数由宏module_init()指定,参数为入口参数,在入口函数中完成资源申请、硬件设备初始化等操作;出口函数由宏module_exit()指定,完成资源释放等操作,以上内容是驱动程序最基本的框架。
linux Module驱动开发-一切刚刚开始的更多相关文章
- Linux设备驱动开发环境的搭建(转)
经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...
- Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...
- Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...
- Hasen的linux设备驱动开发学习之旅--时钟
/** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date ...
- Linux 设备驱动开发 —— platform设备驱动应用实例解析
前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...
- 《Linux设备驱动开发具体解释(第3版)》进展同步更新
本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...
- Linux设备驱动开发详解
Linux设备驱动开发详解 http://download.csdn.net/detail/wuyouzi067/9581380
- 《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接
<Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub spm=a1z10.3-b.w4011-10017777404.30.kvceXB&i ...
- linux spi驱动开发学习-----spidev.c和spi test app
一.spidev.c文件 看一个设备驱动的方法: module_init标识的入口初始化函数spidev_init,(module_exit标识的出口函数) 设备与设备驱动匹配时候调用的probe方法 ...
随机推荐
- (转)Spring boot——logback.xml 配置详解(三)<appender>
文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 1 appender <appender>是<configuration& ...
- iOS TextView输入长度限制 设置placeholder
textView在使用中通常会有2个功能是最常用的 设置placeholder 限制输入长度 TYLimitedTextView刚好是为了解决这个2个问题而诞生的,下面讲解TYLimitedTextV ...
- MySQL学习笔记(三):常用函数
一:字符串函数 需要注意的几个细节: 1.cancat中有一个字符串为null,则结果为null. 2.left(str,x) 和 right(str,x)中x为null,则不返回任何字符串,不是nu ...
- C#的基础数据类型
一.概述 C# 的类型系统是统一的,因此任何类型的值都可以按对象处理.C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类.C#的数据类型主要分为三类:值 ...
- tcpdump使用方法小结
在进行网络测试的时候,我们经常需要进行抓包的工作,当然有许多测试工具可以使用,比如sniffer, ethreal等.但最为方便和简单得就非TCPDump莫属. Linux的发行版里基本都包括了这个工 ...
- 认识sass和webstrom的sass配置
认识sass和webstrom的sass配置 我纳闷啊!电脑死机,我刚才编写的内容全没了. 呵呵! 一.sass的使用 1.首先要到官网下载个稳定的ruby版本,因为sass运行是需要ruby环境 它 ...
- Mybatis Dynamic Query 1.0.2版本
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- echarts_部分图表配置_堆叠折线图
echarts基本图表使用: 1.获取包裹元素(var myChart = echarts.init(document.getElementById('thisId'));)2.设置option(op ...
- Fancytree Javascript Tree的入门使用
Fancytree Javascript Tree的入门使用 一.概念----是做什么的能干什么 Fancytree是一个Javascript控件,它依赖于: <script src=" ...
- 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
作者:蒸米 ----------------- 0x00 序 Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@ ...