专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

linux内核是是什么意思,一文看懂Linux内核

来源:小易整编  作者:小易  发布时间:2023-03-20 08:46
摘要:linux内核是是什么意思,一文看懂Linux内核Linux内核预备工作理解Linux内核最好预备的知识点:懂C语言懂一点操作系统的知识熟悉少量相关算法懂计算机体系结构Linux内核的特点:结合了unix操作系统的一些基础概念。Linux内...
从上面可以看出,platform机制最后还是调用了bus_register() , device_add() , driver_register() 这三个关键的函数。
下面看几个结构体:

struct platform_device  (/include/linux/Platform_device.h){  const char     * name;  int            id;  struct device  dev;  u32             num_resources;  struct resource  * resource;};

Platform_device 结构体描述了一个 platform 结构的设备,在其中包含了一般设备的结构体 struct device  dev; 设备的资源结构体 struct resource   * resource;还有设备的名字 const char * name。(注意,这个名字一定要和后面platform_driver.driver àname相同,原因会在后面说明。)

该结构体中最重要的就是resource结构,这也是之所以引入platform机制的原因。

struct resource     ( /include/linux/ioport.h){  resource_size_t start;  resource_size_t end;  const char *name;  unsigned long flags;  struct resource *parent, *sibling, *child;};

其中 flags 表示该资源的类型,start 和 end 分别表示该资源的起始地址和结束地址(/include/linux/Platform_device.h):

struct platform_driver {  int (*probe)(struct platform_device *);  int (*remove)(struct platform_device *);  void (*shutdown)(struct platform_device *);  int (*suspend)(struct platform_device *, pm_message_t state);  int (*suspend_late)(struct platform_device *, pm_message_t state);  int (*resume_early)(struct platform_device *);  int (*resume)(struct platform_device *);  struct device_driver driver;};

Platform_driver 结构体描述了一个 platform 结构的驱动。其中除了一些函数指针外,还有一个一般驱动的 device_driver 结构。

名字要一致的原因:

上面说的驱动在注册的时候会调用函数 bus_for_each_dev(), 对在每个挂在虚拟的platform bus 的设备作__driver_attach()→driver_probe_device(),在此函数中会对dev和drv做初步的匹配,调用的是drv->bus->match所指向的函数。

platform_driver_register 函数中 drv->driver.bus = &platform_bus_type,所以 drv->bus->match 就为 platform_bus_type→match,为 platform_match 函数,该函数如下:

static int platform_match(struct device * dev, struct device_driver * drv){  struct platform_device *pdev = container_of(dev, struct platform_device, dev);  return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);}

是比较 dev 和 drv 的 name,相同则会进入 really_probe() 函数,从而进入自己写的 probe 函数做进一步的匹配。所以 dev→name 和 driver→drv→name 在初始化时一定要填一样的。

不同类型的驱动,其 match 函数是不一样的,这个 platform 的驱动,比较的是 dev 和drv 的名字,还记得 usb 类驱动里的 match 吗?它比较的是 Product ID 和 Vendor ID。

个人总结 Platform 机制的好处:

1、提供 platform_bus_type 类型的总线,把那些不是总线型的soc设备都添加到这条虚拟总线上。使得,总线——设备——驱动的模式可以得到普及。

2、提供platform_device和platform_driver类型的数据结构,将传统的device和driver数据结构嵌入其中,并且加入resource成员,以便于和Open Firmware这种动态传递设备资源的新型bootloader和kernel 接轨。

本文地址:IT百科频道 https://www.hkm168.com/tags/933974_4.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!

共4页 1 2 3 4 当前是最后一页

IT百科
小编:小易整编
相关文章相关阅读
  • 某台微机安装的是64位操作系统中,64位指的是什么

    某台微机安装的是64位操作系统中,64位指的是什么

    某台微机安装的是64位操作系统中,64位指的是cpu的字长,即cpu每次能处理64位二进制数据。字长是cpu的主要技术指标之一,指的是cpu一次能并行处理的二进制位数,字长总是8的整数倍,通常pc机的字长为32位,64位。本教程操作环境:w...

  • c语言是什么意思

    c语言是什么意思

    一:c语言是什么意思C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言,以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低...

  • skype是什么软件

    skype是什么软件

    skype是一种简单的免费软件,使您能够在数分钟之内在世界上的任何角落拨打免费电话,它使用全新的p2p【对等】技术将您与其他skype用户相连接。Skype是一种简单的免费软件,使您能够在数分钟之内在世界上的任何角落拨打免费电话。Sky...

  • 计算机按工作原理可分为什么

    计算机按工作原理可分为什么

    计算机按工作原理可分为数字计算机和模拟计算机。数字式电子计算机是当今世界电子计算机行业中的主流,其内部处理的是一种称为符号信号或数字信号的电信号,它有着运算速度快、运算精度高、通用性强等特点。模拟计算机是根据相似原理,用一种连续变化的模拟量...

  • 什么是电子版文件

    什么是电子版文件

    电子版文件是把纸质文档以计算机软件,如word、excel、pp、cad、photoshop等软件编辑出来,可以通过邮件、u盘、网络或其他传送方式传送的文件。本文操作环境:Windows7系统,DellG3电脑。电子版文件是把纸质文档以计...

  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

  • 计算机的三类总线分别是什么?

    计算机的三类总线分别是什么?

    计算机的三类总线分别是:控制总线、地址总线和数据总线。控制总线用于将微处理器控制单元的信号,传送到周边设备;地址总线用来指定在ram之中储存的数据的地址;数据总线用于在cpu与ram之间来回传送需要处理或是需要储存的数据。总线(Bus)是计...

  • 2k屏幕是什么意思

    2k屏幕是什么意思

    2k屏幕是指分辨率能够达到2560*1440的屏幕。2k是一个通用术语,指屏幕或者内容的水平分辨率达约2000像素的分辨率等级;又因“16:9”的比例是高清晰度视频规格的国际标准,所以2k分辨率在视频制作、显示屏等领域常见格式为2560*1...

  • 周排行
  • 月排行
  • 年排行

精彩推荐