2021.10.12

上次作业总结

作业:实现一个字符设备驱动,实现ioctl接口,实现功能:注册和删除platform device/driver

状态:第一次接触驱动

思路:ioctl接口暂时没有思路,但若仅实现注册与删除,鉴于platform设备驱动本身具有的特殊性。platform驱动主要实现platform_device和platform_driver在platform上的注册与匹配。

需掌握的知识点:platform虚拟总线

                             device和driver和总线

                             需要用到的命令

know1:platform虚拟总线

        Platform驱动实现platform_device和platform_driver在platform上的注册与匹配并相互绑定,然后作为一个普通的字符设备进行相应的应用。

   Platform驱动的核心仍然是字符设备的核心结构:cdev,file_operations(包含的操作函数接口),dev_t(设备号),/dev(设备文件)等。

*提问:是一对一的关系吗?尝试写了一个新的drivername相同但无法匹配上。

know2:总线、驱动、设备

        先定义一个platform_device ,然后用platform_device_register在总线上进行注册;再定义一个platform_driver,用platform_drivier_register注册。Device与driver靠name字段匹配

*对应的是platform_device_unregister和platform_driver_unregister

  内核要求每次出现一个设备就要向总线汇报(注册);每出现一个驱动就要向总线汇报(注册);内核启动时会扫描链接了哪些设备并为每一个设备建立一个struct device变量,并为每一个driver准备一个struct_driver结构变量,并加入相应链表后形成一条设备链表和一条驱动链表,这样就可以通过总线找到挂载在总线上的设备和驱动程序。

know3:常用命令

 make命令等

Insmod/modprobe

Rmmod

Module_init(init_function);

Module_exit(exit_function)

__init/__initdata       [仅用于模块初始化或清除阶段的函数和数据标记]

__exit/__exitdata

Current->pid              [当前进程的进程id]

Current->comm        [当前进程的进程名]

Obj-m: = test.o          [由内核构造系统使用的makefile符号]

/sys/module              [sysfs目录层次结构中包含当前已装载模块信息的目录]

#include <linux/module.h>

#include <linux/version.h>        [两个基本必备的头文件]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值