linux驱动学习
字符设备驱动、块设备驱动、网络设备驱动
linux中一切皆文件,我们在linux中打开一个窗口(字符设备文件),在dev目录下也对应了一个文件,例如我打开了两个窗口,对应两个文件/dev/pts/0和/dev/pts/1,现在在0窗口中向1窗口对应的文件中发送hello world,在1窗口会显示收到的hello world。
linux通过一个文件去操作一个字符设备,字符设备对应的文件都在dev目录下,dev目录下每一个文件都对应一个硬件,linux通过文件去访问设备。
网络设备没有体现一切皆文件的思想,网络设备驱动在/dev下没有对应的文件。
设备驱动模型:
总线,设备,驱动。总线是总线,设备是设备,驱动是驱动。
每一个设备在注册的时候会寻找匹配的驱动,每一个驱动在注册的时候会寻找匹配的设备。
总线帮忙完成匹配,每一种总线匹配的原则不一样,platform总线根据命名字匹配驱动和设备,注册的设备和驱动的名字相同就匹配上了,驱动就进入到运行周期。
驱动分层
linux内核模块
模块本身不编译进内核,这控制了内核的大小;模块一旦被加载,它就和内核中的其他部分完全一样。
.ko文件是一个ELF可执行文件
modinfo查看模块信息
vermagic:version magic版本魔数,模块对应的内核版本。