文章目錄
一 前言
前節簡單介紹了devicetree的語法,以及通過查表法來配置device tree相關配置引腳,因此可以參考相關device tree來配置自己的設備樹文件,但實際中,BBB本身有一套cape管理方式,可以針對不同的cape來加載不同的dtbo。本節將對BBB的cape管理進行相關介紹。
BBB對DTBO的加載有以下幾個方法:
- 在終端通過指令手動加載
- 修改開機啓動文件實現開機時自動加載
- 開機自動識別cape(擴展板)中記錄實現自動加載
二 介紹及操作
2.1 cape的概念
接觸BBB之後,經常會看到這個詞cape
,什麼是cape?英文單詞的意思我們可以看到:
英文單詞本身有意思有海峽、披肩等,但對於BBB而言,cape是指一些公司和個人開發的對就BBB擴展引腳的功能擴展板,而在BBB中對擴展板的管理主要體現在對dtbo的加載管理上,每一個擴展板功能不同,其採用的接口也不相同,因此需要加載可以覆蓋原有擴展口功能,並加載相應驅動。
https://elinux.org/Beagleboard:BeagleBone_Capes
官方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
2.3 手動加載dtbo
向cape管理文件中寫入相應的dtbo文件,一般在BBB文件路徑/lib/firmware
下可以看系統中已有的dtbo文件。這個路徑是系統的默認的加載dtbo搜索路徑。
ls /lib/firmware/BB*
向capmgr文件中寫稿已存在的dtbo文件,查看已加載的dtbo文件可以看到已經加載成功。
echo 'BB-PWM2' > /sys/devices/platform/bone_capemgr/slots
2.4 開機自動加載默認dtbo
修改以下文件,可以設置開機時需要加載的dtbo文件:
/boot/uEnv.txt
原有文件中已經註釋,默認不加載任何dtbo文件,去掉註釋,並將BBB-PWM2
做爲默認加載:
BBB重新上電後,查看capemgr文件已成功加載該dtbo文件:
2.5 根據實際cape加載dtbo
根據實際cape加載是指:在開發的BBB擴展板中,如果有eeprom,可以將需要加載的dtbo文件以一定的格式保存在裏面,這樣BBB開機的時候會自動識別並加載。由於本人沒有這樣的擴展板,這裏只根據官方文檔SRM,對主要流程進行描述。
2.5.1 查看cape上eeprom地址
eeprom做爲i2c讀寫器件,其本身是有地址的,而且可以通過eeprom上的引腳來配置其地址,因此官方建議通過撥碼開關的方式做成可配置地址形式,其電路圖如下:
需要注意的是:
- 系統識別eeprom的i2c的地址範圍爲0x54到0x57之間,因此BBB最多可識別4塊地址不同的eeprom。
- eeprom必須連接到BBB的I2C2_SCL和I2C2_SDA引腳上,也就是在P9端子上的第19和第20個引腳。
- 官方建議如果eeprom內容固定後最好把寫保護引腳拉高,防止對eeprom內容誤操作。
2.5.2 向eeprom寫入信息
在eeprom中寫入固定格式的擴展板信息,其格式在官方文檔中有描述,如下圖:
可以通過以下命令來寫入數據:
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 #確認是否寫入成功
注意:
- 寫入內容中如果要按照上圖格式,重點是
header
到part number
這兩部分。其他部分都可以用0來覆蓋。 - 內容中
version
必須是寫成00A0
格式,part number
必須寫成對應dtbo
文件的文件名,如本例中是BB-PWM2
,這個部分將合成整個dtbo的文件名BB-PWM2-00A0
完成以上步驟後,重啓BBB,就可以實現自動加載dtbo了。