Linux驱动开发与裸机的区别

裸机驱动开发回顾

  1. 底层,跟寄存器打交道,有些MCU提供了库

Linux驱动开发思维

  1. Linux下驱动开发直接操作寄存器不现实。
  2. 根据Linux下的各种驱动框架进行开发。一定要满足框架,也就是Linux下各种驱动框架的掌握。
  3. 在Linux下驱动最终表现就是 /dev/xxx 文件。打开、关闭、读写…
  4. 现在新的内核支持设备树,这个一个.dts 文件,此文件描述了板子的设备信息。

Linux驱动开发分类

字符设备驱动

最多的

字符设备驱动是以不定长度的字元来传送资料,字符设备是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流;

块设备驱动

存储相关

块设备驱动是以固定大小长度来传送和转移资料的,块设备能够随机,不需要按照顺序地访问固定大小的数据片。

网络设备驱动

网络设备是一个比较特殊的设备,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都有网络驱动决定。它并不存在于/dev下面,所以与一般的设备不同。网络设备是一个net_device结构,并通过register_netdev注册到系统里,最后通过IFconfig -a的命令就能看到。

一个设备不是说只属于某一个类型,比如USB WiFi、SDIO WiFi,属于网络设备驱动,
因为他又有USB和SDIO,因此也属于字符设备驱动。

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

  1. 驱动就是获取外设,或者传感器数据,控制外设。数据会提交给应用程序。Linux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP。

    单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。

    Linux下驱动和应用是完全分开的。

    用户空间(用户态)和内核空间(内核态):
    Linux操作系统内核和驱动程序运行在内核空间、应用程序运行在用户空间。

    应用层想要访问内核资源,怎么办,有三种方法:系统调用、异常(中断)和陷入

你可能感兴趣的:(i.MX6,内核,linux,嵌入式)