zoukankan      html  css  js  c++  java
  • 第八章

    编译是由多个文件组成的Linux驱动。对于复杂的Linux 驱动,就需要使用多个源代码文件存放不同的功能代码,这样有利于代码的分类和管理。

    小实验:将 3 .c 文件分别编译成 3 .0 文件,并将这3 .0 文件链接生成.ko 文件。

    1.编写main.c文件,以及fun.cproduct.cproduct.h文件。

    2.编写makefile文件

    obj-m := main.o

    multi_file_driver-y := fun.o  product.o

    3.执行#sh build.sh

    4.执行dmesg命令查看日志信息。

    另外一种代码共享的方式:模块依赖,也称为导出符号。利用导出符号实现代码共享就是:在一个驱动模块里使用另一个驱动模块里的被导出的符号(常量、变量、函数等)。

    卸载由于异常情况而导致的Linux驱动模块无法卸载的情况:

    (1):初始化函数崩溃:由于Linux驱动模块的初始化函数(通过module-init宏指定的函数)进行了某些操作而崩溃,从而导致初始化函数无法正常返回。这种情况的表现是当前Linux驱动模块没有被任何其他的Linux驱动模块使用,但是却明显已经被引用了一次。

    (2)卸载函数被阻塞:在使用rmmod函数卸载驱动Linux驱动时,系统会调用卸载函数,只要卸载函数成功返回时,Linux驱动才会被卸载。如果卸载函数被阻塞,rmmod命令也会被阻塞,也就是说永远不会执行到卸载Linux驱动模块的代码。这种情况的表现是执行rmmod就会停在那不懂了,永远也不会返回到系统的操作提示符。

    蜂鸣器(PWM)驱动:

    1.原理:通过脉冲来控制蜂鸣器的打开和停止。

    2.实现蜂鸣器驱动。

          PWM3个文件组成:pwm.cpwm_fun.hpwm_fun.c。其中pwm.c是驱动主程序。pwm_fun.h引用了相应的头文件,以及定义了一些宏。pwm_fun.c文件则包含了打开和停止PWM的两个函数(pwm_startpwm_stop)。

    3.测试蜂鸣器驱动

          在/data/local目录下,输入如下命令打开PWM

          #./ioctl /dev/pwm_dev 1 0

          输入如下的命令停止PWM

          #./ioctl /dev/pwm_dev 0 0

  • 相关阅读:
    搭建高可用K8S集群
    K8S部署apollo配置中心
    微服务二:微服务的拆分、设计模式、内部结构
    微服务一:微服务概念入门及发展历程
    k8s可视化管理dashboard
    Windows节点加入K8S集群(K8S搭建Linux和Window混合集群)
    K8S搭建单点集群+问题处理
    K8S核心概念
    毕业论文word排版设置
    Anaconda3+PyTorch安装教程
  • 原文地址:https://www.cnblogs.com/haiyin/p/5651653.html
Copyright © 2011-2022 走看看