1#!/vendor/bin/sh 2 3############################################################# 4### init.insmod.cfg format: ### 5### ----------------------------------------------------- ### 6### [insmod|setprop|enable/moprobe|wait] [path|prop name] ### 7### ... ### 8############################################################# 9 10modules_dir= 11 12for f in /vendor/lib/modules/*/modules.dep /vendor/lib/modules/modules.dep; do 13 if [[ -f "$f" ]]; then 14 modules_dir="$(dirname "$f")" 15 break 16 fi 17done 18 19if [[ -z "${modules_dir}" ]]; then 20 echo "Unable to locate kernel modules directory" 2>&1 21 exit 1 22fi 23 24# imitates wait_for_file() in init 25wait_for_file() 26{ 27 filename="${1}" 28 timeout="${2:-5}" 29 30 expiry=$(($(date "+%s")+timeout)) 31 while [[ ! -e "${filename}" ]] && [[ "$(date "+%s")" -le "${expiry}" ]] 32 do 33 sleep 0.01 34 done 35} 36 37install_display_drivers() 38{ 39 panel_drv=`getprop ro.boot.primary_panel_drv` 40 if [[ -z "$panel_drv" ]]; then 41 panel_drv="panel-samsung-emul" 42 fi 43 modprobe -d "${modules_dir}" exynos-drm.ko 44 modprobe -d "${modules_dir}" $panel_drv.ko 45} 46 47if [ $# -eq 1 ]; then 48 cfg_file=$1 49else 50 # Set property even if there is no insmod config 51 # to unblock early-boot trigger 52 setprop vendor.common.modules.ready 53 setprop vendor.device.modules.ready 54 setprop vendor.all.modules.ready 55 setprop vendor.all.devices.ready 56 exit 1 57fi 58 59if [ -f $cfg_file ]; then 60 while IFS="|" read -r action arg 61 do 62 case $action in 63 "insmod") insmod $arg ;; 64 "setprop") setprop $arg 1 ;; 65 "enable") echo 1 > $arg ;; 66 "modprobe") 67 case ${arg} in 68 "-b *" | "-b") 69 arg="-b --all=${modules_dir}/modules.load" ;; 70 "*" | "") 71 arg="--all=${modules_dir}/modules.load" ;; 72 esac 73 modprobe -a -d "${modules_dir}" $arg ;; 74 "wait") wait_for_file $arg ;; 75 "install_display_drivers") install_display_drivers ;; 76 esac 77 done < $cfg_file 78fi 79