BBB学习(十九):cape介绍(二)cape管理简介

本文详细介绍了BBB(BeagleBone Black)如何通过Cape管理机制加载DTBO(Device Tree Blob Overlay),包括手动加载、开机自动加载及根据扩展板(Cape)自动识别加载的方法。探讨了Cape的概念、查看已加载DTBO、手动加载过程、设置开机加载以及利用EEPROM实现自动识别加载的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 前言

前节简单介绍了devicetree的语法,以及通过查表法来配置device tree相关配置引脚,因此可以参考相关device tree来配置自己的设备树文件,但实际中,BBB本身有一套cape管理方式,可以针对不同的cape来加载不同的dtbo。本节将对BBB的cape管理进行相关介绍。

BBB对DTBO的加载有以下几个方法:

  • 在终端通过指令手动加载
  • 修改开机启动文件实现开机时自动加载
  • 开机自动识别cape(扩展板)中记录实现自动加载

二 介绍及操作

2.1 cape的概念

接触BBB之后,经常会看到这个词cape,什么是cape?英文单词的意思我们可以看到:

img

英文单词本身有意思有海峡、披肩等,但对于BBB而言,cape是指一些公司和个人开发的对就BBB扩展引脚的功能扩展板,而在BBB中对扩展板的管理主要体现在对dtbo的加载管理上,每一个扩展板功能不同,其采用的接口也不相同,因此需要加载可以覆盖原有扩展口功能,并加载相应驱动。

https://elinux.org/Beagleboard:BeagleBone_Capes

img

官方WIKI中详细地说明了CAPE和DT及Kernel的关系:“BeagleBone and the 3.8 Kernel”,如果想深入了解可以看这里:

(http://elinux.org/BeagleBone_and_the_3.8_Kernel#Cape_Manager_requirements)

2.2 查看当前已加载dtbo

输入以下命令,可以看出cape管理文件的路径,同时可以看出,默认情况下BBB没有加载任何dtbo文件。图中4个空白位置是指根据扩展板中eeprom内容加载的dtbo文件,也就是说:

  • 手动加载的dtbo全部在这4个后面
  • 对扩展板加载的dtbo最多是4个。
cat /sys/devices/platform/bone_capemgr/slots

img

2.3 手动加载dtbo

向cape管理文件中写入相应的dtbo文件,一般在BBB文件路径/lib/firmware下可以看系统中已有的dtbo文件。这个路径是系统的默认的加载dtbo搜索路径。

ls /lib/firmware/BB*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J9kTrhj5-1578361849355)(https://gitee.com/wpbi/blog-picture/raw/master/2018/BBB%20study/4-8-CapeIntroduceCape/5.png)]

向capmgr文件中写稿已存在的dtbo文件,查看已加载的dtbo文件可以看到已经加载成功。

echo 'BB-PWM2' > /sys/devices/platform/bone_capemgr/slots

img

2.4 开机自动加载默认dtbo

修改以下文件,可以设置开机时需要加载的dtbo文件:

/boot/uEnv.txt

img

原有文件中已经注释,默认不加载任何dtbo文件,去掉注释,并将BBB-PWM2做为默认加载:

img

BBB重新上电后,查看capemgr文件已成功加载该dtbo文件:

img

2.5 根据实际cape加载dtbo

根据实际cape加载是指:在开发的BBB扩展板中,如果有eeprom,可以将需要加载的dtbo文件以一定的格式保存在里面,这样BBB开机的时候会自动识别并加载。由于本人没有这样的扩展板,这里只根据官方文档SRM,对主要流程进行描述。

2.5.1 查看cape上eeprom地址

eeprom做为i2c读写器件,其本身是有地址的,而且可以通过eeprom上的引脚来配置其地址,因此官方建议通过拨码开关的方式做成可配置地址形式,其电路图如下:

img

需要注意的是:

  • 系统识别eeprom的i2c的地址范围为0x54到0x57之间,因此BBB最多可识别4块地址不同的eeprom。
  • eeprom必须连接到BBB的I2C2_SCL和I2C2_SDA引脚上,也就是在P9端子上的第19和第20个引脚。
  • 官方建议如果eeprom内容固定后最好把写保护引脚拉高,防止对eeprom内容误操作。

2.5.2 向eeprom写入信息

在eeprom中写入固定格式的扩展板信息,其格式在官方文档中有描述,如下图:

img

可以通过以下命令来写入数据:

cd /sys/bus/i2c/devices/1-0054/  #到eeprom目录中  
cat eeprom | hexdump -C  #读取eeprom内容并以字符形式显示  
echo -e "\xaa\x55\x33\xeeA1Beaglebone PWM2 Cape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0000A1BeagleboardToys\x00BB-PWM2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" > eeprom  #写入内容  
cat eeprom | hexdump -C  #确认是否写入成功  

注意:

  • 写入内容中如果要按照上图格式,重点是headerpart number这两部分。其他部分都可以用0来覆盖。
  • 内容中version必须是写成00A0格式,part number必须写成对应dtbo文件的文件名,如本例中是BB-PWM2,这个部分将合成整个dtbo的文件名BB-PWM2-00A0

完成以上步骤后,重启BBB,就可以实现自动加载dtbo了。


嵌入式Linux下,设备树(device tree)用来描述硬件平台的各种资源,Linux内核在启动过程中,会解析设备树,获取各种硬件资源来初始化硬件。设备树的overlay功能是指可以在系统运行期间动态修改设备树。一般情况下,如上图所示,设备树经过DTC编译器编译为进制的hello.dtb文件,加载到内存,随Linux内核一起启动后,一般就无法更改了。如果我们想修改设备树,需要修改hello.dts文件文件,重新编译成进制文件:hello.dtb,然后重新启动内核,重新解析。有了设备树的overlay功能,省去了设备树的重新编译和内核重启,我们可以直接编写一个设备树插件:overlay.dts,编译成overlay.dtbo后,直接给设备树“打补丁”,在运行期间就可以动态添加节点、修改节点...设备树的overlay功能,在很多场合都会用得到,会让我们的开发更加方便:外界插拔设备,无法在设备树中预先描述:耳机树莓派 + FPGA开发板基于I2C的温度传感器管脚的重新配置:PIN multiplexing修改bootcmd、分区...设备树的overlay功能,目前还没有加入到内核mainline(linux-5.10.x),但目前有些开发板和配套的BSP已经支持了,支持在系统运行期间动态修改设备树文件。如果你手头的开发板或内核平台还没有支持device tree overlay,可以学习本期课程,学习内核中设备树overlay的实现原理,如何给内核打补丁,使内核支持设备树的overlay功能。有了本期课程的学习基础,明白了设备树overlay的实现原理和运行机制,你就可以尝试在自己的开发板平台上实现这个功能了。本期课程的主要内容如下:在开发板上如何实现设备树的overlay功能Configfs文件系统的配置与挂载Configfs编程接口如何编写设备树 overlay插件设备树 overlay的编译和运行设备树overlay运行机制分析本期课程适合哪些人学习嵌入式驱动工程师嵌入式BSP工程师嵌入式软件工程师想从事嵌入式开发的同学全网首家讲解设备树overlay的视频教程。   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值