驱动开发是嵌入式 Linux 产品开发的重要组成部分,驱动是将芯片底层与Linux应用连接起来的桥梁。驱动程序的好坏直接影响和决定着产品的稳定性,稳定的驱动程序是产品可靠性的基石。

编写 Linux 驱动,首先要具备相关的电路基础知识,具有裸机开发和单片机开发能力,只有了解了硬件的基本工作原理才能编写出可靠的驱动程序。同时,必须对 Linux 驱动体系有清晰的认识,才能将设备在 Linux下驱动起来。

1. 基础知识

1.1驱动在 Linux中的地位

驱动是 Linux 系统中设备和用户之间的桥梁,Linux 系统中,访问设备必须通过设备驱动进行操作,用户程序是不能直接操作设备的。Linux 系统中硬件、驱动和用户程序的关系如下图所示:

驱动程序运行于内核空间,用户程序只能通过内核提供的系统调用,由经 VFS 以及驱动程序才能访问和操作硬件,硬件设备传递的数据也必须经过驱动、VFS 和系统调用才能被用户程序接收。所以说,设备驱动是应用程序访问系统设备以及进行数据传递的桥梁和通道。

1.2驱动的基本要素

Linux 设备驱动是具有入口和出口的一组方法的集合,各方法之间相互独立。驱动内部逻辑结构如下图所示:

1.3 Linux内核模块

Linux 内核具有很强的可裁剪性,很多功能或者外设驱动都可以编译成模块,在系统运行中动态插入或者卸载,在此过程中无需重启系统。模块化设计使得 Linux 系统很灵活,可以将一些很少用到或者暂时不用的功能编译为模块,在需要的时候再动态加载进内核,可以减小内核的体积,加快启动速度,这对嵌入式应用极为重要。

我们前期开发驱动时,可以将驱动编译成模块,在开发板linux系统上动态加载,这样每次修改调试驱动时,只需要单独编译驱动模块就可以,不用编译整个内核。

NUC972---Linux驱动开发的更多相关文章

  1. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  2. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  3. 【转】linux驱动开发的经典书籍

    原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...

  4. Linux驱动开发 -- 打开dev_dbg()

    Linux驱动开发 -- 打开dev_dbg() -- :: 分类: LINUX linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KER ...

  5. Linux驱动开发学习的一些必要步骤

      1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ...

  6. 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  7. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  8. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  9. Linux内核(17) - 高效学习Linux驱动开发

    这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...

  10. s3c6410 Linux 驱动开发环境搭建

    s3c6410 Linux 驱动开发环境搭建 -- 既然你是做Linux开发的,你还用虚拟机? 非常多人都在win下做开发,于是SD_writer.exe之类的烧写工具"大行其道" ...

随机推荐

  1. Object类--toString方法

    toString()方法 1.在Object类中定义toString()方法的时候返回对象的哈希code码(对象地址字符串) 直接输出对象: 2.可以通过重写toString()方法表示出对象的属性之 ...

  2. python面向对象笔记

    一.封装(属性/私有方法/公有方法/静态方法/构造函数...) # 定义一个类 class Animal: # 私有成员(用_开头的约定为私有成员 - 注:仅仅是君子协定) _age = 0 # 构造 ...

  3. Zookeeper单机伪集群

    Zookeeper单机伪集群 1.配置 zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是 ...

  4. 解密gzip压缩的网页数据流(转)

    因为采集某个网页遇到问题,一直无法获取页面数据. 经过一番排查,发现该网站会检查客户端的Header信息,如果遇到不明确的Header信息就直接否定,返回0数据. 如果Header信息正确,就会返回经 ...

  5. VS2017不能打开stdio.h等文件

    从另一台机器上复制过来的项目,由于两台机器的库目录不一致,导致了stdio.h等很多文件都打不开: 解决的办法是从新设置包含目录.选择项目-->%项目名称%属性-->VC++目录,设置包含 ...

  6. set,env,export,source,exec傻傻分不清楚?

    https://segmentfault.com/a/1190000013356532

  7. 阿里云logtail采集IDC机房机器需添加AliUids操作

    Configure AliUids for ECS servers under other Alibaba Cloud accounts or on-premises IDCs If Logtail ...

  8. MySQL MySql连接数与线程池

    连接数 1.  查看允许的最大并发连接数 SHOW VARIABLES LIKE 'max_connections'; 2.  修改最大连接数 方法1:临时生效 SET GLOBAL max_conn ...

  9. Django Web开发学习笔记(4)

    第四章 模板篇 上一章的内容,我们将HTML的代码和Python代码都混合在了在view.py的文件下.但是这样做的坏处无疑是明显的,引用DjangoBook的说法: 对页面设计进行的任何改变都必须对 ...

  10. MVC 打印解决方案--SNF快速开发平台3.1

    SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常 ...