在家学习内核黑客攻击和嵌入式开发?

时间:2008-09-13 18:48:14

标签: linux kernel embedded

我一直被内核黑客和嵌入式系统所吸引 开始乱搞这些东西有没有人有很好的教程(+容易获得的硬件)? 像写作驱动程序等的工具包,有很好的文档,而且价格合理吗?

谢谢!

6 个答案:

答案 0 :(得分:33)

如果您对内核开发完全不熟悉,我建议不要从硬件开发开始,到一些“仅软件”内核模块(如proc文件/ sysfs)或更复杂的文件系统/网络开发示例,在uml上开发/ vmware / virtualbox / ...机器因此崩溃你的机器不会受到太大伤害:)对于嵌入式开发,你可以选择小型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)

最后但并非最不重要的,浏览内核源代码发行版的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,为写入请求添加动态内存分配。
  • 编写一个非常简单的文件系统。

答案 1 :(得分:5)

鲁比尼的绝对必须this本书。 (可用作硬拷贝或免费软拷贝)

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

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

它们通常具有vga连接器,可以更容易地进行调试。

答案 2 :(得分:3)

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

  

WRT54G值得注意的是,它是第一个发布其固件源代码以满足GNU GPL义务的消费级网络设备。这允许程序员修改固件以更改或向设备添加功能。多个第三方固件项目为公众提供了WRT54G的增强固件。

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

答案 3 :(得分:3)

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

您还可以使用lxr.linux.no,这是交叉引用的Linux代码。如果您必须了解某些内容是如何工作的,并且需要查看代码,那么这是一种简单易行的方法。

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

答案 4 :(得分:1)

有些事情需要准备:

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

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

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

答案 5 :(得分:1)

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