當前位置: 華文星空 > 知識

樹莓派無外設開發一:註入靈魂、建立通訊

2021-05-22知識

寫在前面

最近因為移動感知與智能計算的課程作業需要,翻箱倒櫃找出本科時老師送我的一枚樹莓派4b開始了緊張的開發過程。雖然以前開發過AT89C51、CC2530、STM32、MSP430,但是對樹莓派完全不熟悉,這幾天經過耐心嘗試略有收獲,在此記錄一下,以不斷完善我的技術棧。

樹莓派是嵌入式開發中一款性價比高、體積小、可編程的微型電腦。比起上述微控制器,樹莓派的效能更強大,可以直接執行作業系統,上手學習也比較容易,但是直接部署的執行效率肯定不如底層專用器材強大,所以一直在學術界和工業界被認為是一款玩具。樹莓派的第四代與第三代相比,板子上的配置有了較大調整。首先是主頻提升到1.5GHz,記憶體上限也提升到8GB,電源介面變為了Type-C,原來的HDMI口也被替換成了雙Micro HDMI口,參考樹莓派4B效能評測報告及各版本效能比對。現在它大概長這個樣子:

我沒有購買顯示器也沒有配置鍵鼠,面對這麽一塊赤裸裸的板子,多少有點束手無措。那麽如何為樹莓派註入靈魂讓它「活」過來呢?

開發流程

你可以沒有輸入輸出的外設,但不能沒有SD卡。我購買了一塊SanDisk的64GB的SD卡,作為樹莓派的「硬碟」。盡量買16GB以上的,不然連系統本身可能都施展不開。當然你還需要讀卡器和轉接頭(我使用的上位機是一台 MacBook Pro。

首先去樹莓派官網下載樹莓派官方作業系統Raspberry Pi OS。它以前叫Raspbian,有些網誌裏會看到這個名字,可能是Debian系統改造過來的,命令和Debian差不多。我這裏選擇的是Raspberry Pi OS Lite這個輕量級的系統,它只有442MB大小。因為我們沒有螢幕,自然也就對桌面界面沒什麽要求。下載之後是一個zip壓縮包,解壓可以得到img映像檔,大概2GB。

2021-03-04-raspios-buster-armhf-lite.img

我們把SD卡透過讀卡器和轉接頭插到電腦上,然後在命令列中檢視已掛載的卷

df -h ----------------------------------------------------------------------------------------------- Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s1s1 466Gi 14Gi 327Gi 5% 568975 4881883905 0% / devfs 193Ki 193Ki 0Bi 100% 668 0 100% /dev /dev/disk1s5 466Gi 20Ki 327Gi 1% 0 4882452880 0% /System/Volumes/VM /dev/disk1s3 466Gi 379Mi 327Gi 1% 1583 4882451297 0% /System/Volumes/Preboot /dev/disk1s6 466Gi 2.1Mi 327Gi 1% 14 4882452866 0% /System/Volumes/Update /dev/disk1s2 466Gi 124Gi 327Gi 28% 1456661 4880996219 0% /System/Volumes/Data map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /System/Volumes/Data/home /dev/disk2s1 255Mi 119Mi 136Mi 47% 512 0 100% /Volumes/system-boot

我們看到桌面多出來的那個磁盤的圖示名字叫system-boot,所以上面結果中最後一行是新掛載的卷。接下來我們擦除SD卡的所有內容(有時候買SD卡的時候會有預裝的映像。

diskutil eraseVolume HFS+ system-boot /dev/disk2s1 ---------------------------------------------------------------------- Started erase on disk2s1 (system-boot) Unmounting disk Erasing Initialized /dev/rdisk2s1 as a 255 MB case-insensitive HFS Plus volume Mounting disk Finished erase on disk2s1 (system-boot)

這裏system-boot是卷[volume]名,而/dev/disk2s1是分區位置。接下來將該分區解除安裝。

diskutil unmount /dev/disk2s1 --------------------------------------- Volume system-boot on disk2s1 unmounted

然後我們使用dd命令將系統映像寫入到SD卡中

sudo dd if=Downloads/2021-03-04-raspios-buster-armhf-lite.img of=/dev/disk2 bs=4m ----------------------------------------------------------------------------- 445+0 records in 445+0 records out 1866465280 bytes transferred in 180.176146 secs (10359114 bytes/sec)

這裏if後面是剛剛下載的系統映像檔的路徑,of後面是分區的位置,註意這裏我寫的是disk2而不是disk2s1,因為我猜disk2s1是disk2的子分區,而後者空間更大一些。這個過程比較慢,需要等一段時間。成功之後我們檢視桌面,發現掛載的硬碟的名字變成了boot,開啟可以看到裏面有一堆檔。

ls /Volumes/boot -------------------------------------------------------------- COPYING.linux bcm2711-rpi-400.dtb kernel.img LICENCE.broadcom bcm2711-rpi-cm4.dtb kernel7.img bcm2708-rpi-b-plus.dtb bootcode.bin kernel7l.img bcm2708-rpi-b-rev1.dtb cmdline.txt kernel8.img bcm2708-rpi-b.dtb config.txt overlays bcm2708-rpi-cm.dtb fixup.dat start.elf bcm2708-rpi-zero-w.dtb fixup4.dat start4.elf bcm2708-rpi-zero.dtb fixup4cd.dat start4cd.elf bcm2709-rpi-2-b.dtb fixup4db.dat start4db.elf bcm2710-rpi-2-b.dtb fixup4x.dat start4x.elf bcm2710-rpi-3-b-plus.dtb fixup_cd.dat start_cd.elf bcm2710-rpi-3-b.dtb fixup_db.dat start_db.elf bcm2710-rpi-cm3.dtb fixup_x.dat start_x.elf bcm2711-rpi-4-b.dtb issue.txt

這時系統寫入完成,但不要著急推出硬碟,我們還需要一個關鍵操作來啟動ssh連線服務:在boot資料夾中新建一個空的ssh檔!

touch /Volumes/boot/ssh

這時樹莓派在啟動時就會自動開啟ssh服務了,我僅僅嘗試過這一版系統,但聽說有些系統這麽做沒用。除此之外,我還修改了一處配置,我不敢保證不設定它不會出錯。

由於樹莓派沒有傳統意義上的BIOS,所以各種系統設定參數通常被存在boot的config.txt這個文字檔案中。我們找到下面這行配置,並開啟註釋。

hdmi_force_hotplug=1

這使得樹莓派啟動後,即使不接顯視器,依然認為有顯視器訊號輸入,也就是相當於騙過了系統。接下來我們推出硬碟,將樹莓派的網口使用網線連線到一個有許可權存取的路由器上,然後使用電源線給樹莓派供電。這個連線網線和上電的順序很重要!

還好前一陣子給實驗室修理網絡,對所有路由器了如指掌。我實驗室的主路由器是思科的,登入路由器管理界面,在裏面的DHCP status一欄可以找到路由器為接入的器材分配的區域網路IP。當然你也可以使用其他的區域網路掃描工具,只要找到樹莓派的IP即可。

raspberrypi 192.168.1.146 dc:a6:32:c4:a7:e9 23 Hours, 57 Minutes, 1 Seconds

因為學長把DHCP的過期時間設定成一天了,所以看到了諸多名為raspberrypi的器材,我挨個ping了一遍,發現上面的是可以ping通的。然後我們透過ssh登入它的預設使用者pi。

預設密碼是raspberry。至此,我們成功為樹莓派註入靈魂,並且可以和它通話了。正如我上面所說,樹莓派作業系統和Debian很像,或者說和Ubuntu很像,所以命令多數都相容。大家想hello world也可以,來

root@raspberrypi:~# echo "hello world" -------------------------------------- hello world

雖然說硬件一般不流行Hello world,流行呼吸燈什麽的 ...

大家可能註意到上面的pi使用者是普通使用者,總是sudo用起來不方便。如何解鎖root使用者,並實作ssh免密碼登入樹莓派,且聽下回分解。