樹莓派 Zero W 安裝與內核驅動開發入門


介紹

The Raspberry Pi Zero W extends the Pi Zero family and comes with added wireless LAN and Bluetooth connectivity.

缺點:沒有 ADC 數模轉換,自己想辦法加配件啊

產品圖



配置



配置

歐盟合規認證

pi@raspberrypi:~ $ dpkg --print-architecture
armhf

armhf架構

安裝系統

格式化SD卡為FAT分區,用 Win32DiskImager 把系統鏡像如2020-08-20-raspios-buster-armhf-full.img寫入到SD卡。寫入后SD卡會分成兩個區,Windows下只能見到一個BOOT區
在BOOT分區下創建兩個文件,用於連接路由器和開啟SSH
1.空文件 ssh
2.Unix文本文件 wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN

network={
    ssid="YourWifiName"
    psk="YourWifiPassword"
    scan_ssid=1
}

路由器WIFI賬號密碼寫你自己的。該文件會在初次系統安裝時被讀取用於配置WIFI,然后該文件就會被自動刪除。

把SD卡插回樹莓派,把usb數據線一端插到樹莓派zeroW(兩個口都可以,標有 USB 是數據+供電,標有 PWR IN 的是單供電),一端插到電腦上。
這時候樹莓派就會閃燈開機(如果沒有插SD卡,燈是一點都不會亮的)

等到樹莓派燈不怎么閃爍時,登陸路由器后台看看

遠程登陸

ssh

電腦cmd窗口輸入

ssh pi@192.168.123.8

密碼默認為 raspberry

修改密碼命令:

passwd

修改鏡像源

sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list
sudo sed -i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' /etc/apt/sources.list.d/raspi.list
sudo apt update

Windows遠程桌面(RDP)

安裝 Windows 遠程桌面服務

sudo apt-get install xrdp

效果圖


也可以用支持ssh rdp x11等多種協議的遠程控制工具 Mobaxterm

板載外設相關

高級設置

還有一些高級設置,可以通過命令行設置

sudo raspi-config

如果是 可以安裝 rasp-AP

開啟 USB 網卡

作用:給樹莓派插上USB,連接到電腦,樹莓派被識別成一個 USB Ethernet/RNDIS Gadget 網卡

樹莓派配置:

  1. 本配置適用於樹莓派系統已經安裝完成
  2. 啟動時加載 dwc2 USB driver
echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
  1. 開啟 dwc2
echo "dwc2" | sudo tee -a /etc/modules
  1. 選擇網卡模塊並啟用(如果你要使用別的模塊,請參考以下鏈接,模塊不能使用多個只能一個)
echo "g_ether" | sudo tee -a /etc/modules

參考:

  1. https://blog.gbaman.info/?p=699
  2. https://blog.csdn.net/chengriyue/article/details/88572991

驅動:在微軟驅動官網下載並解壓 Acer Incorporated. - Other hardware - USB Ethernet/RNDIS Gadget Windows Vista版本的

圖中第一個就是 Windows Vista 版本的

解壓后,從設備管理器,右擊樹莓派那個USB嘆號設備(名字一般是未識別的),更新驅動,路徑選你解壓的路徑即可。

效果圖(我的是英文系統)
樹莓派系統-配置文件

設備管理器

IP地址可以通過 cmd 命令查看(先看你樹莓派USB Ethernet/RNDIS Gadget網卡的網段),如我的是 192.168.137.1
就輸入

arp -a | findstr 192.168.137

查看arp表里含有192.168.137的設備

C:\WINDOWS\system32>arp -a | findstr 192.168.137
Interface: 192.168.137.1 --- 0x41
192.168.137.233 da-xx-xx-xx-xx-24 static
192.168.137.255 ff-ff-ff-ff-ff-ff static
然后255是廣播地址嘛(計算機網絡知識),所以樹莓派的USB網卡ip地址就是 192.168.137.233 了

確保樹莓派開了SSH服務,然后
ssh -T pi@192.168.137.233
成功的話會提示你接受密鑰並輸入密碼,即找到並SSH測試連接通了樹莓派

設置網絡共享:電腦共享網絡給樹莓派用(通過USB Ethernet/RNDIS Gadget網卡)

圖盜自 https://gist.github.com/gbaman/975e2db164b3ca2b51ae11e45e8fd40a

當然也可以通過 ping raspberrypi.local
前提是你電腦裝了 mDNS 協議(一個局域網版本的DNS無服務端協議)支持軟件,如 Bonjour

CMD>ping raspberrypi.local

Pinging raspberrypi.local [fe80::f1b9:ff1f:c643:b627%66] with 32 bytes of data:
Reply from fe80::f1b9:ff1f:c643:b627%66: time=1ms
Reply from fe80::f1b9:ff1f:c643:b627%66: time<1ms
Reply from fe80::f1b9:ff1f:c643:b627%66: time<1ms
Reply from fe80::f1b9:ff1f:c643:b627%66: time=1ms

Ping statistics for fe80::f1b9:ff1f:c643:b627%66:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 1ms, Average = 0ms

CMD>ssh pi@fe80::f1b9:ff1f:c643:b627%66

pi@fe80::f1b9:ff1f:c643:b627%66's password:
Linux raspberrypi 5.10.17+ #1421 Thu May 27 13:58:02 BST 2021 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jul 23 11:48:49 2021
pi@raspberrypi:~ $

記得把你電腦網絡 共享給 樹莓派 USB 網卡
image

GPIO 針腳


測試腳本 (led_ctrl.sh

#!/bin/sh

#控制GPIO口高低電平
echo $1 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$1/direction
echo 1 > /sys/class/gpio/gpio$1/value

sleep 1 #延時1秒
echo 0 > /sys/class/gpio/gpio$1/value
echo $1 > /sys/class/gpio/unexport

給腳本加上執行權限

sudo chmod+x ./led_ctrl.sh

測試GPIO命令

# sudo ./led_ctrl.sh 你要測試的GPIO口號

sudo ./led_ctrl.sh 2

使用:在面包板上,LED燈接220Ω電阻,一腳接GND,一腳接你要測試的GPIO引腳。(當然我還用了 T 型拓展板)
效果:亮燈,一秒后滅燈
image

這里借一下別人的連線圖
image

http://www.ruanyifeng.com/blog/2017/06/raspberry-pi-tutorial.html

樹莓派學習二(點亮LED燈)

讓你的 Raspberry Pi 透過 GPIO 閃爍 LED 燈
Shell C C++ Java Python NodeJS 等語言均有支持GPIO的庫,詳情谷歌

這里pip換鏡像源,不說了我們先一起燒香謝謝方校長:
樹莓派使用 Python 驅動 SSD1306(IIC/SPI 通信) 先測試IIC通訊,成功后再去玩 Linux C 編程 實現I2C總線的OLED驅動 - 暮光小猿wzt

開啟色相頭

樹莓派zero wh使用csi攝像頭模塊

查看硬件輸出信息

如查看 SoC 溫度(也就是常說的 CPU)

vcgencmd measure_temp

詳見:https://www.raspberrypi.org/documentation/raspbian/applications/vcgencmd.md

正確關機

sudo halt

驅動開發

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/README.md

譯文:BCM2835
這是樹莓派 A, B, B+, the Compute Module 及 Zero 系列所用的博通 CPU 芯片

請參考:
Peripheral specification 參考手冊
注:該文檔有一些錯誤,已知錯誤和一些額外信息可以點這里獲取
GPU 文檔 及其 開源驅動
ARM1176 processor
ARM1176JZF-S
Also see the Raspberry Pi 2 Model B's chip, BCM2836.

Peripheral specification(ARM 外設說明書) 是博通的數據手冊,在其文檔介紹里可看到這么一行:

The purpose of this datasheet is to provide documentation for these peripherals in sufficient
detail to allow a developer to port an operating system to BCM2835.
There are a number of peripherals which are intended to be controlled by the GPU. These are
omitted from this datasheet. Accessing these peripherals from the ARM is not recommended.

總結:

資料名 文件名 網址
CPU 數據手冊 BCM2835-ARM-Peripherals.pdf https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf
CPU 數據手冊錯誤修正與注意 BCM2835 datasheet errata - eLinux.org.mhtml https://elinux.org/BCM2835_datasheet_errata
ZeroW 電路原理圖(schematics) rpi_SCH_ZeroW_1p1_reduced.pdf https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_ZeroW_1p1_reduced.pdf
GPU 文檔 VideoCoreIV-AG100-R.pdf https://docs.broadcom.com/docs/12358545
CPU 開源驅動 Brcm_Android_ICS_Graphics_Stack.tar.gz https://docs.broadcom.com/docs/12358546

為方便大家使用,我已經把上面5個資料都打包了,下載地址:Pi_zeroW.zip 更新日期:2021-01-13

以上硬件資料均可在樹莓派官網 HardWare 文檔 找到

軟硬件等更多資料詳見:https://www.raspberrypi.org/documentation/

PS. 樹莓派 ZeroW 的 CPU 是 BCM2835,該 CPU 內核是 ARM1176 processor 系列里的 ARM1176JZF-S


剩下的就是:看手冊/看寄存器/看電路圖->寫代碼了,和普通的 ARM Linux 驅動開發沒有什么兩樣
給個案例:

驅動編寫教程(非樹莓派,但大同小異): [野火]i.MX Linux開發實戰指南-驅動章節
開發方式推薦:VSCode + Remote SSH + Linux X64 桌面操作系統(或虛擬機)交叉編譯環境 和 NFS 服務 + 樹莓派掛載 NFS
在 VSCode 直接調用 Makefile 的方法:https://www.cnblogs.com/yucloud/p/vs_code_config.html#makefile
樹莓派掛載 NFS:

# 192.168.12.130 是你的服務器地址,一般是台式/筆記本/虛擬機系統上的 NFS Server
mount -t nfs 192.168.12.130:/mnt /media
#修改 /etc/fstab 文件,添加以下代碼,更多參數見 https://wiki.archlinux.org/index.php/Fstab_(簡體中文)#字段定義
192.168.12.130:/mnt /mnt            nfs     rw

NOTE: 不要在 zeroW 上編譯,因為它沒有樹莓派3 那么好的性能。


拉取代碼

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.4.83+ #1379 Mon Dec 14 13:06:05 GMT 2020 armv6l GNU/Linux
# 根據版本號和Github倉庫代碼分支,可確定應該拉取  rpi-5.4.y 
# 然后在 筆記本或台式機上拉取代碼 git clone --depth=1 --branch rpi-5.4.y https://github.com/raspberrypi/linux
# 編譯構建部分請看以下官方資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM