1. 程式人生 > >UBUNTU16 64 位編譯 YOCTO IMX6工程大體步驟及問題

UBUNTU16 64 位編譯 YOCTO IMX6工程大體步驟及問題

前言

網上關於YOCTO編譯資料有很多,我在此就不必再贅述,本筆記僅供個別編譯遇到的問題參考解決

編譯步驟

  1. 根據YOCTO文件搭建系統環境:
    在這裡插入圖片描述

  2. 設定 repo 功能
    再使用者目錄下找個地方建立一個bin目錄存放repo 可執行程式;我是在使用者頂層目錄下建立的bin目錄
    在這裡插入圖片描述
    文件中使用上條命令,但是因為要翻牆,所以出現 network is un……
    可以終端翻牆下載,只安裝SSR客戶端的同學,雖然瀏覽器可以翻牆,但是終端仍然需要安裝代理才可以終端使用HTTP協議翻牆。
    不能翻牆的,則可以使用國內清華的映象:
    在這裡插入圖片描述

  3. 為 repo 新增可執行許可權
    chmod +x ~/bin/repo

  4. 新增目錄路徑到環境變數PATH中,這樣下回開啟終端時可以直接使用repo命令:
    在這裡插入圖片描述

  5. 然後建立YOCTO工程目錄, 我開發板是IMX6系列的,所以建立的名字是 fsl-release-bsp
    在這裡插入圖片描述
    repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogoth
    命令仍然報錯
    error: command ‘git://git.freescale.com/imx/fsl-arm-yocto-bsp.git’ requires repo to be installed first.
    Use “repo init” to install it here.

    [email protected]:~/workdisk$ repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogoth
    fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
    fatal: error [Errno 101] Network is unreachable
    fatal: cloning the git-repo repository failed, will remove ‘.repo/repo’

一開始我沒仔細看,以為是 github 網站需要翻牆,後來發現不是github的問題,而是 repo 的問題,repo 需要翻牆,之前的可執行程式我是翻牆下載的,但是終端沒有翻牆,所以網路不可達;
因為 repo 只是一個幾百行的 PYTHON 指令碼,而不是完整的repo-project 包,所以需要先安裝完整包才可以。

還是兩種方法,終端可以翻牆,那樣就可以成功進行;
第二種則是使用國內源,清華的源:

在這裡插入圖片描述

雖然我的終端可以翻牆,但是我還是使用了清華的源,不過,如上圖,是定義了 REPO_URL 變數,這個變數在你下載的檔案 repo 中
在這裡插入圖片描述
可以和我一樣,將原來的註釋掉,改為清華的源,也可以成功。

其他遇到的問題

  1. 執行 bitbake fsl-image-gui 後
    在這裡插入圖片描述
    在這裡插入圖片描述

  2. 在這裡插入圖片描述
    在這裡插入圖片描述
    User requested feature sdl configure was not able to find it.Install SDL level
    這個問題我沒有具體解決,GOOGLE 的方法你可以先試試,我試過了都不行,我的make 是因為編譯安卓的時候將為3.82版本,所以可能有問題,我重灌了make ,預設為4.1之後這個問題沒有在發生,所以可能是make 的問題。

3.當你重新編譯 yocto 的時候
在這裡插入圖片描述
TMPDIR has changed its layout version number and you……
這個問題是版本的問題,你按照number 後面的提示修改 tmp 目錄下的 abi_version 即可。

  1. 在這裡插入圖片描述
    error : dereferencing pointer ‘a’ does break strict-aliasing rules

這個問題第一次遇見,網上搜索部落格講解的還是很詳細的;
在這裡插入圖片描述
我按照例程編寫了測試程式:
在這裡插入圖片描述
在這裡插入圖片描述
編譯的確出現問題,無論是 O3 還是O2 都會警告,但是,YOCTO把這警告視為錯誤;執行的結果也是不一樣的,一個為1,一個為0
在這裡插入圖片描述
不加優化選項,沒有警告,並且結果為 0
在這裡插入圖片描述
所以,最後需要你尋找到出錯目錄下的MAKEFILE,第一種方法是去掉編譯選項 -O;或者第二種,在 CFLAGS 變數後面新增一句 -fno-strict-aliasing

再次編譯通過。不過,你要找對MAKEFILE,修改完檢視一下編譯日誌看是否新增成功。

(未完,待續)