在寻找高版本Android固件的过程中遇到一个Android6.0的固件, 刷上去之后发现没有Root. 因为原发布者设置了收费的QQ群, 固件开机图上就是QQ群号, 满以为交了钱之后应该能有Root教程, 结果完全没有, 还被原发布者踢出群.

于是只能自己Root, 顺便将碍眼的开机图片换掉.

Root需要准备的材料

TTL引线

首先要将TTL连线引出, 这会涉及到焊板子

TTL转USB线

我用的是PL2302芯片的TTL转USB线, 这个在win7和ubuntu下都自带有驱动. 对应的软件Win7下建议用xshell或secureCRT, Ubuntu下建议使用GTKTerm

软件

su和daemonsu: 这个要从同一类型(芯片组), 同一内核版本的已经Root的电视盒子固件上复制. 因为现在R3300L盒子的不同安卓版本其内核都是3.14.29, 所以这两个文件是通用的.

SuperSu 和 RootExplorer: 前者是必须的, 后者可选

Root的过程

Root其实就是要将不带uid限制的su和daemonsu(其实也是su)放到/system/xbin/ 下, 将其权限设为0755, 再运行 /system/xbin/daemonsu --auto-daemon & 命令让daemon运行在后台, 然后在Android界面上运行SuperSU, 让SuperSU完成最后的Root工作, 等SuperSU更新完文件提示重启, Root就完成了.

实际的步骤要复杂一些

  • 首先要通过TTL访问命令行, 这个固件在TTL启动后, 直接是root shell, 所以这一步没什么问题
  • 然后将/system分区挂载为可写, 通过 mount -o rw,remount /system 命令实现
  • 将软件都复制到U盘, 连上盒子之后, 在TTL Shell命令行将su, daemonsu复制到 /system/xbin/ 下, 并修改权限 chmod 0755 su daemonsu
  • 在安卓界面上安装SuperSU, RootExplorer
  • 在TTL Shell命令行运行/system/xbin/daemonsu --auto-daemon &  然后ps检查是否有daemon的进程
  • 在安卓界面运行SuperSU开始Root, 如果前面步骤正确, 这一步SuperSU会提示是否更新文件, 按普通更新即可, 等十几秒后SuperSU会提示完成要重启
  • 重启后就不需要再运行daemonsu了, 直接运行SuperSU检查Root结果

制作自带Root的固件

制作已经Root的固件相对而言就更麻烦一点, 因为要把上面提到的要素都准备好, 并且固件当中可以改的只是 /system 下面的内容, 因为这些在 system分区下, 其他地方的内容是不方便修改的. 这边涉及到的工具主要有linux下的工具 https://github.com/natinusala/linux-amlogic-toolkit  和windows下的解包和打包工具 Amlogic CustomizationTool. 前者的打包存在bug, 所以只用于对system.img进行修改, 后者用于制作最外层的解包打包.

用 linux-amlogic-toolkit 解开的 system 分区会挂载在 output/system/ 目录下, 因为里面都是owner为root的文件, 所以要用sudo进行修改, 将su和daemonsu复制进 xbin目录, 并修改权限为 0755, chown 为 root:2000 (这个根据目录里其他文件的属性进行修改), 然后将前一步中安装好的SuperSU, RootExplorer 的安装目录(在 /data/app) 复制过来, 放到这里的app目录下, 检查并确认权限和owner是否和其他的app一样. 这样文件都准备好了. 还缺一个随开机启动的 daemonsu.

这时候要检查一下运行中的盒子, 看看根目录下的 init.rc 这个文件, 查找service 关键词, 能看到一系列开机启动的服务, 看看其中有没有这条 service ... /system/bin/install-recovery.sh, 这个路径不是固定的, 有些系统放在了 /system/etc/下, 确定位置后, 直接修改(或创建) install-recovery.sh 文件, 写入以下内容

#!/system/bin/sh

# Run SuperSU deamon
/system/xbin/daemonsu --auto-daemon &

.再chmod 0755 将文件属性改为可执行, 这样就都准备好了.

接下来就是再通过 linux-amlogic-toolkit 的recreate 将system分区打包为 system.PARTITION, 然后通过 CustomizationTool 将固件解包(只需要解level1), 将system.PARTITION 替换成新的, 再打包, 一个自带Root的固件就完成了.

在固件刷机完启动后, 在界面上运行SuperSU按提示更新文件, 待更新完文件重启后, 新系统就已经Root了.

TWRP 3.0.2.0 Recovery

可以使用S905X的TWRP作为S905L的recovery, 文件在 https://github.com/botfap/A95X-Linux-BuildEnv/tree/master/recovery

相比系统自带的recovery, TWRP的命令行各种命令是相当完整的, 几乎等价于一个小linux系统. TWRP的使用方式有两种:

  • 格式化一个U盘或TF卡, 我使用的是一张2G的TF卡, 格式化为FAT, 将 twrp-s905x.img-v3.0.2 文件重命名为 recovery.img, 放到TF卡根目录下, 连上盒子, 用reboot update启动
  • 将 twrp-s905x.img-v3.0.2 重命名为 recovery.PARTITION, 直接打包在固件里, 这样系统进入recovery时, 就是TWRP recovery了.

修改Logo和Bootanimation

修改Logo, 直接在linux-amlogic-toolkit 解开的 /output/logo/ 目录中替换 bootup 文件就可以了. 图像文件必须是BMP格式的16bit或者24bit, 不支持8bit(这个试过, 肯定不行), 再recreate 后, 用生成的 logo.PARTITION去打包.

修改bootanimiation, 在 /system/media 下, 替换 bootanimation.zip, 根据Google的格式说明 , 里面分两部分, 一部分是desc.txt, 一部分是包含顺序文件名的png文件的目录.

desc.txt文件格式

# Line1
WIDTH HEIGHT FPS WIDTH: animation width (pixels)
HEIGHT: animation height (pixels)
FPS: frames per second, e.g. 60 # Line 2 ~ N:
TYPE COUNT PAUSE PATH [#RGBHEX [CLOCK1 [CLOCK2]]] TYPE: a single char indicating what type of animation segment this is:
p -- this part will play unless interrupted by the end of the boot
c -- this part will play to completion, no matter what
COUNT: how many times to play the animation, or 0 to loop forever until boot is complete
PAUSE: number of FRAMES to delay after this part ends
PATH: directory in which to find the frames for this part (e.g. part0)

注意目录里的图片不能太多, 最好控制在50张以内, FPS也不能太高, 最好在20以内, WIDTH和HEIGHT设置得不对会导致动画不显示. 另外bootanimation.zip的权限也要设置为0644, 否则系统无法读取, 就会显示默认的ANDROID动画字符.

在Ubuntu下打zip包的命令如下, 用winrar这类工具打包的似乎系统不认.

zip -0qry -i \*.txt \*.png \*.wav @ ../bootanimation.zip *.txt part*

Preinstallapps

在/system/media 目录下还有一个 preinstallapps.tar 文件, 这个是用来在第一次启动时预装app的, 调用在/system/bin/preinstallapps.sh, 由某处 init.*触发. 如果要清理的话最好在rm之后touch一个同名空文件在那里, 避免启动时错误.

TTL Shell

在TTL Shell里可以通过 /system/etc/mkshrc 这个文件执行一些初始化命令, 功能等价于.profile 或者 .bashrc, 在里面绑一些alias.

播放H.265 X265 10bit格式的视频

在运行安卓6的R3300L上, 用最新的VLC 3.2.3, 小白播放器1.2.0都无法正常播放HEVC H.265/X265 10bit的视频, 具体表现为, 如果使用硬解则声音正常显示花屏, 如果使用软解则声音正常显示停滞. MX Player因为没下载到v7a的版本, 所以没法测试. 能完美播放的是SPMC-16.7.4, 下载地址为 https://github.com/koying/SPMC/releases/download/16.7.4-spmc/SPMC-16.7.4-spmc-94d913d-armeabi-v7a.apk 因为SPMC是Kodi的folk, 本身带了播放局域网SMB视频的能力, 所以可以完全取代VLC和小白播放器了.

05-11 23:04