在Win10的應(yīng)用商店中,提供了Linux的子系統(tǒng),這是實(shí)際上是一個(gè)虛擬機(jī)軟件,與virtualbox和vmplayer功能類似。下面就介紹在Linux子系統(tǒng)中安裝工具鏈和編譯micropython的方法。
先確認(rèn)一下Windows10系統(tǒng)的版本,如果是LTSB版(Long Time Service Branch 企業(yè)長(zhǎng)期服務(wù)版),就需要更換到企業(yè)版,LTSB版是不能運(yùn)行Linux子系統(tǒng)的。如果還沒有安裝過Linux子系統(tǒng)功能,首先需要在控制面板的“程序和功能”中允許適用于Linux的Windows子系統(tǒng)功能,并重新啟動(dòng)計(jì)算機(jī)。
?
?
然后就可以在應(yīng)用商店中,通過搜索Linux或者ubuntu,找到ubuntu應(yīng)用。注意現(xiàn)在應(yīng)用商店里ubuntu有兩個(gè)版本,分別是16.04和18.04。
?
?
這兩個(gè)版本都是長(zhǎng)期服務(wù)器版,但是我們需要選擇第一個(gè),也就是16.04版本,因?yàn)槟壳癵cc-arm編譯器還沒有支持18.04,使用18.04版本就需要自己手工安裝編譯器,比較麻煩。
?
?
安裝好ubuntu 16.04后,運(yùn)行就會(huì)出現(xiàn)下面的控制臺(tái)樣式窗口,它默認(rèn)是只有控制臺(tái)(shell)界面,沒有圖形化界面。我們可以通過?lsb_release -a?命令查看系統(tǒng)版本。
?
?
?
這個(gè)新安裝的ubuntu可以看成是一個(gè)全新的系統(tǒng),大部分軟件都需要自己安裝。我們先安裝arm-gcc編譯器,同時(shí)可以更新一下軟件倉庫的內(nèi)容。
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppasudo apt updatesudo apt install gcc-arm-embedded
然后安裝git軟件:
sudo apt install git
還需要安裝gcc編譯器和make軟件:
?
sudo apt install gcc make
到這一步,需要的軟件基本安裝完成,下面是用 git 同步下載 micropython 源碼。雖然可以使用zip方式下載,但是這樣不方便和源碼同步更新。我們先在用戶目錄中創(chuàng)建一個(gè)projects目錄,將micropython下載到projects目錄中:
cdmkdir projectscd projectsgit clone https://github.com/micropython/micropython
因?yàn)槲募容^多,github在國(guó)內(nèi)訪問速度也不快,下載速度與網(wǎng)絡(luò)有很大關(guān)系。如果下載出錯(cuò),需要重復(fù)這個(gè)步驟。
?
成功下載后,進(jìn)入micropython目錄,先下載使用到的其它庫文件:
cd micropythongit submodule update --init
micropython引用的外部庫也比較多,下載需要一定時(shí)間。如果提示超時(shí)或者下載失敗,需要重復(fù)前面過程。
下載源碼后,就可以開始編譯了,首先是編譯mpy-cross,它是一個(gè)micropython的輔助工具,在編譯過程中會(huì)用到。
?
在micropython源碼的根目錄中,輸入下面命令:
make -C mpy-cross
這個(gè)程序不大,編譯速度也比較快。編譯后就可以開始編譯STM32的程序了,下面命令是編譯官方的pybv10開發(fā)板固件:
make -C ports/stm32
?
?
?
如果是編譯其它開發(fā)板,就需要在命令行中指定板子的名稱,注意BOARD必須大寫,等號(hào)兩邊不能有空格:
make -C ports/stm32 BOARD=STM32F7DISC
如果其它開發(fā)板,更換板子的名稱就可以。如果是自己定義的板子,還需要將開發(fā)板的定義文件添加到ports/stm32/board目錄下。
?
以后如果micropython代碼更新了,我們就可以通過git同步更新,然后再次編譯。
git pull
編譯前最好先清除以前的編譯內(nèi)容,這樣可以避免因?yàn)楦略斐傻木幾g錯(cuò)誤
make -C ports/stm32 cleanmake -C ports/stm32
上面編譯出的固件是默認(rèn)方式,不帶有雙精度浮點(diǎn),也不支持線程功能。如果希望添加線程功能,需要打開板子的配置文件mpconfigboard.h,然后在文件中添加下面兩行:
#define MICROPY_PY_THREAD (1)#define MICROPY_PY_THREAD_GIL (1)
然后先清除以前的臨時(shí)文件,再重新編譯。
如果需要雙精度浮點(diǎn)功能,在編譯時(shí)命令行中,添加 MICROPY_FLOAT_IMPL=double。
編譯速度與計(jì)算機(jī)的配置有較大關(guān)系,配置越高,CPU性能越好,速度越快。此外如果計(jì)算機(jī)使用了普通硬盤,第一次編譯也會(huì)較慢,需要較多的時(shí)間加載程序,使用SSD硬盤時(shí),第一次編譯速度明顯快很多。在一個(gè)Windows10平板上(cpu的N3450,),編譯1.9.4版本的固件,使用了約260秒,而相同情況下使用虛擬機(jī)編譯約160秒,看起來Linux子系統(tǒng)的性能還有很大改進(jìn)的空間。
編譯后,產(chǎn)生的固件在 ports/stm32/build-xxxxx 目錄下(xxxxx是板子的名稱),編譯會(huì)同時(shí)產(chǎn)生elf、dfu、hex三種格式的文件。dfu適合通過USB方式升級(jí),elf和hex可以使用jlink、stlink通過SWD下載(會(huì)丟失用戶磁盤內(nèi)容)。
編譯好固件怎樣復(fù)制到windows主機(jī)呢?在Linux子系統(tǒng)中,默認(rèn)已經(jīng)將windows的各分區(qū)掛載好了,我們可以在 /mnt 目錄下看到。將固件復(fù)制到進(jìn)去就可以了。如果不習(xí)慣用命令行方式操作,可以安裝一個(gè)midinight commander軟件,它類似早期的norton commander,可以方便的管理文件。
sudo apt install mc
?
?
?
使用Linux子系統(tǒng),好處在于安裝和使用簡(jiǎn)單,安裝后可以直接運(yùn)行,沒有復(fù)雜的配置,文件體積比使用虛擬機(jī)要小,占用系統(tǒng)資源也較少。Linux系統(tǒng)作為windows的一個(gè)程序,比傳統(tǒng)用虛擬機(jī)方式更加容易使用。缺點(diǎn)是不能選擇用戶數(shù)據(jù)存放的目錄,所有文件都會(huì)保存到系統(tǒng)盤,需要在系統(tǒng)盤留出足夠的空間,此外性能比傳統(tǒng)虛擬機(jī)低。
評(píng)論
查看更多