36

我总是被内核黑客和嵌入式系统的世界所吸引。
有没有人有关于开始弄乱这些东西的好教程(+容易获得的硬件)?
诸如用于编写驱动程序的工具包之类的东西,它们带有良好的文档并且价格合理?

谢谢!

4

6 回答 6

33

如果您对内核开发完全陌生,我建议不要从硬件开发开始,而是使用一些“纯软件”内核模块,如 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

要了解内核构建过程,此链接可能会有所帮助:

Linux 内核 Makefiles (kbuild)

最后但同样重要的是,浏览内核源代码发行版的文档目录!

以下是一些从内核开发课程中偷来的有趣练习:

  • 编写一个内核模块,该模块创建文件 /proc/jiffies,在每次读取访问时以 jiffies 报告当前时间。
  • 编写一个提供 proc 文件 /proc/sleep 的内核模块。当应用程序将若干秒作为 ASCII 文本写入此文件时(“echo 3 > /proc/sleep”),它应该阻塞指定的秒数。写访问应该对文件的内容没有副作用,即,在读访问时,文件应该看起来是空的(见 LDD3,第 6/7 章)
  • 编写一个 proc 文件,您可以在其中临时存储一些文本(使用 echo "blah" > /proc/pipe)并再次将其取出(cat /proc/pipe),清除文件。注意同步问题。
  • 修改管道示例模块注册为字符设备/dev/pipe,为写请求添加动态内存分配。
  • 编写一个非常简单的文件系统。
于 2008-10-06T14:38:26.727 回答
5

绝对必须是鲁比尼的本书。(提供硬拷贝或免费软拷贝)

他提供了几个虚拟驱动程序的实现,这些虚拟驱动程序不需要您拥有除 PC 之外的任何硬件。因此,对于开始内核开发来说,这是最简单的方法。

至于做嵌入式工作,我建议购买那里的众多 SBC(单板计算机)之一。其中有许多基于 x86 处理器,通常带有 PC/104 接口(在电气上 PC/104 与 ISA 总线标准相同,但基于可堆叠连接器而不是边缘连接器 - 非常容易与自定义硬件连接)

他们通常有 vga 连接器,可以更轻松地进行调试。

于 2008-09-30T08:06:17.313 回答
3

对于嵌入式 Linux 黑客,您可以随处购买的简单 Linksys WRT54G 路由器是一个独立的开发平台http://en.wikipedia.org/wiki/Linksys_WRT54G_series

WRT54G 以作为第一个发布固件源代码以满足 GNU GPL 义务的消费级网络设备而著称。这允许程序员修改固件以更改或添加设备功能。几个第三方固件项目为公众提供了 WRT54G 的增强固件。

我试过在上面安装OpenWrtDD-WRT固件。您可以将这些作为在低成本平台上进行黑客攻击的起点。

于 2008-09-13T20:04:50.650 回答
3

对于初学者来说,最好的方法是阅读大量代码。由于 Linux 是开源的,因此您会发现许多驱动程序。找到一个在某些方面像你想写的东西一样有效的东西。您会发现一些体面且相对易于理解的代码(环回设备、ROM fs 等)

您还可以使用lxr.linux.no,这是交叉引用的 Linux 代码。如果您必须找出某些东西是如何工作的,并且需要查看代码,这是一个很好且简单的方法。

还有一本 O'Reilly 的书(了解 Linux 内核,第 3 版是关于 2.6 内核的),或者如果你想要免费的东西,你可以使用高级 Linux 编程书(http://www.advancedlinuxprogramming.com/) . 还有很多关于文件系统、网络等的特定文档。

于 2008-09-15T18:28:35.107 回答
1

一些需要准备的东西:

  • 您将进行交叉编译。嵌入式设备将使用 MIPS、PowerPC 或 ARM CPU,但没有足够的 CPU 能力、内存或存储来在合理的时间内编译自己的内核。
  • 嵌入式系统通常使用串行端口作为控制台,为了降低成本,通常不会将连接器焊接到生产板上。调试内核崩溃非常困难,除非您可以焊接到串行端口连接器上,否则您不会有太多关于出了什么问题的信息。

Linksys NSLU2是一种让真正的嵌入式系统工作的低成本方式,并且有一个 USB 端口来添加外围设备。也可以使用任意数量的无线接入点,请参阅OpenWrt 兼容性页面。请注意,您可以在商店中找到的当前型号的 Linksys WRT54G 不能再与 Linux 一起使用:它们的 RAM 和闪存更少,以降低成本。Cisco/Linksys 现在在 WRT54G 上使用 vxWorks,内存占用更小。

如果你真的想进入它,嵌入式 CPU 的评估套件起价为几百美元。我建议不要在这些上花钱,除非您出于工作或咨询合同的专业需要。

于 2008-09-14T04:12:51.663 回答
1

我完全是内核黑客的初学者 :) 我决定买两本书“Linux 程序开发:练习指南”和“编写 Linux 设备驱动程序:练习指南”,它们写得很清楚,为进一步学习提供了良好的基础。

于 2010-08-31T10:31:56.870 回答