我們在分析《
lichee(二) 在sun4i_crane平台下的編譯
》的時候,居然沒有乙個步驟是在配置核心
make arch=arm menuconfig
仔細的讀過的**的會發現,在build_kernel有這麼一段話
if [ ! -e .config ]; then
echo -e "\n\t\tusing default config... ...!\n"
cp arch/arm/configs/sun4i_crane_defconfig .config
fi
作用是,當不存在.config時,就將arch/arm/configs/sun4i_crane_defconfig拷貝到.config,這樣我們就不需要在編譯kernel的時候去執行make menuconfig來配置核心了。可是我們在實際移植驅動的過程中,往往需要修改.config。這時就不得不面臨乙個問題了,究竟什麼時候不存在.config檔案呢,當然是我們第一次從git 轉殖下來**的時候。隨之就有乙個新的問題,當我們想給我們專案內部的人共享**的時候,他編譯的核心並不是我們這邊配置好的.config檔案,而是arch/arm/configs/sun4i_crane_defconfig,這樣很有可能導致你和你的夥伴編譯的並不是同一套配置產生的kernel;還有另外乙個問題,比如我們有2個產品,方案基本相同,只是幾個外設不同,我們又覺得弄多套**維護起來過於麻煩,就這種需求來說,我們有一種最簡單的解決方案,我們在核心目錄arch/arm/configs/下,也建立乙個新的defconfig檔案,根據前面幾篇文章對於目標產品的命名,我們就叫mt7332_defconfig。
我們分析了這麼多關於lichee bsp自動化的過程,這些內容全部都是人家的,這次我們檢驗一下我們學習成果,弄一點咱們自己的東西。
就像我們在《
lichee(二) 在sun4i_crane平台下的編譯 》中的分析,lichee中的build.sh直接指向了buildroot/scripts/common.sh,之前我們一直沒有分析下面的**段
while getopts hp:m:k: option
docase $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
很明顯這段**是在接收指令碼的引數,還記不記得我們編譯的命令 ./build.sh -p sun4i_crane -k 3.0 這裡我們新加乙個引數 -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傳進來的值只是在lichee目錄下的build.sh, 經過《
lichee(二) 在sun4i_crane平台下的編譯
》的分析,我們需要將vendor的值傳入到lichee/linux-3.0/目錄下的build.sh
同樣地,在linux-3.0目錄下也要新增-v引數
while getopts hp:m:v: option
do case $option in
h) show_help
;; p) platform=$optarg
;; m) module=$optarg
;; v) vendor=$optarg
;; *) show_help
;;esac
done
這裡我們就要對vendor的值進行判斷了(假設我們還有一款產品叫mt7***)
if [ "$vendor" = mt7332 ]; then
make arch=arm mt7332_defconfig
elif [ "$vendor" = mt7*** ]; then
make arch=arm mt7***_defconfig
else
echo "use current .config $vendor"
fi
當我們-v傳進來的是mt7332的話,我們就用mt7332_defconfig這個配置,如果是mt7***的話,就用mt7***_defconfig,以此類推。如果不帶-v引數,就代表用的是當前的.config檔案
這段指令碼一定要放在實際編譯之前,也就是要放在下面這段**之前
if [ -x ./scripts/build_$.sh ]; then
./scripts/build_$.sh $module
else
printf "\nerror: invalid platform\n"
show_help
exit 1
fi
如何建立mt7332_defconfig?這個問題其實也很簡單,當我們在sun4i_crane_defconfig的基礎上進行make menuconfig結束的時候,將產生的.config檔案拷貝到arch/arm/configs/目錄下
假設,我們的mt7332產品,剛剛換了一款3g模,例項如下
# 配置自己的新增的驅動模組
make arch=arm menuconfig
#將配置好的.config檔案拷貝到mt7332_defconfig
cp .config arch/arm/configs/mt7332_defconfig
# 回到lichee目錄
cd ..
#編譯./build.sh -p sun4i_crane -k 3.0 -v mt7332
至此,我們就可以在同一套核心**中,維護多款目標產品了
Lichee (六) 優化配置的微核心
我們的分析 lichee 二 在sun4i crane平台下的編譯 的時候。竟然沒有乙個步驟是在配置核心 make arch arm menuconfig 細緻的讀過的 的會發現,在build kernel有這麼一段話 if e config then echo e n t tusing defau...
vsftp一點配置
現做一點補充 如果設定為 chroot local user yes chroot list enable yes 這行可以沒有,也可以有 chroot list file etc vsftpd.chroot list 那麼,凡是加在檔案vsftpd.chroot list中的使用者都是不受限止的使...
程式設計時的一點小知識
1 使用assert語句對引數有些進行檢測,assert語句常用的格式為system.diagnostics.debug.assert 必須滿足的條件,如果不滿足,則需要的提示給程式設計師的資訊 2 可以等於引數數目可變的方法 獲取實參列表中的最大值 public int getmaxvalue p...