我总是被内核黑客和嵌入式系统的世界所吸引。
有没有人有关于开始弄乱这些东西的好教程(+容易获得的硬件)?
诸如用于编写驱动程序的工具包之类的东西,它们带有良好的文档并且价格合理?
谢谢!
如果您对内核开发完全陌生,我建议不要从硬件开发开始,而是使用一些“纯软件”内核模块,如 proc 文件/sysfs 或更复杂的示例文件系统/网络开发,在 uml/vmware/ 上开发virtualbox/...机器,所以让你的机器崩溃不会有太大的伤害:) 对于嵌入式开发,你可以选择一个小型 ARM 开发套件或小型 Via C3/C4 机器,或者任何你可以用自制软件烧录的旧 PC USB / PCI / 任何设备。
一个好的起点可能是Kernelnewbies.org - 它为内核开发人员提供了许多链接和有用的信息,并且还提供了一个易于实现的任务列表以供初学者处理。
一些要读的书:
了解 Linux 内核- 一个很好的参考资料,详细介绍了内核子系统的设计
Linux 设备驱动程序- 编写起来更像是一个包含大量示例代码的教程,重点是让您了解并解释 linux 内核的关键方面。它介绍了内核模块的构建过程和基础知识。
Linux Kernel Module Programming Guide - 一些更多的介绍性材料
如前所述,查看 linux 代码总是一个好主意,尤其是 Linux 内核 API 往往会经常更改……LXR 提供了非常好的浏览界面 - lxr.linux.no
要了解内核构建过程,此链接可能会有所帮助:
最后但同样重要的是,浏览内核源代码发行版的文档目录!
以下是一些从内核开发课程中偷来的有趣练习:
绝对必须是鲁比尼的这本书。(提供硬拷贝或免费软拷贝)
他提供了几个虚拟驱动程序的实现,这些虚拟驱动程序不需要您拥有除 PC 之外的任何硬件。因此,对于开始内核开发来说,这是最简单的方法。
至于做嵌入式工作,我建议购买那里的众多 SBC(单板计算机)之一。其中有许多基于 x86 处理器,通常带有 PC/104 接口(在电气上 PC/104 与 ISA 总线标准相同,但基于可堆叠连接器而不是边缘连接器 - 非常容易与自定义硬件连接)
他们通常有 vga 连接器,可以更轻松地进行调试。
对于嵌入式 Linux 黑客,您可以随处购买的简单 Linksys WRT54G 路由器是一个独立的开发平台http://en.wikipedia.org/wiki/Linksys_WRT54G_series:
WRT54G 以作为第一个发布固件源代码以满足 GNU GPL 义务的消费级网络设备而著称。这允许程序员修改固件以更改或添加设备功能。几个第三方固件项目为公众提供了 WRT54G 的增强固件。
对于初学者来说,最好的方法是阅读大量代码。由于 Linux 是开源的,因此您会发现许多驱动程序。找到一个在某些方面像你想写的东西一样有效的东西。您会发现一些体面且相对易于理解的代码(环回设备、ROM fs 等)
您还可以使用lxr.linux.no,这是交叉引用的 Linux 代码。如果您必须找出某些东西是如何工作的,并且需要查看代码,这是一个很好且简单的方法。
还有一本 O'Reilly 的书(了解 Linux 内核,第 3 版是关于 2.6 内核的),或者如果你想要免费的东西,你可以使用高级 Linux 编程书(http://www.advancedlinuxprogramming.com/) . 还有很多关于文件系统、网络等的特定文档。
一些需要准备的东西:
Linksys NSLU2是一种让真正的嵌入式系统工作的低成本方式,并且有一个 USB 端口来添加外围设备。也可以使用任意数量的无线接入点,请参阅OpenWrt 兼容性页面。请注意,您可以在商店中找到的当前型号的 Linksys WRT54G 不能再与 Linux 一起使用:它们的 RAM 和闪存更少,以降低成本。Cisco/Linksys 现在在 WRT54G 上使用 vxWorks,内存占用更小。
如果你真的想进入它,嵌入式 CPU 的评估套件起价为几百美元。我建议不要在这些上花钱,除非您出于工作或咨询合同的专业需要。
我完全是内核黑客的初学者 :) 我决定买两本书“Linux 程序开发:练习指南”和“编写 Linux 设备驱动程序:练习指南”,它们写得很清楚,为进一步学习提供了良好的基础。