大樹底下好乘涼 ︰ 《大哉問》

Albrecht_Dürer_-_Adam_and_Eve_(Prado)_2
夏娃的蘋果

Golden_Apple_of_Discord_by_Jacob_Jordaens
金蘋果事件

640px-Newton's_tree,_Botanic_Gardens,_Cambridge
牛頓的蘋果

青蘋果
圖靈的蘋果

根據《聖經‧創世記》記載︰

亞當和夏娃二人住在伊甸園中,後來夏娃受『』的哄誘,偷食了『知善惡樹』所結的『禁果』,也讓亞當食用,二人遂被上帝逐出伊甸園。

□︰禁果是蘋果嗎?
○︰莫宰羊!
□︰那蘋果是禁果嗎?
○︰煩惱即菩提!!

也許希臘神話中關鍵之因緣生法的一顆『金蘋果』── 獻給最美女神 ──,引發 → 帕里斯的評判,導致 → 特洛伊戰爭。明示了『蘋果』與『誘惑』的關係,至於說怎麼聯繫上了『知識』,那只能問『牛頓』的了?

雖說『牛頓』並沒有創造『機械的宇宙』,如果仔細考察『運動定律』,假使再加上『物質組構』的『構造方程式』與『初始條件』── 位置和動量 ──,那麼該物之『運動軌跡』就被『確定』了。這演示了一種『軟體設計』之方法學,它以『資料驅動』為中心。或許艾倫‧圖靈非常了解那個『抽象機械』,所以創想發明了『萬有圖靈機』。只不過人類的知識還很難駕馭那樣的『仙女計算機』,然而隨著一九六零年代以來『硬體描述語言』 HDL hardware description language 的發展,也許我們終將受邀進入『計算機械的世界』,一探『軟硬體的真諦』!『圖靈的蘋果』正述說著『尊重』與『寬容』,如今想來他早已『知道』這些『演算法』了的吧!!

一顆 Broadcom BCM2835 SoC 可以用來設計樹莓派 B, A, B+, A+ 與 Computer Module 等主版,那麼它們之間的軟硬體差異,從 kernel OS 的角度來看,差異到底有多大呢?假使每種不同的板子,都需要特定的 kernel ,不但非常麻煩,該說是不智之舉的吧!再說因於 GPIO 上的 SPI, I2C, I2S 等等介面所產生的各類擴充板,難到不能有更好的規劃,使得驅動程式的安裝、設定和管理更加簡易的嗎??如此總總實務上的考量,促使著應用『 Device Tree 』、『 Overlay 』與『 Parameter 』來描述『系統硬體』,達成化繁為簡的目的。這個『樹狀結構』的『硬體裝置描述』 .dts 方式類似於 C 語言的 struct 資料結構,也有 C 語言相仿的 /include/ 子樹 .dtsi 引用,再加上部份『 Fragment 』 零碎資料構成的『 Overlay 』 .dts 組成了整體硬體的『設備樹』。經由 dtc 編譯程式編成二進制的『 device tree blob 』 dtb ,系統啟動時由 start.elf 程式傳給 kernel

在此讓我們先安裝那個 dtc 編譯工具︰

# 不支援 overlay
pi@raspberrypi ~ $ apt-cache search device-tree
device-tree-compiler - Device Tree Compiler for Flat Device Trees

# 安裝新版 dtc 及 fdt** 工具
wget -c https://raw.githubusercontent.com/RobertCNelson/tools/master/pkgs/dtc.sh
chmod +x dtc.sh
./dtc.sh

# 版本檢查
pi@raspberrypi ~ $ dtc -v
Version: DTC 1.4.0-gf345d9e4

這個『設備樹』的啟動,放在『 /boot/config.txt 』裡,此處僅列出官方文件所說的範例︰

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment one of these lines to enable an audio interface
#dtoverlay=hifiberry-amp
#dtoverlay=hifiberry-dac
#dtoverlay=hifiberry-dacplus
#dtoverlay=hifiberry-digi
#dtoverlay=iqaudio-dac
#dtoverlay=iqaudio-dacplus

# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Uncomment this to override the defaults for the lirc-rpi module
#dtparam=gpio_out_pin=16
#dtparam=gpio_in_pin=17
#dtparam=gpio_in_pull=down

如果你實在不需要『設備樹』機制︰

device_tree=

 

─── dt ⊕ iot ⊕ hat = !!!明天會更好??? ───