BBB的Cape的基本状况网上说的很详细,我以为比较好的是一个兄弟的blog(http://blog.csdn.net/wyt2013?viewmode=contents),其中的如何使用GPIO/AD/SPI/I2C及 为BBB制做专属本身的cape(一)-(四),这几篇博文都涉及到cape的事。能够仔细的“研读”,注意是“研读”而非“阅读”,由于中间有“魏来之路”这位兄弟的学习历程,中间有点曲折,值得一读。感谢这位兄弟的分享精神,很是佩服。 linux
其实说到Cape主要涉及到几个主要的问题: ubuntu
1、什么是Cape,它有什么标准?(能够参考SRM) 数据结构
2、arm linux 3.x如何管理硬件?--扁平设备树,设备树重载。 工具
3、如何管理Cape?--动态加载,文件IO 学习
1、什么是Cape,它有什么标准? 测试
Cape就是Beaglebone/BeagleBone Black的扩展功能板,若是你使用过PC104,你很容易理解Cape,BBB至关于PC104的CPU模块,而PC104外围AD模块、计数器模块就是它的Cape。 ui
官方的解释以下: 编码
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不断产生,挑战你的想像力吧!) spa
一句话,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
2、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中,咱们会一块儿学习。
3、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