1. 程式人生 > >第七期 使用Qemu+Buildroot+Eclipse打造一個優雅的開發環境 《虛擬機器就是開發板》

第七期 使用Qemu+Buildroot+Eclipse打造一個優雅的開發環境 《虛擬機器就是開發板》

        這一期的主題是使用虛擬機器作為應用層開發的環境搭建。之前我們使用busybox和手動新增一些必要檔案建立了一個簡陋的檔案系統,這一期我們把它替換成Buildroot,程式碼編輯工具我們也升級為Eclipse。
        對於嵌入式的開發過程,痛點就是需要交叉編譯,本地編寫和編譯,然後目標開發板上除錯和執行。我們這一期爭取把這些環節串聯起來,形成一個優雅的整體。

        首先需要下載Buildroot,我這裡使用的是2017.02.3版本,下載地址 www.buildroot.org Buildroot在配置完成後可以自動化的生成我們需要的交叉工具鏈和root檔案系統。有關Buildroot的介紹和相關教程給大家介紹個比較詳細的第三方教程

國外的IT培訓機構和國內的IT培訓機構走的路線完全不同,清爽的介面便可見一斑。

        Buildroot下載和解壓後可以通過 make menuconfig 進行配置,不過Buildroot 的configs目錄下已經有很多針對特定目標開發板的配置檔案,和Kernel的defconfig一個原理,我們在Build根目錄下直接執行  make qemu_arm_vexpress_defconfig 就可以將配置資訊匯入,然後再使用 make munuconfig 進入做一些調整。
        Toolchain --> Build cross gdb for the host  選擇該項 增加工具鏈生成gdb除錯程式
        Toolchain --> Thread library debugging 選擇該項 增加工具鏈對debug的支援
        Toolchain --> Enable C++ support 選擇該項 增加工具鏈對C++的支援
        Target packages --> Debugging, profiling and benchmark --> gdb 選擇該項 增加目標檔案系統中gdbserver
        Target packages --> Networking applications --> openssh 選擇該項 新增ssh服務
        System configuration --> Root password 進入該項,設定一個root使用者的密碼
然後 save 後,執行 make 進行編譯。
        編譯成功後,在Buildroot目錄下就會生成output資料夾,並有一下幾個子目錄
                build 這個目錄是Buildroot編譯時的臨時資料夾,所有編譯相關的檔案都儲存在這裡;
                host 這個目錄是用於host的檔案,主要就是本地執行的交叉編譯工具;
                images 這個目錄就是生成的目標映象,根據配置需求的不同可能有 uboot, kernel img, rootfs; 
                staging 這個目錄是一個軟連結,指向sysroot 包含一些開發檔案,我們用到的第三方庫的標頭檔案可以在這裡找到
                target 這個目錄就是目標板的根檔案系統,images裡面的rootfs.ext*就是通過這個資料夾打包生成的
        
        目標系統生成後就可以執行qemu來執行我們剛才生成的images了,進入images目錄,將 https://github.com/aggresss/LKDemo/tree/master/qemu.d 目錄中的 tap30.sh , run_linux_with_network.sh 和 update_buildroot.sh 複製到 images 目錄下,首先執行tap30.sh 生成主機的虛擬網絡卡;因為高版本的qemu不支援vexpress開發板的ext2檔案映象直接啟動,所以我們還需要將前幾期生成的 vexpress.img 檔案也複製到images目錄下,然後執行 update_buildroot.sh 將 vexpress.img檔案更新為buildroot生成的檔案系統,執行成功後執行  ./run_linux_with_network.sh 便可以執行buildroot生成的linux了。
        進入目標板 配置網路,編譯 /etc/network/interfaces檔案配置制定的IP,同時修改 /etc/ssh/sshd_config 檔案 增加 PermitRootLogin yes 選項,然後重啟目標板就可以通過ssh登陸目標板了。
        接下來就是eclipse登場了,下載eclipse CDT版本 同時安裝 TM(target management) 外掛 http://www.eclipse.org/tm/  安裝後eclipse就多了一個 Remote System Explorer 的 perspective ,然後新建一個連線,連結到目標開發板皆可,連結型別選擇 Linux , subsystem 中的 file,process,shell都使用ssh形式連線。

        接下來就可以通過eclipse新建一個c/c++工程,配置好交叉工具鏈,工具鏈指向buildroot的output/host/目錄中的bin檔案下。





接下來就可以將生成的bin檔案通過 C/C++ Remote Application 的方式除錯並運行了。