script: optimize android driver loading [1/2]
PD#SWPL-101063
Problem:
android starts slowly
Solution:
1. add the recovery driver array, and make recovery's modules.order
2. put the necessary drivers in the first stage, the android start faster
Verify:
sc2
Change-Id: I00276ff6b9d4e38b4bb31c5f5b09dfd76317c994
Signed-off-by: Wanwei Jiang <wanwei.jiang@amlogic.com>
diff --git a/amlogic_utils.sh b/amlogic_utils.sh
index 0c62f7f..bccab97 100644
--- a/amlogic_utils.sh
+++ b/amlogic_utils.sh
@@ -181,10 +181,12 @@
pushd ${src_dir}
cp modules.order modules_order.back
: > modules.order
+ set +x
while read LINE
do
find -name ${LINE} >> modules.order
done < ${OUT_AMLOGIC_DIR}/modules/modules.order
+ set -x
sed -i "s/^\.\///" modules.order
: > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
ext_modules=
@@ -261,6 +263,15 @@
done
}
+function mod_probe_recovery() {
+ local ko=$1
+ local loop
+ for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
+ mod_probe_recovery $loop
+ echo insmod $loop >> __install_recovery.sh
+ done
+}
+
function adjust_sequence_modules_loading() {
if [[ -n $1 ]]; then
chips=$1
@@ -414,6 +425,11 @@
sed -i "/${module}.*\.ko:/d" modules.dep.temp
done
+ if [[ -n ${ANDROID_PROJECT} ]]; then
+ cp modules.dep.temp modules_recovery.dep.temp
+ cp modules.dep.temp1 modules_recovery.dep.temp1
+ fi
+
for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
sed -n "/${module}:/p" modules.dep.temp
@@ -445,10 +461,31 @@
rm modules.dep.temp
rm modules.dep.temp1
rm modules.dep.temp2
+
+ if [[ -n ${ANDROID_PROJECT} ]]; then
+ for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
+ echo RECOVERY_MODULES_LOAD_LIST: $module
+ sed -n "/${module}:/p" modules_recovery.dep.temp
+ sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
+ sed -i "/${module}:/d" modules_recovery.dep.temp
+ sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
+ sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
+ sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
+ done
+
+ cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
+
+ cp modules_recovery.dep.temp1 modules_recovery.dep
+ rm modules_recovery.dep.temp
+ rm modules_recovery.dep.temp1
+ fi
}
-create_ramdisk_vendor() {
+create_ramdisk_vendor_recovery() {
install_temp=$1
+ if [[ -n ${ANDROID_PROJECT} ]]; then
+ recovery_install_temp=$2
+ fi
source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
while [ ${ramdisk_module_i} -gt 0 ]; do
@@ -465,6 +502,35 @@
ramdisk_last_line=${line}
done
export ramdisk_last_line
+
+ if [[ -n ${ANDROID_PROJECT} ]]; then
+ recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
+ while [ ${recovery_module_i} -gt 0 ]; do
+ let recovery_module_i--
+ echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
+ if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
+ last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
+ break;
+ fi
+ done
+ # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
+ last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
+ for line in ${last_recovery_module_line}; do
+ recovery_last_line=${line}
+ done
+
+ sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
+ sed -i "1d" recovery_install.sh
+ mkdir recovery
+ cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
+ cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
+
+ sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
+ echo "echo Install recovery modules success!" >> recovery_install.sh
+ chmod 755 recovery_install.sh
+ mv recovery_install.sh recovery/
+ fi
+
head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
mkdir ramdisk
cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
@@ -541,7 +607,26 @@
cp modules.order modules.order.back
cut -d ' ' -f 2 __install.sh.tmp > modules.order
- create_ramdisk_vendor __install.sh.tmp
+
+ if [[ -n ${ANDROID_PROJECT} ]]; then
+ touch __install_recovery.sh
+ touch modules_recovery.order
+ for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
+ mod_probe_recovery $loop
+ echo $loop >> modules_recovery.order
+ echo insmod $loop >> __install_recovery.sh
+ done
+
+ cat __install_recovery.sh | awk ' {
+ if (!cnt[$2]) {
+ print $0;
+ cnt[$2]++;
+ }
+ }' > __install_recovery.sh.tmp
+
+ cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
+ fi
+ create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
echo "#!/bin/sh" > install.sh
echo "cd ramdisk" >> install.sh
@@ -554,6 +639,10 @@
echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
rm __install.sh __install.sh.tmp
+ if [[ -n ${ANDROID_PROJECT} ]]; then
+ rm __install_recovery.sh __install_recovery.sh.tmp
+ fi
+
popd
}
export -f modules_install
diff --git a/scripts/amlogic/modules_sequence_list b/scripts/amlogic/modules_sequence_list
index acb1524..7c6c818 100644
--- a/scripts/amlogic/modules_sequence_list
+++ b/scripts/amlogic/modules_sequence_list
@@ -1,6 +1,7 @@
RAMDISK_MODULES_LOAD_LIST=(
amlogic-uart
amlogic-gkitool
+ amlogic-memory-debug
amlogic-secmon
amlogic-clk
amlogic-gpio
@@ -28,7 +29,6 @@
amlogic-adc.ko
amlogic-rtc-virtual.ko
amlogic-thermal.ko
- amlogic-usb.ko
amlogic-irblaster.ko
amlogic-inphy.ko
amlogic-drm.ko
@@ -41,6 +41,10 @@
VENDOR_MODULES_LOAD_LAST_LIST=(
)
+RECOVERY_MODULES_LOAD_LIST=(
+ amlogic-usb.ko
+)
+
MODULES_LOAD_BLACK_LIST=(
${VENDOR_MODULES_LOAD_BLACK_LIST[@]}
${OEM_MODULES_LOAD_BLACK_LIST[@]}