手動修改樹莓派配置(僅適用systemd)
我為什么這樣做?
針對下載最新版的raspbian buster鏡像前弯,遇上問題如下:
- ssh服務(wù)默認沒有開啟,無法通過網(wǎng)絡(luò)遠程登錄秫逝。
- hdmi沒有輸出恕出。
- 串口接收端損壞,發(fā)送端好的违帆,無法接受串口發(fā)送的調(diào)試命令剃根,但是可以讀取log。
以上理由....都特喵扯淡前方,反正:
我就只是想改一下狈醉,就這。
具體步驟
1.在fat32分區(qū)中惠险,內(nèi)核啟動命令行參數(shù)記錄在cmdline.txt
中苗傅,此處修改指定systemd作為init,并且取消quiet參數(shù)班巩,讓開機log正常打印渣慕,可以用串口讀取到,這個可以直接讀取tf卡盤修改抱慌。
最終的cmdline.txt
內(nèi)容如下:
root=PARTUUID=ea7d04d6-02 rootfstype=ext4 init=/bin/systemd elevator=deadline fsck.repair=yes rootwait plymouth.ignore-serial-consoles
2.掛載tf卡樹莓派的根分區(qū)逊桦,此處內(nèi)存卡塊設(shè)備為/dev/sdc
,則/dev/sdc1
為fat32分區(qū),/dev/sdc2
為樹莓派的ext4根分區(qū)
切換root用戶(#)抑进,掛載點創(chuàng)建到/media/pi
#mkdir /media/pi
掛載文件系統(tǒng)
文件系統(tǒng)掛載點
/media/pi
不是一定要這個路徑强经,根據(jù)實際情況,如果掛載點有變寺渗,下面命令涉及/media/pi
路徑替換一下即可
#mount -t ext4 -o rw /dev/sdc2 /media/pi
3.確認ssh服務(wù)配置文件存在系統(tǒng)中匿情。
ls查看ssh.service配置文件所在的目錄。
#ls /media/pi/lib/systemd/system/ssh*
/media/pi/lib/systemd/system/ssh.service /media/pi/lib/systemd/system/ssh@.service /media/pi/lib/systemd/system/ssh.socket /media/pi/lib/systemd/system/sshswitch.service
看以上輸出結(jié)果信殊,存在/media/pi/lib/systemd/system/ssh.service
炬称,確認系統(tǒng)已經(jīng)安裝了ssh服務(wù)。
4.systemd的target依賴關(guān)系
查閱systemd手冊可知涡拘,啟動的目標依賴關(guān)系大致如下
sysinit.target -> basic.target -> multi-user.target -> graphical.target
需要把ssh.service
添加到啟動流程中去玲躯。
5.添加ssh軟鏈接到到wants
文件夾
上步所示,graphical.target
啟動前先啟動multi-user.target
,ssh依賴是multi-user.target
。軟連接添加到multi-user.target.wants
文件夾里跷车,即可添加到啟動流程中去棘利。
#ln -s /lib/systemd/system/ssh.service /media/pi/etc/systemd/system/multi-user.target.wants/ssh.service
查看文件詳細信息,確認軟連接成功添加
#ls -l /media/pi/etc/systemd/system/multi-user.target.wants/ssh.service
lrwxrwxrwx 1 root root 31 8月 15 12:07 /media/pi/etc/systemd/system/multi-user.target.wants/ssh.service -> /lib/systemd/system/ssh.service
如上所示,軟連接創(chuàng)建成功,/media/pi/etc/systemd/system/multi-user.target.wants/ssh.service
指向 /lib/systemd/system/ssh.service
6.ssh服務(wù)添加開機自啟成功姓赤,連上網(wǎng)線赡译,插入tf卡,開機不铆,找到樹莓派的ip嘗試鏈接即可蝌焚。
網(wǎng)絡(luò)服務(wù)默認是使用
networking.service
來管理,默認添加到multi-user.target.wants
里去誓斥,參與開機自啟只洒。
關(guān)閉了cmdline.txt
中quiet
的參數(shù),開機時會打印詳細流程劳坑,可以通過讀取串口輸出來確定系統(tǒng)啟動的情況,可以通過串口大致判斷是否開機成功毕谴。(雖然pi的rxd可能因為接觸不良或者壞了導(dǎo)致樹莓派無法接收上位機的信息,如果整個串口壞掉了那就沒辦法了,摸著來吧)
重啟后距芬,觀察硬盤讀寫燈(綠燈)涝开,啟動時偶爾閃爍。
自動鏈接wifi篇
手上的樹莓派2B無板載wifi框仔,需要額外購買usb wifi模塊舀武,同時要網(wǎng)卡型號在樹莓派中存在驅(qū)動,一般某寶備注免驅(qū)离斩,詳情需要詢問银舱。
掛載root分區(qū)到/media/pi
后,修改/media/pi/etc/wpa_supplicant/wpa_supplicant.conf
#vim /media/pi/etc/wpa_supplicant/wpa_supplicant.conf
添加network
結(jié)構(gòu)跛梗,ssid
是自己開的wifi名稱寻馏,psk
是wifi密碼,priority
是連接的優(yōu)先級核偿,越大優(yōu)先級越高
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="mywifi"
psk="12345678"
priority=5
}
如果對vi
使用不熟悉诚欠,可以參考這里,
一份簡單的快捷鍵幫助:
移動光標:
alt+h 左移動 alt+l 右移動
alt+j 下移動 alt+k 上移動
alt+xxx的快捷鍵都會退出編輯模式宪祥,重新按i進入即可聂薪,下同。
刪除字符:
alt+x
刪除當(dāng)前行:
alt+d d(第二次d松開alt)
插入編輯模式:
i
保存退出
alt+: wq(松開alt+:)
取消保存并退出
alt+: q!(松開alt+:)
因為看不到log蝗羊,很難判斷連接失敗的原因,所以直接配置wifi連接但又不成功排查起來很困難仁锯,建議先用有線連接耀找。
由于wifi使用了dhcp自動分配ip,樹莓派的ip可能無法確定(除非有些機型顯示已連接的設(shè)備的ip,或者掃描)野芒,或使用其他手段掃描wifi網(wǎng)段的ip蓄愁。
以下bash腳本,掃描當(dāng)前無線局域網(wǎng)內(nèi)存活的主機,小米手機的wifi網(wǎng)段為192.168.43.x
,每個ip發(fā)送一個ping包狞悲,不丟包則認為主機存活撮抓。
i=1
net="192.168.42"
while [ $i -lt 254 ];
do
echo -en "\r$net.$((++i)) "
ping -c 1 $net.$i > /dev/null && echo "->主機在線"
done
確定wifi網(wǎng)段的方法
手機終端模擬器鍵入ifconfig
命令,看到wlan網(wǎng)卡的ip摇锋,我的是192.168.43.1
最終掃描到的ip是192.168.43.227
,使用juicessh
登錄樹莓派即可.
wifi管理的服務(wù)由wpa_supplicant.service
管理丹拯,經(jīng)查看,默認已經(jīng)添加到/media/pi/etc/systemd/system/multi-user.target.wants
,說明服務(wù)自啟是包含了wifi管理的荸恕。
手機開同名同密碼的ap嘗試被連接乖酬,注意是2.4G 頻段,此處購買的usb wifi模塊不支持5G頻段融求。
知識儲備
1.raspbian是基于debian的樹莓派定制系統(tǒng)咬像,系統(tǒng)管理上可以套用debian的方法。
2.debian10生宛,版本代號buster县昂,使用的init不是傳統(tǒng)sysV init,而使用了systemd陷舅。
3.樹莓派的tf卡有2個分區(qū)倒彰,一個fat32格式的boot分區(qū),放置bios啟動相關(guān)的配置(config.txt)蔑赘,以及內(nèi)核啟動參數(shù)(cmdline.txt)狸驳,一個ext4格式的根分區(qū)。
4.systemd和傳統(tǒng)的sysV init開機啟動的配置有很大的差異缩赛。sysV init會讀取init.d相關(guān)daemon啟動腳本耙箍,但是systemd則用了它自己要求的配置文件,systemd兼容了大部分sysV的腳本酥馍。具體差異如下
- systemd服務(wù)的配置文件位與/lib/systemd/system辩昆,/etc/systemd/system等幾處位置
- sysV init的服務(wù)啟動腳本位與/etc/init.d /etc/rcX.d (X=0-6)
5.運行級別。
linux分成6個運行級別隨便在博客找的說明
編號 | 描述 | systemd對應(yīng)的target |
---|---|---|
0 | 關(guān)機模式旨袒,系統(tǒng)默認運行級別不能設(shè)置為0汁针,否則不能正常啟動,一開機就自動關(guān)機 | shutdown.target |
1 | 單用戶模式砚尽,root權(quán)限施无,用于系統(tǒng)維護,禁止遠程登錄必孤,就像Windows下的安全模式 | emergency.target |
2 | 多用戶模式猾骡,沒有 NFS 網(wǎng)絡(luò)支持 | rescure.target |
3 | 完整的多用戶文本模式瑞躺,有 NFS,登錄后進入控制臺命令模式 | multi-user.target |
4 | 系統(tǒng)未使用兴想,保留一般不用 | 無 |
5 | 圖形化模式幢哨,登陸后進入圖形 GUI 模式 | graphical.target |
6 | 重啟模式,默認運行級別不能設(shè)為6嫂便,否則不能設(shè)為6捞镰,否則不能正常啟動,就會一直開機重啟 | 無 |
- systemd通過軟鏈接的方法毙替,把選中運行級別的.target配置文件軟鏈接到/etc/systemd/system/default.target
- sysV init 則把啟動腳本放在/etc/init.d爪幻,不同運行級別需要啟動的服務(wù)桩警,則軟鏈接到/etc/rcX.d(例如rc3.d)