Answers:
首先:
对于婴儿阶段,在“ hello world”模块和虚拟硬件驱动程序上编写各种变体是最好的开始方式(当您对自己的工作有更多了解时,实际的硬件会带来最现实的问题)。
“ Linux设备驱动程序”是一本非常不错的书,值得一读:http : //lwn.net/Kernel/LDD3/
LDD(至少用于)进行了一些练习,您在其中编写了虚拟驱动程序,例如RAM磁盘和虚拟网络设备。
其次:
订阅https://lkml.org/或您将要入侵的子系统的邮件列表。潜伏一下,浏览线程,阅读代码审查(回复补丁),看看人们是什么样的人偶然发现或继续前进。
查看是否可以为尚不支持或尚不很好支持的设备获取(廉价)硬件。廉价的USB NIC或类似的低成本USB外设就是不错的选择。最好是使用过时的或过时的驱动程序,也许是由供应商编写的,也许是针对2.4.x编写的,因为您可以从某种可行的方法开始(排序),然后逐步对其进行改编/重写。进行测试。我的第一个驱动程序尝试是Davicom DM9601 USB NIC。我有一个2.4系列厂商编写的内核驱动程序,后来我慢慢适应了2.6。(注意:Mainline中的驱动程序不是我的驱动程序,最后其他人从头开始写了一个)。
另一个不错的方法是查看“内核新手”站点,特别是“内核管理员”待办事项:http : //kernelnewbies.org/KernelJanitors/Todo 这是初学者应该能够解决的任务列表。
存在许多内核。
Linux
不是唯一的游戏,而是使用最广泛的游戏。有人建议minix
内核了解操作系统概念。我会使用Linux 2.6.x系列,因为它是最常见的,并且不会浪费在(几乎)没人使用的东西上。Solaris,XNU(Mac),FreeBSD和Dragonfly值得注意。1个
找到一些超级简单的东西(串行端口,USB等),然后使其做其他事情。如果遇到其他挑战,请尝试为尚未安装的模块编写内核模块。(请务必先通过pci sudo lspci -nn
和/或usb ID 搜索可疑者sudo lsusb
。)
更新:不要直接在主系统上执行此操作,请使用虚拟机(VM)(计算机中的计算机),如前所述。 VirtualBox可以免费提供此功能。另外,我不想让它看上去不堪重负,但请尝试使用VM快照,以便在某些情况破坏VM本身时可以返回。
更新2:有关Git的说明(DVCSes inc。Merurial,化石,集市,darcs)是一个好主意,主要用于代码和小的重要文件。除非您知道其中的含义,否则请不要使用Git备份音乐,视频等。;)
有人已经提到过“ Linux设备驱动程序”这本书-这是一个很好的参考资料,我也强烈推荐它。
尽管该问题提到发起者并没有专门要求书籍,但最新的“了解Linux内核”一书(http://oreilly.com/catalog/9780596005658/)对于学习Linux内核具有非常重要的意义。 ,还包含有关Linux设备驱动程序的部分。