前言
原創文章,轉載引用務必注明鏈接。水平有限,歡迎指正。
本文使用markdown寫成,為獲得更好的閱讀體驗,推薦訪問我的博客原文:
http://www.omoikane.cn/2016/09/15/bbb_debian/
系統環境:Windows 7 Home Pentium x64|Deepin Linux 15.2 x64;Debian On BBB Industrial
預裝系統介紹
相信之前用過BeagleBone Black的都記得預裝的Ångström Linux系統,官方主頁一度停止更新,opkg軟件倉庫也不再維護,不過經MOP小弟提醒發現其github項目主頁依然活躍,向這些默默努力的人致敬!但是BeagleBoard官方提供的鏡像還停留在2013年6月20日的版本,現在4G版BBB都是使用Debian。我們來看一看官方預裝的系統情況,使用一根MicroUSB線(這個接口已經相對不多見了)與電腦連接后,下載安裝驅動后,打開SSH客戶端(Kitty或Xshell等),主機地址填192.168.7.2或beaglebone.local,用戶名root,密碼為空(另一個默認賬戶是debian:temppwd)。輸入以下命令:
lsb_release -a
cat /proc/version
uname -a
df -Th
netstat -lnp
可以看到當前系統版本為Debian 7.9 Wheezy,在wandboard (飛思卡爾 imx6q四核SoC)上編譯,內核版本3.8.13,預裝apache2 Web服務器,rdp遠程桌面服務器,udhcpd DHCP服務器。
我們打開官方系統更新頁面,可以看到目前最新的是發布於2016年5月13日的Debian 8.5 Jessie MicroSD卡鏡像(然而下載鏈接寫的8.4),要求至少4G存儲空間(eMMC或者SD),另外官方提供了燒錄到板載eMMC存儲的方法。
FAQ:
-
如何從MicroSD卡啟動
BBB默認從板載eMMC啟動,按住USB接口旁邊的USER/BOOT按鈕(S2)然后開機即可從MicroSD啟動
-
我不需要圖形界面,默認系統占用空間過大
除了官方包含LXQT的Debian鏡像,訪問這里可以看到更多選擇,其中console版就是僅包含核心功能的鏡像,但是沒有USB Gadget驅動(無法模擬串口、以太網卡和存儲設備),沒有預裝Apache2,X11,xrdp等。
-
除了Debian還有那些系統可用
- ArchLinux
- Ostro Project
- Yocto Project
- Kali Linux
- Fedora Linux
- 不一而足,后面預計講一下BlackArch——安全審計,Ostro——專注物聯網,Yocto——為BBB編譯鏡像等
-
串口調試功能如何使用
-
BBB上有沒有類似樹莓派的RPi.GPIO,wringPi這種操控GPIO的庫
有,BoneScript Library,另外也能使用upm。
-
通過 USB Gadget 驅動BBB的USB接口實現哪些功能
- 模擬以太網接口:192.168.7.2,劫持局域網dns解析后使用beaglebone.local也能訪問
- 模擬Mass Storage (MSG):在宿主機中顯示BEAGLEBONE的磁盤
- 模擬串口:可以查看串口輸出,但是因為是模擬的,所以開關機信息和uboot無法查看調試
-
有沒有比較全的文檔wiki
看這里——elinux.org
-
插上MicroSD卡后重啟會從哪啟動?
會從上次啟動的設備啟動
更新板載系統
所需硬件:
- MicroSD卡一張,4G以上大小
- BeagleBone Black Industrial
- MicroUSB數據線
- MicroSD 讀卡器(能讀MicroSD的設備如手機等也可以)
所需軟件(以Windows為例):
- 最新官方Debian系統鏡像——下載地址
- 解壓縮軟件——7-zip、WinRAR等,用於解壓下載來的img.xz壓縮文件中的系統鏡像
- Win32 Disk Imager —— 下載地址,用於燒錄系統文件至MicroSD卡
燒錄系統(MicroSD+eMMC):
插上MicroSD卡,打開Win32 Disk Imager,選擇解壓出來的bone-debian-8.4-lxqt-4gb-armhf-2016-05-13-4gb.img
文件,選擇正確的寫入設備(MicroSD卡),點擊Write等待片刻即可。
燒錄完成,將MicroSD卡插入BBB卡槽,按住USER/BOOT按鈕后開機,即可從SD存儲啟動。
當然,我們的最終目的是升級eMMC的板載系統,具體方法官網也有講到:
To turn these images into eMMC flasher images, edit the /boot/uEnv.txt file on the Linux partition on the microSD card and remove the '#' on the line with 'cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh'. Enabling this will cause booting the microSD card to flash the eMMC. Images are no longer provided here for this to avoid people accidentally overwriting their eMMC flash.
燒錄好系統到MicroSD卡后,編輯/boot/uEnv.txt文件,取消注釋cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
,從而開啟自動燒錄到eMMC的功能腳本。之所以不再提供單獨的eMMC鏡像是為了防止有些人大腦不清楚的時候誤操作覆蓋掉eMMC里面的系統文件(怎么感覺是官方自己這么干過得到的血的教訓。。。)
注意!
- MicroSD卡燒錄完系統后,因為是Linux文件系統,Windows下不可見。另外/boot/uEnv.txt文件也無從修改(即使我知道你可以,但是仍然不建議在Windows下修改Linux文件系統文件),這時我們可以先啟動BBB Industrial,登錄之后插上MicroSD卡,進行修改。如果你不會的話,跟我一起學寫shell:
lsblk |grep -q mmcblk1 && mkdir /media/sd && mount /dev/mmcblk1p1 /media/sd && sed -i 's/#cmdline=init/cmdline=init/g' /media/sd/boot/uEnv.txt && umount /media/sd && poweroff || echo please insert ur sdcard properly!
別看命令這么長,其實shell編程邏輯比較簡單,|
表示上一個命令的輸出作為下一個命令的輸入,&&
表示上一命令執行成功則執行此命令,||
表示上一命令失敗則執行此命令。
所以上述命令的意思是查看當前存儲設備——查找是否有sd卡插入——有則創建/media/sd目錄並掛載——修改uEnv.txt文件,取消注釋——卸載sd卡,關機(&& poweroff,方便燒錄,可選)——如果沒有檢測到會提醒你正確插入sd卡。sed命令的用法看這里。
- 選擇燒錄到eMMC時,按住S2開機,隨后以太網接口旁邊四個LED全亮即可松開,隨后進入流水燈模式代表正在燒錄
- 燒錄到eMMC的過程可能會持續45分鍾,當燒錄完畢時,以太網接口旁邊的四個燈會全亮(不閃爍),此時關閉電源,拔掉MicroSD卡,重啟即會從eMMC新的鏡像啟動。
- 想從MicroSD卡啟動的話記得重新注釋那一行(行首加個
#
)
好的,趁着等待的這會兒,我去吃飯了~
吃完飯繼續更新
咦,這和劇本寫得不一樣啊導演!四個燈全滅而不是全亮,不管了,拔掉MicroSD卡重啟看看,當然這時如果有串口調試模塊就好了。等了好一會兒,宿主機顯示出BEAGLEBONE磁盤,SSH和虛擬串口都可以使用了。我們再看看新系統:
可以看到,更新后的系統是Debian Jessie 8.4(官網騙人啊),使用英偉達 (Nvidia,造顯卡那個) jetson tk1開發板編譯,內核版本4.4.9,默認沒有安裝rdp遠程桌面服務。可用空間218M什么鬼。。。
3000:Cloud9
1880:Node-RED
更多信息可以使用以下命令:
cat /proc/cpuinfo # 查看CPU信息
dmesg | grep scheduler # 支持的系統I/O調度
cat /sys/block/mmcblk0/queue/scheduler # 當前所使用的I/O調度算法
cat /proc/driver/rtc # 板載RTC信息
cat /sys/power/state # 支持的電源管理模式
系統初始設置
更改時區
timedatectl set-timezone Asia/Shanghai
更改時間
timedatectl set-time "yyyy-MM-dd hh:mm:ss"
注意年月日之間使用短橫杠-
連接。然而運行改命令會提示Failed to set time: Automatic time synchronization is enabled
,由於設置了自動更新時間無法手動更改,后面也發現連上網重啟之后會獲得正確的時間。
關於硬件時鍾和系統時鍾可以看我之前寫的文章《吃我一記咸魚突刺——使用板載RTC定時開機》
使用無線網絡
BBB可以使用有線網或無線網,我這里掏出之前買的Edimax無線網卡,使用的是經典RT3070芯片。
通過以下命令可以看到無線網卡已經被識別:
lsusb
iwconfig
lsmod
iw list # 該命令可以看到無線網卡支持的模式,比如monitor,AP,Station等,后續會講
一般修改/etc/network/interfaces
文件(低版本內核修改此文件僅支持wep加密)、wireless_tools或者使用wpa_suppliant可以連接網絡。然而interfaces文件里有這么一句:# WiFi use: -> connmanctl
,正好netstat -lnp
里面也有connmanctl的身影,看名字應該是個網絡連接管理軟件。
connmanctl是啥
connmanctl --help
看了一下使用介紹,發現功能挺多啊。
ConnMan是一個專為嵌入式設備和快速解析設計的命令行網絡管理程序,支持諸多模塊,而且內置dhcp(IP地址分配)和ntp(網絡授時)功能。
使用方法可以看這些:
簡單來說,[technologies]理解為網卡interfaces,[services]理解為可連接的網絡:
connmanctl
> enable wifi # 啟用無線網卡
> scan wifi # 掃描無線網絡
> services # 列舉掃描到的無線網絡
> services wifi_*_psk # [optional] 查看某個無線網絡的具體信息
> agent on # [ptional] 無密碼的可以不需要這句
> connect wifi_*_psk # 不是SSID,二是后面對應的wifi_*,根據自己情況修改此時會要求你輸入網絡密碼
> state # 成功連接狀態為ready,已連上網是online
> help # 顯示幫助文件
> exit # 退出
成功連接后,會在/var/lib/connman
目錄下生成配置文件,而且下次開機就會自動連接了。
【無線網絡掃描結果】*——favorite;A——autoconnect;O——online。connect后面的參數是wifi_開頭的而不是你的無線網名稱。managed代表AP模式 (非Ad-Hoc),psk為加密方式。開放網絡是none,此時不需要agent on。
注意:
- 隨便掏出來的Edimax估計壞了,先后出現過各種奇怪問題,包括:
- connect時顯示
Error /net/connman/service/[the ssid]: Method "Connect" with signature "" on interface "net.connman.Service" doesn't exist
——更新:需要關閉tether模式才行 - 連接成功后只能獲取到254.169這種無效IP地址
ifconfig
手動為wlan0設置IP地址仍然不能聯網
- connect時顯示
- 於是我又掏出來一個小米隨身wifi (使用mt7601u芯片,包括360、小度等都使用該芯片),還好新版Linux 內核已經包含該芯片驅動,可以直接使用。具體可以參考我之前寫的關於USB無線網卡選擇的文章,這回正常了,很順利。
- connmanctl 還有一個tether命令,需要無線網卡支持ap模式,可惜mt7601u不支持,僅支持station,monitor模式,rt3070倒是支持,
connmanctl tether wifi on
之后可以搜索到一個名為BeagleBone-146C的無線網。更新:tether和station模式不能同時打開。 - 更多用法可以使用
connmanctl help
或者查看上面所說的文檔
網線直連共享上網
這種主要針對沒有路由器,沒有開箱即用的無線網卡,手頭只有一根網線的情況。
新入手一塊板子,沒有路由器,沒有顯示器,也沒用串口調試模塊,手頭僅有一根網線,眼前一抹黑,怎么辦?
繼續參考我之前寫的文章《網線直連控制Guitar (增強版)》,你可以學到直連線和交叉線;Windows上搭建DHCP服務器,tftp協議相關的知識。
這樣BBB Industrial也可以通過宿主機來上網更新了。當然如果你有路由器直接插上網線就可以,多簡單。
更新系統(內核、軟件)
更換軟件源為tsinghua (清華大學),也可以使用ustc (中國科學技術大學,但是最近不穩定),常用的阿里源不包括Debian armhf架構就不列出來了。
sed -i 's/httpredir.debian.org/mirrors4.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
是不是發現sed命令很好用!
# 更新系統
apt-get update && apt-get upgrade
推薦你去看看/etc/apt/sources.list
文件,值得一看。因為升級時速度過慢,可以改upm,node.js的更新地址,或者使用代理(connman就支持設置代理)。此外內核的更新沒有Raspberry Pi使用rpi-update那么方便了。
再次運行lsb_release -a
命令可以看到已經升級為最新的Debian Jessie 8.5了。另外不推薦冒然執行 apt-get dist-upgrade
升級系統,原因我也講過,upgrade遇到依賴沖突時會保持原樣,dist-upgrade會強行升級依賴而往往無法做到滿足所有依賴,例如軟件A需要庫1.1版本,軟件B需要庫2.4版本,后者會升級為庫2.4並導致軟件A無法使用。