历史上的今天
今天是:2024年12月03日(星期二)
2021年12月03日 | 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
2021-12-03 来源:eefocus
视频下载地址:
驱动注册:http://pan.baidu.com/s/1i34HcDB
设备注册:http://pan.baidu.com/s/1kTlGkcR
总线_设备_驱动注册流程详解
• 注册流程图

• 设备一般都需要先注册,才能注册驱动
– 现在越来越多的热拔插设备,反过来了。先注册驱动,设备来了再注册
设备
• 本节使用的命令
– 查看总线的命令#ls /sys/bus/
– 查看设备号的命令#cat /proc/devices
• 设备都有主设备号和次设备号,否则255个设备号不够用
– 查看杂项设备号的命令#cat /proc/misc
设备注册
关于注册设备的一点说明
• 早先的Linux会使用单独的文件注册设备,现在大多是使用引入的虚拟
平台,使用虚拟平台来注册设备会容易很多
• 如果大家在网上看到大段的注册设备的代码,可简单了解一下,知道
有这么个东西就成,不用去深究。不要去学习“屠龙技”,现在基本都
是直接在平台文件中注册设备
注册设备
注册设备使用结构体platform_device,该结构体在头文件“vim
include/linux/platform_device.h”中。头文件中也有注册设备和卸载设
备的函数,了解即可。


• 操作过程
– 注册设备。将设备结构体放到平台文件中,会自动注册设备,不用去调
用注册设备的函数。
– 在Kconfig文件中添加编译HELLO设备的宏定义(前面教程中已经添加)
– 配置menuconfig中的HELLO宏定义,生成新的.config文件
– 生成新的zImage
• 注册完之后在虚拟平台总线下可以查到注册的设备
– ls /sys/devices/platform/
驱动注册
• 驱动注册
– 很重要,牢牢掌握,以后写任何Linux驱动都会用到
• 实验
– 在mini_linux_module的基础上添加驱动注册部分
驱动注册——头文件
• 驱动注册使用结构体platform_driver,该结构体在头文件“vim
include/linux/platform_device.h”中
• 驱动注册platform_driver_register,驱动卸载函数
platform_driver_unregister也在这个头文件中
– 这两个函数的参数都只有结构体platform_driver
驱动注册——注册结构体

驱动注册——注册结构体
• 驱动常见的几种状态,初始化,移除,休眠,复位
– 就像PC一样,有的驱动休眠之后无法使用,有的可以使用;有的系统唤
醒之后,驱动需要重新启动才能正常工作,也有直接就可以使用等等
• probe函数
– platform_match函数匹配之后,驱动调用的初始化函数
• remove函数
– 移除驱动函数
• suspend函数
– 悬挂(休眠)驱动函数
• resume函数
– 休眠后恢复驱动
• device_driver数据结构的两个参数
– name和注册的设备name要一致
– owner一般赋值THIS_MODULE
实验
• 在mini_linux_module的基础上添加驱动注册部分
• 编译,在开发板上加载和卸载驱动
史海拾趣
|
近年来智能交通系统发展迅速,它力图把先进的信息技术、通信技术、计算机技术、电子控制技术等高新技术有效地集成运用于整个交通运输管理体系,在大范围内建立起一种全方位的实时、准确、高教的交通运输综合管理系统。迄今为止,日本、美国、西欧、 ...… 查看全部问答> |
|
[code] u-boot> setenv bootargs root=/dev/mtdblock2 rw rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 mem=64M u-boot>setenv bootcmd nand read 30000000 80000 300000\\;bootm 30000000 /code] 从上面的命令中可以看出来有没有 ...… 查看全部问答> |
|
我在用F135的信息区(1000~10FF)保存系统参数时,按照魏小龙书上去做, 发现几个问题: 1)用例程可以解锁FALSH,并写入测试数据,并执行正常的加锁指令后, 用JTAG再次下载程序代码后,在程序 ...… 查看全部问答> |
|
我用的是IAR Embedded Workbench IDE 3.42A 今天发现一个奇怪的小问题,程序如下: #include "msp430x16x.h" int main( void ) { int n,m,k,sum; n=2; m=3; sum=n+m; k=sum; } 调试的时候,发现k和sum在Watch窗口, ...… 查看全部问答> |
|
最近做一个新系统,仿真时序要求通过,最后通过AS下载到板子上拿到低温箱做低温试验时数据出现重写的问题,于是用JTAG在线调试想看看哪里数据有错误,但只要一接上JTAG,系统就完美运行,想请教一下这两者之间有啥区别吗,这个问题该如何解决呢?… 查看全部问答> |




