IMX6ULL嵌入式Linux驱动学习笔记(一)

IMX6ULL-Linux开发学习

以下内容是我在学习正点原子IMX6ULL开发板alpha中记录的笔记,部分摘录自正点原子IMX6ULL开发手册

一、应用程序和驱动的交互原理交互原理

驱动就是获取外设或者传感器数据,控制外设。数据会提交给应用程序。Linux下驱动编写既要编写一个驱动,还要编写一个简单的测试应用程序APP。单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。Linux下驱动和应用是完全分开的。

  • 用户空间(用户态)和内核空间(内核态)

    • Linux操作系统内核和驱动程序运行在内核空间,应用程序运行在用户空间,避免应用程序不正确的使用资源对系统产生危害。

    • 应用程序想要访问内核资源有三种办法:系统调用、异常(中断)和陷入(软中断)。应用程序不会直接调用系统调用,而是通过API函数来间接的调用系统调用,比如POSIXAPI和C库等。unix类操作系统种最常用的编程接口就是POSIX

    • 系统调用处于内核空间,应用程序无法直接访问,因此需要“陷入”到内核,方法就是软中断,陷入内核以后还要指定系统调用号。(每个系统调用都有一个系统调用号)。
      img-vruCxuvl-1600598716227

    • 应用程序可以直接使用系统调用函数,比如:openclose等,也可以使用C库提供的函数。上图的左侧竖线表示直接使用系统调用,右侧竖线表示使用C库里面的函数,而C库里面的函数最终也是调用的系统调用函数。

二、嵌入式驱动开发分类

Linux驱动分为3大类:

  1. 字符设备驱动,最多的。
  2. 块设备驱动,存储。
  3. 网络设备驱动。

一个设备不一定只属于某一个类型。比如无线网卡,属于网络设备驱动,因为他又有USBSDIO,因此也属于字符设备驱动。

三、字符设备驱动开发

  • Linux里面一切皆文件,驱动设备表现就是一个/dev/目录下的一个文件,比如/dev/led文件,应用程序调用open函数打开设备,比如led。应用程序通过write函数向/dev/led写数据,比如写1表示打开,写0代表关闭。如果关闭设备就是调用close函数。
  • 编写驱动的时候也需要编写驱动对应的openclosereadwrite函数。字符设备驱动file_operation结构体。
  1. 驱动最终是被应用调用的,在写驱动的时候要考虑应用开发的便利性。
  2. 驱动是分驱动框架的,要按照驱动框架来编写,对于字符设备驱动来说,重点编写应用程序对应的openclosereadwrite等函数。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值