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》

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

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

    自动创建设备点。

  • 相关阅读:
    easyUI日期框,默认显示今天,今天以后的日期不能选
    vue实现下拉框全选和输入匹配
    【转载】CSS flex属性深入理解
    ES6学习之二
    Centos7(Firewall)防火墙命令
    DeDeCMS模板标签(2)
    DeDeCMS模板标签(1)
    常用js正则表达式大全
    linux yum 命令
    Linux软链接和硬链接
  • 原文地址:https://www.cnblogs.com/chulin/p/10588170.html
Copyright © 2011-2022 走看看