Linux驱动知识:Linux Device Model

Kobjects

#include <linux/kobject.h>
//The include file containing definitions for kobjects, related structures, and functions.

void kobject_init(struct kobject *kobj);
int kobject_set_name(struct kobject *kobj, const char *format, ...);
//Functions for kobject initialization.

struct kobject *kobject_get(struct kobject *kobj);
void kobject_put(struct kobject *kobj);
//Functions that manage reference counts for kobjects.

struct kobj_type;
struct kobj_type *get_ktype(struct kobject *kobj);
//Represents the type of structure within which a kobject is embedded. Use get_ktype to get the kobj_type associated with a given kobject.

int kobject_add(struct kobject *kobj);
extern int kobject_register(struct kobject *kobj);
void kobject_del(struct kobject *kobj);
void kobject_unregister(struct kobject *kobj);
//kobject_add adds a kobject to the system, handling kset membership, sysfs representation, and hotplug event generation. kobject_register is a convenience function that combines kobject_init and kobject_add. Use kobject_del to remove a kobject orkobject_unregister, which combines kobject_del and kobject_put.

void kset_init(struct kset *kset);
int kset_add(struct kset *kset);
int kset_register(struct kset *kset);
void kset_unregister(struct kset *kset);
//Initialization and registration functions for ksets.

decl_subsys(name, type, hotplug_ops);
//A macro that makes it easier to declare subsystems.

void subsystem_init(struct subsystem *subsys);
int subsystem_register(struct subsystem *subsys);
void subsystem_unregister(struct subsystem *subsys);
struct subsystem *subsys_get(struct subsystem *subsys)
void subsys_put(struct subsystem *subsys);
//Operations on subsystems.

Sysfs Operations

#include <linux/sysfs.h>
//The include file containing declarations for sysfs.

int sysfs_create_file(struct kobject *kobj, struct attribute *attr);
int sysfs_remove_file(struct kobject *kobj, struct attribute *attr);
int sysfs_create_bin_file(struct kobject *kobj, struct bin_attribute *attr);
int sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
int sysfs_create_link(struct kobject *kobj, struct kobject *target, char *name);
void sysfs_remove_link(struct kobject *kobj, char *name);
//Functions for creating and removing attribute files associated with a kobject.

Buses, Devices, and Drivers

int bus_register(struct bus_type *bus);
void bus_unregister(struct bus_type *bus);
//Functions that perform registration and unregistration of buses in the device model.

int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data, int (*fn)(struct device *, void *));
int bus_for_each_drv(struct bus_type *bus, struct device_driver *start, void *data, int (*fn)(struct device_driver *, void *));
//Functions that iterate over each of the devices and drivers, respectively, that are attached to the given bus.

BUS_ATTR(name, mode, show, store);
int bus_create_file(struct bus_type *bus, struct bus_attribute *attr);
void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr);
//The BUS_ATTR macro may be used to declare a bus_attribute structure, which may then be added and removed with the above two functions.

int device_register(struct device *dev);
void device_unregister(struct device *dev);
//Functions that handle device registration.

DEVICE_ATTR(name, mode, show, store);
int device_create_file(struct device *device, struct device_attribute *entry);
void device_remove_file(struct device *dev, struct device_attribute *attr);
//Macros and functions that deal with device attributes.

int driver_register(struct device_driver *drv);
void driver_unregister(struct device_driver *drv);
//Functions that register and unregister a device driver.

DRIVER_ATTR(name, mode, show, store);
int driver_create_file(struct device_driver *drv, struct driver_attribute *attr);
void driver_remove_file(struct device_driver *drv, struct driver_attribute *attr);
//Macros and functions that manage driver attributes.

Classes

struct class_simple *class_simple_create(struct module *owner, char *name);
void class_simple_destroy(struct class_simple *cs);
struct class_device *class_simple_device_add(struct class_simple *cs, dev_t devnum, struct device *device, const char *fmt, ...);
void class_simple_device_remove(dev_t dev);
int class_simple_set_hotplug(struct class_simple *cs, int (*hotplug)(struct
class_device *dev, char **envp, int num_envp, char *buffer, int buffer_size));
//Functions that implement the class_simple interface; they manage simple class entries containing a dev attribute and little else.

int class_register(struct class *cls);
void class_unregister(struct class *cls);
Registration and unregistration of classes.
CLASS_ATTR(name, mode, show, store);
int class_create_file(struct class *cls, const struct class_attribute *attr);
void class_remove_file(struct class *cls, const struct class_attribute *attr);
The usual macros and functions for dealing with class attributes.
int class_device_register(struct class_device *cd);
void class_device_unregister(struct class_device *cd);
int class_device_rename(struct class_device *cd, char *new_name);
CLASS_DEVICE_ATTR(name, mode, show, store);
int class_device_create_file(struct class_device *cls, const struct class_device_attribute *attr);
void class_device_remove_file(struct class_device *cls, const struct class_device_attribute *attr);
//Functions and macros that implement the class device interface.

int class_interface_register(struct class_interface *intf);
void class_interface_unregister(struct class_interface *intf);
//Functions that add an interface to a class (or remove it).

Firmware

#include <linux/firmware.h>

int request_firmware(const struct firmware **fw, char *name, struct device *device);
int request_firmware_nowait(struct module *module, char *name, struct device *device, void *context, void (*cont)(const struct firmware *fw, void *context));
void release_firmware(struct firmware *fw);
//Functions that implement the kernel firmware-loading interface.

原文地址:https://www.cnblogs.com/realplay/p/10929826.html

时间: 2024-11-08 23:31:27

Linux驱动知识:Linux Device Model的相关文章

Linux基础知识--Linux的文件系统和bash的基础特性

Linux基础知识--linux的文件系统和bash的基础特性 一.Linux文件系统: Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中 linux文件系统遵循FHS(Filesystem Hierarchy Standard,文件系统目录标准),多数Linux版本采用这种文件组织形式.FHS采用了树行组织文件. FHS定义了两层规范,第一层是,/目录下面的各个目录应该要

【linux驱动】linux驱动总览

欢迎转载,转载时需保留作者信息,谢谢. 邮箱:[email protected] 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http://blog.csdn.net/xiayulewa   1.1.  应用,设备,总线,驱动关系,应用到驱动 为了简化问题,上图省略了app层与driver层中间的libc层. linux驱动的开发步骤:设备号→设备(struct cdev,struct input_dev等)→驱动(struct file

Linux驱动知识:中断

These symbols related to interrupt management were introduced in this chapter: #include <linux/interrupt.h>int request_irq(unsigned int irq, irqreturn_t (*handler)( ), unsigned long flags, const char *dev_name, void *dev_id); void free_irq(unsigned

Linux驱动开发--linux下的DMA编程

DMA编程 DMA是一种无需要CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率 DMA方式的数据传输由DMA控制器控制,在传输期间,CPU可以并发地执行其他任务,当DMA结束后,DMA控制器通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后序处理.DMA可以用做内存与外设之间传输数据的方式,这种传输方式之下,数据并不需要经过CPU中转. 1.  DMA与Cache一

linux驱动面试题整理

资料来自网上,简单整理,答案后续补充...... 1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也叫手动创建设备文件.还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后.那么在系统启动期间还有devfs创建了设备文件.一共有三种方式可

1、linux基础知识

第一天linux基础知识 1:linux操作系统组成 linux内核+GNU工具=完整的类UNIX系统 GNU工具(GNU软件是通过GNU项目发布的软件,它是一种根据GNU软件包的README手册以及自由软件指南开发的软件,大多数GNU软件是免费分发的,但不是所有的都这样,然而,所有的GNU软件必须是自由软件.) 2:linux发行版  slackware debian  reehad  Gentoo等 3:linux哲学思想 一切皆文件(硬件也已文件的形式展现在操作系统中) 小型,单一用途程序

linux基础知识发展过程

Linux的基础知识发展过程 1.1 计算机服务器组成 1.1.1 计算机的组成 1) cpu 2)硬盘 3)内存 4)电源 5) Raid卡 1.1.2 运维核心职责 1)网站数据不能丢 2)网站7*24小时运行 3)提升用户体验-访问快 要求:服务器稳定性比普通家用机高 1.1.3 运维人员的原则 简单,易用,高效===(简单粗暴) 1.2 服务器核心知识 1.2.1 服务器相关知识 1.2.2 服务器分类 机架式服务器 刀片式服务器.塔式服务器 1.2.3 服务器尺寸 U-unit服务器的

两篇让我理解linux驱动的文章及我的精练总结

第一篇 转载自csdn vipclx 编写Linux驱动八步骤 一.建立Linux驱动框架(装载.卸载Linux驱动) Linux内核在使用驱动时首先要装载驱动,在装载过程中进行一些初始化动作(建立设备文件.分配内存等),在驱动程序中需提供相应函数来处理驱动初始化工作,该函数须使用module_init宏指定:Linux系统在退出是需卸载Linux驱动,卸载过程中进行一些退出工作(删除设备文件.释放内存等),在驱动程序中需提供相应函数来处理退出工作,该函数须使用module_exit宏指定.Li

第一个Linux驱动查询:统计单词个数

编写Linux驱动程序的步骤 第一步:建立Linux驱动骨架(装载和卸载Linux驱动) 第二步:注册和注销设备文件 可以分别使用misc_register和misc_deregister函数创建和移除设备文件. 第三步:指定与驱动相关的信息 第四步:指回调函数 第五步:编写业务逻辑 第六步:编写Makefile文件 第七步:编译Linux驱动程序 第八步:安装和卸载Linux驱动 将Linux驱动编译进内核,只要将Linux使用该内核,驱动程序就会自动装载 如果Linux驱动程序以模块单独存在