1. 程式人生 > >嵌入式Linux應用程式設計—嵌入式Linux常識2

嵌入式Linux應用程式設計—嵌入式Linux常識2

1.3平臺

我們通常所說的平臺包括硬體平臺和軟體平臺。

處理器和它的外圍電路組成在一起,就是所謂的硬體平臺。如一個ARM架構處理器和外圍電路組成的單板,我們稱為ARM平臺。

一個嵌入式系統是針對某個應用來開發的,因此不可能在搭建的ARM平臺上,再去開發針對這個ARM平臺的編譯軟體和工具等。那該怎麼辦?

由於x86和x64平臺上的資源豐富,因此可以在x86或x64平臺上進行編輯、編譯程式碼,然後將編譯後的可執行檔案下載到單板上去。看起來似乎可以,但是不同架構的處理器有不同的指令系統,需要相應的編譯器;這樣使得在x86或x64平臺編譯的程式碼完全不能再ARM中執行。要實現從x86或x64跨平臺到ARM平臺,需要一個工具:交叉編譯/連結器。

通常ARM平臺的交叉編譯器為arm-elf-gcc或arm-linux-gcc,交叉連結器為arm-elf-ld或arm-linux-ld。arm-elf-gcc和arm-linux-gcc都是基於ARM平臺的交叉編譯軟體,區別在於它們使用的C庫不同。arm-elf-gcc一般使用uClibc/uC-libc或Red Hat專門為嵌入式系統開發的C庫newlib。而arm-linux-gcc使用的是GNU的Glibc。我們常使用的交叉編譯/連結器是arm-linux-gcc和arm-linux-ld。

軟體平臺是指可以編譯出對應作業系統的可執行程式。如在Linux伺服器的終端可以編譯出Linux系統執行的程式,那麼Linux伺服器的終端就可以看做Linux的軟體平臺;在windws下Wind River workbench可以編譯出在Vxworks下執行的程式,那麼Wind River workbench可以看做是Vxworks的軟體平臺。

看到這裡,你可能腦子一團槽,到底該怎麼建立開發使用的平臺(或稱環境)。

首先需要一臺Linux伺服器來編譯程式碼,但是Linux開發人員不可能是一個人,因此需要一臺windows系統的電腦來遠端登入Linux伺服器,建議遠端登入軟體選擇SecureCRT。使用SecureCRT也可以登入單板的檔案系統,在連線後,使用ls可以檢視根目錄下的內容。在Linux中使用vi或gedit來編輯程式碼效率慢,因此可以在windows平臺下的VS來編輯程式碼,編輯好後再從windows上傳到Linux伺服器,建議檔案傳輸工具FTP選擇FileZilla或SecureFX。

當我們在windows下的VS中編輯完程式碼,通過FTP上傳到Linux伺服器;在Linux伺服器的終端進行編譯;編譯完成後下載到單板中,執行檢視結果。

將編譯好的可執行檔案下載到單板上有很多方法,這裡介紹4種。

1.將編譯好的程式碼通過FTP下載到windows系統中,在windows平臺下使用OpenJTAG(需要燒寫軟體)、JLink、並口JTAG下載到單板中,方式的選擇主要看你單板支援那種方式。

由於並口JTAG需要使用並口JTAG轉接板,而現在大部分電腦沒有並口,因此很少被使用。而使用USB轉JTAG板,有2種方式,分別是OpenJTAG和JLink。

常使用OpenJTAG燒寫bootloader或較小的可執行檔案(裸板程式)。而JLink只支援燒寫NOR FLASH。

2.在windows下使用SecureCRT登入單板後,進入bootloader中,使用串列埠(需要軟體dnw)、tftp(需要軟體tftpd32)將windows下的檔案下載到單板。

前提是單板的bootloader支援USB串列埠下載或tftp服務(網線下載)。

3.當bootloader和Linux伺服器支援NFS服務時,可以在bootloader介面直接使用NFS命令從Linux伺服器將檔案下載到單板,這樣就不需要將檔案從Linux伺服器再下載到Windows中。

4.感覺這樣下載太麻煩,還可以使用NFS服務在Linux伺服器上設定網路檔案共享目錄,然後使用SecureCRT登入單板,進入單板的檔案系統,使用mount來掛載目錄(個人建議這種方法)。

NFS除了下載和掛載目錄這2個功能外,還可以使用NFS作為根檔案系統來啟動單板。若Linux伺服器不支援NFS,可以自己安裝。

在Linux伺服器上編譯需要交叉編譯/連結器。若自己製作交叉編譯工具鏈,需要gcc編譯器、lib庫(選擇Glibc)、輔助工具(可以選擇crosstool、binutils)。

1.4安裝Linux系統和配置開發環境

我們在學習Linux時,若只有一臺windows系統的電腦,可以安裝虛擬機器(建議選擇VMware),在虛擬機器上安裝Linux系統。

在虛擬機器上安裝Linux系統,對電腦的硬體有一定的要求:CPU是intel i5及以上;記憶體4G;固態硬碟;預留20G的硬碟空間儲存資料。

在虛擬機器上常用的Linux系統有Ubuntu、CentOS,我個人選擇的是CentOS6.6。

在VMware下,選擇”CentOS”,點選”開啟此虛擬機器”;等待一段時間後,就可以登入使用者名稱和密碼,Linux系統支援多個使用者,其中有一個使用者是root,即超級使用者;若要關閉”CentOS”,則在CentOS內選擇”系統”->”關機”,千萬不要直接在VMware上直接叉掉CentOS6.6的視窗或者右擊”CentOS6.6”->”電源”->”關閉客戶機”,這樣可能會破壞CentOS6.6的檔案系統,相當於筆記本中長按5秒電源鍵強制關機的操作。

在CentOS中,登入後還可以登出當前使用者,再登入另一個使用者,而不必重新關機、開機。

VMware還支援虛擬機器掛機的操作,右擊”CentOS6.6”->”電源”->”掛起客戶機”,這樣就凍結了虛擬機器CentOS6.6的當前狀態,再點選”繼續執行此虛擬機器”,就恢復了虛擬機器的狀態。但是需要注意的是虛擬機器恢復後,其時間也是恢復之前的狀態,因此會不準確;重啟後就會重新校準。

CentOS6.6安裝完後,還需要設定IP,讓其和主機建立網路連線,使用橋接模式或NAT模式都可以。我使用的是NAT模式,參考部落格:https://blog.csdn.net/qq_37131111/article/details/54000029。

IP設定好後,以root使用者登入,點選”系統”->”首選項”->”網路連線”,選擇網絡卡,在IPV4處選擇網路連線的方式,是自動模式還是手動設定靜態IP模式。我選擇自動DHCP模式。設定好後,左擊右上角的網路圖示,選擇要建立網路連線的網絡卡,如”systerm eth0”。等待一段時間後,網路建立連線。

進入終端,使用ifconfig命令來檢視網絡卡eth0的IP地址,再使用ping www.baidu.com,檢視網路是否連通。

由於只有一臺伺服器,不可能每個人都來操作這臺伺服器,因此還需要安裝SecureCRT進行遠端登入。安裝結束後,點選”File”->”Quick Connect”,在Hostname處填寫Linux伺服器中網絡卡的IP,在Uername處填寫使用者名稱,連線後還需要填寫使用者密碼。

右擊建立的會話,選擇”Session Options”,在其中設定字型顯示顏色、緩衝行數、字型大小、編碼方式UTF8等,如下所示。

 

最後是安裝FTP工具,我選擇的是SecureFX,中文亂碼問題可以參考:https://jingyan.baidu.com/article/02027811624d941bcd9ce56b.html。