在家里学习内核黑客和embedded式开发?

我一直被内核入侵和embedded式系统所吸引。
有没有人得到很好的教程(+易于使用的硬件)开始混淆这样的东西?
有些东西就像用于编写驱动程序的工具包一样,它们具有良好的文档并且价格合理。

谢谢!

如果你是内核开发的新手,我build议不要从硬件开发开始,去proc file / sysfs之类的“纯软件”内核模块,或者更复杂的例子文件系统/networking开发,在uml / vmware / virtualbox / …机器如此崩溃你的机器不会受到太多的伤害:)对于embedded式开发,你可以去一个小的ARM开发工具包或一个小型的通过C3 / C4机器,或任何旧PC,你可以用你的自制烧USB / PCI /任何设备。

一个好的开始可能是Kernelnewbies.org–它为内核开发者提供了大量的链接和有用的信息,并且还提供了一个易于实现的初学者任务列表。

有些书可以阅读:

了解Linux内核 – 一个很好的参考,详细介绍了内核子系统的devise

Linux Device Drivers ( Linux设备驱动程序) – 更像是一个带有大量示例代码的教程,专注于帮助您解决Linux内核的关键问题。 介绍了内核模块的构build过程和基础知识。

Linux内核模块编程指南 – 一些更多介绍性资料

正如前面所提到的,查看linux代码总是一个好主意,尤其是Linux内核API往往会经常改变… LXR通过非常漂亮的浏览界面帮助很多 – lxr.linux.no

要理解内核构build过程,这个链接可能会有帮助:

Linux内核Makefile(kbuild)

最后但并非最不重要的,浏览Kernel Source发行版的Documentation目录!

以下是一些从内核开发课程中被盗取的有趣练习:

  • 编写一个内核模块,在每次读取访问时创build一个报告当前时间的文件/ proc / jiffies。
  • 编写一个提供proc文件/ proc / sleep的内核模块。 当一个应用程序在这个文件(“echo 3> / proc / sleep”)中写入若干秒的ASCII文本时,它应该阻塞指定的秒数。 写入访问对文件内容应该没有副作用,即在读取访问时,文件应该是空的(参见LDD3,第6/7章)
  • 编写一个proc文件,你可以临时存储一些文本(使用echo“blah”> / proc / pipe),然后再次取出(cat / proc / pipe),清除文件。 注意同步问题。
  • 修改pipe道示例模块以注册为字符设备/ dev / pipe,为写入请求添加dynamic内存分配。
  • 写一个非常简单的文件系统。

Rubini的这本书绝对是必须的 。 (可作为硬拷贝或免费软拷贝使用)

他给几个虚拟驱动程序的实现,不要求你有任何硬件,而不是你的电脑。 因此,要开始内核开发,这是最简单的方法。

至于做embedded式工作,我会build议购买众多的SBC(单板计算机)之一。 有一些这些是基于x86处理器,通常与PC / 104接口(电气PC / 104是相同的ISA总线标准,但基于可堆叠连接器而不是边缘连接器 – 非常容易接口定制硬件)

他们通常有vga连接器,使debugging更容易。

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

WRT54G作为第一款发布固件源代码以满足GNU GPL义务的消费级networking设备而引人注目。 这允许程序员修改固件来改变或添加设备的function。 几个第三方固件项目为公众提供WRT54G的增强固件。

我试过在它上面安装OpenWrt和DD-WRT固件。 您可以检查这些作为黑客在低成本平台上的起点。

对于初学者来说,最好的方法是阅读大量的代码。 由于Linux是开源的,你会发现几十个驱动程序。 find一个像你想写的东西一样的方法。 你会发现一些体面和相对容易理解的代码(回环设备,ROM fs等)

您也可以使用lxr.linux.no ,它是Linux代码的交叉引用。 如果你必须弄清楚是如何工作的,并且需要查看代码,这是一个很好的和简单的方法。

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

有些事情要做好准备:

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

Linksys NSLU2是一个低成本的方式来获得一个真正的embedded式系统的工作,并有一个USB端口添加外设。 任何一个无线接入点也可以使用,请参阅OpenWrt兼容性页面。 请注意,目前在商店中发现的Linksys WRT54G型号不能再用于Linux:为了降低成本,它们的RAM和闪存较less。 思科/ Linksys现在使用WRT54G上的vxWorks,具有更小的内存占用。

如果您真的想进入这个领域,那么embedded式CPU的评估套件起价为几百美元。 我build议不要把钱花在这些上,除非你需要专业的工作或咨询合同。

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