Lichee (六) 优化配置的微内核
我們的分析《Lichee(二) 在sun4i_crane平臺下的編譯?》的時候。竟然沒有一個步驟是在配置內(nèi)核
make ARCH=arm menuconfig細(xì)致的讀過的代碼的會發(fā)現(xiàn),在build_kernel有這么一段話
?if [ ! -e .config ]; then ? echo -e "\n\t\tUsing default config... ...!\n" ? cp arch/arm/configs/sun4i_crane_defconfig .config ?fi
作用是,當(dāng)不存在.config時,就將arch/arm/configs/sun4i_crane_defconfig復(fù)制到.config。這樣我們就不須要在編譯kernel的時候去運行make menuconfig來配置內(nèi)核了。
但是我們在實際移植驅(qū)動的過程中,往往須要改動.config。
這時就不得不面臨一個問題了。到底什么時候不存在.config文件呢。當(dāng)然是我們第一次從GIT 克隆下來代碼的時候。
隨之就有一個新的問題,當(dāng)我們想給我們項目內(nèi)部的人共享代碼的時候,他編譯的內(nèi)核并非我們這邊配置好的.config文件,而是arch/arm/configs/sun4i_crane_defconfig,這樣非常有可能導(dǎo)致你和你的伙伴編譯的并非同一套配置產(chǎn)生的kernel。還有另外一個問題,比方我們有2個產(chǎn)品,方案基本同樣,僅僅是幾個外設(shè)不同。我們又認(rèn)為弄多套代碼維護(hù)起來過于麻煩。就這樣的需求來說,我們有一種最簡單的解決方式,我們在內(nèi)核文件夾arch/arm/configs/下,也創(chuàng)建一個新的defconfig文件。依據(jù)前面幾篇文章對于目標(biāo)產(chǎn)品的命名,我們就叫mt7332_defconfig。
我們分析了這么多關(guān)于Lichee BSP自己主動化的過程。這些內(nèi)容所有都是人家的。這次我們檢驗一下我們學(xué)習(xí)成果。弄一點咱們自己的東西。
就像我們在《Lichee(二) 在sun4i_crane平臺下的編譯?》中的分析。lichee中的build.sh直接指向了buildroot/scripts/common.sh,之前我們一直沒有分析以下的代碼段
while getopts hp:m:k: OPTION do case $OPTION in h) show_help exit 0 ;; p) PLATFORM=$OPTARG ;; m) MODULE=$OPTARG ;;? k) KERN_VER=$OPTARG update_kdir $KERN_VER ;; *) show_help exit 1 ;; esac done 非常明顯這段代碼是在接收腳本的參數(shù)。還記不記得我們編譯的命令 ./build.sh -p sun4i_crane -k 3.0 這里我們新加一個參數(shù) -v 意思就是VERNDOR
修改后例如以下: VENDOR="" ..................
while getopts hp:m:k:v: OPTION do case $OPTION in h) show_help exit 0 ;; p) PLATFORM=$OPTARG ;; m) MODULE=$OPTARG ;; v) VENDOR=$OPTARG ;;? k) KERN_VER=$OPTARG update_kdir $KERN_VER ;; *) show_help exit 1 ;; esac done
這里我們的-v傳進(jìn)來的值僅僅是在lichee文件夾下的build.sh, 經(jīng)過《Lichee(二) 在sun4i_crane平臺下的編譯》的分析,我們須要將VENDOR的值傳入到lichee/linux-3.0/文件夾下的build.sh 相同地,在linux-3.0文件夾下也要新增-v參數(shù)
while getopts hp:m:v: OPTION docase $OPTION inh) show_help;;p) PLATFORM=$OPTARG;;m) MODULE=$OPTARG;;v) VENDOR=$OPTARG;;*) show_help;; esac done
這里我們就要對VENDOR的值進(jìn)行推斷了(如果我們另一款產(chǎn)品叫mt7xxx)
if [ "$VENDOR" = mt7332 ]; thenmake ARCH=arm mt7332_defconfig elif [ "$VENDOR" = mt7xxx ]; thenmake ARCH=arm mt7xxx_defconfig elseecho "use current .config $VENDOR" fi
當(dāng)我們-v傳進(jìn)來的是mt7332的話,我們就用mt7332_defconfig這個配置。假設(shè)是mt7xxx的話,就用mt7xxx_defconfig,以此類推。
假設(shè)不帶-v參數(shù)。就代表用的是當(dāng)前的.config文件
這段腳本一定要放在實際編譯之前,也就是要放在以下這段代碼之前if [ -x ./scripts/build_${PLATFORM}.sh ]; then./scripts/build_${PLATFORM}.sh $MODULE elseprintf "\nERROR: Invalid Platform\n"show_helpexit 1 fi
怎樣創(chuàng)建mt7332_defconfig?這個問題事實上也非常easy,當(dāng)我們在sun4i_crane_defconfig的基礎(chǔ)上進(jìn)行make menuconfig結(jié)束的時候,將產(chǎn)生的.config文件復(fù)制到arch/arm/configs/文件夾下 如果。我們的mt7332產(chǎn)品,剛剛換了一款3G模,實比例如以下
# 配置自己的新增的驅(qū)動模塊 make ARCH=arm menuconfig? #將配置好的.config文件復(fù)制到mt7332_defconfig cp .config arch/arm/configs/mt7332_defconfig # 回到lichee文件夾 cd .. #編譯 ./build.sh -p sun4i_crane -k 3.0 -v mt7332
至此,我們就能夠在同一套內(nèi)核代碼中。維護(hù)多款目標(biāo)產(chǎn)品了
版權(quán)聲明:本文博主原創(chuàng)文章,博客,未經(jīng)同意不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/zfyouxi/p/4800399.html
總結(jié)
以上是生活随笔為你收集整理的Lichee (六) 优化配置的微内核的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Session or Cookie?是否
- 下一篇: 遗传算法Demo
