Note on porting the SDMergE400 mod for stock 2.3.6 firmware,
First, I de-odexed the ROM with dsixda's kitchen, also added root. Then I fixed stock init.rc as follows:
on early-init
start ueventd
on init
sysclktz 0
loglevel 3
# setup the global environment
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /vendor/lib:/system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export EXTERNAL_STORAGE /mnt/sdcard
export ASEC_MOUNTPOINT /mnt/asec
export LOOP_MOUNTPOINT /mnt/obb
# [START] LGE_USE_INTERNAL_FAT
export EXTERNAL_ADD_STORAGE /mnt/sdcard/_ExternalSD
export ASEC_ADD_MOUNTPOINT /mnt/extasec
export LOOP_ADD_MOUNTPOINT /mnt/extobb
# [END] LGE_USE_INTERNAL_FAT
export BOOTCLASSPATH /system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar
# Backward compatibility
symlink /system/etc /etc
symlink /sys/kernel/debug /d
# Right now vendor lives on the same filesystem as system,
# but someday that may change.
symlink /system/vendor /vendor
# create mountpoints
mkdir /mnt 0775 root system
mkdir /mnt/sdcard 0000 system system
# Create cgroup mount point for cpu accounting
mkdir /acct
mount cgroup none /acct cpuacct
mkdir /acct/uid
# Backwards Compat - XXX: Going away in G*
symlink /mnt/sdcard /sdcard
# [START] LGE_USE_INTERNAL_FAT
symlink /mnt/sdcard/_ExternalSD /sdcard/_ExternalSD
# [END] LGE_USE_INTERNAL_FAT
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /persist 0771 system system
# [START] MLT Porting
mkdir /mpt 0771 system system
# [END] MLT Porting
# Directory for putting things only root should see.
mkdir /mnt/secure 0700 root root
# Directory for staging bindmounts
mkdir /mnt/secure/staging 0700 root root
# Directory-target for where the secure container
# imagefile directory will be bind-mounted
mkdir /mnt/secure/asec 0700 root root
# [START] LGE_USE_INTERNAL_FAT
mkdir /mnt/extsecure 0700 root root
mkdir /mnt/extsecure/staging 0700 root root
mkdir /mnt/extsecure/extasec 0700 root root
# [END] LGE_USE_INTERNAL_FAT
# Secure container public mount points.
mkdir /mnt/asec 0700 root system
mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000
# Filesystem image public mount points.
mkdir /mnt/obb 0700 root system
mount tmpfs tmpfs /mnt/obb mode=0755,gid=1000
# [START] LGE_USE_INTERNAL_FAT
mkdir /mnt/extasec 0000 root system
mount tmpfs tmpfs /mnt/extasec mode=0755,gid=1000
mkdir /mnt/extobb 0700 root system
mount tmpfs tmpfs /mnt/extobb mode=0755,gid=1000
# [END] LGE_USE_INTERNAL_FAT
write /proc/sys/kernel/panic_on_oops 1
write /proc/sys/kernel/hung_task_timeout_secs 0
write /proc/cpu/alignment 4
write /proc/sys/kernel/sched_latency_ns 10000000
write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
write /proc/sys/kernel/sched_compat_yield 1
write /proc/sys/kernel/sched_child_runs_first 0
# Create cgroup mount points for process groups
mkdir /dev/cpuctl
mount cgroup none /dev/cpuctl cpu
chown system system /dev/cpuctl
chown system system /dev/cpuctl/tasks
chmod 0777 /dev/cpuctl/tasks
write /dev/cpuctl/cpu.shares 1024
mkdir /dev/cpuctl/fg_boost
chown system system /dev/cpuctl/fg_boost/tasks
chmod 0777 /dev/cpuctl/fg_boost/tasks
write /dev/cpuctl/fg_boost/cpu.shares 1024
mkdir /dev/cpuctl/bg_non_interactive
chown system system /dev/cpuctl/bg_non_interactive/tasks
chmod 0777 /dev/cpuctl/bg_non_interactive/tasks
# 5.0 %
write /dev/cpuctl/bg_non_interactive/cpu.shares 52
# LGDRM, DivX [[email protected]], 2011-07-16 [START]
mkdir /drm 0771 system system
# LGDRM, DivX [[email protected]], 2011-07-16 [END]
on fs
# mount mtd partitions
# Mount /system rw first to give the filesystem a chance to save a checkpoint
mount yaffs2 mtd@system /system
#mount yaffs2 mtd@system /system ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
mount yaffs2 mtd@persist /persist nosuid nodev
mount yaffs2 mtd@cache /cache nosuid nodev
mount yaffs2 mtd@persist /persist nosuid nodev
on emmc-fs
# mount mmc partitions
# [E2FSPROGS 1.41.14] change e2fsck option from -p to -y so that filesystem problems
# are fixed without human intervention.
# if there're too many problems -p option requests manual operation.
wait /dev/block/mmcblk0p14
mount ext4 /dev/block/mmcblk0p14 /system ro data=ordered barrier=1
wait /dev/block/mmcblk0p20
exec /system/bin/demigod_make_ext4fs -e /dev/block/mmcblk0p20 /data
exec /system/bin/e2fsck -y /dev/block/mmcblk0p20
mount ext4 /dev/block/mmcblk0p20 /data nosuid nodev noatime barrier=1 data=ordered noauto_da_alloc errors=continue
wait /dev/block/mmcblk0p15
exec /system/bin/demigod_make_ext4fs -e /dev/block/mmcblk0p15 /persist
exec /system/bin/e2fsck -y /dev/block/mmcblk0p15
mount ext4 /dev/block/mmcblk0p15 /persist nosuid nodev data=ordered barrier=1
wait /dev/block/mmcblk0p16
exec /system/bin/demigod_make_ext4fs -e /dev/block/mmcblk0p16 /cache
exec /system/bin/e2fsck -y /dev/block/mmcblk0p16
mount ext4 /dev/block/mmcblk0p16 /cache nosuid nodev data=ordered barrier=1
wait /dev/block/mmcblk0p18
exec /system/bin/demigod_make_ext4fs -e /dev/block/mmcblk0p18 /drm
exec /system/bin/e2fsck -y /dev/block/mmcblk0p18
mount ext4 /dev/block/mmcblk0p18 /drm nosuid nodev data=ordered barrier=1
# [START] LGE_USE_INTERNAL_FAT
#wait /dev/block/mmcblk0p20
#exec /system/bin/resize2fs /dev/block/mmcblk0p20
#exec /system/bin/e2fsck -y /dev/block/mmcblk0p20
#mount vfat /dev/block/mmcblk0p20 /mnt/sdcard
# [END] LGE_USE_INTERNAL_FAT
# [START] MLT Porting
wait /dev/block/mmcblk0p21
exec /system/bin/demigod_make_ext4fs -e /dev/block/mmcblk0p21 /mpt
exec /system/bin/e2fsck -y /dev/block/mmcblk0p21
mount ext4 /dev/block/mmcblk0p21 /mpt nosuid nodev data=ordered barrier=1
# [END] MLT Porting
## ANDY_PORTING LGDRM [[email protected] 100401]
# LGDRM, DivX [[email protected]], 2011-07-16 [START]
chown system system /drm
chmod 0771 /drm
#LGDRM
mkdir /drm/lgdrm 0770 lgdrm lgdrm_acc
chown lgdrm lgdrm_acc /drm/lgdrm
chmod 0770 /drm/lgdrm
#DivX
mkdir /drm/multimedia 0770 media system
chown media system /drm/multimedia
chmod 0770 /drm/multimedia
# LGDRM, DivX [[email protected]], 2011-07-16 [END]
## ANDY_END
## [email protected] [2011-07-26] - Referred from Victor model
start rmt_storage
on post-fs
# once everything is setup, no need to modify /
mount rootfs rootfs / ro noatime remount
# We chown/chmod /data again so because mount is run as root + defaults
chown system system /data
chmod 0771 /data
# Mounting of persist is moved to 'on emmc-fs' and 'on fs' sections
# We chown/chmod /persist again so because mount is run as root + defaults
chown system system /persist
chmod 0771 /persist
chmod 0664 /sys/devices/platform/msm_sdcc.1/polling
chmod 0664 /sys/devices/platform/msm_sdcc.2/polling
chmod 0664 /sys/devices/platform/msm_sdcc.3/polling
chmod 0664 /sys/devices/platform/msm_sdcc.4/polling
# Chown polling nodes as needed from UI running on system server
chown system system /sys/devices/platform/msm_sdcc.1/polling
chown system system /sys/devices/platform/msm_sdcc.2/polling
chown system system /sys/devices/platform/msm_sdcc.3/polling
chown system system /sys/devices/platform/msm_sdcc.4/polling
# Create dump dir and collect dumps.
# Do this before we mount cache so eventually we can use cache for
# storing dumps on platforms which do not have a dedicated dump partition.
mkdir /data/dontpanic
# FRANDRO_CHANGE_S [[email protected]] <For Error Handler>
chmod 662 /dev/log/main
chmod 662 /dev/log/system
chmod 662 /dev/log/events
chmod 662 /dev/log/radio
#chown root log /data/dontpanic
chown root system /data/dontpanic
#chmod 0750 /data/dontpanic
chmod 0775 /data/dontpanic
mkdir /data/tombstones
chown system system /data/tombstones
chmod 0755 /data/tombstones
# FRANDRO_CHANGE_E [[email protected]]
# Collect apanic data, free resources and re-arm trigger
copy /proc/apanic_console /data/dontpanic/apanic_console
chown root log /data/dontpanic/apanic_console
chmod 0640 /data/dontpanic/apanic_console
copy /proc/apanic_threads /data/dontpanic/apanic_threads
chown root log /data/dontpanic/apanic_threads
chmod 0640 /data/dontpanic/apanic_threads
write /proc/apanic_console 1
# [START] MLT Porting
chown system system /mpt
chmod 0771 /mpt
# [END] MLT Porting
# Same reason as /data above
chown system cache /cache
chmod 0770 /cache
# This may have been created by the recovery system with odd permissions
chown system cache /cache/recovery
chmod 0770 /cache/recovery
#change permissions on vmallocinfo so we can grab it from bugreports
chown root log /proc/vmallocinfo
chmod 0440 /proc/vmallocinfo
#change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks
chown root system /proc/kmsg
chmod 0440 /proc/kmsg
chown root system /proc/sysrq-trigger
chmod 0220 /proc/sysrq-trigger
# create basic filesystem structure
mkdir /data/misc 01771 system misc
mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth
mkdir /data/misc/bluetooth 0770 system system
mkdir /data/misc/keystore 0700 keystore keystore
mkdir /data/misc/vpn 0770 system system
mkdir /data/misc/systemkeys 0700 system system
mkdir /data/misc/vpn/profiles 0770 system system
# give system access to wpa_supplicant.conf for backup and restore
mkdir /data/misc/wifi 0770 wifi wifi
[email protected] [2011/07/27], change 0770 to 0771 for OTA test
chmod 0771 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf
mkdir /data/local 0771 shell shell
mkdir /data/local/tmp 0771 shell shell
mkdir /data/data 0771 system system
mkdir /data/app-private 0771 system system
mkdir /data/app 0771 system system
mkdir /data/property 0700 root root
mkdir /data/radio 0770 radio radio
# we use "radio" for gid to access from "rild" for AT cmd.
chown system radio /system/etc/firmware/wlan/volans/WCN1314_qcom_wlan_nv.bin
chmod 0660 /system/etc/firmware/wlan/volans/WCN1314_qcom_wlan_nv.bin
# LGE_CHANGE_E, 20110727, [email protected]
# [email protected](2010.01.11).begin: add for XT9 user dictionary
#mkdir /data/xt9 0777 system system
#chown system system /data/xt9
#chmod 0777 /data/xt9
# [email protected](2010.01.11).end
mkdir /data/misc/sensors 0775 root root
write /data/system/sensors/settings 0
chmod 0664 /data/system/sensors/settings
# create dalvik-cache and double-check the perms
mkdir /data/dalvik-cache 0771 system system
chown system system /data/dalvik-cache
chmod 0771 /data/dalvik-cache
# create the lost+found directories, so as to enforce our permissions
mkdir /data/lost+found 0770
mkdir /cache/lost+found 0770
# double check the perms, in case lost+found already exists, and set owner
chown root root /data/lost+found
chmod 0770 /data/lost+found
chown root root /cache/lost+found
chmod 0770 /cache/lost+found
#LGE_DEV_PORTING M3_NFC
# NFC
chmod 0666 /dev/pn544
setprop ro.nfc.port I2C
#LGE_DEV_END
# 20110216 [email protected] for ANDY_LGDRM [START]
## ANDY_PORTING LGDRM [[email protected] 100401]
# create dirs if not exist
mkdir /data/lgdrm 0770 lgdrm lgdrm_acc
mkdir /data/wmdrm 0770 lgdrm lgdrm_acc
## ANDY_END
# 20110216 [email protected] for ANDY_LGDRM [END]
# LGE_DEV_PORTING, [[email protected]], 2011-05-06
## LGE_MERGE_S
# Nextreaming - DIVX_DRM
mkdir /drm/multimedia/nx 0770 media system
chown media system /drm/multimedia/nx
chmod 0770 /drm/multimedia/nx
mkdir /drm/multimedia/uma 0770 media system
chown media system /drm/multimedia/uma
chmod 0770 /drm/multimedia/uma
mkdir /drm/multimedia/scnt 0770 media system
chown media system /drm/multimedia/scnt
chmod 0770 /drm/multimedia/scnt
mkdir /drm/multimedia/scnt/sdadf 0770 media system
chown media system /drm/multimedia/scnt/sdadf
chmod 0770 /drm/multimedia/scnt/sdadf
# END : Nextreaming - DIVX_DRM
## LGE_MERGE_E
# LGE_DEV_END [[email protected]]
#ifdef LGE_ROOTING_FEATURE
## princlee add for rooting
mkdir /persist/hidden
chown root root /persist/hidden
chmod 0755 /persist/hidden
#endif
## or
## #ifdef LGE_ROOTING_FEATURE
## princlee add for rooting
## change direcoty to persist incase of QCT
## mkdir /data/hidden
## chown root root /data/hidden
## chmod 0755 /data/hidden
## #endif
#if defined(ANDY_ERS)
## ERS
mkdir /data/data/com.lge.ers
mkdir /data/data/com.lge.ers/android
mkdir /data/data/com.lge.ers/kernel
mkdir /data/data/com.lge.ers/arm9
chmod 0777 /data/data/com.lge.ers/android
chmod 0777 /data/data/com.lge.ers/kernel
chmod 0777 /data/data/com.lge.ers/arm9
#endif
# 20110824, [email protected], make ringtone,alarm property directory [START]
mkdir /data/audioprop 0777 system system
# 20110824, [email protected], make ringtone,alarm property directory [END]
on boot
# basic network init
ifup lo
hostname localhost
domainname localdomain
# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit 13 40 40
# don't require sim
setprop keyguard.no_require_sim 1
# Define the oom_adj values for the classes of processes that can be
# killed by the kernel. These are used in ActivityManagerService.
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.PERCEPTIBLE_APP_ADJ 2
setprop ro.HEAVY_WEIGHT_APP_ADJ 3
setprop ro.SECONDARY_SERVER_ADJ 4
setprop ro.BACKUP_APP_ADJ 5
setprop ro.HOME_APP_ADJ 6
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.EMPTY_APP_ADJ 15
# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
setprop ro.FOREGROUND_APP_MEM 2048
setprop ro.VISIBLE_APP_MEM 3072
setprop ro.PERCEPTIBLE_APP_MEM 4096
setprop ro.HEAVY_WEIGHT_APP_MEM 4096
setprop ro.SECONDARY_SERVER_MEM 6144
setprop ro.BACKUP_APP_MEM 6144
setprop ro.HOME_APP_MEM 6144
setprop ro.HIDDEN_APP_MEM 7168
setprop ro.EMPTY_APP_MEM 8192
# Write value must be consistent with the above properties.
# Note that the driver only supports 6 slots, so we have combined some of
# the classes into the same memory level; the associated processes of higher
# classes will still be killed first.
write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15
write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
write /sys/module/lowmemorykiller/parameters/minfree 2048,3072,4096,6144,7168,8192
# Set init its forked children's oom_adj.
write /proc/1/oom_adj -16
# Tweak background writeout
write /proc/sys/vm/dirty_expire_centisecs 200
write /proc/sys/vm/dirty_background_ratio 5
# LGE_CHANGE_S, [Data_Patch_014] [[email protected]], 2011-04-26 <Define TCP buffer sizes for various networks>
# Adjust socket buffer to enlarge TCP receive window for high bandwidth
write /proc/sys/net/ipv4/tcp_adv_win_scale 2 #<-- (1 -> 2) 20100816 NJ sewon.kim QC SR result for android.net.cts.TrafficStatsTest#testTrafficStatsForLocalhost
# LGE_CHANGE_E, [Data_Patch_014] [[email protected]], 2011-04-26 <Define TCP buffer sizes for various networks>
# Permissions for System Server and daemons.
chown radio system /sys/android_power/state
chown radio system /sys/android_power/request_state
chown radio system /sys/android_power/acquire_full_wake_lock
chown radio system /sys/android_power/acquire_partial_wake_lock
chown radio system /sys/android_power/release_wake_lock
chown radio system /sys/power/state
chown radio system /sys/power/wake_lock
chown radio system /sys/power/wake_unlock
chmod 0660 /sys/power/state
chmod 0660 /sys/power/wake_lock
chmod 0660 /sys/power/wake_unlock
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/class/leds/keyboard-backlight/brightness
chown system system /sys/class/leds/lcd-backlight/brightness
chown system system /sys/class/leds/button-backlight/brightness
chown system system /sys/class/leds/jogball-backlight/brightness
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/module/sco/parameters/disable_esco
chown system system /sys/kernel/ipv4/tcp_wmem_min
chown system system /sys/kernel/ipv4/tcp_wmem_def
chown system system /sys/kernel/ipv4/tcp_wmem_max
chown system system /sys/kernel/ipv4/tcp_rmem_min
chown system system /sys/kernel/ipv4/tcp_rmem_def
chown system system /sys/kernel/ipv4/tcp_rmem_max
chown root radio /proc/cmdline
# [110801 [email protected] M3_ALL]Add AT%FPRICRC [START]
# fpritest
mkdir /data/fpri
chown system system /data/fpri
chmod 0777 /data/fpri
# [110801 [email protected] M3_ALL] [END]
## Openchannel BEGIN [[email protected] 111122]
# Define OpenChannel Properties
setprop openchannel.net.dns 127.0.0.1:7053
setprop openchannel.net.active 0
setprop openchannel.net1.forward_port 8072
setprop openChannel.net1.forwards_to 127.0.0.1
## Openchannel END
## LGE UPDATE_FOTA_S M3 [email protected] 20011/09/29
chown system system /sys/module/lge_emmc_direct_access/parameters/fota_id_check
chown system system /sys/module/lge_emmc_direct_access/parameters/fota_id_read
## LGE UPDATE_FOTA_E M3 [email protected] 20011/09/29
#LGE_CHANGE_GPSONEXTRA [[email protected]][2010.08.28] [BEGIN]
mkdir /data/gpscfg 0777 system system
chown system system /data/gpscfg/gps_env.conf
chmod 0777 /data/gpscfg/gps_env.conf
#LGE_CHANGE_GPSONEXTRA [[email protected]][2010.08.28] [END]
# Define TCP buffer sizes for various networks
# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680
setprop net.tcp.buffersize.lte 4094,87380,1220608,4096,16384,1220608
setprop net.tcp.buffersize.evdo_b 4094,87380,262144,4096,16384,262144
# Assign TCP buffer thresholds to be ceiling value of technology maximums
# Increased technology maximums should be reflected here.
write /proc/sys/net/core/rmem_max 1220608
write /proc/sys/net/core/wmem_max 1220608
class_start default
[email protected] not used chown system system /sys/module/android/parameters/usb_mode
[email protected] not used chmod 0666 /sys/module/u_lgeusb/parameters/user_mode
chown root system /sys/class/usb_composite/usb_mass_storage/enable
chown root system /sys/class/usb_composite/ecm/enable
chown system system /sys/devices/platform/usb_cdrom_storage/lun0/file
chown system system /sys/devices/platform/msm_hsusb/gadget/usb_state
chown system system /sys/module/u_lgeusb/parameters/user_mode
chown system system /sys/module/u_lgeusb/parameters/mode
chmod 0664 /sys/class/usb_composite/usb_mass_storage/enable
chmod 0664 /sys/class/usb_composite/ecm/enable
chmod 0664 /sys/devices/platform/usb_cdrom_storage/lun0/file
chmod 0664 /sys/devices/platform/msm_hsusb/gadget/usb_state
chmod 0664 /sys/module/u_lgeusb/parameters/user_mode
chmod 0664 /sys/module/u_lgeusb/parameters/mode
###
## Daemon processes to be run by init.
##
service ueventd /sbin/ueventd
critical
service console /system/bin/sh
console
disabled
user shell
group log
# [START] LGE_USE_INTERNAL_FAT
service formatfat /system/bin/sh /system/etc/format_fat32.sh
oneshot
# [END] LGE_USE_INTERNAL_FAT
# [email protected] merge from victor .default disable.
#on property:ro.secure=0
# start console
# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd
disabled
# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
stop adbd
#if defined(ANDY_ERS)
## ANDY_PORTING ERS
#ERS rpc daemon for qcom
service lge_ers_rpcd /system/bin/lge_ers_rpcd
# lge_ers_rpcd do not run in user build type
on property:ro.build.type=eng
stop lge_ers_rpcd
start lge_ers_rpcd
## ANDY_END
#endif
service servicemanager /system/bin/servicemanager
user system
critical
onrestart restart zygote
onrestart restart media
service vold /system/bin/vold
socket vold stream 0660 root mount
ioprio be 2
service netd /system/bin/netd
socket netd stream 0660 root system
service debuggerd /system/bin/debuggerd
service ril-daemon /system/bin/rild
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
#MUSCAT_PORTING
# START : FROM_MUSCAT 20110210 : REVIEWME
# Need to check whether any side effects happen later. Applied Muscat's.
group radio cache inet misc audio qcom_oncrpc diag system sdcard_rw
#group radio cache inet misc audio sdcard_rw qcom_oncrpc diag
#disabled
# END : FROM_MUSCAT 20110210
#MUSCAT_END
# 20110216 [email protected] for ANDY_LGDRM [START]
## ANDY_PORTING LGDRM [[email protected] 100401]
# Must executed before system_server
service lgdrm /system/bin/lgdrmserver
user lgdrm
group lgdrm_acc system sdcard_rw qcom_oncrpc radio
## ANDY_END
# 20110216 [email protected] for ANDY_LGDRM [END]
## [email protected] [2011-07-26] - Referred from Victor model
service rmt_storage /system/bin/rmt_storage /dev/block/mmcblk0p10 /dev/block/mmcblk0p11
user root
disabled
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin net_raw qcom_oncrpc
ioprio rt 4
service bootanim /system/bin/bootanimation
user graphics
group graphics lg_fota
disabled
oneshot
service dbus /system/bin/dbus-daemon --system --nofork
socket dbus stream 660 bluetooth bluetooth
user bluetooth
group bluetooth net_bt_admin
service bluetoothd /system/bin/bluetoothd -n
socket bluetooth stream 660 bluetooth bluetooth
socket dbus_bluetooth stream 660 bluetooth bluetooth
# init.rc does not yet support applying capabilities, so run as root and
# let bluetoothd drop uid to bluetooth with the right linux capabilities
group bluetooth net_bt_admin misc
disabled
service hfag /system/bin/sdptool add --channel=10 HFAG
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service hsag /system/bin/sdptool add --channel=11 HSAG
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service opush /system/bin/sdptool add --psm=5255 --channel=12 OPUSH
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service pbap /system/bin/sdptool add --channel=19 PBAP
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service installd /system/bin/installd
socket installd stream 600 system system
service flash_recovery /system/etc/install-recovery.sh
oneshot
service racoon /system/bin/racoon
socket racoon stream 600 system system
# racoon will setuid to vpn after getting necessary resources.
group net_admin
disabled
oneshot
service mtpd /system/bin/mtpd
socket mtpd stream 600 system system
user vpn
group vpn net_admin net_raw
disabled
oneshot
service keystore /system/bin/keystore /data/misc/keystore
user keystore
group keystore
socket keystore stream 666
service dumpstate /system/bin/dumpstate -s
socket dumpstate stream 0660 shell log
disabled
oneshot
#LGE_UPDATE_S, lgospd is removed in OSP 2.0, [email protected], 20110613
#ANDY_PORTING OSP [[email protected] 101027]
#service lgospd-hid /system/bin/lgospd-hid
# user root
# group system
# oneshot
#service lgospd /system/bin/lgospd
# user root
# group system graphics diag radio
#ANDY_END
#LGE_UPDATE_E, lgospd is removed in OSP 2.0, [email protected], 20110613
and re-packed the kernel. Also I changed the /system/etc/format-fat32.sh that forcedly restored vfat partition on new data partition:
#!/system/bin/sh
exit 0
and packed a flashable zip with a custom-fixed updater-script. I had to use convert update-script feature from kitchen, but finally this approach had missed several critical symlinks, so I mounted the system.img in my linux box and got the list of necessary symlinks pretty-printed for edify scripting:
find . -type l | while read LINE;
do
symstr=`ls -la $LINE`
echo 'symlink("'`echo $symstr | awk '{print $11}' | sed 's/^\./\/system/'`'","'`echo $symstr | awk '{print $9}' | sed 's/^\./\/system/'`'");' >> /tmp/kernels/stock_e400/stock_e400_symlinks
done
Finally I zipaligned and created a zip archive and tried to flash. Nothing! So I had to take zip from CyanogenMod and replace system folder with mine and the updater-script with new one. That worked.
The phone booted, but it still misses a /mnt/extra-sd so I need to patch storage_info.xml too.
UPDATE: there is no storage.info in Gingerbread (only ICS+) and I got a damaged card issue. So I digged inside and found that mmcblk0p20 value is hardcoded (sic!) into vold, framework, camera, browser etc!
UPDATE: The LG's tivoized vold forces /dev/block/vold/179:20 (0xb314) for /mnt/sdcard and /dev/block/vold/179:32 for /mnt/sdcard/_ExternalSD. External SD entry is controlled by vold.fstab, and /mnt/sdcard by code inside vold to prevent end-users from modding.
I had to patch vold to alter 0xb314 partNode with 0xb320 and used stock vold.fstab. As a result, the external SD card was mounted twice - as primary and secondary cards. To prevent the second mountpoint to process, I trued to delete the ExternalSD entry, but that caused vold to lose partition at all. The obvious solution was the following vold.fstab:
# Copyright (c) 2011, Code Aurora Forum. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
# * Neither the name of Code Aurora Forum, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#dev_mount sdcard /mnt/sdcard auto /devices/platform/msm_sdcc.1/mmc_host
# LGE_CHANGE
# If sdcard isn't exist, mount emmc partition
# 2011-06-14, [email protected]
#dev_mount sdcard /mnt/sdcard auto /devices/platform/msm_sdcc.1/mmc_host /devices/platform/msm_sdcc.3/mmc_host
dev_mount sdcard /mnt/sdcard auto /devices/platform/msm_sdcc.3/mmc_host
dev_mount extsdcard /mnt/extra-sd auto /devices/platform/msm_sdcc.1/mmc_host
Here we have an ExternalSD entry but its name is not ExternalSD, so vold drops a framework request but handles the partition internally on 'volume mount /mnt/sdcard' call to vold.
Now the external card is reported as absent and the primary card has the size and feel of external one. The USB storage also works at full-speed (~4MB/sec) so this task can be considered as done
