platform是Linux系统提供的一种管理设备的手段,所有SOC系统中集成的独立的外设控制器、挂接在SOC内存空间的外设等都属Platform设备。如ARM S3C6410处理器中,把内部集成的I2C、PTC、SPI、LCD、看门狗控制器都归纳为Platform设备,而这些设备本身就是字符设备。由此可见Platform中的设备是不分字符设备还是块设备。 (字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问。大多数设备为字符设备,以字节为单位,实现file_operations结构体。而如磁盘为块设备,以块为单位接受输入和返回输出。实现block_device_operations结构体.)

在内核源代码中,platform 设备的初始化(注册)用arch_initcall()调用,它的initcall 的level为3;而驱动的注册用module_init()调用,即device_initcall(),它的initcall 的level为6。
kernel 初始化时(kernel_init@init/main.c),按照内核链接文件中(arm系统:kernel/arch/arm/vmlinux.lds)的_initcall_start段的序列依次执行,这样level小的初始化函数先于level大的初始化函数被调用。
所以platform设备先被注册,驱动加载时会调用驱动程序中的probe(),扫描系统中已注册的设备,找到匹配设备后将驱动和设备绑定。 1、一些通用的设备的注册采用优先级高于module_init()的调用方式,如subsys_initcall(),这样与这些设备相关的驱动会后于它们加载,驱动中可以扫描到这些设备;
2、另一些比较独立的设备在驱动中直接注册,它内嵌于驱动之中(如放在驱动中的probe()函数中),当驱动卸载时,设备也会同时卸载。这种设备的系统调用顺序上看是driver_registe()-->device_register(),它们不是先后关系,而是包含关系。 driver_register先于device_register执行,也没有出现于嵌套之中,而且这种方法不常用,比如I2C,适配器先需要于设备注册。 象USB 的hcd驱动,先注册驱动,后注册设备。
在注册设备时,遍历设备所在总线,找到与设备匹配的驱动,再调用device_attach()--> driver_probe_device()。
这时,会调用设备所在总线的probe()函数,如果没有这个函数,则调用匹配到的驱动的probe()函数,这样驱动的扫描函数就被执行了。当然如果前面一步没有找到与要注册的设备匹配的驱动,这个设备注册也就失败了。
先注册设备的那种情况,是调用driver_attach()-->driver_probe_device()。

Linux下platform设备以及platform设备和驱动注册的先后顺序的更多相关文章

  1. Linux下按扇区读写块设备

    本文介绍Linux下按扇区读写块设备(示例TF卡),实际应用是在Android系统上,主要方法如下: 1.找到sdcard的挂载点,在android2.1系统下应该为/dev/block/mmcblk ...

  2. LINUX下的远端主机登入 校园网络注册 网络数据包转发和捕获

    第一部分:LINUX 下的远端主机登入和校园网注册 校园网内目的主机远程管理登入程序 本程序为校园网内远程登入,管理功能,该程序分服务器端和客户端两部分:服务器端为remote_server_udp. ...

  3. linux下如何使用USB存储设备

    如何在Linux环境中使用USB接口的 存储 设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题. 本文就为您提供一套完美的解决方案,通过下面的方法,您仅可以 ...

  4. Linux下烧写工具DNW和USB驱动安装(一)

    转:http://blog.csdn.net/zhengmeifu/article/details/8837930 Linux下编译记录:编译PC端USB驱动和写入工具dnw_linux.tgz压缩包 ...

  5. Linux 下使用umount强行卸载设备

    卸载NFS,结果出现无法卸载的情况 [root@localhost /]# umount /udisk/ umount: /udisk: device is busy umount: /udisk: ...

  6. Linux下方便的块设备查看工具lsblk

    之前在Linux下看有什么块设备,通常都用fdisk什么的或者直接ls /dev/ 去看很不方便. 这个工具属于util-linux-ng包,在RHEL 6.1上是安装好的啦,直接用就好. ubunt ...

  7. Linux下的硬件驱动——USB设备(转载)

    usb_bulk_msg函数 当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提 ...

  8. 在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1)

    在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1) RAID即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护.RAID是一些磁盘的集合, ...

  9. Linux下各硬件装置的文件名

    Linux对计算机各组件/装置的分辨,是和Windows系统完全不一样的!因为各个组件/设备在Linux上都是一个文件!因此,我们在认识各项设备时一定要学习Linux的设备文件名. 众所周知,Linu ...

随机推荐

  1. Delphi IDE下载全地址

    Delphi IDE下载全地址: http://pan.baidu.com/share/home?uk=1060104307#category/type=0 还是网友伟大呀.当然有钱的公司还是应该多多 ...

  2. 补充:学会Twitter Bootstrap不再难

    博客园的兄弟姐妹们很给力,自从这篇文章写出后,有人可能会对2.x版本升级到3.x版本的区别有些好奇和模糊.现在将官方给出的说明贴上去: 从2.x升级到3.0版本 Bootstrap 3并不向后兼容Bo ...

  3. Python设计模式——设计原则

    1.单一职责原则:每个类都只有一个职责,修改一个类的理由只有一个 2.开放-封闭远程(OCP):开放是指可拓展性好,封闭是指一旦一个类写好了,就尽量不要修改里面的代码,通过拓展(继承,重写等)来使旧的 ...

  4. BZOJ 1507 [NOI2003]Editor

    Description Input 输 入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中可能会插入一些回车符,请忽略掉 ...

  5. UI表单

    Monk.UI表单美化插件诞生记!   阅读目录 背景 预览效果 表单组件 普通文本框 多行文本框 复选框 切换滑块 单选框 下拉选择框 数字输入框 时间选择 文件选择 显示文本 按钮 开源地址 背景 ...

  6. 用python实现k近邻算法

    用python写程序真的好舒服. code: import numpy as np def read_data(filename): '''读取文本数据,格式:特征1 特征2 -- 类别''' f=o ...

  7. HttpOnly

    Contents 1 Overview 1.1 Who developed HttpOnly? When? 1.2 What is HttpOnly? 1.3 Mitigating the Most ...

  8. MySQL JDBC的setFetchSize

    MySQL JDBC的setFetchSize http://uuhorse.iteye.com/blog/2163582 http://blog.sina.com.cn/s/blog_6706203 ...

  9. 在eclipse中将项目发布到tomcat的root目录

    (1)设置项目上下文,右击项目-properties   >Web Page Edit

  10. Java二维数组

    package com.test; public class Test { public static void main(String[] args) { // TODO Auto-generate ...