heijin

编程入门 行业动态 更新时间:2024-10-18 05:46:56

heijin

heijin

驱动程序的作用:

1)向linux内核注册/注销设备号,创建/删除设备节点文件(这个操作可以分离出来),供应用程序调用。(设备节点文件中的设备号要与驱动程序申请注册的设备号一致)

2)将物理地址转为虚拟地址进行设备操作,将应用程序的文件调用转为对自定义的驱动函数调用;

驱动的创建:配置环境变量(作用?),在petalinux下创建,并在配置界面选中驱动;驱动代码由自己编写;

驱动的编译:在petalinux下编译,生成.ko文件,即驱动模块;

驱动的调用:在开发板上运行linux系统,(使用命令)加载驱动模块,创建设备节点文件。然后(使用命令)运行应用程序。(应用程序通过设备节点文件关联到驱动程序)

设备号的申请:可以不在驱动代码中写死,而是由Linux内核分配。并且可以把设备节点文件的创建和删除也放到驱动代码中。


设备树:

系统的设备树文件(*.dtsi),包含设备名称,寄存器地址定义等等信息。被内核解析后,将各个设备类型创建到/proc/devicetree目录下;

驱动程序(可以按照设备名)到设备树中找到相应的设备,然后进行初始化和注册设备;

如果设备树文件改变了,对于petalinux来说要重新编译到内核。

可以这样理解:设备树提供了设备信息,驱动程序到设备树去查找并根据这个设备信息去初始化和注册设备,创建设备节点文件,然后应用程序去操作设备节点文件,最终操作设备。


pinctrl子系统:

1)不在驱动程序中直接操作寄存器地址,而是通过支持pinctrl的设备树来申请,然后以函数调用的方式来操作;

2)需要修改设备树文件(定义节点并例化设备),使之支持pinctrl方式;


虚拟平台模型分为platform_bus,platform_driver,platform_device,可实现驱动设备分离功能,可根据驱动和设备的属性,自动匹配。
platform_bus首先将驱动和设备树比对,如果没有设备树或者无法匹配,也可以直接比对驱动和设备。
这里的驱动,是指linux与各种设备之间的接口及文件调用方式;设备,是指针对外围设备的不同时序或使用方式;两者都是代码,结合起来可以操作各种设备。
platform_bus匹配后,会调用驱动程序的probe函数去读设备程序的信息,获取寄存器操作地址等等。
在虚拟平台模型下,可以使用设备树替代platform_device,此时,platform_driver中的属性参数要去和设备树匹配;
(如果一个SPI总线挂了几个外设,那么可能是通过不同的驱动程序来实现的。因为设备程序不同,那么驱动在调用设备函数的时候也不同)

更多推荐

heijin

本文发布于:2024-03-08 08:47:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720380.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:heijin

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!