嵌入式ARM

首先,我们要考虑到作为驱动工程师要做的是摆脱单片机开发的思路,在单板开发(没有OS)过程,设备的驱动接口直接交给了上层,驱动和应用互为平等。在有OS的系统中,驱动独立于硬件平台之外,应用工程师通过虚拟文件系统的read write对具体的IO进行操作。

一般流程分为4步:

1.我们首先要确定硬件平台接线,然后确定该设备接口,比如一般的IIC SPI USB USART 等接口。
2.一般的发行版内核都有通用对应接口的驱动,我们将该文件稍加修改即可,比如内核中带有IIC接口:
AT24C02的存储芯片的驱动,我们现在要做SX8650的驱动(IIC),我们首先可以将该文件复制,然后可以分析,这两款IC无非是读取寄存器的方法不一样,所以我们首先需要修改对应的IIC速率,对应的IO接口配 置方式,对应内存地址分配,对应的寄存器读写方法API等。
3.内核驱动有两种方式加载,一种是以模块的方式动态加载(驱动开发初期推荐),一种是直接编译入内核。
4.修改对应目录下的Kconfig和Makefile

makefile和Kconfig的一般解释:

a、在kconfig中增加(假设对应的驱动为LED)

config LED_ARM9//配置选项,在menconfig时显示
tristate(bool二选一) "lfy config the led"  //bool和tristate的区别是一个是是否变异如内核,一个是三选一,是否编译入内核,模块编译入内核

depends on ARCH_S3C2410|XXX|AAA|BBB  //配置有效先决条件是该平台已被选中

b、在makefile中增加

obj-$(LED_ARM9)+=led.o  //此处注意两点,第一点LED_ARM9一定要与kconfig名称一一对应,

//第二点就是 led.o为你编译驱动后的输出文件,此句话的意思就是如果LED_ARM9被配置,则此句简化为obj-y或者obj- m,取决与你配置内核选择的是编译入内核还是已模块方式编译入内核。

对于单驱动文件可以使用上述makefile的规则,如果一个驱动对应多个输出文件则需要适当修改makefile????

obj-$(LED_ARM9)+=led.o
obj-y :=led.o a.o b.o c.o

-END-

Linux驱动开发流程四步走相关推荐

  1. zynq自定义PL IP核linux驱动开发流程

    概述 zynq的开发主要分为两个阶段: 1)硬件逻辑开发阶段:该过程与传统的fpga 软核cpu(microblaze)开发类似,在vivado中进行.需要在BlockDesign中例化zynq硬核c ...

  2. linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...

    之前我们完成了关于通过查询的方式获取按键键值的驱动程序,可以参考:嵌入式Linux开发--裸板程序之中断控制器. 虽然读取键值没有什么问题,但是测试程序占用CPU过高,一直在不断的查询,资源消耗过大, ...

  3. Linux驱动开发(十五)---如何使用内核现有驱动(显示屏)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  4. 嵌入式驱动开发流程示例(简单的说就是写好驱动,编译,挂载)

    1.在drivers/char/目录下建立一个first_driver_hello.c文件 文件的内容如下 /************************************* NAME:fi ...

  5. Linux驱动开发环境配置(内核源码树构造)

    来源:季义钦BLOG 作者:季义钦 初次接触Linux驱动程序开发,买了一本<Linux设备驱动程序>,第一件事当然就是构建开发环境了!!! 它上面有一个Hello World的列子: / ...

  6. Linux驱动开发(外传)---驱动开发调试方法

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  7. Linux驱动开发(十八)---网络(网卡)驱动学习

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  8. Linux驱动开发(十)---树莓派输入子系统学习(红外接收)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  9. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

最新文章

  1. Instagram赢家通吃照片社交市场 对手一个个只有关门大吉
  2. Exchange Server 2013 LAB Part 4.内部客户端访问
  3. Unity3D绑定button监听事件
  4. 做不背锅的运维(文末有彩蛋!)
  5. WCF与ASP.NET Core性能比较
  6. 怎么批量抠复杂的图_怎么用手机修图,抠图、拼图,证件照制作?
  7. linux环境中通过useradd命令,创建用户的时候指定用户的base-dir
  8. Dojo-API介绍
  9. wenstorm设置谷歌_WebStorm+Chrome调试Vue步骤
  10. Python学习——编码转换
  11. PHP中的PDO详解
  12. synchronize——对象锁和类锁
  13. backup exec删除备份文件
  14. 基于SpringBoot实现简易的单点登录系统(提供gitee源码)
  15. 请相信一个绝地反击的故事
  16. Java 小Q 世界上最遥远的距离 解法二
  17. java实现runnable接口_JAVA 实现Runnable接口
  18. 本地——云服务器文件传输
  19. 保险业首季度保费收入猛增五成
  20. [Excel]VLOOKUP函数使用示例

热门文章

  1. Java中抽象类和接口
  2. Google Protobuf
  3. leetcode题解5-最长回文子串
  4. leetcode题解206-反转链表
  5. 《DSP using MATLAB》示例Example4.6
  6. 输入班级人数,根据人数,挨个输入成绩,求平均分,求最高分最低分
  7. 小算法小心情:背包问题就是陪你看花开向阳
  8. PLSQL Developer工具远程连接Oracle数据库的方法
  9. 怎样写 OpenStack Neutron 的 Extension (三)
  10. 快速切换目录软件推荐——autojump