樹莓派驅動之裝置樹覆蓋

2021-09-29 20:43:58 字數 2243 閱讀 4803

由於是初學者,所以對於一些操作需要記錄下方便自己查詢。

附上:樹莓派裝置樹官網

我只從官網上了解到一點點內容,還有許多沒看懂的和還沒學的

乙個常規的arm-linux裝置樹,主要是由原始檔.dts和標頭檔案.dtsi共同編譯出.dtb二進位制,核心在初始化後會載入這個dtb,並把相關裝置都註冊好,就可以愉快地使用了。例如樹莓派3b+,/boot/bcm2710-rpi-3-b-plus.dtb就是樹莓派soc和外圍電路的預設配置。

對於大部分硬體產品來說這沒什麼問題,例如一部手機在出廠以後,它的硬體幾乎是不會變的。但對於樹莓派這種開發板來說,尤其是它的40pin擴充套件引腳,外圍電路的變動可就大了去了,而核心載入dtb後是不能變的,所以需要一種動態覆蓋配置的裝置樹機制,這就是樹莓派的——dtoverlay(裝置樹覆蓋)。

dtoverlay同樣是由dts源編譯而來,語法幾乎和裝置樹一樣,不過輸出擴充套件名為dtbo。樹莓派提供了兩種方式載入dtbo:

1、將編譯好的dtbo放到/boot/overlays下,並由/boot/config.txt配置和使能;

2、通過命令dtoverlay 動態覆蓋裝置樹;

第1種方式會涉及更複雜的語法規則,本篇文章僅僅是對平台裝置及裝置樹的知識入門,因此選擇第2種命令列的方式,動態載入。

1、先安裝裝置樹編譯器

sudo apt-get install device-tree-compiler
2、新建乙個裝置樹檔案,並定義乙個led_type_a的led裝置,並將其命名為led_a1 。

pi@raspberrypi:

/modules $ ls

myled.dts

myled.dts

/dts-v1/

;/plugin/;/

;};}

;};

fragment和__overlay__非常重要!!如果不這麼寫會導致動態載入失敗,但其實以上的**轉化為標準的裝置樹語法為:

/led_a1 

;

3、將.dts檔案生成.dtbo

sudo dtc -i dts myled.dts -o myled.dtbo
結果再當前目錄下會生成myled.dtbo檔案

4、載入裝置樹覆蓋:

sudo dtoverlay myled.dtbo
5、將myled.dtbo檔案拷貝到/boot/overlays/

sudo cp myled.dtbo /boot/overlays/
6、在/boot/config.txt最後一行新增dtoverlay=myled

sudo vi /boot/config.txt
7、重啟reboot…

8、可以在/sys/device/platform或者/proc/device-tree下檢視到裝置led_a1已經註冊

ls /proc/device-tree
pi@raspberrypi:

~ $ ls /proc/device-tree

'#address-cells' axi compatible fixedregulator_5v0 leds model phy serial-number __symbols__ timer

aliases chosen cpus interrupt-parent memory@0 name scb '#size-cells' system v3dbus

arm-pmu clocks fixedregulator_3v3 led_a1 memreserve __overrides__ sd_io_1v8_reg soc thermal-zones

樹莓派驅動框架

include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭檔案 include 裝置號 d...

樹莓派驅動框架

檔名為pin4driver.c include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭...

基於樹莓派的Linux字元裝置驅動框架

include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭檔案 include 裝置號 d...