首先接触设备树,字符驱动框架

作者: 操作系统  发布:2019-12-21

引进设备树之后,小编有些疑问。借使本人在驱动程序probe函数里面须求用到lcdcontroller相关贮存器的财富是用platform_get_resource函数来取得吗?引入设备树之后platform_device那黄金年代部分是还是不是不要管了?引进设备树之后假使移植三个声卡驱动的概况流程是怎么?七个难题。

黄金年代.使得的种类 :
        字符驱动/字符设备 (像子节流同样访问的装置,led卡塔尔(英语:State of Qatar)
        块驱动 / 块设备  (通过内部存款和储蓄器缓冲区举办访问,能够私自读取的配备 硬盘)、
        网络驱动 / 网络设施(能够与任何主机产生数据沟通的设备 蓝牙5.0、网卡驱动卡塔尔
        
        
二.总线/设备/驱动关系:
        总线在Linux中有三种存在:大器晚成种是设备本人正是七个总线设备,则须要将配备/驱动挂载到其总线上就可以;另后生可畏种是伪造总线,也叫平台总线恐怕platform总线
        总线用于相称系统中设有的 设备 和 驱动。无论是注册设备或然驱动,都急需向总线进行反馈即注册。
     设备注册的办法:  
        设备的登记在板极帮助包的配备文件(arch/arm/mach-exynos/mach-itop4412.c卡塔尔(قطر‎中张开。全数板载专有设备的宣示都会在个中间,驱动是由此编写制定源代码文
        件,编写翻译成.ko模块后动态或静态增多至系统。Linux系统自动达成设备和驱动的相配专业。(热插拔卡塔尔国

三.字符驱动的中心框架:

   1.相同配备驱动的框架:(支持udev设备管理办法的驱动框架)
        (1卡塔尔.模块加载函数--module_init(function卡塔尔(قطر‎模块卸载函数--module_exit(function)
        (2卡塔尔国.定义主次设备号,通过alloc_chrdev_region(卡塔尔(英语:State of Qatar)来动态申请设备号。提议利用动态格局来拿到道具号,幸免冲突。用后要自由。
        (3卡塔尔国.定义class布局体指针,通过class_create(卡塔尔(قطر‎来成立贰个协会体类指针,用来服务于device_create。
        (4卡塔尔(英语:State of Qatar).定义设备描述构造体cdev对象,并因而alloc_cdev()来生成。
        (5卡塔尔国.定义驱动的意气风发组操作方法file_operations。通过cdev_init(卡塔尔(قطر‎来初阶化cdev布局体对象,并增多fs对象。通过cdev_add(卡塔尔(英语:State of Qatar)函数将其增加到系统。
      最终通过device_create()来创建设备节点,并将其注册到系统。
        (6卡塔尔(英语:State of Qatar).生成.ko模块,编写Makefile脚本语言。通过Linux源码树的 Makefile 来搜罗能源和音信,进行模块的编写翻译。。在Linux系统中并未有提供像STM32支出
      提供的IDE,所以只可以通过脚本语言写Makefile编写翻译文件来生成可实践的二进制文件。  
   
   2.杂项设备的驱动框架:
   
        杂项设备引进的缘由: 统一了主设备号为10,方便编程,降低了编制程序的步调;  将不能归类的奇特配备开展归类,节约主设备号。当三个使得要使得多项设备
     时,则无法接纳杂项设备。因为主设备号已经牢固了。
        
        (1卡塔尔国.模块加载函数--module_init(misc_init卡塔尔(قطر‎模块卸载函数--module_exit(misc_exit)
        (2).在misc_init /misc_exit 分别登记/卸载杂项设备
        (3卡塔尔(英语:State of Qatar).制造 miscdev 构造体实例对象,再次创下造驱动操作file_operations布局体实例对象。然后对各操作函数(ioctl/read/open..卡塔尔(قطر‎进行定义。
        
   3.platform器具的框架
   
        平台设备引进的原故:platform平台设备驱动是基于Linux的总线-设备-驱动的模型。总线用于落到实处挂号到系统中的设备和驱动相称。platform
     在Kernel-2.6之后引入了platform机制,为了得以实现对设备所据有能源的统黄金时代管理。将能源和驱动分开,便于程序的移植和复用。在道具和挂号设备中贯彻
     对运用硬件能源,相称音信举行求证。而在驱动程序中经过API对资源开展调用,隔开BSP和驱动。
     
     其中struct platform_device和struct platform_driver是对structdevice_driver 和 struct device的进一层封装而来。财富resource是
     对所占用硬件音讯的悬空。举个例子:内部存款和储蓄器/IO/DMA/IPAJEROQ/BUS
     
        平台设备驱动框架分为五个部分:platform_device部分和platform_driver部分。
                
        (1卡塔尔(英语:State of Qatar). platform设备的注册(把阳台设备加上到总线卡塔尔(英语:State of Qatar) struct platform_device
             在mach-itop4412.c 源文件中经过挂号平台设备布局体 platform_device xxx ,然后再通过贰个platform device结构体将有着的阳台设备
          实行初步化。
          
        (2卡塔尔.平台设备驱动的挂号(把驱动增多到平台总线中去卡塔尔(قطر‎ struct platform_driver
        
              ***平台设备的驱动和通常字符驱动只是在框架上有些许出入,platform驱动注册设备和报名系统财富的职位在probe探测函数中,而相通的字符驱动
              注册设备和报名系统财富的岗位是在使得注册函数中。*********
              
              <1>. 定义多个platform_driver的实例对象,然后定义构造体中的函数--probe/suspend/resume/..。
              <2>. 在probe函数中开展驱动的注册进程 / 杂项设备注册恐怕日常字符驱动注册         
              <3>. 创建驱动操作file_operations布局体对象实例,并拓张开头化定义。
              <4>. 在模块起首化-退出函数中,将定义的platform_driver对象开展登记和销毁。               

     

本文由金沙澳门官网送注册58发布于操作系统,转载请注明出处:首先接触设备树,字符驱动框架

关键词:

上一篇:Java递归时报错
下一篇:没有了