一年前我写了人生中的第一个linux内核的驱动,是一个gpio驱动,用到了misc、ioctl、sem等。我写完之后天真地以为自己已具有开发驱动的能力。一年后的我看了到了usb和net驱动,我发现自己有很多不懂的地方。一开始我还不以为然,把那些不懂的看做黑盒,认为只要内核已完成的事就可以不去理解它,开发驱动只要对内核提供的接口进行填充就可以了。于是我有一个想法——写一些总线的模板,把驱动共同的部分(主要是不设计硬件的部分)写好,当要开发具体硬件驱动时,只要写一些对硬件操作的代码。这样写linux内核驱动时就和写裸机驱动差不多。我确实做了一些。
但现在我发现,这种模式化的工作并不能让我对驱动有更深的认识。当然我并不否定我的想法,只是我觉得要先了解一些深层次的东西。
这时我用眼睛透视usb、pci、scsi等系统提供的模块之后,我发现了kobject、sysfs。这才是一切驱动的摸板。接下来我要围绕设备模型写一些文章,希望对大家有帮助。先来点模式化的东西,小弟我智商低下、学术浅薄,如有谬论请大家原谅。再来点实际的,小弟我确实智商低下、学术浅薄,如有谬论请大家务必原谅。