AnyKernel 2.0: allow for ramdisk modifications
This commit is contained in:
1 parent
8ea8b14eb7
commit
ad031d587e
16 files changed
+852
-21
No files matched your search
@@ -1,18 +1,33 @@
|
||||
ui_print("AnyKernel Updater by Koush.");
|
||||
ui_print("Extracting System Files...");
|
||||
set_progress(1.000000);
|
||||
mount("MTD", "system", "/system");
|
||||
package_extract_dir("system", "/system");
|
||||
show_progress(1.34, 4);
|
||||
ui_print("");
|
||||
assert(package_extract_dir("", "/tmp/anykernel"));
|
||||
ui_print(file_getprop("/tmp/anykernel/anykernel.sh", "kernel.string"));
|
||||
ui_print("");
|
||||
ui_print("AnyKernel Script by osm0sis @ xda-developers");
|
||||
ui_print("");
|
||||
run_program("/sbin/busybox", "mount", "/system");
|
||||
ifelse(file_getprop("/tmp/anykernel/anykernel.sh", "do.devicecheck") == 1,
|
||||
(ui_print("Checking device...");
|
||||
ui_print("");
|
||||
assert(getprop("ro.product.device") == file_getprop("/tmp/anykernel/anykernel.sh", "device.name1") || getprop("ro.build.product") == file_getprop("/tmp/anykernel/anykernel.sh", "device.name1") ||
|
||||
getprop("ro.product.device") == file_getprop("/tmp/anykernel/anykernel.sh", "device.name2") || getprop("ro.build.product") == file_getprop("/tmp/anykernel/anykernel.sh", "device.name2") ||
|
||||
getprop("ro.product.device") == file_getprop("/tmp/anykernel/anykernel.sh", "device.name3") || getprop("ro.build.product") == file_getprop("/tmp/anykernel/anykernel.sh", "device.name3"));
|
||||
)
|
||||
);
|
||||
ifelse(file_getprop("/tmp/anykernel/anykernel.sh", "do.initd") == 1,
|
||||
(ui_print("Creating init.d...");
|
||||
ui_print("");
|
||||
run_program("/sbin/sh", "-c", "mkdir /system/etc/init.d");
|
||||
set_perm_recursive(0, 0, 0755, 0755, "/system/etc/init.d");
|
||||
)
|
||||
);
|
||||
unmount("/system");
|
||||
ui_print("Extracting Kernel files...");
|
||||
package_extract_dir("kernel", "/tmp");
|
||||
ui_print("Installing kernel...");
|
||||
set_perm(0, 0, 0777, "/tmp/dump_image");
|
||||
set_perm(0, 0, 0777, "/tmp/mkbootimg.sh");
|
||||
set_perm(0, 0, 0777, "/tmp/mkbootimg");
|
||||
set_perm(0, 0, 0777, "/tmp/unpackbootimg");
|
||||
run_program("/tmp/dump_image", "boot", "/tmp/boot.img");
|
||||
run_program("/tmp/unpackbootimg", "/tmp/boot.img", "/tmp/");
|
||||
run_program("/tmp/mkbootimg.sh");
|
||||
write_raw_image("/tmp/newboot.img", "boot");
|
||||
assert(run_program("/sbin/sh", "/tmp/anykernel/anykernel.sh"));
|
||||
ifelse(file_getprop("/tmp/anykernel/anykernel.sh", "do.cleanup") == 1,
|
||||
(delete_recursive("/tmp/anykernel");
|
||||
)
|
||||
);
|
||||
ui_print("");
|
||||
ui_print("Done!");
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
AnyKernel 2.0 - CWM Zip Template for Kernel Releases with Ramdisk Modifications
|
||||
by osm0sis @ xda-developers
|
||||
|
||||
"AnyKernel is a template for an update.zip that can apply any kernel to any ROM, regardless of ramdisk." - Koush
|
||||
|
||||
AnyKernel 2.0 pushes the format even further by allowing kernel developers to modify the underlying ramdisk for kernel feature support easily using a number of included command methods along with properties and variables.
|
||||
|
||||
A working script based on DirtyV Kernel for Galaxy Nexus (tuna) is included for reference.
|
||||
|
||||
// Properties / Variables
|
||||
|
||||
kernel.string=KernelName by YourName @ xda-developers
|
||||
do.initd=1
|
||||
do.devicecheck=1
|
||||
do.cleanup=1
|
||||
device.name1=maguro
|
||||
device.name2=toro
|
||||
device.name3=toroplus
|
||||
block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;
|
||||
|
||||
do.initd=1 will create the init.d directory in /system/etc/init.d/ and apply 755 permissions.
|
||||
|
||||
do.devicecheck=1 specified requires at least device.name1 to be present. This should match ro.product.device or ro.build.product for your device.
|
||||
|
||||
do.cleanup=0 will keep the zip from removing it's working directory in /tmp/anykernel - this can be useful if trying to debug in adb shell whether the patches worked correctly.
|
||||
|
||||
// Command Methods
|
||||
|
||||
dump_boot
|
||||
backup_file <file>
|
||||
replace_string <file> <if search string> <original string> <replacement string>
|
||||
insert_line <file> <if search string> <line before string> <inserted line>
|
||||
replace_line <file> <line replace string> <replacement line>
|
||||
prepend_file <file> <if search string> <patch file>
|
||||
append_file <file> <if search string> <patch file>
|
||||
replace_file <file> <permissions> <patch file>
|
||||
write_boot
|
||||
|
||||
"if search string" is the string it looks for to decide whether it needs to add the tweak or not, so generally something to indicate the tweak already exists.
|
||||
|
||||
Similarly, "line before string" and "line replace string" are the search strings that locate where the modification needs to be made for those commands.
|
||||
|
||||
// Instructions
|
||||
|
||||
1- Place zImage in the in the root
|
||||
2- Place any required ramdisk files in /ramdisk
|
||||
3- Place any required patch files (partial files which go with commands) in /patch
|
||||
4- Modify the anykernel.sh to add your kernel's name, boot partition location, and methods for any required ramdisk modifications.
|
||||
5- zip -r9 your.zip *
|
||||
|
||||
Not required, but any tweaks you can't hardcode into the source should be added with a bootscript.sh like is done in the example provided.
|
||||
|
||||
|
||||
Have fun!
|
||||
|
||||
Regular → Executable
+137
-6
@@ -1,6 +1,137 @@
|
||||
#!/sbin/sh
|
||||
echo \#!/sbin/sh > /tmp/createnewboot.sh
|
||||
echo /tmp/mkbootimg --kernel /tmp/zImage --ramdisk /tmp/boot.img-ramdisk.gz --cmdline \"$(cat /tmp/boot.img-cmdline)\" --base $(cat /tmp/boot.img-base) --output /tmp/newboot.img >> /tmp/createnewboot.sh
|
||||
chmod 777 /tmp/createnewboot.sh
|
||||
/tmp/createnewboot.sh
|
||||
return $?
|
||||
# AnyKernel 2.0 Ramdisk Mod Script
|
||||
# osm0sis @ xda-developers
|
||||
|
||||
## AnyKernel setup
|
||||
# EDIFY properties
|
||||
kernel.string=DirtyV by bsmitty83 @ xda-developers
|
||||
do.initd=1
|
||||
do.devicecheck=1
|
||||
do.cleanup=1
|
||||
device.name1=maguro
|
||||
device.name2=toro
|
||||
device.name3=toroplus
|
||||
|
||||
# shell variables
|
||||
block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;
|
||||
|
||||
## end setup
|
||||
|
||||
|
||||
## AnyKernel methods (DO NOT CHANGE)
|
||||
# set up extracted files and directories
|
||||
ramdisk=/tmp/anykernel/ramdisk;
|
||||
bin=/tmp/anykernel/tools;
|
||||
split_img=/tmp/anykernel/split_img;
|
||||
patch=/tmp/anykernel/patch;
|
||||
|
||||
cd $ramdisk;
|
||||
chmod -R 644 $ramdisk
|
||||
chmod -R 755 $bin $ramdisk/sbin;
|
||||
mkdir -p $split_img;
|
||||
|
||||
# dump boot and extract ramdisk
|
||||
dump_boot() {
|
||||
dd if=$block of=/tmp/anykernel/boot.img;
|
||||
$bin/unpackbootimg -i /tmp/anykernel/boot.img -o $split_img;
|
||||
gunzip -c $split_img/boot.img-ramdisk.gz | cpio -i;
|
||||
}
|
||||
|
||||
# repack ramdisk then build and write image
|
||||
write_boot() {
|
||||
find . | cpio -o -H newc | gzip > /tmp/anykernel/ramdisk-new.cpio.gz;
|
||||
if [ ! -z `cat $split_img/boot.img-cmdline` ]; then
|
||||
cmdline="--cmdline `cat $split_img/boot.img-cmdline`";
|
||||
fi;
|
||||
$bin/mkbootimg --kernel /tmp/anykernel/zImage --ramdisk /tmp/anykernel/ramdisk-new.cpio.gz $cmdline --base 0x`cat $split_img/boot.img-base` --pagesize `printf "%d\n" 0x$(cat $split_img/boot.img-pagesize)` --output /tmp/anykernel/boot-new.img;
|
||||
dd if=/tmp/anykernel/boot-new.img of=$block;
|
||||
}
|
||||
|
||||
# backup_file <file>
|
||||
backup_file() { cp $1 $1~; }
|
||||
|
||||
# replace_string <file> <if search string> <original string> <replacement string>
|
||||
replace_string() {
|
||||
if [ -z "$(grep "$2" $1)" ]; then
|
||||
sed -i "s;${3};${4};" $1;
|
||||
fi;
|
||||
}
|
||||
|
||||
# insert_line <file> <if search string> <line before string> <inserted line>
|
||||
insert_line() {
|
||||
if [ -z "$(grep "$2" $1)" ]; then
|
||||
line=$((`grep -n "$3" $1 | cut -d: -f1` + 1));
|
||||
sed -i $line"s;^;${4};" $1;
|
||||
fi;
|
||||
}
|
||||
|
||||
# replace_line <file> <line replace string> <replacement line>
|
||||
replace_line() {
|
||||
if [ ! -z "$(grep "$2" $1)" ]; then
|
||||
line=`grep -n "$2" $1 | cut -d: -f1`;
|
||||
sed -i $line"s;.*;${3};" $1;
|
||||
fi;
|
||||
}
|
||||
|
||||
# prepend_file <file> <if search string> <patch file>
|
||||
prepend_file() {
|
||||
if [ -z "$(grep "$2" $1)" ]; then
|
||||
echo "$(cat $patch/$3 $1)" > $1;
|
||||
fi;
|
||||
}
|
||||
|
||||
# append_file <file> <if search string> <patch file>
|
||||
append_file() {
|
||||
if [ -z "$(grep "$2" $1)" ]; then
|
||||
echo -ne "\n" >> $1;
|
||||
cat $patch/$3 >> $1;
|
||||
echo -ne "\n" >> $1;
|
||||
fi;
|
||||
}
|
||||
|
||||
# replace_file <file> <permissions> <patch file>
|
||||
replace_file() {
|
||||
cp -fp $patch/$3 $1;
|
||||
chmod $2 $1;
|
||||
}
|
||||
|
||||
## end methods
|
||||
|
||||
|
||||
## AnyKernel install
|
||||
dump_boot;
|
||||
|
||||
# begin ramdisk changes
|
||||
|
||||
# init.rc
|
||||
backup_file init.rc;
|
||||
replace_string init.rc "cpuctl cpu,timer_slack" "mount cgroup none /dev/cpuctl cpu" "mount cgroup none /dev/cpuctl cpu,timer_slack";
|
||||
append_file init.rc "run-parts" init;
|
||||
|
||||
# init.tuna.rc
|
||||
backup_file init.tuna.rc;
|
||||
insert_line init.tuna.rc "nodiratime barrier=0" "mount_all /fstab.tuna" "\tmount ext4 /dev/block/platform/omap/omap_hsmmc.0/by-name/userdata /data remount nosuid nodev noatime nodiratime barrier=0\n";
|
||||
append_file init.tuna.rc "dvbootscript" init.tuna;
|
||||
|
||||
# init.superuser.rc
|
||||
if [ -f init.superuser.rc ]; then
|
||||
backup_file init.superuser.rc;
|
||||
replace_string init.superuser.rc "Superuser su_daemon" "# su daemon" "\n# Superuser su_daemon";
|
||||
prepend_file init.superuser.rc "SuperSU daemonsu" init.superuser;
|
||||
else
|
||||
replace_file init.superuser.rc 750 init.superuser.rc;
|
||||
insert_line init.rc "init.superuser.rc" "on post-fs-data" " import /init.superuser.rc\n\n";
|
||||
fi;
|
||||
|
||||
# fstab.tuna
|
||||
backup_file fstab.tuna;
|
||||
replace_line fstab.tuna "/by-name/system" "/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 nodev,noatime,nodiratime,barrier=0,data=writeback,noauto_da_alloc,discard wait";
|
||||
replace_line fstab.tuna "/by-name/cache" "/dev/block/platform/omap/omap_hsmmc.0/by-name/cache /cache ext4 nosuid,nodev,noatime,nodiratime,errors=panic,barrier=0,nomblk_io_submit,data=writeback,noauto_da_alloc wait,check";
|
||||
replace_line fstab.tuna "/by-name/userdata" "/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata /data ext4 nosuid,nodev,noatime,errors=panic,nomblk_io_submit,data=writeback,noauto_da_alloc wait,check,encryptable=/dev/block/platform/omap/omap_hsmmc.0/by-name/metadata";
|
||||
append_file fstab.tuna "usbdisk" fstab;
|
||||
|
||||
# end ramdisk changes
|
||||
|
||||
write_boot;
|
||||
|
||||
## end install
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
# USB storage device
|
||||
/devices/platform/omap/musb-omap2430/musb-hdrc auto auto defaults voldmanaged=usbdisk:auto
|
||||
@@ -0,0 +1,4 @@
|
||||
# Execute files in /system/etc/init.d before booting
|
||||
service run-parts /sbin/bb/busybox run-parts /system/etc/init.d
|
||||
class main
|
||||
oneshot
|
||||
@@ -0,0 +1,5 @@
|
||||
# SuperSU daemonsu
|
||||
service daemonsu /system/xbin/daemonsu --auto-daemon
|
||||
user root
|
||||
group root
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# SuperSU daemonsu
|
||||
service daemonsu /system/xbin/daemonsu --auto-daemon
|
||||
user root
|
||||
group root
|
||||
|
||||
# Superuser su_daemon
|
||||
service su_daemon /system/xbin/su --daemon
|
||||
oneshot
|
||||
|
||||
on property:persist.sys.root_access=0
|
||||
stop su_daemon
|
||||
|
||||
on property:persist.sys.root_access=2
|
||||
stop su_daemon
|
||||
|
||||
on property:persist.sys.root_access=1
|
||||
start su_daemon
|
||||
|
||||
on property:persist.sys.root_access=3
|
||||
start su_daemon
|
||||
@@ -0,0 +1,5 @@
|
||||
service dvbootscript /sbin/dvbootscript.sh
|
||||
class main
|
||||
user root
|
||||
group root
|
||||
oneshot
|
||||
Executable
BIN
Binary file not shown.
Executable
+146
@@ -0,0 +1,146 @@
|
||||
#!/system/bin/sh
|
||||
# portions from franciscofranco, ak, boype & osm0sis + Franco's Dev Team
|
||||
|
||||
# custom busybox installation shortcut
|
||||
bb=/sbin/bb/busybox;
|
||||
|
||||
# disable sysctl.conf to prevent ROM interference with tunables
|
||||
$bb mount -o rw,remount /system;
|
||||
$bb [ -e /system/etc/sysctl.conf ] && $bb mv -f /system/etc/sysctl.conf /system/etc/sysctl.conf.dvbak;
|
||||
|
||||
# disable the PowerHAL since there is now a kernel-side touch boost implemented
|
||||
$bb [ -e /system/lib/hw/power.tuna.so.dvbak ] || $bb cp /system/lib/hw/power.tuna.so /system/lib/hw/power.tuna.so.dvbak;
|
||||
$bb [ -e /system/lib/hw/power.tuna.so ] && $bb rm -f /system/lib/hw/power.tuna.so;
|
||||
|
||||
# backup and replace Host AP Daemon for working Wi-Fi tether on 3.4 kernel Wi-Fi drivers
|
||||
$bb [ -e /system/bin/hostapd.dvbak ] || $bb cp /system/bin/hostapd /system/bin/hostapd.dvbak;
|
||||
$bb cp -f /sbin/hostapd /system/bin/;
|
||||
$bb chown root.shell /system/bin/hostapd;
|
||||
$bb chmod 755 /system/bin/hostapd;
|
||||
|
||||
# backup and replace Media Codec Profiles if on SR builds, restore if not, and push init.d script for other kernels
|
||||
case `uname -r` in
|
||||
*DirtyV-SR|*SmittyV)
|
||||
$bb [ -e /system/etc/media_profiles.xml.dvbak ] || $bb cp /system/etc/media_profiles.xml /system/etc/media_profiles.xml.dvbak;
|
||||
$bb cp -f /sbin/media_profiles.xml /system/etc/;
|
||||
$bb chmod 644 /system/etc/media_profiles.xml;;
|
||||
*)
|
||||
$bb [ -e /system/etc/media_profiles.xml.dvbak ] && $bb mv -f /system/etc/media_profiles.xml.dvbak /system/etc/media_profiles.xml;
|
||||
$bb chmod 644 /system/etc/media_profiles.xml;;
|
||||
esac;
|
||||
$bb cp -f /sbin/dvmediarevert /system/etc/init.d/;
|
||||
$bb chmod 755 /system/etc/init.d/dvmediarevert;
|
||||
|
||||
# create and set permissions for /system/etc/init.d if it doesn't already exist
|
||||
if [ ! -e /system/etc/init.d ]; then
|
||||
$bb mkdir /system/etc/init.d;
|
||||
$bb chown -R root.root /system/etc/init.d;
|
||||
$bb chmod -R 755 /system/etc/init.d;
|
||||
fi;
|
||||
$bb mount -o ro,remount /system;
|
||||
|
||||
# fix permissions for any included governors (and older underlying ramdisks)
|
||||
governor=reset;
|
||||
while sleep 1; do
|
||||
current=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor`;
|
||||
if [ $governor != $current ]; then
|
||||
governor=$current;
|
||||
for i in /sys/devices/system/cpu/cpufreq/*; do
|
||||
$bb chown system:system $i/*;
|
||||
$bb chmod 664 $i/*;
|
||||
done;
|
||||
fi;
|
||||
done&
|
||||
|
||||
# disable debugging
|
||||
echo 0 > /sys/module/wakelock/parameters/debug_mask;
|
||||
echo 0 > /sys/module/userwakelock/parameters/debug_mask;
|
||||
echo 0 > /sys/module/earlysuspend/parameters/debug_mask;
|
||||
echo 0 > /sys/module/alarm/parameters/debug_mask;
|
||||
echo 0 > /sys/module/alarm_dev/parameters/debug_mask;
|
||||
echo 0 > /sys/module/binder/parameters/debug_mask;
|
||||
|
||||
# suitable configuration to help reduce network latency
|
||||
echo 2 > /proc/sys/net/ipv4/tcp_ecn;
|
||||
echo 1 > /proc/sys/net/ipv4/tcp_sack;
|
||||
echo 1 > /proc/sys/net/ipv4/tcp_dsack;
|
||||
echo 1 > /proc/sys/net/ipv4/tcp_low_latency;
|
||||
echo 1 > /proc/sys/net/ipv4/tcp_timestamps;
|
||||
|
||||
# reduce txqueuelen to 0 to switch from a packet queue to a byte one
|
||||
for i in /sys/class/net/*; do
|
||||
echo 0 > $i/tx_queue_len;
|
||||
done;
|
||||
|
||||
# initialize timer slack
|
||||
echo 100000000 > /dev/cpuctl/apps/bg_non_interactive/timer_slack.min_slack_ns;
|
||||
|
||||
# decrease fs lease time
|
||||
echo 10 > /proc/sys/fs/lease-break-time;
|
||||
|
||||
# tweak for slightly larger kernel entropy pool
|
||||
echo 128 > /proc/sys/kernel/random/read_wakeup_threshold;
|
||||
echo 256 > /proc/sys/kernel/random/write_wakeup_threshold;
|
||||
|
||||
# disable ASLR
|
||||
echo 0 > /proc/sys/kernel/randomize_va_space;
|
||||
|
||||
# double the default minfree kb
|
||||
echo 2884 > /proc/sys/vm/min_free_kbytes;
|
||||
|
||||
# general queue tweaks
|
||||
for i in /sys/block/*/queue; do
|
||||
echo 512 > $i/nr_requests;
|
||||
echo 512 > $i/read_ahead_kb;
|
||||
echo 2 > $i/rq_affinity;
|
||||
echo 0 > $i/nomerges;
|
||||
echo 0 > $i/add_random;
|
||||
echo 0 > $i/rotational;
|
||||
done;
|
||||
|
||||
# remount sysfs+sdcard with noatime,nodiratime since that's all they accept
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto /;
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto /proc;
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto /sys;
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto /sys/kernel/debug;
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto /mnt/shell/emulated;
|
||||
for i in /storage/emulated/*; do
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto $i;
|
||||
$bb mount -o remount,nosuid,nodev,noatime,nodiratime -t auto $i/Android/obb;
|
||||
done;
|
||||
|
||||
# lmk tweaks for fewer empty background processes
|
||||
minfree=6144,8192,12288,16384,24576,40960;
|
||||
lmk=/sys/module/lowmemorykiller/parameters/minfree;
|
||||
minboot=`cat $lmk`;
|
||||
while sleep 1; do
|
||||
if [ `cat $lmk` != $minboot ]; then
|
||||
[ `cat $lmk` != $minfree ] && echo $minfree > $lmk || exit;
|
||||
fi;
|
||||
done&
|
||||
|
||||
# wait for systemui and increase its priority
|
||||
while sleep 1; do
|
||||
if [ `$bb pidof com.android.systemui` ]; then
|
||||
systemui=`$bb pidof com.android.systemui`;
|
||||
$bb renice -18 $systemui;
|
||||
$bb echo -17 > /proc/$systemui/oom_adj;
|
||||
$bb chmod 100 /proc/$systemui/oom_adj;
|
||||
exit;
|
||||
fi;
|
||||
done&
|
||||
|
||||
# lmk whitelist for common launchers and increase launcher priority
|
||||
list="com.android.launcher com.google.android.googlequicksearchbox org.adw.launcher org.adwfreak.launcher net.alamoapps.launcher com.anddoes.launcher com.android.lmt com.chrislacy.actionlauncher.pro com.cyanogenmod.trebuchet com.gau.go.launcherex com.gtp.nextlauncher com.miui.mihome2 com.mobint.hololauncher com.mobint.hololauncher.hd com.qihoo360.launcher com.teslacoilsw.launcher com.tsf.shell org.zeam";
|
||||
while sleep 60; do
|
||||
for class in $list; do
|
||||
if [ `$bb pgrep $class | head -n 1` ]; then
|
||||
launcher=`$bb pgrep $class`;
|
||||
$bb echo -17 > /proc/$launcher/oom_adj;
|
||||
$bb chmod 100 /proc/$launcher/oom_adj;
|
||||
$bb renice -18 $launcher;
|
||||
fi;
|
||||
done;
|
||||
exit;
|
||||
done&
|
||||
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/system/bin/sh
|
||||
# chmod -R 755 /system/etc/init.d
|
||||
# osm0sis @ xda-developers
|
||||
|
||||
# restore media_profiles.xml, power.tuna.so and hostapd if switching to another kernel from DirtyV
|
||||
busybox mount -o rw,remount /system;
|
||||
case `uname -r` in
|
||||
*DirtyV*|*SmittyV) ;;
|
||||
*) [ -e /system/etc/media_profiles.xml.dvbak ] && mv /system/etc/media_profiles.xml.dvbak /system/etc/media_profiles.xml;
|
||||
[ -e /system/lib/hw/power.tuna.so.dvbak ] && mv /system/lib/hw/power.tuna.so.dvbak /system/lib/hw/power.tuna.so;
|
||||
[ -e /system/bin/hostapd.dvbak ] && mv /system/bin/hostapd.dvbak /system/bin/hostapd;
|
||||
[ -e /system/etc/media_profiles.xml.dvbak -o -e /system/lib/hw/power.tuna.so.dvbak -o -e /system/bin/hostapd.dvbak ] || rm -f /system/etc/init.d/dvmediarevert;
|
||||
chmod 644 /system/etc/media_profiles.xml /system/lib/hw/power.tuna.so;
|
||||
chmod 755 /system/bin/hostapd;;
|
||||
esac;
|
||||
busybox mount -o ro,remount /system;
|
||||
|
||||
Executable
BIN
Binary file not shown.
@@ -0,0 +1,431 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE MediaSettings [
|
||||
<!ELEMENT MediaSettings (CamcorderProfiles,
|
||||
EncoderOutputFileFormat+,
|
||||
VideoEncoderCap+,
|
||||
AudioEncoderCap+,
|
||||
VideoDecoderCap,
|
||||
AudioDecoderCap)>
|
||||
<!ELEMENT CamcorderProfiles (EncoderProfile+, ImageEncoding+, ImageDecoding, Camera)>
|
||||
<!ELEMENT EncoderProfile (Video, Audio)>
|
||||
<!ATTLIST EncoderProfile quality (high|low) #REQUIRED>
|
||||
<!ATTLIST EncoderProfile fileFormat (mp4|3gp) #REQUIRED>
|
||||
<!ATTLIST EncoderProfile duration (30|60) #REQUIRED>
|
||||
<!ATTLIST EncoderProfile cameraId (0|1) #REQUIRED>
|
||||
<!ELEMENT Video EMPTY>
|
||||
<!ATTLIST Video codec (h264|h263|m4v) #REQUIRED>
|
||||
<!ATTLIST Video bitRate CDATA #REQUIRED>
|
||||
<!ATTLIST Video width CDATA #REQUIRED>
|
||||
<!ATTLIST Video height CDATA #REQUIRED>
|
||||
<!ATTLIST Video frameRate CDATA #REQUIRED>
|
||||
<!ELEMENT Audio EMPTY>
|
||||
<!ATTLIST Audio codec (amrnb|amrwb|aac) #REQUIRED>
|
||||
<!ATTLIST Audio bitRate CDATA #REQUIRED>
|
||||
<!ATTLIST Audio sampleRate CDATA #REQUIRED>
|
||||
<!ATTLIST Audio channels (1|2) #REQUIRED>
|
||||
<!ELEMENT ImageEncoding EMPTY>
|
||||
<!ATTLIST ImageEncoding quality (90|80|70|60|50|40) #REQUIRED>
|
||||
<!ELEMENT ImageDecoding EMPTY>
|
||||
<!ATTLIST ImageDecoding memCap CDATA #REQUIRED>
|
||||
<!ELEMENT Camera EMPTY>
|
||||
<!ELEMENT EncoderOutputFileFormat EMPTY>
|
||||
<!ATTLIST EncoderOutputFileFormat name (mp4|3gp) #REQUIRED>
|
||||
<!ELEMENT VideoEncoderCap EMPTY>
|
||||
<!ATTLIST VideoEncoderCap name (h264|h263|m4v|wmv) #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap enabled (true|false) #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap minBitRate CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap maxBitRate CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap minFrameWidth CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap maxFrameWidth CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap minFrameHeight CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap maxFrameHeight CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap minFrameRate CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEncoderCap maxFrameRate CDATA #REQUIRED>
|
||||
<!ELEMENT AudioEncoderCap EMPTY>
|
||||
<!ATTLIST AudioEncoderCap name (amrnb|amrwb|aac|heaac|aaceld|wma) #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap enabled (true|false) #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap minBitRate CDATA #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap maxBitRate CDATA #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap minSampleRate CDATA #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap maxSampleRate CDATA #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap minChannels (1|2) #REQUIRED>
|
||||
<!ATTLIST AudioEncoderCap maxChannels (1|2) #REQUIRED>
|
||||
<!ELEMENT VideoDecoderCap EMPTY>
|
||||
<!ATTLIST VideoDecoderCap name (wmv) #REQUIRED>
|
||||
<!ATTLIST VideoDecoderCap enabled (true|false) #REQUIRED>
|
||||
<!ELEMENT AudioDecoderCap EMPTY>
|
||||
<!ATTLIST AudioDecoderCap name (wma) #REQUIRED>
|
||||
<!ATTLIST AudioDecoderCap enabled (true|false) #REQUIRED>
|
||||
<!ELEMENT VideoEditorCap EMPTY>
|
||||
<!ATTLIST VideoEditorCap maxInputFrameWidth CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEditorCap maxInputFrameHeight CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEditorCap maxOutputFrameWidth CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEditorCap maxOutputFrameHeight CDATA #REQUIRED>
|
||||
<!ATTLIST VideoEditorCap maxPrefetchYUVFrames CDATA #REQUIRED>
|
||||
<!ELEMENT ExportVideoProfile EMPTY>
|
||||
<!ATTLIST ExportVideoProfile name (h264|h263|m4v) #REQUIRED>
|
||||
<!ATTLIST ExportVideoProfile profile CDATA #REQUIRED>
|
||||
<!ATTLIST ExportVideoProfile level CDATA #REQUIRED>
|
||||
]>
|
||||
<!--
|
||||
This file is used to declare the multimedia profiles and capabilities
|
||||
on an android-powered device.
|
||||
-->
|
||||
<MediaSettings>
|
||||
<!-- Each camcorder profile defines a set of predefined configuration parameters -->
|
||||
<CamcorderProfiles cameraId="0">
|
||||
|
||||
<EncoderProfile quality="qvga" fileFormat="3gp" duration="60">
|
||||
<Video codec="m4v"
|
||||
bitRate="128000"
|
||||
width="320"
|
||||
height="240"
|
||||
frameRate="15" />
|
||||
<Audio codec="amrnb"
|
||||
bitRate="12200"
|
||||
sampleRate="8000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="cif" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="1200000"
|
||||
width="352"
|
||||
height="288"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="480p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="5000000"
|
||||
width="720"
|
||||
height="480"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="720p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="8000000"
|
||||
width="1280"
|
||||
height="720"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<!--
|
||||
<EncoderProfile quality="1080p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="12000000"
|
||||
width="1920"
|
||||
height="1080"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
-->
|
||||
|
||||
<EncoderProfile quality="timelapseqvga" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="192000"
|
||||
width="320"
|
||||
height="240"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="amrnb"
|
||||
bitRate="12200"
|
||||
sampleRate="8000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapsecif" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="1200000"
|
||||
width="352"
|
||||
height="288"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="5000000"
|
||||
width="720"
|
||||
height="480"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="8000000"
|
||||
width="1280"
|
||||
height="720"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<!--
|
||||
<EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="12000000"
|
||||
width="1920"
|
||||
height="1080"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
-->
|
||||
|
||||
<ImageEncoding quality="95" />
|
||||
<ImageEncoding quality="80" />
|
||||
<ImageEncoding quality="70" />
|
||||
<ImageDecoding memCap="20000000" />
|
||||
|
||||
</CamcorderProfiles>
|
||||
|
||||
<CamcorderProfiles cameraId="1">
|
||||
|
||||
<EncoderProfile quality="qvga" fileFormat="3gp" duration="60">
|
||||
<Video codec="m4v"
|
||||
bitRate="128000"
|
||||
width="320"
|
||||
height="240"
|
||||
frameRate="15" />
|
||||
<Audio codec="amrnb"
|
||||
bitRate="12200"
|
||||
sampleRate="8000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="cif" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="1200000"
|
||||
width="352"
|
||||
height="288"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="480p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="5000000"
|
||||
width="720"
|
||||
height="480"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="720p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="8000000"
|
||||
width="1280"
|
||||
height="720"
|
||||
frameRate="30" />
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapseqvga" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="192000"
|
||||
width="320"
|
||||
height="240"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="amrnb"
|
||||
bitRate="12200"
|
||||
sampleRate="8000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapsecif" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="1200000"
|
||||
width="352"
|
||||
height="288"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="5000000"
|
||||
width="720"
|
||||
height="480"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="30">
|
||||
<Video codec="h264"
|
||||
bitRate="8000000"
|
||||
width="1280"
|
||||
height="720"
|
||||
frameRate="30" />
|
||||
<!-- audio setting is ignored -->
|
||||
<Audio codec="aac"
|
||||
bitRate="96000"
|
||||
sampleRate="48000"
|
||||
channels="1" />
|
||||
</EncoderProfile>
|
||||
|
||||
<ImageEncoding quality="95" />
|
||||
<ImageEncoding quality="80" />
|
||||
<ImageEncoding quality="70" />
|
||||
<ImageDecoding memCap="20000000" />
|
||||
|
||||
</CamcorderProfiles>
|
||||
|
||||
<EncoderOutputFileFormat name="3gp" />
|
||||
<EncoderOutputFileFormat name="mp4" />
|
||||
|
||||
<!--
|
||||
If a codec is not enabled, it is invisible to the applications
|
||||
In other words, the applications won't be able to use the codec
|
||||
or query the capabilities of the codec at all if it is disabled
|
||||
-->
|
||||
<VideoEncoderCap name="h264" enabled="true"
|
||||
minBitRate="64000" maxBitRate="12000000"
|
||||
minFrameWidth="176" maxFrameWidth="1920"
|
||||
minFrameHeight="144" maxFrameHeight="1080"
|
||||
minFrameRate="15" maxFrameRate="30" />
|
||||
|
||||
<VideoEncoderCap name="h263" enabled="true"
|
||||
minBitRate="64000" maxBitRate="4000000"
|
||||
minFrameWidth="176" maxFrameWidth="1920"
|
||||
minFrameHeight="144" maxFrameHeight="1080"
|
||||
minFrameRate="15" maxFrameRate="30" />
|
||||
|
||||
<VideoEncoderCap name="m4v" enabled="true"
|
||||
minBitRate="64000" maxBitRate="4000000"
|
||||
minFrameWidth="176" maxFrameWidth="1920"
|
||||
minFrameHeight="144" maxFrameHeight="1080"
|
||||
minFrameRate="15" maxFrameRate="30" />
|
||||
|
||||
<AudioEncoderCap name="aac" enabled="true"
|
||||
minBitRate="758" maxBitRate="288000"
|
||||
minSampleRate="8000" maxSampleRate="48000"
|
||||
minChannels="1" maxChannels="1" />
|
||||
|
||||
<AudioEncoderCap name="heaac" enabled="true"
|
||||
minBitRate="8000" maxBitRate="64000"
|
||||
minSampleRate="16000" maxSampleRate="48000"
|
||||
minChannels="1" maxChannels="1" />
|
||||
|
||||
<AudioEncoderCap name="aaceld" enabled="true"
|
||||
minBitRate="16000" maxBitRate="192000"
|
||||
minSampleRate="16000" maxSampleRate="48000"
|
||||
minChannels="1" maxChannels="1" />
|
||||
|
||||
<AudioEncoderCap name="amrwb" enabled="true"
|
||||
minBitRate="6600" maxBitRate="23050"
|
||||
minSampleRate="16000" maxSampleRate="16000"
|
||||
minChannels="1" maxChannels="1" />
|
||||
|
||||
<AudioEncoderCap name="amrnb" enabled="true"
|
||||
minBitRate="4750" maxBitRate="12200"
|
||||
minSampleRate="8000" maxSampleRate="8000"
|
||||
minChannels="1" maxChannels="1" />
|
||||
|
||||
<!--
|
||||
FIXME:
|
||||
We do not check decoder capabilities at present
|
||||
At present, we only check whether windows media is visible
|
||||
for TEST applications. For other applications, we do
|
||||
not perform any checks at all.
|
||||
-->
|
||||
<VideoDecoderCap name="wmv" enabled="false"/>
|
||||
<AudioDecoderCap name="wma" enabled="false"/>
|
||||
|
||||
<!--
|
||||
The VideoEditor Capability configuration:
|
||||
- maxInputFrameWidth: maximum video width of imported video clip.
|
||||
- maxInputFrameHeight: maximum video height of imported video clip.
|
||||
- maxOutputFrameWidth: maximum video width of exported video clip.
|
||||
- maxOutputFrameHeight: maximum video height of exported video clip.
|
||||
- maxPrefetchYUVFrames: maximum prefetch YUV frames for encoder,
|
||||
used to limit the amount of memory for prefetched YUV frames.
|
||||
For this platform, it allows maximum 30MB(3MB per 1080p frame x 10
|
||||
frames) memory.
|
||||
-->
|
||||
<VideoEditorCap maxInputFrameWidth="1920"
|
||||
maxInputFrameHeight="1080" maxOutputFrameWidth="1920"
|
||||
maxOutputFrameHeight="1080" maxPrefetchYUVFrames="10"/>
|
||||
<!--
|
||||
The VideoEditor Export codec profile and level values
|
||||
correspond to the values in OMX_Video.h.
|
||||
E.g. for h264, profile value 1 means OMX_VIDEO_AVCProfileBaseline
|
||||
and level 4096 means OMX_VIDEO_AVCLevel41.
|
||||
Please note that the values are in decimal.
|
||||
These values are for video encoder.
|
||||
-->
|
||||
<!--
|
||||
Codec = h.264, Baseline profile, level 4.1
|
||||
-->
|
||||
<ExportVideoProfile name="h264" profile= "1" level="4096"/>
|
||||
<!--
|
||||
Codec = h.263, Baseline profile, level 0
|
||||
-->
|
||||
<ExportVideoProfile name="h263" profile= "1" level="1"/>
|
||||
<!--
|
||||
Codec = mpeg4, Simple profile, level 5
|
||||
-->
|
||||
<ExportVideoProfile name="m4v" profile= "1" level="128"/>
|
||||
</MediaSettings>
|
||||
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user