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驱动开发-一切刚刚开始的更多相关文章

  1. Linux设备驱动开发环境的搭建(转)

    经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...

  2. Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...

  3. Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux  opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...

  4. Hasen的linux设备驱动开发学习之旅--时钟

    /** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date ...

  5. Linux 设备驱动开发 —— platform设备驱动应用实例解析

    前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...

  6. 《Linux设备驱动开发具体解释(第3版)》进展同步更新

    本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...

  7. Linux设备驱动开发详解

    Linux设备驱动开发详解 http://download.csdn.net/detail/wuyouzi067/9581380

  8. 《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接

    <Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub   spm=a1z10.3-b.w4011-10017777404.30.kvceXB&i ...

  9. linux spi驱动开发学习-----spidev.c和spi test app

    一.spidev.c文件 看一个设备驱动的方法: module_init标识的入口初始化函数spidev_init,(module_exit标识的出口函数) 设备与设备驱动匹配时候调用的probe方法 ...

随机推荐

  1. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  2. (转)关于java.lang.UnsupportedClassVersionError解决方法总结

    背景:在服务器部署程序是后总是怀疑jdk安装不正确,所以打算运行一个小程序进行测试. 通过这样一个方法 ,可以测试jdk是否正确安装. 1 问题描述 首先编写了个Hello.java的代码: 这里我本 ...

  3. tcp netstat用法 TIME_WAIT状态解析 MTU以及MSS

    带着问题写博客 问题1:使用netstat查看有源TCP连接的状态时,经常会看到established状态,那么还有哪些状态,这些状态是如何变化的呢? 问题2:TIME_WAIT状态存在的必要? 问题 ...

  4. jsp元素

    1.指令元素:用于在JSP转换为Servlet阶段提供JSP页面的相关信息,如页面采用的字符编码集.页面中需要导入的类等信息,指令元素不会产生任何的输出到当前JSP的输出流中 指令元素有三种指令:pa ...

  5. pwnable.kr bof之write up

    这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...

  6. Password

    Description Rivest是密码学专家.近日他正在研究一种数列E = {E[1],E[2],--,E[n]}, 且E[1] = E[2] = p(p为一个质数),E[i] = E[i-2]* ...

  7. HTML5——JSON的方法实现对象copy

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  8. 细说 Java 的深拷贝和浅拷贝

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 未经允许,不得转载. 一.前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外.在对一个现 ...

  9. CentOS6 安装Sendmail + Dovecot + Squirrelmail

    本文记录在本地虚拟机CentOS6上搭建Sendmail + Dovecot + Squirrelmail 的Webmail环境的过程,仅仅是本地局域网的环境测试,不配置DNS, 也没有安全认证,Sq ...

  10. TensorFlow学习笔记2——数据类型及简单运算

    0. 小试牛刀 首先,激活tensorflow环境( source activate tensorflow ),随后在ipython里: import tensorflow as tf sess = ...