Ubuntu下将编译好的安卓源代码刷入Nexus5真机

Posted zero9988

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu下将编译好的安卓源代码刷入Nexus5真机相关的知识,希望对你有一定的参考价值。

第一步:下载源代码

见网站 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

需要注意 android源码的版本与手机是有对应的,具体可见 https://source.android.com/source/build-numbers.html#source-code-tags-and-builds

如果直接从google的源去下载android代码,需要翻墙 挂vpn,所以建议使用这个清华的源。


第二步:下载对应设备Nexus5的硬件驱动并抽取相关数据

从谷歌的网站 https://developers.google.com/android/drivers#hammerheadlrx22c  上下载Nexus5的驱动 

下载的三个.sh文件,解压后放在源代码的根目录中,执行后 会生成vendor文件夹,驱动相关的文件都会被抽取到这个文件夹中。

接下来就可以开始编译了。。。


第三步:开始编译

在安卓源代码的根目录下输入:

$ source build/envsetup.sh

$ lunch

     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. aosp_deb-userdebug
     8. aosp_flo-userdebug
     9. full_fugu-userdebug
     10. aosp_fugu-userdebug
     11. aosp_grouper-userdebug
     12. aosp_tilapia-userdebug
     13. mini_emulator_arm64-userdebug
     14. mini_emulator_arm-userdebug
     15. mini_emulator_mips-userdebug
     16. mini_emulator_x86-userdebug
     17. mini_emulator_x86_64-userdebug
     18. aosp_hammerhead-userdebug
     19. aosp_mako-userdebug
     20. aosp_shamu-userdebug
     21. aosp_manta-userdebug

然后选择Nexus5 对应的版本aosp_hammerhead-userdebug  对应关系可以从google官方XX获得。

$ 18

$ make -j8


第四步:开始刷机

电脑连接手机后,在安卓源代码的根目录下输入:

$ sudo adb reboot bootloader

手机随后就会进入recovery模式

$ fastboot flashall –w 

(或者 fastboot -w flashall)

等待几分钟后,手机成功重启,刷机成功。

zero@zero-HP-Pro-3380-MT:/media/zero/ANDROID/AOSP5.0$ fastboot -w flashall
Creating filesystem with parameters:
    Size: 13725835264
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8144
    Inode size: 256
    Journal blocks: 32768
    Label: 
    Blocks: 3351034
    Block groups: 103
    Reserved block group size: 823
Created filesystem with 11/838832 inodes and 93654/3351034 blocks
Creating filesystem with parameters:
    Size: 734003200
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7472
    Inode size: 256
    Journal blocks: 2800
    Label: 
    Blocks: 179200
    Block groups: 6
    Reserved block group size: 47
Created filesystem with 11/44832 inodes and 5813/179200 blocks
--------------------------------------------
Bootloader Version...: HHZ11k
Baseband Version.....: M8974A-1.0.25.0.23
Serial Number........: 0816a5d400ede284
--------------------------------------------
checking product...
OKAY [  0.100s]
sending 'boot' (8852 KB)...
OKAY [  0.482s]
writing 'boot'...
OKAY [  0.776s]
sending 'recovery' (9552 KB)...
OKAY [  0.545s]
writing 'recovery'...
OKAY [  0.810s]
erasing 'system'...
OKAY [  1.070s]
sending 'system' (354297 KB)...
OKAY [ 11.312s]
writing 'system'...
OKAY [ 25.338s]
erasing 'userdata'...
OKAY [  8.542s]
sending 'userdata' (137318 KB)...
OKAY [  4.521s]
writing 'userdata'...
OKAY [  9.131s]
erasing 'cache'...
OKAY [  0.642s]
sending 'cache' (13348 KB)...
OKAY [  0.630s]
writing 'cache'...
OKAY [  1.071s]
rebooting...

finished. total time: 65.651s

刷机常见问题:


问题一:输入sudo adb reboot bootloader

提示error: device not found

解决:手机中开发者模式里面,一定要打开USB调试。


问题二:如果打开USB调试后,仍然ADB无法连接。

解决:

先在/etc/udev/rules.d/目录下新建一个文件51-Android.rules然后在终端输入lsusb查看usb连接情况:

zero@zero-HP-Pro-3380-MT:~$ lsusb
Bus 002 Device 003: ID 0480:0210 Toshiba America Info. Systems, Inc. 
Bus 002 Device 007: ID 18d1:4ee0 Google Inc. 

据第二行这个google手机的ID:18d1 和 4ee0 这两个数值

编辑文件51-Android.rules输入

SUBSYSTEM=="usb", ATTRidVendor=="18d1", ATTRidProduct=="4ee0", MODE="0666", OWNER="<username>"

然后保存

$sudo chmod a+rx /etc/udev/rules.d/51-Android.rules
$sudo service udev restart


问题三:完成问题二的修改的基础上,在手机的fastboot模式下,输入fastboot -w flashall  提示< waiting for device >

这是由于fastboot权限不够,输入fastboot -l devices  会提示 no permissions fastboot 

adb调试是在手机开机的状态下进行,而fastboot是在手机关机的时候进行。两者有区别,fastboot的调试需要的是root权限。必须把fastboot的拥有者设置为root。

因此,

$ which fastboot

找到fastboot所在的路径

然后

$ cd xxxx(fastboot的路径)

sudo chown root:root fastboot

$ sudo chmod +s fastboot

然后记得必须拔掉usb连接线,重新连接才能有效。



以上是关于Ubuntu下将编译好的安卓源代码刷入Nexus5真机的主要内容,如果未能解决你的问题,请参考以下文章

Nexus5 刷入官方固件失败

安卓手机 怎么刷入Recovery

安卓刷机

自行编译micropython固件刷入ESP32 cam,并测试拍照及图传

安卓手机怎么刷入Recovery?

[Android编译] 从谷歌官网下载android 6.0源码编译并刷入nexus 6p手机