1、我们的平台编译kernel的时候总是要输入项目名称,很麻烦
################################################
## Compile kernel and pack it into boot.img ##
################################################
#!/bin/sh
PROJECT=$1
echo $PROJECT
if [ "$1" = "" ];thenecho "Use: makeMtk.ini file for the mkkernel project_name"
#exit 修改 sen -n "1p" makeMtk.ini获取makeMtk.ini的第一行数据
#awk '{print $3}'获取第三个参数
#read LINE 把之前传进来的参数读取出来sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINEdoPROJECT=$LINE./makeMtk $PROJECT new kernel./makeMtk $PROJECT remake kernelecho ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.imgdone#编译完成后退出 exit
elseecho "Use: $1 for the project name"PROJECT=$1
fi
echo ./makeMtk $PROJECT new kernel
./makeMtk $PROJECT remake kernel
echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
看到代码里面我们每次要编译内核的时候都要输入./mkkernel mid713l_lp_lvds mid713l_lp_lvds 是项目名称,我觉得很麻烦。
2、sed读取文件的某一行
读取文件的某一行可以看看sed 这个命令
sed -n “1p” mkkernel 显示文件的第一行
sed -n “1,4p” mkkernel 显示文件第一行到第四行
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ sed -n "1p" mkkernel
################################################
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ sed -n "1,4p" mkkernel
################################################
## Compile kernel and pack it into boot.img ##
################################################
#!/bin/sh
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$
3、 awk截取某一列
awk ‘{print $3}’ 把管道前面的第三列显示出来
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini
project = mid713l_lp_lvds
build_mode = eng
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini |awk '{print $3}'
mid713l_lp_lvds
eng
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$
4、while read LINE ;do done 读取文件
do done会重新起一个子shell 这是为什么我不能把$LINE传下去的原因
sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINE
do
PROJECT=$LINE
./makeMtk $PROJECT new kernel
./makeMtk $PROJECT remake kernel
echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
done
5、用set -x set +x调试上面的说法
################################################
## Compile kernel and pack it into boot.img ##
################################################
#!/bin/sh
set -x
if [ "$1" = "" ];thenecho "Use: makeMtk.ini file for the mkkernel project_name"
#exit 修改 sen -n "1p" makeMtk.ini获取makeMtk.ini的第一行数据
#awk '{print $3}'获取第三个参数
#read LINE 把之前传进来的参数读取出来sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINEdoPROJECT=$LINEecho $PROJECTbreakdoneecho $PROJECT#编译完成后退出 #exit
elseecho "Use: $1 for the project name"PROJECT=$1
fi
echo ./makeMtk $PROJECT new kernel
set +x
#./makeMtk $PROJECT remake kernel
#echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
#./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
输出结果如下
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ ./wmkkernel
++ '[' '' = '' ']'
++ echo 'Use: makeMtk.ini file for the mkkernel project_name'
Use: makeMtk.ini file for the mkkernel project_name
++ sed -n 1p makeMtk.ini
++ read LINE
++ awk '{print $3}'
++ PROJECT=mid713l_lp_lvds
++ echo mid713l_lp_lvds
mid713l_lp_lvds
++ break
++ echo++ echo ./makeMtk new kernel
./makeMtk new kernel
++ set +x
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ vim wmkkernel
所以最终我的修改方案是第一种,网上查的办法行不通。