開(kāi)源鴻蒙硬件方案領(lǐng)跑者觸覺(jué)智能
本文適用于Purple Pi OH在Android固件后串口的開(kāi)發(fā)與使用。觸覺(jué)智能的Purple Pi OH鴻蒙開(kāi)源主板,是華為L(zhǎng)aval官方社區(qū)主薦的一款鴻蒙開(kāi)發(fā)主板。
該主板主要針對(duì)學(xué)生黨,極客,工程師,極大降低了開(kāi)源鴻蒙開(kāi)發(fā)者的入門門檻,具有以下幾點(diǎn)優(yōu)勢(shì):
支持開(kāi)源鴻蒙/Linux /Andriod 11/麒麟,兼容樹(shù)莓派 ;
四核A55,最高1.8G主頻 Mali G52-2EE GPU ;
支持OpenGL/CL/Vulkan/1T NPU/8MISP ;
支持TensorFlow/MXNet/PyTorch/Caffe ;
支持1*千兆以太網(wǎng)、3*USB2.0、1*USB3.0、3*UART、2*SPI、2*I2C、28*GPIO、1*MIPI DSI、1*HDMI ;
支持OpenHarmony3.2/4.0/4.1版本,開(kāi)放SDK源代碼 ;
活躍的開(kāi)發(fā)者社區(qū), 更多牛人在線技術(shù)支持 ;
超小尺寸,極致性價(jià)比,只需249元 ;
1、介紹今天的文章主題是分享與探討關(guān)于Purple Pi OH開(kāi)發(fā)板燒寫Android 11固件后串口的開(kāi)發(fā)與使用?;?a href="http://www.solar-ruike.com.cn/v/tag/232/" target="_blank">嵌入式開(kāi)發(fā)的步驟,每個(gè)模塊的開(kāi)發(fā)與使用前都需要測(cè)試其單獨(dú)工作時(shí)的狀態(tài)是否正常。因此我們通常上來(lái)就會(huì)直接使用USB TO TTL串口模塊(下文稱CH340)連接Purple Pi OH開(kāi)發(fā)板的RX、TX引腳,然后使用PC機(jī)的串口調(diào)試助手對(duì)其進(jìn)行收發(fā)數(shù)據(jù)。
2、PC直連Purple Pi OH測(cè)試串口
接下來(lái)我將詳細(xì)介紹PC通過(guò)CH340連接Purple Pi OH開(kāi)發(fā)板后測(cè)試串口是否正常,若此方法您已使用并且還是無(wú)法打開(kāi)串口,可以跳過(guò)此小段直接看后續(xù)的方法。
2.1
CH340驅(qū)動(dòng)安裝
在連接CH340模塊至電腦時(shí),很多新手甚至老鳥(niǎo)都會(huì)遇到很多奇奇怪怪的問(wèn)題,基本最終的表現(xiàn)都是“設(shè)備管理器”中無(wú)法正常顯示CH340所在的端口,如下圖所示:
現(xiàn)在我來(lái)分享如何排查PC無(wú)法識(shí)別CH340的可能問(wèn)題:
1.驅(qū)動(dòng)未安裝:當(dāng)“設(shè)備管理器“顯示未知設(shè)備并且圖標(biāo)上帶有黃色感嘆號(hào)時(shí),我們首先需要檢查我們的PC機(jī)是否安裝了CH340對(duì)應(yīng)的驅(qū)動(dòng),安裝方法如下:
a)下載CH340驅(qū)動(dòng)安裝軟件,一般在網(wǎng)上一檢索就可以下載到,我們雙擊打開(kāi)后,頁(yè)面如下圖所示:
b) 安裝之前先點(diǎn)擊卸載,這是為了防止電腦之前有驅(qū)動(dòng)殘留的數(shù)據(jù),卸載完畢后我們?cè)冱c(diǎn)擊安裝即可。
2. CH340模塊本身?yè)p壞:CH340插入U(xiǎn)SB口時(shí),模塊本身會(huì)有紅色PWR燈亮起,若不亮可能是模塊本身?yè)p壞。
3. 擴(kuò)展塢或PC主板USB口損壞:如果上述的方法無(wú)法解決,我們也應(yīng)該考慮是否是擴(kuò)展塢或者PC主板USB口損壞,此時(shí)我們需要更換USB口甚至更換另一臺(tái)PC機(jī)插入排查是不是這個(gè)問(wèn)題。
4. 開(kāi)發(fā)板連接著CH340導(dǎo)致無(wú)法識(shí)別:導(dǎo)致這種現(xiàn)象的原因有很多種,可能是您使用開(kāi)發(fā)板給CH340提供了錯(cuò)誤的供電,當(dāng)供電不穩(wěn)定或者電流不足有可能會(huì)導(dǎo)致CH340無(wú)法正常工作,因此我們通常只連接CH340和開(kāi)發(fā)板的GND、Tx、Rx引腳。還有可能是開(kāi)發(fā)板硬件資源與CH340有沖突導(dǎo)致無(wú)法識(shí)別。甚至是開(kāi)發(fā)板電路設(shè)計(jì)問(wèn)題,即沒(méi)有按照CH340規(guī)范來(lái)設(shè)計(jì)電路等原因。
2.2硬件連接
1.將CH340插入PC機(jī)USB口,打開(kāi)“設(shè)備管理器”
2.在設(shè)備管理器列表中,找到“端口 (COM & LPT)”類別,展開(kāi)它。你應(yīng)該能看到一個(gè)標(biāo)記為“USB-SERIAL CH340”(或類似名稱)的設(shè)備,旁邊會(huì)顯示它的 COM 端口號(hào),比如 COM6。
若成功顯示,即代表CH340模塊正常。
3.接下來(lái)我們需要將CH340的RX和TX分別連接在PurplePiOH開(kāi)發(fā)板的TX和RX腳上,在連接時(shí)可以根據(jù)背后絲印來(lái)判斷是否連接正確。PurplePiOH開(kāi)發(fā)板串口節(jié)點(diǎn)/dev/ttyS0引腳位置,如下圖 所示:
至此我們的硬件連接就完成了,接下來(lái)可以開(kāi)始軟件測(cè)試串口步驟。
2.3軟件測(cè)試
1.第一步我們首先需要進(jìn)入PurplePiOH開(kāi)發(fā)板的命令行終端,可以通過(guò)ADB連接到其中。ADB的使用方法可以參考觸覺(jué)智能官網(wǎng)產(chǎn)品資料中的4.2章節(jié),鏈接如下:
https://industio.yuque.com/mdtih8/gyzv1h/uecrhad89197uh01?singleDoc#aOLed
2.第二步我們進(jìn)入到命令行后,使用”su”切換為root身份,通過(guò)執(zhí)行“dmesg | grep tty”命令查看系統(tǒng)啟動(dòng)時(shí)識(shí)別到的串口設(shè)備,再使用stty命令檢查和設(shè)置串口參數(shù),例如”stty –F /dev/ttyS0 115200”將串口節(jié)點(diǎn)波特率設(shè)置為115200.
3.第三步我們打開(kāi)SSCOM或者類似的串口調(diào)試助手,選擇“設(shè)備管理器“中識(shí)別到的COM口,配置波特率為剛剛使用stty命令設(shè)置的波特率,同時(shí)設(shè)置數(shù)據(jù)位、停止位、校驗(yàn)位以及流控制參數(shù)分別為8,1,None,None,隨后點(diǎn)擊打開(kāi)串口,如下圖所示:
?
4.如果此時(shí)一切順利,我們便可以通過(guò)SSCOM與PurplePiOH開(kāi)發(fā)板互相收發(fā)串口信息,發(fā)送數(shù)據(jù)使用指令”echo “test” > /dev/ttyS0”,查看開(kāi)發(fā)板接收到的數(shù)據(jù)使用”cat /dev/ttyS0”,此時(shí)SSCOM發(fā)送數(shù)據(jù)到開(kāi)發(fā)板,開(kāi)發(fā)板會(huì)將串口數(shù)據(jù)回顯至SSCOM,如下圖所示:
?
2.4其他常見(jiàn)問(wèn)題
1.數(shù)據(jù)呈現(xiàn)亂碼或者”\0\0\0…”:波特率設(shè)置不對(duì),使用stty修改開(kāi)發(fā)板串口節(jié)點(diǎn)波特率后再次嘗試。
2.怎么查看串口節(jié)點(diǎn):通過(guò)命令”ls /dev/tty*”查看設(shè)備串口節(jié)點(diǎn),通過(guò)硬件規(guī)格書或者使用手冊(cè)查詢開(kāi)發(fā)板串口引腳或端口位置。
3.設(shè)備節(jié)點(diǎn)無(wú)法操作:通過(guò)”ls –l /dev/tty*”查看是否權(quán)限不足,通過(guò)su切換管理員后使用”chmod 666 /dev/ttyS0“修改文件讀寫權(quán)限。
4.用戶使用自己的app無(wú)法打開(kāi)串口節(jié)點(diǎn):先查看自己的app是否在Android11的版本被支持,也有可能app不掃描這個(gè)節(jié)點(diǎn)名稱,可以重新找一個(gè)串口助手查看是app問(wèn)題還是串口節(jié)點(diǎn)問(wèn)題(可以使用Google開(kāi)源SerialPort)。或者查看串口是否被占用,嘗試打開(kāi)其他串口設(shè)備節(jié)點(diǎn)。
3、Android 11 SELinux功能
若上述操作無(wú)法解決串口無(wú)法被訪問(wèn)的問(wèn)題,我們就需要查看SELinux是否對(duì)我們的訪問(wèn)做了限制,接下來(lái)我將分享SELinux的概念和處理方式。
3.1SELinux簡(jiǎn)介
在基于Android的設(shè)備上,SELinux(Security-Enhanced Linux)是一種安全模塊,用于強(qiáng)化訪問(wèn)控制策略。SELinux可以通過(guò)強(qiáng)制訪問(wèn)控制(MAC)來(lái)限制應(yīng)用程序和系統(tǒng)進(jìn)程對(duì)系統(tǒng)資源的訪問(wèn)。
3.2SELinux阻止串口被訪問(wèn)的情況
1.沒(méi)有正確的SELinux政策:如果SELinux政策沒(méi)有為訪問(wèn)特定串口的進(jìn)程或應(yīng)用程序明確授權(quán),那么訪問(wèn)會(huì)被阻止。需要相應(yīng)的SELinux上下文或標(biāo)簽(如userial_device:s0)允許對(duì)應(yīng)用程序或進(jìn)程訪問(wèn)串口。
2.SELinux處于Enforcing模式:當(dāng)SELinux處于Enforcing模式時(shí),它會(huì)強(qiáng)制執(zhí)行所有的安全策略,并阻止任何違反這些策略的行為。如果串口設(shè)備的SELinux標(biāo)簽或訪問(wèn)控制列表(ACL)配置不正確,任何嘗試訪問(wèn)這些設(shè)備的操作都會(huì)被阻止。此時(shí)我們可以使用“getenforce“命令直接檢查SELinux的模式。
3.設(shè)備文件權(quán)限不足:串口通常作為設(shè)備文件(如/dev/ttyS0)存在于文件系統(tǒng)中。如果這些文件的SELinux標(biāo)簽設(shè)置不允許特定的訪問(wèn)(例如,某個(gè)應(yīng)用需要讀寫權(quán)限但僅被授予了讀權(quán)限),則訪問(wèn)會(huì)被拒絕。
3.3解決SELinux串口訪問(wèn)問(wèn)題
要解決由SELinux導(dǎo)致的串口訪問(wèn)問(wèn)題,可以采取以下步驟:
1.檢查SELinux狀態(tài):使用“getenforce“命令查看SELinux的當(dāng)前模式。如果是Enforcing,系統(tǒng)會(huì)強(qiáng)制執(zhí)行所有策略。
2.查看和修改SELinux政策:使用”audit2allow”查看由于SELinux政策被拒絕的相關(guān)日志,以了解為什么訪問(wèn)被拒絕。根據(jù)需要調(diào)整或創(chuàng)建新的SELinux政策。這可能需要深入了解SELinux政策語(yǔ)言,并使用如semanage和semodule等工具。
3.臨時(shí)切換到Permissive模式:作為臨時(shí)解決方案,可以將SELinux設(shè)置為Permissive模式,這樣SELinux不會(huì)阻止任何操作,但會(huì)記錄所有違反政策的行為。可以使用“setenforce 0“命令來(lái)實(shí)現(xiàn),如下圖所示:
4.于安卓源碼中關(guān)閉:修改安卓源碼中device/rockchip/common/BoardConfig.mk 的BOARD_SELINUX_ENFORCING := false;
5.確保有適當(dāng)?shù)脑O(shè)備文件權(quán)限:確保應(yīng)用或進(jìn)程有正確的權(quán)限來(lái)訪問(wèn)串口設(shè)備文件。使用ls -l查看設(shè)備文件的權(quán)限和所有權(quán)。
-
Android
+關(guān)注
關(guān)注
12文章
3945瀏覽量
127947 -
串口
+關(guān)注
關(guān)注
14文章
1558瀏覽量
77060 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5121瀏覽量
98212
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論