在Windows下搭建PX4編譯環境——基於Bash On Windows

前言:以前裝雙系統,在Linux下編譯PX4源碼,但是對於我這種非程序員來說用起來確實難受,而且有許多工作還需要在windows下做,切換來切換去很煩躁。然而,在windows下用px4toolchain編譯,不論是兩年前還是現在,我都沒成功過。Win10平臺支持Bash on Windows後,PX4也跟進了基於Bash On Windows 的編譯過程,試了一下,還算比較順暢。當然,也可以裝虛擬機。。。
                                                                    ——Edited By  RobotBrain.M  2018-1-31

1. 什麼是Bash On Windows?

   

  bash 是一個爲GNU計劃編寫的Unix shell(抄自百度百科)。Bash on windows就是在Windows上可以原生運行Linux bash,通俗的說就是可以在windows下邊運行一個linux子系統,幹一些linux乾的活兒。別高興太早,畢竟不是linux系統,很多功能都沒有,存在各種bug,比如我用nano或vim編輯的時候就會出一些完全不知所謂的亂碼,但編譯px4源碼沒有問題


2. 如何安裝Bash On Windows?


 1. 安裝Bash On Windows需要滿足幾個條件:Win10、開發人員模式、win10版本符合要求。先貼出我參考的一些資料


     1)Win10系統Bash on Ubuntu on Windows怎麼用?
      2)bash on windows 安裝教程(win 10)。
      3)Windows Subsystem for Linux Documentation.


     我是剛從win7升級到win10,直接滿足基本條件,所以參考第3個資料,如果不是就需要參照1、2。


2.管理員方式打開PowerShell,然後輸入:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

    運行結束之後重啓系統。

3.MicrosoftStore應用當中搜索Ubuntu,點擊安裝,安裝完成之後不要關閉窗口,點擊啓動,等待Ubuntu安裝完成。

     最後在命令行會顯示安裝成功,然後設置戶名密碼,以獲得linux下的超級用戶權限(類似管理員),在使用sudo命令的時候會用到。至此算是安裝好了Ubuntu,不要着急編譯先用以下命令更新一下系統

sudo apt-get update
sudo apt-get upgrade

3.編譯px4源碼


       當前在Bash On Windows 下僅能編譯,編譯好後可以用地面站(MP或QGC)上傳到飛控。參考資料:


       1) Bash On Windows下編譯PX4官方文檔。


     基本流程按照官方文檔執行就可以,但是在實際安裝中會出現各種小問題,以下將會詳細說明。 PX4開發者網站給出了基於bash on windows下的編譯方法(不要着急執行,先看完後邊的細節,避免一些錯誤):

step1:Install Bash on Windows.
            安裝Bash on Windows,前邊已經完成;

step2:Download the windows_bash_nuttx.sh script.

           下載Windows_bash_nuttx.sh,這個文件相當於官方打包的命令,用戶直接執行,不用自己寫繁雜的命令;

step3:Open the bash shell and navigate to the directory containing the script.

            打開window_bash_nuttx.s所在文件夾

step4:Run the script using the command below (acknowledging any prompts as required).

             執行window_bash_nuttx.sh

source windows_bash_nuttx.sh
step5:Test the script by building the firmware:
            編譯

cd $src/Firmware
make px4fmu-v2_default
   以下詳細講以下操作中的一些細節,細節決定成敗。

      1.執行第2步windows_bash_nuttx.sh時,打開後時整頁代碼,自行復制並保存在txt文件中,我用的是SublimeText3,
          另存 爲windows_bash_nuttx.sh文件。

      2.執行第3步,將保存好的windows_bash_nuttx.sh放在任意路徑下,我放在D:\PX4SourceCode文件下。這裏注意,
         在bash on window下改變磁盤路徑使用命令(例如打開d盤):

cd /mnt/d
        如果已經目錄下直接“cd+文件夾名”,然後:
cd PX4SourceCode
    
      3. 現在就可以執行第4步中的命令。


      4.  指定編譯器(其實這一步應該在第1步之後就應該完成)。編譯器可以按照官方的步驟來

wget https://github.com/SolinGuo/arm-none-eabi-bash-on-win10-/raw/master/gcc-arm-none-eabi-5_4-2017q2-20170512-linux.tar.bz2
tar -xvf gcc-arm-none-eabi-5_4-2017q2-20170512-linux.tar.bz2
export PATH=$HOME/gcc-arm-none-eabi-5_4-2017q2/bin:$PATH
     注意,官方給出的是:
export PATH=$HOME/gcc-arm-none-eabi-5_4-2017q2/bin:\$PATH

     中'\'不能有,否則會報錯(細節1)。

   也可以採用簡單的方式(我採用的這種方式,細節2):

sudo apt-get install gcc-arm-none-eabi
     完成以上配置就可以進行編譯了。

    5.編譯報錯。這個報錯可能憑運氣吧,貌似不一定?不論採用以上哪種方式配置編譯器,編譯都會出現如下的報錯,大意是“內存溢出”?(細節3

    如果出現該報錯,解決方案如下:

    在Firmware路徑下輸入:(注意$後邊的纔是要輸入的命令,前邊是路徑)

~/src/Firmware$ find -name ld.*

會顯示所有與ld有關的文件,然後找到
./platforms/nuttx/nuttx-configs/px4fmu-v2/scripts/ld.script

導航到ld.script所在的文件夾,用vim打開編輯:

~/src/Firmware/platforms/nuttx/nuttx-configs/px4fmu-v2/scripts$ vim ld.script

找到如下圖所示的flash位置,移動光標到需要修改的位置,按‘a’鍵進入修改模式,將下圖紅色標記處值改爲1024k,按Esc鍵退出修改模式,按'Shift+ZZ(兩次)'保存並退出編輯。


5.成功編譯。處理完上述細節,再次編譯就可以成功編譯。


導航到編譯生成的目標文件,可以進行燒錄的固件文件已經存在(紅線標記):


 結語:本次編譯耗時較長,解決了一些細節問題,總結如下:

1) 僅針對PX4編譯,Bash on Windows下的體驗與Ubuntu下的體驗一樣順暢;

2)針對編譯過程中出現的問題,認真閱讀錯誤信息,以及編譯過程信息,查閱資料,結合經驗,大膽嘗試,並注意記錄修改的地方,防止改的太多,出現錯誤;

3)在本次查找需要更改的文件,明顯感覺到linux比windows方便得多;










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章