• 初涉驱动实验


    u-boot:启动内核

    内核:启动应用   

    应用:读写文件,点灯,获取按键

      应用: open,read,write   

    c库   

      |ststem call interaface          swi val  根据发生异常的原因,调用处理函数

    内核|   

      |驱动 led_open,led_read,led_write      硬件

         

    驱动框架:

    1、 led_open,led_open........

    2、怎么告诉内核   

      a、定义一个file_operations结构,填充   

      b、注册,告诉内核   

      c、谁来调用register_chrdev驱动入口函数

    crw-rw----    1 0        0          3, 173 Jan  1 00:00 ttyzd
    crw-rw----    1 0        0          3, 174 Jan  1 00:00 ttyze
    crw-rw----    1 0        0          3, 175 Jan  1 00:00 ttyzf
    crw-rw----    1 0        0          1,   9 Jan  1 00:00 urandom
    crw-rw----    1 0        0        253,   0 Jan  1 00:00 usbdev1.1_ep00
    crw-rw----    1 0        0        253,   1 Jan  1 00:00 usbdev1.1_ep81
    crw-rw----    1 0        0          7,   0 Jan  1 00:00 vcs
    crw-rw----    1 0        0          7, 128 Jan  1 00:00 vcsa
    crw-rw----    1 0        0         10, 130 Jan  1 00:00 watchdog
    crw-rw----    1 0        0          1,   5 Jan  1 00:00 zero

    c开头的为字符设备

    -rw-r--r--    1 1000     1000          210 Dec 26  2015 fstab
    drwxr-xr-x    2 1000     1000         4096 Dec 26  2015 init.d
    -rw-r--r--    1 1000     1000           53 Dec 26  2015 inittab

    -表常规文件

    d代表文件目录

    app: open("/dev/xxx"),read   ,write  

         属性  c  111 主设备号

    -----------------|--------------------------------------------

            |   c库

    ----------------- |------------------------------------------chrdv

          VFS | 0,1,2,3,4......111,.....找到file_operations

    ------------------|-------------------------------------------内核

    ------------------|-------------------------------------------

      led_open,led_read,led_write            驱动

    ---------------------------------------------------------------

    驱动程序1、^2、定义^file_operation: open=led_open  write=led_write

    3、入口函数用register——chrdev(major,name,^)

    突然发现编译时不能使用大写字母文件编译时

    major = register_chrdev(0, "first_drv", &First_drv_fops);

    系统自动分配主设备号

    cat /proc/devices      查看设备

    mknod /dev/xxx c 252  0    添加设备文件

    insmod first_drv.ko      注册驱动

    rmmod first_drv.ko     卸载驱动  

    1、驱动

    a、自动分配设备号

    b、手动分配

    2、应用程序

    a、mknod /dev/xxx c 主  从

        手动

    b、自动建立  udev   ,mdev   根据驱动提供系统信息来创建设备节点

    firstdrv_class = class_create(THIS_MODULE, "firstdrv");   //´´½¨Àà
    firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xxx"); /* /dev/xxx */

     需要添加MODULE_LICENSE("GPL");否者无法注册

    # cat dev
    252:0

    # ls
    dev        subsystem  uevent

    -r--r--r--    1 0        0            4096 Jan  1 03:14 dev
    lrwxrwxrwx    1 0        0               0 Jan  1 03:19 subsystem -> ../../../class/firstdrv
    --w-------    1 0        0            4096 Jan  1 03:19 uevent

  • 相关阅读:
    SpringBoot2整合Spring Session
    Nginx学习笔记(二)——Nginx的常用配置
    Docker学习笔记(三)——容器提交&上传镜像
    Docker容器里使用systemctl命令报错(System has not been booted with systemd as init system)
    ab(Apache Bench)测试工具安装与使用
    SpringBoot整合Spring security实现用户权限控制
    Docker学习笔记(二)——Hello world
    TensorFlow上实践基于自编码的One Class Learning
    模块度与Louvain社区发现算法
    异常检测算法--Isolation Forest
  • 原文地址:https://www.cnblogs.com/CZM-/p/5080856.html
Copyright © 2020-2023  润新知