Lichee (六) 配置内核时的一点小优化

我们在分析《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: OPTION
do
 case $OPTION in
 h) show_help
 ;;
 p) PLATFORM=$OPTARG
 ;;
 m) MODULE=$OPTARG
 ;;
 v) VENDOR=$OPTARG
 ;;
 *) show_help
 ;;
esac
done

这里我们就要对VENDOR的值进行判断了(假设我们还有一款产品叫mt7xxx)

if [ "$VENDOR" = mt7332 ]; then
 make ARCH=arm mt7332_defconfig
elif [ "$VENDOR" = mt7xxx ]; then
 make ARCH=arm mt7xxx_defconfig
else
 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 $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 (六) 配置内核时的一点小优化,布布扣,bubuko.com

时间: 2024-12-15 01:40:35

Lichee (六) 配置内核时的一点小优化的相关文章

对于shell脚本参数获取时的一点小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的 当时纠结了好久,最后上百度提问,两位高手给出了答案: 1) #!/bin/sh NUMBER=$# echo $NUMBER i=1 while [ $i -le $NUMBER ] do a[$i]=$1 #将数组a[i]赋值为$1,即取得

修改quartus 配置rom时memory很小的问题。

我用的是quartus ii 13版本的仿真软件,在做VGA实验时显示用到640*480的图片所以就需要307200*1bit的rom.但是坑爹的megawizard- plug-in-manager最大可以生成的rom只有65536*1bit.如图一和图二所示. 这里说一说怎么增加rom的大小,先按照一般rom的步骤建立你所需要的rom文件比如说我建立一个mem.v的文件大选了65536.然后打开这个文件,修改三个参数.这里我需要的因为是307200bit所以地址范围就是18:0,19根地址线

决Ubuntu使用`make menuconfig`配置Linux 内核时,出现缺少'ncurses-devel'库支持。

*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. ***  1. 问题状况 一般情况下使用系统自带的软件管理器apt-get就可以安装了(`sudo apt-get install 

Ubuntu14.04安装mysql及过程中遇到的一点小问题

Ubuntu14.04出来有段时间了,前几天刚升级到这个版本,新鲜了一把.不过安装mysql时遇到了一点小问题,记录一下以备后用. 预备操作: 网上安装mysql的方法不少,大体有这么三种. 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 2. 安装离线包,以mysql-5.0.45-linux-i686-icc-glibc23.tar.gz为例. 3. 二进制包安装:安装完成已经自动配置好环境变量

新闻发布的一点小总结

经过一段时间的学习,完成了新闻发布的基础功能,进行一点小总结,方便日后回顾.下面是我的一点小总结,不足之处请勿见笑... 我们想要完成一个新闻发布,首先要使其能够成功发布,并且让它能够实现添加.删除.修改.查询.上传.下载等功能.我们还调用AJAX功能查看输出为XML.JSON格式的新闻内容.为完成以上功能,我们首先要进行jdk.tomcat.eclipse的安装和配置.1.各软件的安装和配置1.1.jdk的安装和配置: 1.1.1.下载jdk:下载地址:http://www.oracle.co

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

VELT-0.1.5开发: gdb串口调试内核时信息丢失的问题

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.5 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可

给Javascript初学者的一点小建议

本文来自e良师益友网 一般初学JavaScript的时候最头痛的就是浏览器兼容问题.在Firefox下面好好的代码放到IE就不能显示了,又或者是在IE能正常显示的代码在firefox又报错了. 如果你正初学JavaScript并有着一样的处境的话建议你:初学JavaScript的时候无视DOM和BOM的兼容性,将更多的时间花在 了解语言本身(ECMAScript).只在特定浏览器编写代码(Chrome/Firefox/Safari),实际工作中使用成熟的 JavaScript框架(jQuery等

C++ 中有关const引用的一点小知识

在读<C++ Primer>时,发现之前对const的概念不是很清晰,只知道如何去使用,于是翻开const引用部分又阅读了一遍,发现有两点自己要注意的地方 1.const限定的对象不可以初始化非const引用 ex. 1 const int src = 512; 2 const int &ok_dest = src; //ok: 引用和初始化对象都是const 3 int &err_dest = src; //error : 引用为非const 原因很简单, src 是不可以被