我一直被内核黑客和嵌入式系统所吸引.
开始乱搞这些东西有没有人有很好的教程(+容易获得的硬件)?
像写作驱动程序等工具包,有很好的文档,价格合理吗?
谢谢!
如果您对内核开发完全不熟悉,我建议不要从硬件开发开始,转到一些"仅软件"内核模块,如proc文件/ sysfs,或者更复杂的示例文件系统/网络开发,在uml/vmware /上开发virtualbox/...机器因此崩溃你的机器不会受到太大伤害:)对于嵌入式开发,你可以选择一个小型ARM开发套件或一个小型Via C3/C4机器,或任何你可以用自制软件刻录的旧PC USB/PCI /任何设备.
一个好的起点可能是Kernelnewbies.org--它为内核开发人员提供了大量链接和有用的信息,还提供了一个易于实现的任务列表,可供初学者使用.
有些书要读:
了解Linux内核 - 一个非常好的参考,详细介绍了内核子系统的设计
Linux设备驱动程序 - 更像是一个包含大量示例代码的教程,专注于让您前进并解释Linux内核的关键方面.它介绍了构建过程和内核模块的基础知识.
Linux内核模块编程指南 - 更多介绍性材料
正如之前所建议的那样,查看linux代码总是一个好主意,特别是因为Linux Kernel API经常会发生变化...... LXR通过一个非常好的浏览界面帮助很多 - lxr.linux.no
要了解内核构建过程,此链接可能会有所帮助:
Linux内核Makefile(kbuild)
最后但并非最不重要的,浏览内核源代码分发的Documentation目录!
以下是从内核开发类中无意中窃取的一些有趣的练习:
编写一个内核模块,创建文件/ proc/jiffies,在每次读取访问时以jiffies报告当前时间.
编写提供proc文件/ proc/sleep的内核模块.当应用程序将ASCII文本作为ASCII文本写入此文件("echo 3>/proc/sleep")时,它应该阻止指定的秒数.写访问不应对文件内容产生任何副作用,即在读访问时,文件应显示为空(参见LDD3,ch.6/7)
编写一个proc文件,您可以暂时存储一些文本(使用echo"blah">/proc/pipe)并再次将其取出(cat/proc/pipe),清除文件.注意同步问题.
修改管道示例模块以注册为字符设备/ dev/pipe,为写入请求添加动态内存分配.
写一个非常简单的文件系统.
鲁比尼的这本书是绝对必须的.(可用作硬拷贝或免费软拷贝)
他提供了几个虚拟驱动程序的实现,这些驱动程序不需要您拥有除PC之外的任何硬件.因此,对于内核开发的入门,这是最简单的方法.
至于嵌入式工作,我建议购买众多SBC(单板计算机)中的一台.其中有很多基于x86处理器,通常带有PC/104接口(电气PC/104与ISA总线标准相同,但基于可堆叠连接器而非边缘连接器 - 非常容易与定制硬件接口)
它们通常具有vga连接器,可以更容易地进行调试.