学习《Linux设备模型浅析之驱动篇》笔记(一)
来源:互联网 发布:最好玩的策略游戏知乎 编辑:程序博客网 时间:2024/05/21 03:26
原文中说了,内核版本为2.6.29;这里都贴3.15的内核源码;
文件/drivers/rtc/rtc-s3c.c
static struct platform_driver s3c_rtc_driver = {
.probe = s3c_rtc_probe,
.remove = s3c_rtc_remove,
.id_table = s3c_rtc_driver_ids,
.driver = {
.name = "s3c-rtc",
.owner = THIS_MODULE,
.pm = &s3c_rtc_pm_ops,
.of_match_table = of_match_ptr(s3c_rtc_dt_match),
},
};
文件/include/linux/platform_device.h
/*
* use a macro to avoid include chaining to get THIS_MODULE
*/
#define platform_driver_register(drv) \
__platform_driver_register(drv, THIS_MODULE)
文件/drivers/base/platforms.c
/**
* __platform_driver_register - 为平台级别设备注册一个驱动
* @drv: platform驱动结构
* @owner: module/driver所有者
*/
int __platform_driver_register(struct platform_driver *drv,
struct module *owner)
{
drv->driver.owner = owner;
drv->driver.bus = &platform_bus_type;
if (drv->probe)
drv->driver.probe = platform_drv_probe;
if (drv->remove)
drv->driver.remove = platform_drv_remove;
if (drv->shutdown)
drv->driver.shutdown = platform_drv_shutdown;
return driver_register(&drv->driver);
}
/**
* driver_register - 为bus注册驱动
* @drv: 要注册的驱动
*
* 我们把大部分工作交给了bus_add_driver() 调用,因为我们
* 要处理的大部分事情是bus结构.
*/
int driver_register(struct device_driver *drv)
{
int ret;
struct device_driver *other;
BUG_ON(!drv->bus->p);
if ((drv->bus->probe && drv->probe) ||
(drv->bus->remove && drv->remove) ||
(drv->bus->shutdown && drv->shutdown))
printk(KERN_WARNING "Driver '%s' needs updating - please use "
"bus_type methods\n", drv->name);
other = driver_find(drv->name, drv->bus);
if (other) {
printk(KERN_ERR "Error: Driver '%s' is already registered, "
"aborting...\n", drv->name);
return -EBUSY;
}
ret = bus_add_driver(drv);
if (ret)
return ret;
ret = driver_add_groups(drv, drv->groups);
if (ret) {
bus_remove_driver(drv);
return ret;
}
kobject_uevent(&drv->p->kobj, KOBJ_ADD);
return ret;
}
/**
* driver_find - locate driver on a bus by its name.
* @name: name of the driver.
* @bus: bus to scan for the driver.
*
* Call kset_find_obj() to iterate over list of drivers on
* a bus to find driver by name. Return driver if found.
*
* This routine provides no locking to prevent the driver it returns
* from being unregistered or unloaded while the caller is using it.
* The caller is responsible for preventing this.
*/
struct device_driver *driver_find(const char *name, struct bus_type *bus)
{
struct kobject *k = kset_find_obj(bus->p->drivers_kset, name);
struct driver_private *priv;
if (k) {
/* Drop reference added by kset_find_obj() */
kobject_put(k);
priv = to_driver(k);
return priv->driver;
}
return NULL;
}
- 学习《Linux设备模型浅析之驱动篇》笔记(一)
- 学习《Linux设备模型浅析之设备篇》笔记(一)
- 学习《Linux设备模型浅析之设备篇》笔记(二)
- 学习《Linux设备模型浅析之设备篇》笔记(三)
- 学习《Linux设备模型浅析之设备篇》笔记(深挖一)
- Linux设备模型浅析之驱动篇
- 学习《Linux设备模型浅析之设备篇》笔记(深挖二)
- Linux 设备模型浅析之 uevent 篇
- Linux设备模型浅析之uevent篇
- Linux 设备模型浅析之 uevent 篇
- Linux设备模型浅析之uevent篇
- Linux设备驱动模型学习之基础中的基础篇
- Linux设备驱动模型学习之基础中的基础篇
- Linux设备驱动模型学习之基础中的基础篇
- LINUX设备驱动之设备模型一--kobject
- LINUX设备驱动之设备模型一--kobject
- LINUX设备驱动之设备模型一kobject
- LINUX设备驱动之设备模型一--kobject
- 几道简单题,运用一些常用的C++函数,可以比较顺手
- J2EE肌肉系统—四层模型
- chinese-calender研究日志二(indicator-datatime调试)
- 九成房企恐难实现全年目标 楼市或窄幅波动
- hdu 2544 最短路 (最短路)
- 学习《Linux设备模型浅析之驱动篇》笔记(一)
- Java的插件安装方式,插件开发,常插件,快捷键
- cocos2d-x 3.0 rapidjson 的写入操作应该注意的细节
- IP地址解析
- Spring中ClassPathXmlApplicationContext类的简单使用
- java 生产者与消费者问题实现
- 字符个数统计
- java 网络编程 基于TCP ,UDP的网络传输
- Objective-C如何在category里加入成员变量