1. 程式人生 > >嵌入式開發之核心“+”版本問題

嵌入式開發之核心“+”版本問題

問題現象:

關聯核心編譯的軟體,生成後,進行使用時提示不支援核心版本”xxx+”

 

分析原因:

檢視核心程式碼頂層Makefile

 

scripts/setlocalversion:

 

如果定義了CONFIG_LOCALVERSION_AUTO,則會執行res="$res$(scm_version)"

如果如果${LOCALVERSION+set}不等於set,則會執行scm=$(scm_version --short);res=”$res${scm;++}”

此處因為兩個變數都沒指定,所以執行scm=$(scm_version --short);res=”$res${scm;++}”

res=”$res${scm;++}含義:如果scm未定義,即scm_version --short沒有返回值,則re追加預設值加號,第二個加號為預設值

最後列印${res}${CONFIG_LOCALVERSION}${LOCALVERSION}+

 

因為呼叫scm_version函式時,帶參--short,所以short=true

 

此處核心沒有配置CONFIG_LOCALVERSION_AUTO,所以執行else

因為沒有配置LOCALVERSION,所以執行if下的指令碼scm=$(scm_version --short),在函式scm_version --short裡,如果傳入引數short會新增“+”號

 

git引數:

git rev-parse

將各種引用表示法轉換為雜湊值等

git describe

通過TAG直觀地顯示提交ID

 

–show-cdup: 顯示從當前目錄後退到工作區的根的深度

--verify:驗證提供一個確切的引數,並且它可以變成原20位元組的SHA-1可用於訪問物件資料庫。如果是的話,將其傳送到標準輸出;否則,出錯。

HEAD:當前分支的位置指標

--short:簡短格式

describe:tag

 

雜湊演算法將任意長度的二進位制值對映為固定長度的較小二進位制值,這個小的二進位制值稱為雜湊值。雜湊值是一段資料唯一且極其緊湊的數值表示形式。如果雜湊一段明文而且哪怕只更改該段落的一個字母,隨後的雜湊都將產生不同的值。要找到雜湊為同一個值的兩個不同的輸入,在計算上來說基本上是不可能的。

 

程式目的:

當前倉庫的版本是一個本地版本,則加一個加號,來標識此版本並非標準tag版本。

當前倉庫的版本是一個tag版本,但是檔案被修改了,則加一個加號,來標識此版本並非標準tag版本。

 

問題解決:

將scripts/setlocalversion指令碼中帶有’ echo “+” ‘和’ res=”$res${scm:++}” ‘的這兩行刪掉即可。

//---------------------------------------------------------------------------------------------------------------------

問題2現象:

/home/liuzhengwu/share2/HISI/front_bsp/Bootloader/Hi3519/u-boot-2010.06/include/linux/types.h:154:36: error: conflicting types for ‘uintmax_t’

typedef u_int32_t uintmax_t;

^

In file included from /opt/hisi-linux/x86-arm/arm-hisiv600-linux/lib/gcc/arm-hisiv600-linux-gnueabi/4.9.4/include/stdint.h:9:0,

from /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/usr/include/mtd/mtd-user.h:23,

from fw_env.c:43:

/opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/usr/include/stdint.h:140:32: note: previous declaration of ‘uintmax_t’ was here

typedef unsigned long long int uintmax_t;

^

make[1]: *** [fw_printenv] Error 1

make[1]: Leaving directory `/home/liuzhengwu/share2/HISI/front_bsp/Bootloader/Hi3519/u-boot-2010.06/tools/env'

make: *** [env] Error 1

 

問題解決:

vi /home/liuzhengwu/share2/HISI/front_bsp/Bootloader/Hi3519/u-boot-2010.06/include/linux/types.h +154

 

uintmax_t、quad_t與交叉編譯工具鏈衝突,遮蔽掉即可 

好記性不如爛筆頭