當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 行業(yè)百科 > 簡述Linux如何應(yīng)用在嵌入式單片機(jī)上
大多數(shù)功能更強(qiáng)大的緊湊型單片機(jī)(SBC)都運(yùn)行一種流行的Linux發(fā)行版,專門用于這些嵌入式板。盡管沒有針對嵌入式應(yīng)用程序的特定版本的Linux內(nèi)核,但與運(yùn)行Linux的PC或臺式設(shè)備的區(qū)別通常很小。
通常比擁有大量RAM和硬盤更依賴于閃存-在某些情況下還“無頭”,即沒有HDMI或視頻輸出-嵌入式應(yīng)用程序的分發(fā)是針對可用資源而量身定制的,而不是不能夠運(yùn)行某些功能或命令。對于無頭SBC而言,與它們進(jìn)行交互的唯一方法是通過Linux命令行,因此必須具備良好的Linux基礎(chǔ)知識。同樣,在設(shè)備和外圍設(shè)備連接級別(例如,具有GPIO接口和I2C功能),需要了解許多重要的Linux資源。在本文中,我們將介紹將嵌入式SBC連接到現(xiàn)實(shí)世界時最可能使用的一些命令。假定您具有一些基本的Linux命令行技能。
在開始使用命令行界面(CLI)之前,讓我們回顧一下使用Linux的一些好處。Linux可以運(yùn)行在從具有嵌入式微控制器的緊湊型SBC到多核數(shù)據(jù)中心服務(wù)器等各種設(shè)備上,它是一種極其高效且可擴(kuò)展的操作系統(tǒng)(OS)。正如我們將在本文中發(fā)現(xiàn)的那樣,您的SBC上可以使用大量的開源程序。我們將在本文中介紹其中一些,但還有數(shù)百個。將OS用于嵌入式設(shè)計(jì)的一個方面是,它并不特別適合某些實(shí)時應(yīng)用程序的延遲和確定性要求。就是說,有許多行業(yè)的發(fā)展旨在提供基于搶占式的硬實(shí)時Linux OS。實(shí)質(zhì)上,這樣可以根據(jù)需要中斷OS,以滿足實(shí)時需求。而且,由于Linux是開源操作系統(tǒng),因此它已獲得GNU通用公共許可證(GPL)的許可,并且可以免費(fèi)使用和修改。在這種情況下,社區(qū)對OS的支持是巨大的,因?yàn)橛谐汕先f的Linux內(nèi)核和應(yīng)用程序開發(fā)人員參與其中。
命令級界面
對于本文中的示例,我們將使用PocketBeagle板。PocketBeagle的IP地址為192.168.6.2,默認(rèn)用戶為'debian'。在本文中,<ret>表示按回車鍵或Enter鍵。按住Ctrl鍵并按另一個鍵(在此示例中為“ D”)由Ctrl-D表示。Linux命令也有很長的選項(xiàng)列表,可以從命令行調(diào)用這些選項(xiàng)。鼓勵讀者研究這些內(nèi)容,只需鍵入命令后接--幫助(例如df)--help <ret>即可產(chǎn)生命令語法和選項(xiàng)的完整詳細(xì)信息,在此情況下,設(shè)備文件系統(tǒng)命令。
從計(jì)算機(jī)到PocketBeagle的連接取決于使用終端程序(例如PuTTY)在Microsoft Windows下運(yùn)行,還是使用Mac OS X時使用終端。
SSH(安全外殼)提供了一種遠(yuǎn)程連接到另一臺計(jì)算機(jī)的安全加密方法。連接后,您可以運(yùn)行直接在該計(jì)算機(jī)上運(yùn)行的所有命令。
最常用的命令格式是SSH user @ host <ret>。主機(jī)可以是IP地址,也可以是本地網(wǎng)絡(luò)上的主機(jī)名。可以使用Ctrl-D終止SSH會話。如果先前未與主機(jī)(在這種情況下為PocketBeagle)進(jìn)行通信,則將顯示警告消息。
Linux的前提是所有內(nèi)容都是文件,并且GPIO引腳也不例外。PocketBeagle的每個可用輸入和輸出都以這種方式處理,可以在/ sys / class / gpio目錄中找到。當(dāng)您使用Python之類的語言進(jìn)行工作時,除了將其設(shè)置為高輸出還是低輸出之外,還可以將每個單獨(dú)的GPIO設(shè)置為輸入或輸出。這可以在命令行中以相同的方式實(shí)現(xiàn)。
在此示例中,選擇了引腳gpio27,然后使用命令echo out> direction <ret>設(shè)置GPIO方向。這會將“輸出”放入文件“方向”。然后,您可以通過命令echo 1> value <ret>將引腳的輸出值設(shè)置為高電平,或者通過echo 0> value <ret>將引腳驅(qū)動為低電平。使用PocketBeagle,您可以通過以相同的方式打開和關(guān)閉USR LED,將“亮度”值從0更改為1來打開LED,從而獲得一些樂趣。
在將7段顯示器或加速度計(jì)之類的I 2 C設(shè)備連接到嵌入式板的I 2 C總線時,至關(guān)重要的是要確保沒有其他設(shè)備正在使用該總線上的地址。通常,一個SBC配備有多個I 2 C總線。通常,某些內(nèi)部板外圍設(shè)備可以連接到一個,而另一兩個可以用于用戶應(yīng)用。i2cdetect實(shí)用程序可以掃描指定的總線并返回找到的設(shè)備的結(jié)果。-l選項(xiàng)提供有關(guān)可用的I 2 C總線數(shù)量的信息,而i2cdetect –r 0 <ret>命令提供了在總線0上發(fā)現(xiàn)的設(shè)備的列表。在圖4所示的示例中,在以下位置找到了兩個設(shè)備:地址24h和50h。
采用支持Linux使用的SBC會增加許多功能,并通過使用開源工具和軟件來幫助簡化開發(fā)過程。嵌入式開發(fā)人員將欣賞實(shí)用程序命令輕松完成集成外圍設(shè)備并實(shí)現(xiàn)跨局域網(wǎng)和與基于Web的應(yīng)用程序之間的數(shù)據(jù)連接的任務(wù)。
一些常用的文件和目錄命令
ls –列出文件
例如,ls <ret>,ls –l <ret>顯示每個文件的完整詳細(xì)信息
cd –更改目錄
例如,cd <ret>,cd .. <ret>向上移動目錄,cd /。<ret>移至根目錄,cd?/ <ret>移至主目錄,cd / node_modules <ret>
mkdir –新建目錄
例如,mkdir projectfab <ret>
rm –刪除文件
例如,rm empty.txt <ret>
rmdir –刪除目錄
例如,rmdir projectfab <ret>
cp –復(fù)制文件或目錄
例如,cp program.c projectfab / program.c <ret>將文件program.c復(fù)制到子目錄projectfab
mv –移動文件或目錄
例如,mv program.c projectfab / newprogram.c <ret>將文件program.c移至子目錄projectfab并將其重命名為newprogram.c
觸摸–創(chuàng)建一個空文件
例如,觸摸empty.txt <ret>
更多–查看文件內(nèi)容
例如,更多program.c <ret>
whereis –查找特定文件或目錄的存儲位置
其他有用的實(shí)用程序命令
df –提供有關(guān)計(jì)算機(jī)文件系統(tǒng)和已安裝設(shè)備的詳細(xì)信息
du –文件的完整目錄
您可以將一個命令的輸出“管道”到另一命令–例如,一次使用時,顯示完整的上述命令輸出的屏幕
df | 更多<ret>
大多數(shù)功能更強(qiáng)大的緊湊型單片機(jī)(SBC)都運(yùn)行一種流行的Linux發(fā)行版,專門用于這些嵌入式板。盡管沒有針對嵌入式應(yīng)用程序的特定版本的Linux內(nèi)核,但與運(yùn)行Linux的PC或臺式設(shè)備的區(qū)別通常很小。
通常比擁有大量RAM和硬盤更依賴于閃存-在某些情況下還“無頭”,即沒有HDMI或視頻輸出-嵌入式應(yīng)用程序的分發(fā)是針對可用資源而量身定制的,而不是不能夠運(yùn)行某些功能或命令。對于無頭SBC而言,與它們進(jìn)行交互的唯一方法是通過Linux命令行,因此必須具備良好的Linux基礎(chǔ)知識。同樣,在設(shè)備和外圍設(shè)備連接級別(例如,具有GPIO接口和I2C功能),需要了解許多重要的Linux資源。在本文中,我們將介紹將嵌入式SBC連接到現(xiàn)實(shí)世界時最可能使用的一些命令。假定您具有一些基本的Linux命令行技能。
在開始使用命令行界面(CLI)之前,讓我們回顧一下使用Linux的一些好處。Linux可以運(yùn)行在從具有嵌入式微控制器的緊湊型SBC到多核數(shù)據(jù)中心服務(wù)器等各種設(shè)備上,它是一種極其高效且可擴(kuò)展的操作系統(tǒng)(OS)。正如我們將在本文中發(fā)現(xiàn)的那樣,您的SBC上可以使用大量的開源程序。我們將在本文中介紹其中一些,但還有數(shù)百個。將OS用于嵌入式設(shè)計(jì)的一個方面是,它并不特別適合某些實(shí)時應(yīng)用程序的延遲和確定性要求。就是說,有許多行業(yè)的發(fā)展旨在提供基于搶占式的硬實(shí)時Linux OS。實(shí)質(zhì)上,這樣可以根據(jù)需要中斷OS,以滿足實(shí)時需求。而且,由于Linux是開源操作系統(tǒng),因此它已獲得GNU通用公共許可證(GPL)的許可,并且可以免費(fèi)使用和修改。在這種情況下,社區(qū)對OS的支持是巨大的,因?yàn)橛谐汕先f的Linux內(nèi)核和應(yīng)用程序開發(fā)人員參與其中。
命令級界面
對于本文中的示例,我們將使用PocketBeagle板。PocketBeagle的IP地址為192.168.6.2,默認(rèn)用戶為'debian'。在本文中,<ret>表示按回車鍵或Enter鍵。按住Ctrl鍵并按另一個鍵(在此示例中為“ D”)由Ctrl-D表示。Linux命令也有很長的選項(xiàng)列表,可以從命令行調(diào)用這些選項(xiàng)。鼓勵讀者研究這些內(nèi)容,只需鍵入命令后接--幫助(例如df)--help <ret>即可產(chǎn)生命令語法和選項(xiàng)的完整詳細(xì)信息,在此情況下,設(shè)備文件系統(tǒng)命令。
從計(jì)算機(jī)到PocketBeagle的連接取決于使用終端程序(例如PuTTY)在Microsoft Windows下運(yùn)行,還是使用Mac OS X時使用終端。
SSH(安全外殼)提供了一種遠(yuǎn)程連接到另一臺計(jì)算機(jī)的安全加密方法。連接后,您可以運(yùn)行直接在該計(jì)算機(jī)上運(yùn)行的所有命令。
最常用的命令格式是SSH user @ host <ret>。主機(jī)可以是IP地址,也可以是本地網(wǎng)絡(luò)上的主機(jī)名(在圖1的示例中)?梢允褂肅trl-D終止SSH會話。如果先前未與主機(jī)(在這種情況下為PocketBeagle)進(jìn)行通信,則將顯示警告消息。
Linux的前提是所有內(nèi)容都是文件,并且GPIO引腳也不例外。PocketBeagle的每個可用輸入和輸出都以這種方式處理,可以在/ sys / class / gpio目錄中找到。當(dāng)您使用Python之類的語言進(jìn)行工作時,除了將其設(shè)置為高輸出還是低輸出之外,還可以將每個單獨(dú)的GPIO設(shè)置為輸入或輸出。這可以在命令行中以相同的方式實(shí)現(xiàn)。
在此示例中,選擇了引腳gpio27,然后使用命令echo out> direction <ret>設(shè)置GPIO方向。這會將“輸出”放入文件“方向”。然后,您可以通過命令echo 1> value <ret>將引腳的輸出值設(shè)置為高電平,或者通過echo 0> value <ret>將引腳驅(qū)動為低電平。使用PocketBeagle,您可以通過以相同的方式打開和關(guān)閉USR LED,將“亮度”值從0更改為1來打開LED,從而獲得一些樂趣。該圖顯示了USR3 LED。
在將7段顯示器或加速度計(jì)之類的I 2 C設(shè)備連接到嵌入式板的I 2 C總線時,至關(guān)重要的是要確保沒有其他設(shè)備正在使用該總線上的地址。通常,一個SBC配備有多個I 2 C總線。通常,某些內(nèi)部板外圍設(shè)備可以連接到一個,而另一兩個可以用于用戶應(yīng)用。i2cdetect實(shí)用程序可以掃描指定的總線并返回找到的設(shè)備的結(jié)果。-l選項(xiàng)提供有關(guān)可用的I 2 C總線數(shù)量的信息,而i2cdetect –r 0 <ret>命令提供了在總線0上發(fā)現(xiàn)的設(shè)備的列表。在圖4所示的示例中,在以下位置找到了兩個設(shè)備:地址24h和50h。
采用支持Linux使用的SBC會增加許多功能,并通過使用開源工具和軟件來幫助簡化開發(fā)過程。嵌入式開發(fā)人員將欣賞實(shí)用程序命令輕松完成集成外圍設(shè)備并實(shí)現(xiàn)跨局域網(wǎng)和與基于Web的應(yīng)用程序之間的數(shù)據(jù)連接的任務(wù)。
一些常用的文件和目錄命令
ls –列出文件
例如,ls <ret>,ls –l <ret>顯示每個文件的完整詳細(xì)信息
cd –更改目錄
例如,cd <ret>,cd .. <ret>向上移動目錄,cd /。<ret>移至根目錄,cd?/ <ret>移至主目錄,cd / node_modules <ret>
mkdir –新建目錄
例如,mkdir projectfab <ret>
rm –刪除文件
例如,rm empty.txt <ret>
rmdir –刪除目錄
例如,rmdir projectfab <ret>
cp –復(fù)制文件或目錄
例如,cp program.c projectfab / program.c <ret>將文件program.c復(fù)制到子目錄projectfab
mv –移動文件或目錄
例如,mv program.c projectfab / newprogram.c <ret>將文件program.c移至子目錄projectfab并將其重命名為newprogram.c
觸摸–創(chuàng)建一個空文件
例如,觸摸empty.txt <ret>
更多–查看文件內(nèi)容
例如,更多program.c <ret>
whereis –查找特定文件或目錄的存儲位置
其他有用的實(shí)用程序命令
df –提供有關(guān)計(jì)算機(jī)文件系統(tǒng)和已安裝設(shè)備的詳細(xì)信息
du –文件的完整目錄
您可以將一個命令的輸出“管道”到另一命令–例如,一次使用時,顯示完整的上述命令輸出的屏幕
df | 更多<ret>