字符设备、平台驱动和内核模块的区别

问题描述 投票:0回答:1

我是 Linux 内核设备驱动程序代码的新手。 一个问题另一个问题:这两者之间的区别是什么:

  • 角色设备
  • 平台驱动
  • 内核模块

我写这个问题是因为,在我正在检查的同一代码中,有三个部分:每个部分一个。

linux-kernel driver linux-device-driver kernel-module
1个回答
4
投票

平台设备驱动: 平台设备驱动程序通常是为片上组件/设备和片上/片外不可描述/不可发现的设备编写的。

如果有一个片上/片外设备,不具有自识别能力,例如 i2x 设备、基于 GPIO 线的设备或在线(片上)定时器等。那么此类设备需要由驱动程序识别,因为设备没有自我 ID 或识别自身的能力。这通常发生在总线和片上组件上。

这里有详细的解释.

示例平台设备:i2c 设备,内核/文档/i2c/实例化设备状态:

基本上所有的设备驱动都可以分为字符型和块型;基于数据交易大小。

虽然有许多子分类,例如网络设备驱动程序和 X 设备驱动程序,但它们也可以带入设备中,这些设备以经过 tr 的几个字节来承载数据事务(操作)

通常,平台设备驱动程序可以放入字符设备驱动程序部分,因为它们通常涉及片上操作,用于初始化并在需要时传输几个字节,但不以块(KB、MB、GB)为单位数据。

内核模块?

现在,驱动程序可以编译(集成)到内核映像 (zImage/bzImage/...) OR 可以编译(脱离内核)为可选的可调用模块化驱动程序,这不属于内核映像,但作为 .ko(内核对象)文件 (

find /lib/modules/`uname -r`/ -name "*.ko"
) 是文件系统的一部分,它远离内核映像,但可以插入(使用 modprobe/insmod)或删除(使用 rmmod/modprobe -r)根据需要。

另一方面,内置驱动程序无法动态删除,即使我们暂时不需要它。只要系统正在运行,内置驱动程序就会保留在内核中,因此保留在 RAM 上,即使相应的设备“未找到”/“不需要/“关闭”),只是浪费内存空间(在 RAM 上) ).

模块(或模块化驱动程序)只会在必要时从辅助存储介入到 RAM,并且如果设备被移除或不运行,则可以被移除。这可以节省 RAM 并有助于动态分配资源。

© www.soinside.com 2019 - 2024. All rights reserved.