рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдмреЙрд▓ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕реИрдорд╕рдВрдЧ рдЧреИрд▓реЗрдХреНрд╕реА рдЯреИрдм рдкреНрд░реЛ 10.1 рдПрд▓рдЯреАрдИ рдПрд╕рдПрдо-рдЯреА 525 рдЯреИрдмрд▓реЗрдЯ рдЦрд░реАрджрд╛ рдФрд░ рдШрд░ рдкрд░ рд╕рд╛рдВрдмрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдЙрд╕ рдкрд░ рдлрд┐рд▓реНрдореЗрдВ рдФрд░ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд░реНрдиреЗрд▓ рдХреЛ CIFS рд╕рдорд░реНрдерди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рди рдХреЗрд╡рд▓ ... рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 4.2 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдпрд╣ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдмрди рдЧрдпрд╛ред



1. рдХрд╕реНрдЯрдо рдорд╛рдЙрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░



рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 4.2 рдХреЗ рдмрд╛рдж рд╕реЗ, Adnroid рдиреЗ рдмрд╣реБ-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рднреА рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕрдм рд╕реНрд▓реЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдШреБрдбрд╝рд╕рд╡рд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

Android Dalvik рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 4.2 рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб vm / Init.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:

if (mount("rootfs", "/", NULL, (MS_SLAVE | MS_REC), NULL) == -1) { SLOGE("Failed to mount() rootfs as MS_SLAVE: %s", strerror(errno)); return -1; }
      
      







рдпрд╣ рдХреЛрдб MS_SLAVE рдФрд░ MS_REC рдЭрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд░реВрдЯ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ / рдХреЗ рдЕрдВрджрд░ рдШреБрдбрд╝рд╕рд╡рд╛рд░ filesystems рднреА MS_SLAVE рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЙрдирдХреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, do_mount рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЪ mkasick рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ xda- рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 --- kernel_orig/fs/namespace.c 2014-01-23 15:34:18.000000000 +1100 +++ kernel/fs/namespace.c 2014-04-11 15:18:22.258114000 +1100 @@ -2141,6 +2141,21 @@ if (data_page) ((char *)data_page)[PAGE_SIZE - 1] = 0; +#ifdef CONFIG_RESTRICT_ROOTFS_SLAVE + /* Check if this is an attempt to mark "/" as recursive-slave. */ + if (strcmp(dir_name, "/") == 0 && flags == (MS_SLAVE | MS_REC)) { + static const char storage[] = "/storage"; + long res; + /* Mark /storage as recursive-slave instead. */ + if ((res = do_mount(NULL, (char *)storage, NULL, (MS_SLAVE | MS_REC), NULL)) == 0) { + return 0; + } else { + pr_warn("Failed to mount %s as MS_SLAVE: %ld\n", storage, res); + } + /* Fallback: Mark rootfs as recursive-slave as requested. */ + } +#endif + /* ... and get the mountpoint */ retval = kern_path(dir_name, LOOKUP_FOLLOW, &path); if (retval)
      
      





рдкреИрдЪ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо MS_SVALE рдФрд░ MS_REC рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде / do_mount рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддреЗред рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП, рдпреЗ рдЭрдВрдбреЗ рдХрд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо / рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдореЗрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдмреВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо do_mount (NULL, (char *) рд╕реНрдЯреЛрд░реЗрдЬ, NULL, (MS_SLAVEред (MS_REC), NULL)) == 0) рдХрд╣рддреЗ рд╣реИрдВред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, / рд╕реНрдЯреЛрд░реЗрдЬ рдПрдХ рдорд╛рдЙрдВрдЯ рдкреЙрдЗрдВрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА, рдЗрд╕рд▓рд┐рдП init.rc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░реИрдордбрд┐рд╕реНрдХ рдЬрд╣рд╛рдБ / рд╕реНрдЯреЛрд░реЗрдЬ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЖрдкрдХреЛ рд╡рд╣рд╛рдБ tmpfs рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

 mkdir /storage 0050 root sdcard_r mount tmpfs tmpfs /storage mode=0050,uid=0,gid=1028
      
      





рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП / рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рдмрд╛рд╣рд░ рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред



2. рдХрд░реНрдиреЗрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ CIFS рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: cifs рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдпрд╛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ cifs рд╕рдорд░реНрдерди рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝реЗрдВред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирдП рдХрд░реНрдиреЗрд▓ рдХреЛ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╡рд╛рд░рдВрдЯреА рдХреЛ рдЦреЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рдЯреИрдмрд▓реЗрдЯ рдХрд╛ рдХреЛрд░ рдмрд┐рдирд╛ рдореЙрдбреНрдпреВрд▓ рд╕рдкреЛрд░реНрдЯ рдХреЗ рдЕрд╕реЗрдВрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирдП рдХрд░реНрдиреЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдФрд░ рдлреНрд▓реИрд╢ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд░реНрдиреЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

рдХ) рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди

b) рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд, рд╕реИрдорд╕рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдБ рд╕реЗ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ редource.samsung.com

рд╕реА) рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЯреВрд▓рдЪреИрди, рдпрд╣рд╛рдВ рдбреЗрд╡рд▓рдкрд░ .android.com/tools/sdk/ndk/index.html рд▓реЗ рдЬрд╛рдПрдВ

рдХрд░реНрдиреЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, ~ / android рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ, рдФрд░ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХрд░реНрдиреЗрд▓, android-ndk рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ android-ndk-r9 рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░реЗрдВред

 mkdir ~/android cd ~/android tar xjf android-ndk-r9d-linux-x86_64.tar.bz2 unzip SM-T525_SEA_KK_Opensource.zip mkdir kernel cd kernel tar xzf ../Kernel.tar.gz
      
      





рдЕрдм рдЦрд╛рд▓реА рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░реЗрдВ

shared_rootfs.patch
 --- kernel_orig/fs/namespace.c 2014-01-23 15:34:18.000000000 +1100 +++ kernel/fs/namespace.c 2014-04-11 15:18:22.258114000 +1100 @@ -2141,6 +2141,21 @@ if (data_page) ((char *)data_page)[PAGE_SIZE - 1] = 0; +#ifdef CONFIG_RESTRICT_ROOTFS_SLAVE + /* Check if this is an attempt to mark "/" as recursive-slave. */ + if (strcmp(dir_name, "/") == 0 && flags == (MS_SLAVE | MS_REC)) { + static const char storage[] = "/storage"; + long res; + /* Mark /storage as recursive-slave instead. */ + if ((res = do_mount(NULL, (char *)storage, NULL, (MS_SLAVE | MS_REC), NULL)) == 0) { + return 0; + } else { + pr_warn("Failed to mount %s as MS_SLAVE: %ld\n", storage, res); + } + /* Fallback: Mark rootfs as recursive-slave as requested. */ + } +#endif + /* ... and get the mountpoint */ retval = kern_path(dir_name, LOOKUP_FOLLOW, &path); if (retval) --- kernel_orig/fs/Kconfig 2014-01-23 15:34:17.000000000 +1100 +++ kernel/fs/Kconfig 2014-04-10 19:29:30.990114000 +1100 @@ -292,4 +292,29 @@ source "fs/nls/Kconfig" source "fs/dlm/Kconfig" +config RESTRICT_ROOTFS_SLAVE + bool "Android: Restrict rootfs slave mountspace to /storage" + help + Restrict slave mountspace so Dalvik apps can mount system-wide volumes + + Android 4.2 implements multi-user storage using per-process mount + namespaces. Everything under "/" (the entire filesystem hierarchy) is + marked as a recursive-slave mountspace for all zygote instances. This is + done so that user-storage sandbox mounts under /storage/emulated are hidden + from other apps and users. Unfortunately this means that any Dalvik app + (actually, any program whose clone/fork ancestry includes a Dalvik zygote, + which is everything except services spawned directly from init) cannot + mount system-wide volumes. + + This option restricts rootfs-slave calls to /storage (and + /mnt/shell/emulated) so that Dalvik apps can mount system-wide volumes + elsewhere (with appropriate permission, as in earlier versions of Android), + while retaining full multi-user storage compatibility. It is made + available as a kernel-based workaround for instances where libdvm can not + be modified. + + This option requires that a tmpfs volume is mounted as /storage in + Android init.rc. If this volume is unavailable, then we fall back to the + previous behavior of marking the entire filesystem hierarchy as slave. + endmenu
      
      







 patch -p1 < shared_rootfs.patch
      
      





рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░реЗ рд╕реИрдорд╕рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 export CROSS_COMPILE="~/android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" export ARCH="arm" make mrproper make VARIANT_DEFCONFIG=msm8974_sec_picassoeur_defconfig msm8974_sec_defconfig SELINUX_DEFCONFIG=selinux_defconfig
      
      





рдпрд╣ рдХрдорд╛рдВрдб рдПрдХ .config рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧреА, рдлрд┐рд░ рдЖрдкрдХреЛ рдореЗрдиреБрдХреЛрдирдлрд┐рдЧ рдХрдорд╛рдВрдб рдмрдирд╛рдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ -> рдиреЗрдЯрд╡рд░реНрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕрдиреБрднрд╛рдЧ рдФрд░ CIFS рд╕рдорд░реНрдерди рдЖрдЗрдЯрдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд┐рдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрддреНрд░ M рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ) рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕрдиреБрднрд╛рдЧ рдореЗрдВ RESTRICT_ROOTFS_SLAVE рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред



рдЕрдЧрд▓рд╛, Esc рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд╣реЗрдЬреЗрдВред рдЕрдм рд╣рдо рдХрдорд╛рдВрдб рдореЗрдХ -j3 рдХреЗ рд╕рд╛рде рдХрд░реНрдиреЗрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ (рд╕рдВрдЦреНрдпрд╛ 3 рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ + 1 рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ)

рдпрд╣ рдХрд░реНрдиреЗрд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред



3. рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП boot.img рдмрдирд╛рдПрдБ



рдЕрдм рдЖрдкрдХреЛ рдЯреЗрдмрд▓реЗрдЯ рдореЗрдВ рдирдП рдХрд░реНрдиреЗрд▓ рдХреЛ рдлреНрд▓реИрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ boot.img рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреНрд╡рд╛рд▓рдХреЙрдо рдЪрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓, рд░реИрдордбрд┐рд╕реНрдХ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдореВрд▓ рд░реИрдордбрд┐рд╕реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдореВрд▓ рдлрд░реНрдорд╡реЗрдпрд░ (рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рд░ рд╣реИ) рдХреЛ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ boot.img рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

 tar xf T525XXUANB2_T525SERANA6_T525XXUANA7_HOME.tar.md5 boot.img
      
      





Boot.img рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ bootimg_tools рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЗрд╕реЗ ~ / android рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рд╡рд┐рднрд╛рдЬрди_рдмреВрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде boot.img рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ

 mkdir ~/adndroid/bootimg_tools cd ~/adnroid/bootimg_tools unzip ../bootimg_tools_7.8.13.zip ./split_boot ../boot.img
      
      





рдФрд░ рдмреВрдЯ / рд░реИрдордбрд┐рд╕реНрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЕрдирдкреИрдХреНрдб рд░реИрдордбрд┐рд╕реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдЕрдм рдЖрдкрдХреЛ рд╕реЗрд▓рд┐рдирдХреНрд╕ рдХреЛ рдЕрдиреБрдореЗрдп рдореЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдФрд░ tmpfs рдХреЛ рдорд╛рдЙрдВрдЯ / рд╕реНрдЯреЛрд░реЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдордбрд┐рд╕реНрдХ рдореЗрдВ рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

Init.rc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд▓рд╛рдЗрди setsebool рдбреАрдмрдЧрдлрд╝ 1 рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрджрд▓реЗрдВ

 setsebool debugfs 0 setenforce 0
      
      





рдЕрдЧрд▓рд╛, рд▓рд╛рдЗрди рд╕реЗрдЯрдкреНрд░реЙрдк selinux.reload_policy 1 рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕реЗ setprop selinux.reload_policy 0 рдореЗрдВ рдмрджрд▓реЗрдВред

Tmpfs рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЙрдВрдЯ / рд╕реНрдЯреЛрд░реЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди mkdir / рд╕реНрдЯреЛрд░реЗрдЬ 0751 рд░реВрдЯ sdcard_r рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рдЬреЛрдбрд╝реЗрдВ

 mount tmpfs tmpfs /storage mode=0050,uid=0,gid=1028
      
      





рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдлрд╛рдЗрд▓ рдореЗрдВ defaul.prop, ro.secure = 1 рдХреЛ ro.secure = 0 рдФрд░ ro.adb.secure = 1 рд╕реЗ ro.adb.secure = 0 рдореЗрдВ рдмрджрд▓реЗрдВред



рдЕрдм рд╡рд╛рдкрд╕ рд░реИрдордбрд┐рд╕реНрдХ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ

 ./repack_ramdisk boot/ramdisk ramdisk.cpio.gz cp boot/ramdisk.cpio.gz ~/android/kernel
      
      





рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрднреА рднреА dt.img рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ dtbTool рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдЖрддрд╛ рд╣реИ

 cd ~/android/kernel ./tools/dtbTool -o dt.img -s 2048 -p ./scripts/dtc/ ./arch/arm/boot/
      
      





рдЕрдм рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ boot.img рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рд╣рдо mkbootimg рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд╕реЗрдВрдмрд▓реА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рднреА рдЖрддрд╛ рд╣реИ)

 ./tools/mkbootimg --kernel ./arch/arm/boot/zImage --ramdisk ramdisk.cpio.gz --cmdline 'console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3' --base 0x00000000 --pagesize 2048 --ramdisk_offset 0x02000000 --tags_offset 0x01E00000 --dt dt.img -o boot.img
      
      





рд╕рдм рдХреБрдЫ, boot.img рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕реЗ рдУрдбрд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рд╕реЗ boot.tar.md5 рдмрдирд╛рдПрдВ

 tar -H ustar -c boot.img > boot.tar md5sum -t boot.tar >> boot.tar mv boot.tar boot.tar.md5
      
      





рдЕрдм рдЗрд╕реЗ рдУрдбрд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдордХрддреА рд╣реИ





рд╕реИрдорд╕рдВрдЧ рдкрд░, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдИрдлрд╛рдИ katom рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИ, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рд╡рд░реНрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ build.prop рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдкрдВрдХреНрддрд┐ ro.securestorage.support = ro.securestorage.support = false рдХреЗ рд╕рд╛рде рд╕рд╣реА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛



4. рдмрдврд╝рддреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛



рдЧреЗрдВрдж рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо CifsManager рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ







рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВ:

a) 3.4 рдХрд░реНрдиреЗрд▓ рдкрд░ cifs рдореЗрдВ рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдм рдпрд╣ рдорд╛рдЙрдВрдЯ рдХрдорд╛рдВрдб рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдбрд┐рдЬрд╛рдЗрди рджреЗрдЦреЗрдВ

mount -t cifs //pc/share /mnt



рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдорд╛рдЙрдВрдЯреЗрдб рдмреЙрд▓ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 mount -t cifs -o unc=\\\\pc\\share none /mnt
      
      





рдмреА) рдЕрдм рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рд╣рдо рдЕрдВрджрд░ / рд╕рдВрдЧреНрд░рд╣рдг рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реА рдЧреЗрдВрдж рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╣реЛрдЧреА; рдпрджрд┐ рд╣рдо рдХрд╣реАрдВ рдмрд╛рд╣рд░ / рднрдВрдбрд╛рд░рдг рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕реЗ рдЦреЛрд▓ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдХреЗ рдЕрдВрджрд░ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА / рднрдВрдбрд╛рд░рдг / рдЙрддреНрд╕рд░реНрдЬрд┐рдд / 0 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ / рдбреЗрдЯрд╛ / рдореАрдбрд┐рдпрд╛ / 0 рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ / рд╕рдВрдЧреНрд░рд╣рдг / рдЙрддреНрд╕рд░реНрдЬрд┐рдд / 0 рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╕рд╛ 32 рдЕрдиреБрдХрд░рдг рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ / рдбреЗрдЯрд╛ / рдореАрдбрд┐рдпрд╛ / 0 / cif рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдВрддрд░рд┐рдХ рднрдВрдбрд╛рд░рдг рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рд╣рдорд╛рд░реА рдЧреЗрдВрдж рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЧ) рдЕрднреА рддрдХ рдХрд╣реАрдВ рднреА рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рдХреЛрдИ рдмрд╛рд░реА рд╣реИ, рдорд╛рдЙрдВрдЯ -t cifs рдХрдорд╛рдВрдб рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдореЗрдВ

 mount -t cifs -o unc=\\\\pc\\share,username=user,password=123,sec=ntlmssp none /data/media/0/cifs
      
      





рд╕реЗрдХрдВрдб = ntlmssp рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдЧреЗрдВрдж рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ CifsManager рдореЗрдВ, рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВ, рдФрд░ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд▓рд┐рдЦреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╣реИред

d) рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдореЗрдВ рд░реВрд╕реА рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдк iocharset = utf8 рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛



рдЕрдм CifsManager рдореЗрдВ рдЧреЗрдВрдж рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдирдВрдж рд▓реЗрдВ!



рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

www.ibm.com/developerworks/ru/library/l-mount-namespaces

forum.xda-developers.com/showthread.php?p=36889027

www.netzgewitter.com/2013/10/troubleshoot-cifs-on-android



All Articles