在家学习内核黑客和嵌入式开发吗?
我一直被内核黑客和嵌入式系统世界所吸引。
有没有人得到关于如何开始使用此类东西的良好教程(+易于使用的硬件)?
诸如编写驱动程序之类的工具包之类的工具,附带良好的文档并且价格适中吗?
谢谢!
解决方案
回答
对于嵌入式Linux黑客来说,可以在任何地方买到的简单Linksys WRT54G路由器是其自身http://en.wikipedia.org/wiki/Linksys_WRT54G_series上的开发平台:
The WRT54G is notable for being the first consumer-level network device that had its firmware source code released to satisfy the obligations of the GNU GPL. This allows programmers to modify the firmware to change or add functionality to the device. Several third-party firmware projects provide the public with enhanced firmware for the WRT54G.
我尝试在其上安装OpenWrt和DD-WRT固件。我们可以检查出这些内容,以此作为在低成本平台上进行黑客攻击的起点。
回答
需要准备的一些事情:
- 我们将进行交叉编译。嵌入式设备将使用MIPS,PowerPC或者ARM CPU,但将没有足够的CPU能力,内存或者存储来在合理的时间内编译自己的内核。
- 嵌入式系统通常使用串行端口作为控制台,并且为了降低成本,通常不将连接器焊接到生产板上。除非我们可以焊接在串行端口连接器上,否则调试内核恐慌非常困难,否则我们将无法获得有关出了什么问题的大量信息。
Linksys NSLU2是使真正的嵌入式系统可以使用的低成本方法,并且具有USB端口以添加外围设备。也可以使用许多无线访问点中的任何一个,请参阅OpenWrt兼容性页面。请注意,我们在商店中找到的Linksys WRT54G的当前型号不能再与Linux一起使用:它们具有较少的RAM和Flash,以降低成本。 Cisco / Linksys现在在WRT54G上使用vxWorks,具有较小的内存占用量。
如果我们真的想使用它,则用于嵌入式CPU的评估套件起价为几百美元。我建议不要在这些上花钱,除非我们需要专业的工作或者咨询合同。
回答
对于初学者来说,最好的方法是阅读大量代码。由于Linux是开源的,因此我们会发现许多驱动程序。找到一种可以在某些方面起作用的方法,例如我们想要编写的内容。我们会发现一些不错的且相对容易理解的代码(回送设备,ROM fs等)。
我们还可以使用lxr.linux.no,它是交叉引用的Linux代码。如果我们必须找出某些东西是如何工作的,并且需要研究代码,那么这是一种很好的简便方法。
还有一本O'Reilly的书(了解Linux内核,第3版是关于2.6内核的),或者如果我们想要免费获取某些东西,可以使用Advanced Linux Programing本书(http://www.advancedlinuxprogramming.com/) 。还有很多有关文件系统,网络等的特定文档。
回答
鲁比尼的这本书绝对是必须的。 (以硬拷贝或者免费软拷贝形式提供)
他提供了几种虚拟驱动程序的实现,这些虚拟驱动程序不需要PC以外的任何硬件。因此,对于内核开发入门来说,这是最简单的方法。
至于进行嵌入式工作,我建议我们购买大量的SBC(单板计算机)之一。其中有许多基于x86处理器,通常带有PC / 104接口(电气上PC / 104与ISA总线标准相同,但是基于可堆叠连接器,而不是边缘连接器,非常容易将自定义硬件与之连接)
它们通常具有vga连接器,可以更轻松地进行调试。
回答
如果我们是内核开发的新手,我建议我们不要从硬件开发开始,而要转到proc文件/ sysfs等一些"仅软件"内核模块,或者对于更复杂的示例文件系统/网络开发,请使用uml / vmware / virtualbox / ...机器,这样使机器崩溃不会对我们造成太大的伤害:)对于嵌入式开发,我们可以选择小型的ARM开发工具包或者小型的Via C3 / C4机器,或者可以用自制软件刻录的任何旧PC。 USB / PCI /任何设备。
Kernelnewbies.org是一个不错的起点,它为内核开发人员提供了许多链接和有用的信息,并且还提供了易于实施的任务列表,供初学者使用。
一些要阅读的书:
了解Linux内核,是很好的参考,详细介绍了内核子系统的设计。
Linux设备驱动程序的编写更像是一个带有大量示例代码的教程,着重于使我们着手并解释Linux内核的关键方面。它介绍了构建过程和内核模块的基础。
Linux Kernel Module编程指南其他入门资料
如前所述,查看linux代码始终是一个好主意,尤其是由于Linux Kernel API经常更改的情况... LXR通过一个非常不错的浏览界面lxr.linux.no可以提供很多帮助
要了解内核构建过程,此链接可能会有所帮助:
Linux内核Makefile(kbuild)
最后但并非最不重要的一点是,浏览Kernel Source发行版的Documentation目录!
以下是一些有趣的练习,它们是从内核开发类中偷偷地窃取的:
- 编写一个内核模块,该模块创建一个/ proc / jiffies文件,以每次读取访问的时间报告当前时间。
- 编写一个提供proc文件/ proc / sleep的内核模块。当应用程序将ASCII文本形式的秒数写入此文件时(" echo 3> / proc / sleep"),它应在指定的秒数内阻塞。写访问应该对文件的内容没有副作用,即对读访问来说,文件应该看起来是空的(请参阅LDD3,第6/7章)
- 编写一个proc文件,我们可以在其中临时存储一些文本(使用echo" blah"> / proc / pipe),然后再次将其取出(cat / proc / pipe),清除该文件。当心同步问题。
- 修改管道示例模块以将其注册为字符设备/ dev / pipe,并为写入请求添加动态内存分配。
- 编写一个非常简单的文件系统。
回答
我完全是内核黑客的初学者:)我决定买两本书" Linux程序开发:练习指南"和"编写Linux设备驱动程序:练习指南",它们写得很清楚,为进一步学习提供了良好基础。