• 第七章随笔


    第七章:

         1、尽管linux驱动直接与硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是本机的I/O内存进行交互。

    linux驱动           I/O内存             硬件

         2、linux内核的内存管理模块负责同步I/O内存和硬件中的数据。每一个连接linux的硬件在linux内存中都有映射首地址,在使用ioread、iowrite等函数读写I/O内存时,指定这些首地址。

         3、硬件在被检查到只说明在内核空间中建立了I/O内存,要想在用户空间程序访问硬件,还必须安装可与I/O内存相互交互的驱动程序。

         4、LED驱动提供了两种交互方式:命令和读写设备文件。

         5、linux设备文件的设备号分为主设备号和次设备号,其中,前12位表示主设备号,后20位表示次设备号;设备号有两种指定方法:直接在代码中指定和动态分配;

         6、尽管在代码中指定设备号比较直观,但如果主设备号和次设备号已经存在,建立设备文件就会失败;

         7、多个linux设备文件可以拥有同一个主设备号,但两个设备的主设备号和次设备号不能设置的都一样,使用alloc_chrder_region函数自动分配设备时,baseminor和count参数不要设置太大,否则设备号就会溢出,并且主设备号会进位,从而变成下一个主设备号。int register_chrdev_regionl (dev_t from , unsigned count , const char *name)其中from表示设备号,count表示次设备号范围,name参数表示设备文件名称。

         int dev_dev_number=MKDEV(major,minor)

         int major =MAJOR(dev_number)

         int minor=MAJOR(dev_number)

         使用cdev_add函数将字符设备添加到内核中的字符设备文件中。

         int cdev_add(struct cdev *p ,dev_t dev, unsigned count){

    return  kobj_map(cdev _map,dev,count,NULL,exact_match ,exact

    _lock,p);

         调用cdev_add函数要指定设备文件指针P,设备号(dev)和设备文件数量count,kobj_map负责将设备文件的相关信息添加到保存已建好的设备文件的probes数组中。

         8、使用struct class包含了一些与设备文件有关的变量以及一些回调函数的指针变量;

         9、卸载linux驱动的设备文件需要依次调用device_destroy,class _destroy和unregister_chrdev_region;

         10、LED驱动可以使用两种方式控制LED:通过字符串控制LED;通过I/O命令控制LED;

         11、指定一个模板参数需要使用module_param(name,type,perm)宏,

    name表示参数名,type表参数类型,perm表示读/写权限。指定模板参数时参数名,参数值,括号间不能有空格;

         12、移植linux驱动时,修改linux驱动的源代码应尽量不修改linux的驱动接口。

        13、修改模块参数时注意:

        a、通过module_param_array宏的第三个参数指定数组长度时要使用指针类型的数据;

        b、如果linux驱动包含有多个模块参数,需要将这些参数用单引号或双引号括起来;

        c、指定参数类型的参数值时,逗号前后不能有空格。

  • 相关阅读:
    [转]DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)
    【机器学习】深入理解人工神经网络结构
    【机器学习】初识人工神经网络
    【机器学习】通过正则化解决过拟合问题
    【机器学习】逻辑回归
    【机器学习】用Octave实现一元线性回归的梯度下降算法
    【机器学习】对梯度下降算法的进一步理解
    【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC
    【机器学习】感知机学习算法(PLA)
    【机器学习】1 监督学习应用与梯度下降
  • 原文地址:https://www.cnblogs.com/qiekaifanqie/p/5559838.html
Copyright © 2020-2023  润新知