我是Linux内核设备驱动程序代码的新手。 另一个问题:哪个是区别:
我正在写这个问题,因为在我正在检查的相同代码中,有三个部分:每个部分一个。
答案 0 :(得分:3)
平台设备驱动程序 平台设备驱动程序通常是为片上组件/设备和片上/片外不可写/不可发现的设备编写的。
如果有片上/片外设备,它没有自识别能力,比如说i2x设备,基于GPIO线路或在线(片上)定时器等。那么这些设备需要由驱动程序识别,因为这些设备没有自我ID或能够识别自身。这通常发生在总线和片上组件上。
示例平台设备:i2c设备,内核/ Documentation / i2c / instantiating-devices状态:
基本上,所有设备驱动程序都可以分为字符或块;基于数据交易规模。
虽然有许多子分类,如网络设备驱动程序和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并有助于动态分配资源。