Lichee (六) 配置内核时的一点小优化
来源:互联网 发布:反攻大陆 知乎 编辑:程序博客网 时间:2024/05/26 12:54
我们在分析《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
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
很明显这段代码是在接收脚本的参数,还记不记得我们编译的命令 ./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: OPTIONdo case $OPTION in h) show_help ;; p) PLATFORM=$OPTARG ;; m) MODULE=$OPTARG ;; v) VENDOR=$OPTARG ;; *) show_help ;;esacdone
这里我们就要对VENDOR的值进行判断了(假设我们还有一款产品叫mt7xxx)
if [ "$VENDOR" = mt7332 ]; then make ARCH=arm mt7332_defconfigelif [ "$VENDOR" = mt7xxx ]; then make ARCH=arm mt7xxx_defconfigelse echo "use current .config $VENDOR"fi
当我们-v传进来的是mt7332的话,我们就用mt7332_defconfig这个配置,如果是mt7xxx的话,就用mt7xxx_defconfig,以此类推。如果不带-v参数,就代表用的是当前的.config文件
这段脚本一定要放在实际编译之前,也就是要放在下面这段代码之前
if [ -x ./scripts/build_${PLATFORM}.sh ]; then ./scripts/build_${PLATFORM}.sh $MODULEelse printf "\nERROR: Invalid Platform\n" show_help exit 1fi
如何创建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
至此,我们就可以在同一套内核代码中,维护多款目标产品了
0 0
- Lichee (六) 配置内核时的一点小优化
- lichee 内核配置支持usb storage
- Lichee (五) sysconfig1.fex 配置系统
- laocai的专栏(Lichee 系列)
- 关于优化的一点小总结
- Android 对于AutoLayout的一点小优化
- lichee Pi 之一 wifi配置
- hadoop yarn配置的一点小问题
- Lichee(二) 在sun4i_crane平台下的编译
- 使用Prototype的一点心得体会(六)
- 使用CodeIgniter的路径优化遇到的一点小问题
- 百度SEO优化公式的一点小看法
- lichee开发环境配置(Allwinner A80)
- Gentoo Linux内核配置(六)
- Struts和Spring集成配置的一点小问题
- Struts和Spring集成配置的一点小问题
- Oracle sqldev 快捷键配置的一点小技巧
- 关于开发环境配置的一点小感想
- php libevent 扩展使用示例
- 传输模式 ASCII 与二进制
- 来自苹果的编程语言——Swift简介
- 怎样在VMware虚拟机中使用安装并设置Ubuntu系统
- 关于键盘冲突那点事(3键冲突/7键冲突/PS2/USB的各种原理)
- Lichee (六) 配置内核时的一点小优化
- IE6location跳转问题
- 利用IOS开发证书给未越狱的ios设备安装任意ipa
- ARM、DSP、FPGA的区别
- C和指针——K&R C 与 ANSI C的区别
- 如何手动创建oracle数据库
- hibernate中表关键字表示方式
- 横向listview,通过gridview实现
- Android 多线程及多线程中更新控件。 .