【问题标题】:Learning kernel hacking and embedded development at home? [closed]在家学习内核黑客和嵌入式开发? [关闭]
【发布时间】:2025-12-17 20:00:02
【问题描述】:

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

谢谢!

【问题讨论】:

标签: linux kernel embedded


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      如果您对内核开发完全陌生,我建议不要从硬件开发开始,而是使用一些“纯软件”内核模块,如 proc 文件 / sysfs 或更复杂的示例文件系统 / 网络开发,在 uml 上开发/vmware/virtualbox/... machine 所以让你的机器崩溃不会有太大的伤害 :) 对于嵌入式开发,你可以使用小型 ARM 开发套件或小型 Via C3/C4 机器,或任何可以烧录的旧 PC使用您的自制 USB / PCI / 任何设备。

      Kernelnewbies.org 可能是一个很好的起点——它为内核开发人员提供了许多链接和有用的信息,并且还提供了一个易于实现的任务列表供初学者解决。

      一些值得阅读的书:

      Understanding the Linux Kernel - 一个很好的参考,详细介绍了内核子系统的设计

      Linux Device Drivers - 编写起来更像是一个包含大量示例代码的教程,重点是让您了解并解释 linux 内核的关键方面。它介绍了内核模块的构建过程和基础知识。

      Linux Kernel Module Programming Guide - 更多介绍材料

      如前所述,查看 linux 代码总是一个好主意,尤其是 Linux 内核 API 往往会经常更改...LXR 提供了非常好的浏览界面 - lxr.linux.no

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

      Linux Kernel 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,为写请求添加动态内存分配。
      • 编写一个非常简单的文件系统。

      【讨论】:

        【解决方案4】:

        绝对必须this Rubini 的书。 (提供硬拷贝或免费软拷贝)

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

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

        它们通常具有便于调试的 vga 连接器。

        【讨论】:

          【解决方案5】:

          需要准备的一些事情:

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

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

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

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              最近更新 更多