BeagleBone Black的Cape之基本概念

BBB的Cape的基本情况网上说的很详细,我觉得比较好的是一个兄弟的blog(http://blog.csdn.net/wyt2013?viewmode=contents),其中的如何使用GPIO/AD/SPI/I2C及 为BBB制作专属自己的cape(一)-(四),这几篇博文都涉及到cape的事。可以仔细的“研读”,注意是“研读”而非“阅读”,因为中间有“魏来之路”这位兄弟的学习历程,中间有点曲折,值得一读。感谢这位兄弟的分享精神,非常佩服。

其实说到Cape主要涉及到几个主要的问题:

1、什么是Cape,它有什么标准?(可以参考SRM)

2、arm linux 3.x如何管理硬件?--扁平设备树,设备树重载。

3、如何管理Cape?--动态加载,文件IO

一、什么是Cape,它有什么标准?

Cape就是Beaglebone/BeagleBone Black的扩展功能板,如果你使用过PC104,你很容易理解Cape,BBB相当于PC104的CPU模块,而PC104外围AD模块、计数器模块就是它的Cape。

官方的解释如下:

The capes are products of the BeagleBoard.org community, which means they were designed by developers just like you and, although a variety of capes exist today, we can’t wait to see what cool new cape concepts come next. You have the chance to put your thinking cap on and tell us what we’ve missed by conceptualizing and designing your own cape plug-in board!(Capes是BeagleBone.org的产品线,通过capes,你可以开发你想要实现的功能,虽然今天有很多的capes已经完成,但是我们期待看到有更cool的新cape不断产生,挑战你的想像力吧!)

一句话,cape就是符合BBB的驱动接口要求、BBB引脚兼容的外围功能板。

它有什么标准?

1、引脚兼容

2、驱动兼容

3、机械结构兼容

参考资料:

1、http://elinux.org/Beagleboard:BeagleBone_Capes

2、http://elinux.org/BeagleBone_Black_Capes

3、BeagleBone Black system reference manual(SRM),第93页

4、http://elinux.org/Beagleboard:Cape_Expansion_Headers

5、http://elinux.org/Beagleboard:Weather_Cape_Work-Around#EEPROM_Contents


二、arm Linux 3.x如何管理硬件

如果用过linux 2.x的朋友,一定能够深深体会到linux 3.x对硬件管理变化带来的优越性。在linux 2.x的世界里,充满了大量的BSP,Ports代码,其实是违背了linux和软件工程的本质,从软件的维护和易用性来说,剥离与系统无关的东西,采用统一的工具来管理硬件相关的部分,这才是易用和可靠的基础。

linux 3.x对硬件的管理就是一个典型的例子。在linux3.x后,引入了“扁平设备树”的概念,利用设备树来实现内核和硬件的隔离。典型的区别:

1、linux 2.x,移植代码和CPU体系相关,和外围的接口也相关,耦合程度很高,一旦动了其中一部分,需要改动很多。

2、linux 3.x,采用设备树来隔离硬件和内核,内核完成对设备树的管理(加载、重载、卸载等),而设备树来描述硬件相关的资源,如果外围的硬件改动,只需要改变设备树的描述即可,相当于用软件来描述硬件的行为,这样一来系统的柔性就相当的好,可移植性、代码的可读性、系统的可测试性和维护都有相当大的提高。

beagleBone的WIKI上有一句,非常好:"The Device Tree is a data structure for describing hardware. Rather than hard coding every detail of a device into an operating system, many aspect of the hardware can be described in a data structure that is passed to the operating system at boot time." (设备树是一种用于描述硬件的数据结构。相对于将设备的细节描述编码到操作系统,设备树是将硬件的许多内容描述成为一个数据结构,并在操作系统启动时传递到内核。)

这就是设备树的本质

采用一种标准的描述言,一种树状的结构,描述每一个硬件的细节(引脚、寄存器、中断、行为等),并传递到内核,实现对硬件的管理,这就是设备树。

一位大牛,以前读过他的许多书,在CSDN博客上名为21cnbao,写了一篇博文“ARM Linux 3.x的设备树(Device Tree)”,其中关于设备树的描述相当之精彩,强烈推荐。http://blog.csdn.net/21cnbao/article/details/8457546

参考资料:

1、http://blog.csdn.net/21cnbao/article/details/8457546

2、http://elinux.org/BeagleBone_and_the_3.8_Kernel

3、http://rampic.com/beagleboneblack/?p=25

4、http://blog.csdn.net/wyt2013/article/details/16339843

5、http://hipstercircuits.com/adding-beaglebone-cape-support-to-a-kernel-with-device-tree-in-ubuntu/

6、http://blog.csdn.net/cosmoslhf/article/details/9252509

关于设备树,其实,可以先清楚概念,然后再慢慢理解,在后续的blog中,我们会一起学习。


三、cape的管理

cape的管理就是设备树的应用,有一个基本的DTS(设备树的描述文件),在硬件启动的时候,传递到内核,内核接管了相关硬件(已被描述的)。每一个cape就可以采用设备树的一个节点来描述,这样在系统启动后,这个cape就会被内核接管,通过它的对外接口(文件IO)就可以访问相应的cape。

如果有一个新cape怎么办?重新编写DTS?工作量太大了,还要涉及到内核的编译。设备树管理工具还有一个功能,就是overload,相当于C++中的重载,这相概念相信大家一说就明白了,动态的改变设备树的节点,就可以实现在线的设备更新和管理,这就是设备树的重载。

对于这一部分,有一个概念就行,后续我们会用实例来解释这一切!

参考资料:

1、http://blog.csdn.net/wyt2013?viewmode=contents

2、http://elinux.org/Beagleboard:BeagleBone_Black_FAQ

3、http://hipstercircuits.com/adding-beaglebone-cape-support-to-a-kernel-with-device-tree-in-ubuntu/

4、http://elinux.org/BeagleBone_Black_Enable_SPIDEV

5、http://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/device-tree-background

6、https://lkml.org/lkml/2013/1/7/366

你可能感兴趣的:(BeagleBone Black的Cape之基本概念)