# 樹梅派大補帖 2.0 ## 硬體設備 - Raspberry Pi 3 Model B ![](https://i.imgur.com/qVac4A8.png =200x) - USB to TTL 線 ![](https://i.imgur.com/WLZygZl.png =200x) - MicroSD card ![](https://i.imgur.com/UgA4bfl.png =200x) - (Option) MicroSD 轉 SD card ![](https://i.imgur.com/HUbUh55.png =200x) - (Option) 讀卡機 ![](https://i.imgur.com/iZd85bN.png) - (Option) 電源供應用 micro usb ## 燒錄 ### 下載作業系統 Raspbian > [Download Raspbian from Official](https://www.raspberrypi.org/downloads/raspbian/) > ![](https://i.imgur.com/IMHVGWg.png) > [color=teal] :::info `選用` [NOOBS](https://www.raspberrypi.org/downloads/noobs/) - 圖形化新手安裝系統 提供 Raspbian 及其他作業系統 (如:Windows 10 IOT) 的安裝介面 - NOOBS 包含預載 Raspbian 和 LibreELEC (多媒體系統) - NOOBS Lite 沒有預載,但仍然可以透過網路下載安裝作業系統 NOOBS 可供下載安裝的作業系統有 - Raspbian - LibreELEC - OSMC - Recalbox - Lakka - RISC OS - Screenly OSE - Windows 10 IoT Core - TLXOS ![](https://i.imgur.com/rX3Ap3x.png) ::: ### (Bonus Issue) 掛載內建 SD Card Reader 到 VirtualBox (不建議使用) 如果今天你是外接 USB 讀卡器,恭喜你!可以輕鬆掛載到 VirtualBox 透過 `裝置->USB->選擇裝置` 就可以了,如果不是呢...(繼續閱讀) - Windows 1. 以系統管理員打開 CMD 2. 輸入 `wmic diskdrive list brief` 查詢掛載磁碟位置 ![](https://i.imgur.com/sAn1nXB.png) 3. 找到 VirtualBox 安裝路徑並使用 ```shell= ## D:\Program Files\Oracle\VirtualBox\ 請替換成自己的安裝路徑 ## D:\VirtualBox\ 請替換成自己要存放虛擬硬碟檔案的位置 (資料夾必須已經存在或自己建) ## \\.\PHYSICALDRIVE2 請換成剛剛查到的 SD Card DeviceID "D:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands createrawvmdk -filename "D:\VirtualBox\sdcard.vmdk" -rawdisk "\\.\PHYSICALDRIVE2" ``` 4. 將虛擬硬碟檔案掛載至虛擬機 - 按下 `控制器 SATA` 打勾 `Use Host I/O cache` 並旁按右邊的 `磁碟+` 設定 ![](https://i.imgur.com/kpZyVBg.png) - Trouble Shoot - 遇到這個情況請確定你有打勾 `Use Host I/O cache` ![](https://i.imgur.com/Tq6xbsM.png =200x) - 遇到這個情況請依循下面步驟 ![](https://i.imgur.com/nAsKSi9.png =200x) 1. 以工作管理員打開 CMD 2. 檢查掛載的虛擬硬碟 ```shell= ## D:\Program Files\Oracle\VirtualBox\ 請替換成自己的安裝路徑 "D:\Program Files\Oracle\VirtualBox\VBoxManage" list hdds ``` 3. 關閉媒體 ```shell= ## D:\Program Files\Oracle\VirtualBox\ 請替換成自己的安裝路徑 "D:\Program Files\Oracle\VirtualBox\VBoxManage" closemedium disk SD卡的虛擬硬碟UUID ``` - MacOS 1. 查看記憶卡掛載位置 ```shell= diskutil list ``` 2. 移除掛載 ```shell= diskutil unmountDisk 記憶卡掛載位置 ``` 3. 建立虛擬硬碟 ```shell= sudo VBoxManage internalcommands createrawvmdk -filename 路徑/檔名.vmdk -rawdisk 記憶卡掛載位置 ``` 4. 更改檔案權限 ```shell= sudo chmod 666 路徑/檔名.vmdk sudo chmod 666 記憶卡掛載位置 ``` 5. 將虛擬硬碟檔案掛載至虛擬機 - 按下 `控制器 SATA` 打勾 `Use Host I/O cache` 並旁按右邊的 `磁碟+` 設定 ### 格式化記憶卡 (建議在原生系統下進行) - Linux、Ubuntu - 終端機 Terminal 1. 查看記憶卡掛載位置 ```shell= sudo fdisk -l ## 或 lsblk -p ``` ![](https://i.imgur.com/qj9zR2J.png) 2. 卸載記憶卡 ```shell= sudo umount 記憶卡掛載位置 ``` 3. 格式化記憶卡 [Parted 簡易教學](https://shazi.info/%E7%94%A8-parted-%E5%88%87%E5%89%B2-2tb-%E4%BB%A5%E4%B8%8A%E7%9A%84%E7%A1%AC%E7%A2%9F%EF%BC%8C%E4%B8%8D%E8%A6%81%E5%86%8D%E7%94%A8%E9%81%8E%E6%99%82%E7%9A%84-fdisk/) ```shell= ## fdisk 僅能處理到 2TB 的磁碟 / 如果要用 2TB 以上的請使用 parted sudo fdisk /dev/記憶卡掛載位置 ## 接著會進入 fdisk 互動模式 ## 移除現有分割區 輸入 `d` 可以刪除分割區(如果有複數個分割區會有數字選擇) ## 新增分割區 輸入 `n` 可以建立分割區 輸入 `p` 選擇建立主要分割區 接著輸入 `1` 建立第一個分割區 接著輸入分割區起始 sector (這邊按兩次 Enter 用預設的就是始至末) 輸入 `t` 可以對分割區進行格式化 如果有複數個分割區會再選擇分割區 輸入 `L` 可以看目前支援的格式代碼 輸入 `b` 可以選擇 W95 FAT32 格式 輸入 `w` 把更動寫入記憶卡 ``` 4. 掛載記憶卡 ```shell= sudo mount 記憶卡掛載位置 ``` - 圖形化介面 1. 安裝 Gparted - `sudo apt install gparted` - `sudo gparted` - ![](https://i.imgur.com/2txLaqu.png) 2. 使用內建磁碟軟體進行格式化 ![](https://i.imgur.com/xViS0am.png) - MacOS - 終端機 Terminal 1. 查看記憶卡掛載位置 ```shell= diskutil list ``` ![](https://i.imgur.com/YI7Wrlt.png) 2. 卸載記憶卡 ```shell= diskutil umountDisk 記憶卡掛載位置 ``` 4. 格式化記憶卡 ```shell= diskutil eraseDisk FAT32 記憶卡名稱(全大寫) MBRFormat 記憶卡掛載位置 ``` ![](https://i.imgur.com/Mg2sukN.png) - [Option] 圖形化介面 1. 打開磁碟工具程式並顯示所有裝置 ![](https://i.imgur.com/Agtu6sf.png) 2. 針對裝置進行清除 ![](https://i.imgur.com/iSEciBS.png) - Windows - 命令提示字元 CMD 1. 打開 CMD (Win + R) 2. 打開磁碟工具 `diskpart` (會另外開起新的視窗,以下皆在該視窗進行) (判斷有無分割可以先使用 `list volume` 看 SD Card 磁碟區是不是只有一個) 例如像這樣,只有一個 F:/ 且容量與記憶卡相差甚遠,表示有另外進行切割 ![](https://i.imgur.com/6JOICrG.png) - 磁碟區有分割(需要合併的情況) 3. 查看記憶卡掛載磁碟 `list disk` 4. 選擇磁碟 `select disk 磁碟編號(###)` 5. 清除磁碟設定 `clean` 6. 建立磁碟分割 `CREATE PARTITION PRIMARY` - 這邊可以加上 SIZE=容量(MB) 指定切割的大小 - 主要分割區 `PRIMARY` 之外是使用 `EXTENDED ` 標記延伸分割區 7. 指定掛載的位置 `ASSIGN LETTER=英文代號` - 這邊代號請不要跟原本已經掛載的重複(有防呆) ![](https://i.imgur.com/aa3YSUx.png) - 磁碟區未分割的情況 3. 查看記憶卡掛載位置 `list volume` 4. 選擇記憶卡 `select volume 記憶卡的位置編號(### or Ltr)` 5. 快速格式化記憶卡 `format fs=fat32 quick` ![](https://i.imgur.com/gdjJaxL.png) - [Option] 圖形化介面 - 磁碟區有分割(需要合併的情況) 使用 `磁碟管理` (通常在右鍵 Windows 開始選單裡) 1. 刪除已分割磁碟區 ![](https://i.imgur.com/cx0ivSt.png) 2. 新增簡單磁碟區 ![](https://i.imgur.com/Sq4Cr1n.png) 3. 全部分配完畢 ![](https://i.imgur.com/EXA8v8e.png) 4. 幫磁碟區命名 ![](https://i.imgur.com/XelXYZl.png) - 磁碟區未分割的情況 ![](https://i.imgur.com/m5bXJp7.png) ### 透過 dd 進行燒錄 (Windows 請略過) > cc / convert and copy、dd / data description、`dd / data destoryer` > 1. 備份 > 2. 複製 > 3. 編碼轉換 - Ubuntu ```shell= ## if -> input file(or 裝置)、of -> output file(or 裝置)、bs -> BlockSize 一次讀寫的區塊大小(預設512 bytes) ## 可以嘗試 bs=4M ## conv=sync, 讀一個區塊寫一個區塊 / conv=fsync, 把區塊讀到磁碟快取, 通通讀完後一次寫入 ## status=progress 顯示進度 sudo dd if=下載的Raspbian.img of=記憶卡掛載位置 bs=1M status=progress conv=fsync ``` - MacOS ```shell= ## MacOS 沒有進度條也沒有 fsync sudo dd if=下載的Raspbian.img of=記憶卡掛載位置 ## 可以從另外一個 Terminal 下這個指令,原本跑 dd 的頁面會顯示執行狀況 sudo pkill -INFO -x dd ``` ### 透過 Win32diskmager (Windows Only / 需格式化) > [官方載點](https://sourceforge.net/projects/win32diskimager/) > * 需要格式化記憶卡 #### 燒錄方式 1. 選擇Raspbian映像檔 2. 選擇裝置掛載位置 3. 寫入資料到裝置中 ![](https://i.imgur.com/FyTTcm1.png) ### 透過 Ecther 進行燒錄 > [官方網站](https://www.balena.io/etcher/) > 優點:幫你清除原先分割並燒錄 #### 燒錄方式 1. 下載、安裝 Etcher 2. 打開,選擇Raspbian映像檔、記憶卡 3. 按下`Flash!`等待完成 ![](https://i.imgur.com/g9Nhq2c.png) ### 設定啟用 Uart 1. 掛載 SD Card 2. 打開 `boot` 找到 `config.txt` 3. 在 `config.txt` 在最底下新增 ``` # Enable uart enable_uart=1 ``` ![](https://i.imgur.com/MzhFME6.png) :::warning 如果檔案已經鎖定,請重新掛載(或拔掉重插也行) 或是檢查 SD Card 旁邊卡榫不要在 Lock(防寫入) 那邊 ::: ## 開始使用 Raspberry Pi ### 基本 Knowhow 1. 完成後將記憶卡插入Raspberry Pi並且接上電源(5V),紅色指示燈為電源、黃色指示燈為記憶卡讀取,如果紅色燈閃爍代表供電不穩。(建議至少 2A 以上供電) 2. Pi 是一台電腦,跟 Arduino 這類的控制板不同,現在出到第四代了 3. 上面兩排稱作 GPIO(General-purpose input/output),通用型的輸入輸出,對應的針腳功能如下圖 ![](https://i.imgur.com/9Dj8Xdf.png) ### 與 Pi 溝通 / 透過 UART (這邊可以不用使用原生系統) > 支援 UART 傳輸的驅動程式 > > [Windows Driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41) > ![](https://i.imgur.com/rGWEULm.png) > > [MacOS Driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41) > ![](https://i.imgur.com/weaR3pg.png) > > ^安裝完可能需要重新啟動 ![](https://www.raspberrypi.com.tw/wp-content/uploads/2014/09/connect-serial-to-raspberry-pi-model-b-plus.png) - Windows 1. 安裝 [PuTTY](https://www.putty.org) 2. 安裝驅動程式 3. 打開裝置管理員並按更新驅動 ![](https://i.imgur.com/6g5CbZu.png) 4. 選擇 `瀏覽電腦上的驅動程式軟體` ![](https://i.imgur.com/j7WVlGe.png) 5. 選擇 `讓我從電腦上的可用驅動程式清單中挑選` ![](https://i.imgur.com/47xHBxQ.png) 6. 選擇最新的並按下一步,完成之後就能識別裝置了 ![](https://i.imgur.com/VhOJJEg.png) 7. 打開 PuTTY 並設定 `Session` 如附圖,可取的名稱並 `Save` 設定 ![](https://i.imgur.com/x5Irkop.png) 8. 按下 Open - MacOS 1. 在 Terminal 透過 `ls /dev/ | grep cu.usb` 來找到裝置路徑 ![](https://i.imgur.com/BGf391Y.png) 2. 接著用 `screen /dev/cu.usbserial 115200` 連線 - Ubuntu - screen 1. 安裝 screen `sudo apt install screen` 2. 在 Terminal 透過 `ls /dev/ | grep ttyUSB` 來找到裝置路徑 3. `sudo screen ` - putty 4. 在 Terminal 透過 `ls /dev/ | grep ttyUSB` 來找到裝置路徑 5. 安裝 putty `sudo apt install putty` 6. 打開 putty `sudo putty` 7. 接著用照下面設定來連線 ![](https://www.raspberrypi.com.tw/wp-content/uploads/2014/09/putty-serial-setting-linux.png) :::info 預設帳號密碼 帳號:pi 密碼:raspberry ::: ### 基本設定記憶卡擴展、時區、語系、WIFI 設定 1. 輸入 `sudo raspi-config` 進入設定 2. 擴展記憶卡可使用空間 `7.->A1` ![](https://i.imgur.com/FvZTYE0.png) ![](https://i.imgur.com/MMoEqz8.png) 3. 設定系統語系 `4.->I1` ![](https://i.imgur.com/XcDsVLK.png) 4. 設定時區 `4.->I2` Asia -> Taipei (可以按T) ![](https://i.imgur.com/5TO7Ap1.png) 5. 設定 WIFI 區域 `4.->I4` TW ![](https://i.imgur.com/ZqOxiQa.png) 6. [Option] 使用 WPA2-PSK Wifi `2.->N2` 7. FINISH ### [ISSUE] 802.1X? > [wpa_suplicant](https://w1.fi/wpa_supplicant/) > WPA(WPA2) Supplicant for Linux, BSD, Mac OS X, and Windows #### Scan Wifi / 蒐集 Wifi 資訊 1. 簡易掃描 ```shell= ## 掃描周圍 Wifi wpa_cli -i wlan0 scan ## 印出掃描結果 wpa_cli -i wlan0 scan_results ``` ![](https://i.imgur.com/8SCOw1B.png) 2. 更詳細的資訊 ```shell= ## 利用 iwlist 用 wlan0 掃描 sudo iwlist wlan0 scan > result.txt ## 看掃描結果 cat result.txt ``` ![](https://i.imgur.com/jXlaOVI.png) 3. 安裝 vim `sudo apt install vim` 4. 修改 wifi 設定檔 `sudo vim /etc/wpa_supplicant/wpa_supplicant.conf` 5. 填入 Wifi 資訊 ```shell= network={ ssid="NCNU(802.1X)" proto=RSN key_mgmt=WPA-EAP pairwise=CCMP auth_alg=OPEN eap=PEAP identity="s+學號" password="信箱密碼" } network={ ssid="MOLi_LEGACY" psk="moli.rocks" } ``` #### WPA2 資安議題 WPA2-PSK 可被暴力破解 `aircrack-ng` > Aircrack-ng是一個與802.11標準的無線網路分析有關的安全軟體,主要功能有:網路偵測,封包嗅探,WEP和WPA/WPA2-PSK破解(字典攻擊) ### 開機時自動發送 IP 到自己的信箱 - [Leeray](https://hackmd.io/@hbdoy/HJ5DEJKjz) ### 關閉 TTL 連線 - 修改 /boot/cmdline.txt ```shell= dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait ``` 改為 ```shell= dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait ``` - 再修改 /etc/inittab ```shell= #Spawn a getty on Raspberry Pi serial line T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 ``` 改為 ```shell= #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 ``` - 重開機 ## Reference 1. 歷屆 LSA Raspberry pi 資料 - [1071 Week 15](https://hackmd.io/@focaaby/By4H6JLNW/https%3A%2F%2Fhackmd.io%2Fs%2FBkSr20gqf?type=book) - [1071 Week 16](https://hackmd.io/@focaaby/By4H6JLNW/%2Fy6iTvlAyQSSz_j0RoTbMEA?type=book) - [1061 Week 14](https://hackmd.io/@focaaby/By4H6JLNW/%2FOwFgjATAHAZgrMAtANgEYBMDMjye1CEZRABhLDhNQggE5N1ag%3D%3D%3D%3Fview?type=book) - [1041 Week 11](https://hackmd.io/@focaaby/By4H6JLNW/%2FOwDgpgjAJgTArAFgLRgJyiQucpNTMAYyRFQENUxgA2KYAIzgDMg%3D?type=book) - [1041 Week 12](https://hackmd.io/@focaaby/By4H6JLNW/%2FMwNgTAZg7ArCAcBaOBTAhogLAIwIxPhCgkWwk0OygBMBjW3bIA%3D%3D?type=book) 2. 偷我專題夥伴的筆記 - [Leeray](https://hackmd.io/@hbdoy/HJ5DEJKjz) 3. 之前專題的筆記資料(已經變成 LSA 歷史資料) - [1071 Week 15](https://hackmd.io/@ncnu-opensource/BkSr20gqf)