zoukankan      html  css  js  c++  java
  • 嵌入式驱动视频2019.03.24

    愿自己每天都有更新。

    字符设备驱动程序之概念介绍

    u-boot:启动内核

    内核:启动应用

    应用层,调用c库,产生中断

    系统调用接口,接收中断,调用不同处理函数。

    VFS,虚拟文件系统。

    驱动程序框架,就是把应用程序中的open,read和write对应

    驱动中的open,read和write

    【我有个疑惑,为什么不把open去掉。只用读写不就行了吗???】

    写驱动的路程

    1.写出open、read、write等功能函数

    2.告诉内核我已写出:定义file_operations结构体,然后填充它。

    3.把file_operations告诉内核,register_chrdev,即注册函数。注册驱动程序。

    4.驱动的入口函数。 first_drv_init(),,还可以有好几个。它调用了register_chrdev

    5.修饰入口函数,用宏实现。module_init(first_drv_init),实际上是个函数指针。

    【其实感觉过程有点复杂,还不如,直接指到函数???】

    主设备号,次设备号。(注册的时候有主设备号。)

    根据设备类型,和主设备号来找到驱动程序。

    内核数组中chrdev,根据设备类型和主设备号major,找到file_operation。这是通过register_chrdev注册到数组中的。

    有注册就有卸载。

    有入口函数,就有出口函数

    first_drv_exit

    unregister_chrdev

    需要修饰,用宏定义结构体,有指针指向first_drv_exit。

    除此之外还要创建设备节点。

    之后程序的改进,led点灯,,

    【这里我想到可以把灯的函数,也就是板子上的操作写到一个地方。】

    单片机是操作物理地址,但这里是操作虚拟地址。

    ioremap进行映射到虚拟地址。

    【还有一点,为什么要使用虚拟地址呢???】

    《字符设备驱动之LED驱动程序_操作LED》

    次设备号是自己规定怎么用的。

    比如用次设备号,点亮不同的灯。

    自动创建设备点。

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/chulin/p/10588170.html
Copyright © 2011-2022 走看看