[Linux on m8]第四篇、调试系统
在上一篇文章中有提过,编译出来的内核并不能顺利启动,接下来就是调试,找到文件hybris-boot.img
解包,具体工具可以看我之前关于M8的帖子。
unpackbootimg -i hybris-boot.img
解包出来的文件
hybris-boot.img hybris-boot.img-hash hybris-boot.img-ramdiskoff
hybris-boot.img-base hybris-boot.img-kerneloff hybris-boot.img-secondoff
hybris-boot.img-board hybris-boot.img-pagesize hybris-boot.img-tagsoff
hybris-boot.img-cmdline hybris-boot.img-ramdisk.gz hybris-boot.img-zImage
hybris-boot.img-dtb
下载twrp-3.2.3-1-m8.img
,同样解包,然后替换hybris-boot.img-dtb
和hybris-boot.img-zImage
到twrp-3.2.3-1-m8.img
里面,然后在Bootloader
下面直接启动,能启动成功,说明编译出来的内核是没有问题的,Bootloader
是能直接启动镜像而不需要刷入到boot分区或者recover分区,这样能节省很多时间。
fastboot boot new.img
解包hybris-boot.img-ramdisk.gz
,在Ubuntu下面直接双击解压出hybris-boot.img-ramdisk
然后再次双击挂载就可以了,查看里面的init
文件,发现不是二进制文件,而是shell脚本,其实就是这个脚本:https://github.com/Halium/hybris-boot/blob/master/init-script,我们主要关心,怎样在开机之后开启RNDIS,然后进行调试,可以确定的是M8支持RNDIS,这个在正常的lineageOS 14.1下面可以开启。
这是 hybris-boot 开启RNDIS功能的代码,M8开机,然后通过adb
调试,发现$ANDROID_USB/enable
这个文件不存在,在最新的LineageOS 16.0 的内核上面有,但依旧不能顺利的开启RNDIS
# This sets up the USB with whatever USB_FUNCTIONS are set to
usb_setup() {
write $ANDROID_USB/enable 0
write $ANDROID_USB/functions ""
write $ANDROID_USB/enable 1
usleep 500000 # 0.5 delay to attempt to remove rndis function
write $ANDROID_USB/enable 0
write $ANDROID_USB/idVendor 18D1
write $ANDROID_USB/idProduct D001
write $ANDROID_USB/iManufacturer "Mer Boat Loader"
write $ANDROID_USB/iProduct "$CUSTOMPRODUCT"
write $ANDROID_USB/iSerial "$1"
write $ANDROID_USB/functions $USB_FUNCTIONS
write $ANDROID_USB/enable 1
}
通过这个文件发现,M8开启RNDIS是写入/sys/devices/platform/android_usb/usb_function_switch
这个文件,查找之后发现应该大部分HTC手机都是这样子,那么上面的命令修改成下面这样子。
usb_setup() {
#write $ANDROID_USB/enable 0
#write $ANDROID_USB/functions ""
#write $ANDROID_USB/enable 1
#usleep 500000 # 0.5 delay to attempt to remove rndis function
#write $ANDROID_USB/enable 0
#write $ANDROID_USB/idVendor 18D1
#write $ANDROID_USB/idProduct D001
#write $ANDROID_USB/iManufacturer "Mer Boat Loader"
#write $ANDROID_USB/iProduct "$CUSTOMPRODUCT"
#write $ANDROID_USB/iSerial "$1"
#write $ANDROID_USB/functions $USB_FUNCTIONS
#write $ANDROID_USB/enable 1
write /sys/devices/platform/android_usb/usb_function_switch 4
}
修改完重新打包之后,再次用新打包的内核启动,可以看到电脑上多出一个适配器,然后Telnet到手机上调试,这个IP在脚本里面可以看到:
telnet 192.168.2.15
查看到data
可以正常挂载。