接 上篇 博文, 应该已经完成编译AOSP 的源码 那么编译之后的代码, 应该怎么用呢? 让我们开始下面的学习
1> 运行 Android 模拟器
error:
运行 模拟器 报错: 找不到 emulator 命令
reason: 与编译相关的环境变量缺失
[2]> 编译完 android 系统之后 执行 make sdk 打包为 sdk
执行完成
out/host/linux-x86/sdk/data@miPC:~/ROSP-Android/out/host/linux-x86/sdk/sdk$ landroid-sdk_eng.data_linux-x86/ android-sdk_eng.data_linux-x86.zip.rspandroid-sdk_eng.data_linux-x86.zip sdk_deps.mk
是 android-sdk.eng.$USER$_linux-x86.zip
USER 指的是当前登陆到系统中的用户名
有了这个 sdk, 就可以在 IDE 环境中 开发android 程序
data@miPC:~/ROSP-Android$ source build/envsetup.shdata@miPC:~/ROSP-Android$ lunchYou're building on LinuxLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_blueline-userdebug4. aosp_blueline_car-userdebug5. aosp_bonito-userdebug6. aosp_bonito_car-userdebug7. aosp_bramble-userdebug8. aosp_car_arm-userdebug9. aosp_car_arm64-userdebug10. aosp_car_x86-userdebug11. aosp_car_x86_64-userdebug12. aosp_cf_arm64_auto-userdebug13. aosp_cf_arm64_phone-userdebug14. aosp_cf_x86_64_pc-userdebug15. aosp_cf_x86_64_phone-userdebug16. aosp_cf_x86_auto-userdebug17. aosp_cf_x86_phone-userdebug18. aosp_cf_x86_tv-userdebug19. aosp_coral-userdebug20. aosp_coral_car-userdebug21. aosp_crosshatch-userdebug22. aosp_crosshatch_car-userdebug23. aosp_flame-userdebug24. aosp_flame_car-userdebug25. aosp_redfin-userdebug26. aosp_sargo-userdebug27. aosp_sunfish-userdebug28. aosp_trout_arm64-userdebug29. aosp_trout_x86-userdebug30. aosp_x86-eng31. aosp_x86_64-eng32. arm_krait-eng33. arm_v7_v8-eng34. armv8-eng35. armv8_cortex_a55-eng36. armv8_kryo385-eng37. beagle_x15-userdebug38. beagle_x15_auto-userdebug39. car_x86_64-userdebug40. db845c-userdebug41. fuchsia_arm64-eng42. fuchsia_x86_64-eng43. hikey-userdebug44. hikey64_only-userdebug45. hikey960-userdebug46. hikey960_tv-userdebug47. hikey_tv-userdebug48. pixel3_mainline-userdebug49. poplar-eng50. poplar-user51. poplar-userdebug52. qemu_trusty_arm64-userdebug53. silvermont-eng54. uml-userdebug55. yukawa-userdebug56. yukawa_sei510-userdebugWhich would you like? [aosp_arm-eng] 2============================================PLATFORM_VERSION_CODENAME=SPLATFORM_VERSION=STARGET_PRODUCT=aosp_arm64TARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_ARCH=arm64TARGET_ARCH_VARIANT=armv8-aTARGET_CPU_VARIANT=genericTARGET_2ND_ARCH=armTARGET_2ND_ARCH_VARIANT=armv8-aTARGET_2ND_CPU_VARIANT=genericHOST_ARCH=x86_64HOST_2ND_ARCH=x86HOST_OS=linuxHOST_OS_EXTRA=Linux-5.4.0-70-generic-x86_64-Ubuntu-18.04.5-LTSHOST_CROSS_OS=windowsHOST_CROSS_ARCH=x86HOST_CROSS_2ND_ARCH=x86_64HOST_BUILD_TYPE=releaseBUILD_ID=AOSP.MASTEROUT_DIR=outPRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera============================================data@miPC:~/ROSP-Android$ make adk -j16build/make/core/soong_config.mk:197: warning: BOARD_PLAT_PUBLIC_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS instead.build/make/core/soong_config.mk:198: warning: BOARD_PLAT_PRIVATE_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS instead.============================================PLATFORM_VERSION_CODENAME=SPLATFORM_VERSION=STARGET_PRODUCT=aosp_arm64TARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_ARCH=arm64
编译 sdk 完成后
执行:
data@miPC:~/ROSP-Android$ source build/envsetup.shdata@miPC:~/ROSP-Android$ lunchYou're building on LinuxLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_blueline-userdebug4. aosp_blueline_car-userdebug5. aosp_bonito-userdebug6. aosp_bonito_car-userdebug7. aosp_bramble-userdebug8. aosp_car_arm-userdebug9. aosp_car_arm64-userdebug10. aosp_car_x86-userdebug11. aosp_car_x86_64-userdebug12. aosp_cf_arm64_auto-userdebug13. aosp_cf_arm64_phone-userdebug14. aosp_cf_x86_64_pc-userdebug15. aosp_cf_x86_64_phone-userdebug16. aosp_cf_x86_auto-userdebug17. aosp_cf_x86_phone-userdebug18. aosp_cf_x86_tv-userdebug19. aosp_coral-userdebug20. aosp_coral_car-userdebug21. aosp_crosshatch-userdebug22. aosp_crosshatch_car-userdebug23. aosp_flame-userdebug24. aosp_flame_car-userdebug25. aosp_redfin-userdebug26. aosp_sargo-userdebug27. aosp_sunfish-userdebug28. aosp_trout_arm64-userdebug29. aosp_trout_x86-userdebug30. aosp_x86-eng31. aosp_x86_64-eng32. arm_krait-eng33. arm_v7_v8-eng34. armv8-eng35. armv8_cortex_a55-eng36. armv8_kryo385-eng37. beagle_x15-userdebug38. beagle_x15_auto-userdebug39. car_x86_64-userdebug40. db845c-userdebug41. fuchsia_arm64-eng42. fuchsia_x86_64-eng43. hikey-userdebug44. hikey64_only-userdebug45. hikey960-userdebug46. hikey960_tv-userdebug47. hikey_tv-userdebug48. pixel3_mainline-userdebug49. poplar-eng50. poplar-user51. poplar-userdebug52. qemu_trusty_arm64-userdebug53. silvermont-eng54. uml-userdebug55. yukawa-userdebug56. yukawa_sei510-userdebugWhich would you like? [aosp_arm-eng] 2============================================PLATFORM_VERSION_CODENAME=SPLATFORM_VERSION=STARGET_PRODUCT=aosp_arm64TARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_ARCH=arm64TARGET_ARCH_VARIANT=armv8-aTARGET_CPU_VARIANT=genericTARGET_2ND_ARCH=armTARGET_2ND_ARCH_VARIANT=armv8-aTARGET_2ND_CPU_VARIANT=genericHOST_ARCH=x86_64HOST_2ND_ARCH=x86HOST_OS=linuxHOST_OS_EXTRA=Linux-5.4.0-70-generic-x86_64-Ubuntu-18.04.5-LTSHOST_CROSS_OS=windowsHOST_CROSS_ARCH=x86HOST_CROSS_2ND_ARCH=x86_64HOST_BUILD_TYPE=releaseBUILD_ID=AOSP.MASTEROUT_DIR=outPRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera============================================data@miPC:~/ROSP-Android$ emulatoremulator: Android emulator version 30.5.3.0 (build_id 7209397) (CL:N/A)emulator: INFO: ignore sdcard for arm at api level >= 30emulator: WARNING: encryption is offcannot add library /home/data/ROSP-Android/prebuilts/android-emulator/linux-x86_64/qemu/linux-x86_64/lib64/vulkan/libvulkan.so: failedadded library /home/data/ROSP-Android/prebuilts/android-emulator/linux-x86_64/lib64/vulkan/libvulkan.socannot add library /home/data/ROSP-Android/prebuilts/android-emulator/linux-x86_64/lib64/vulkan/libvulkan.so.1: fullemulator: ERROR: VkCommonOperations.cpp:537: Failed to create Vulkan instance.ProbeKVM: This user doesn't have permissions to use KVM (/dev/kvm).The KVM line in /etc/group is: [LINE_NOT_FOUND]
If we see kvm:… but no username at the end, running the following command may allow KVM access:
sudo gpasswd -a $USER kvm
emulator: ERROR: VkCommonOperations.cpp:537: Failed to create Vulkan instance.
ProbeKVM: This user doesn’t have permissions to use KVM (/dev/kvm).
solution:
启动 Android 模拟器需要 4 个文件:
zImage
system.img
userdata.img
ramdisk.img
选用 goldfish 镜像是因为 goldfish 适用于 模拟器平台
模拟器默认使用的 内核镜像是zImage 是
新版本 Android 下的 kernel 目录
data@miPC:~/ROSP-Android/prebuilts$ cd qemu-kernel/ data@miPC:~/ROSP-Android/prebuilts/qemu-kernel$ l Android.bp build-kernel.sh mips/ OWNERS x86_64/ arm/ kernel-toolchain/ mips64/ update_emu_kernels.sh arm64/ METADATA NOTICE x86/ data@miPC:~/ROSP-Android/prebuilts/qemu-kernel$
配置
一般 新下载的 goldfish 源码目录下 都没有 .config 文件
该文件决定了编译生成的Linux内核由哪些功能模块组成
工具 path:
data@miPC:~/ROSP-Android/out/host/linux-x86$ cd bin/data@miPC:~/ROSP-Android/out/host/linux-x86/bin$ lsaapt checkvintf ld.mc sepolicy-analyzeaapt2 conv_linker_config lpdump sepolicy_testsadb deapexer lpmake sgdiskahat debugfs_static lz4 signapkappcompat.sh defrag.f2fs make_f2fs simg2imgaprotoc dexdiag make_f2fs_casefold sload_f2fsassemble_vintf dexdump mdnsd sqlite3atest-dev dexlist minigzip tinyplayavbtool dump.f2fs mkbootfs toyboxbadblocks e2fsck mkbootimg treble_sepolicy_testsbcc e2fsdroid mke2fs tune2fsbcc_strip_attr fastboot mke2fs.conf tzdatacheckbit fc_sort mkerofsimage.sh unpack_bootimgblk_alloc_to_base_fs fec mkf2fsuserimg.sh unwind_infoboot_signer fec32 mkfs.erofs unwind_reg_infobrotli flags_health_check mkuserimg_mke2fs unwind_symbolsbsdiff fsck.f2fs oatdump update-vndk-list.shBugReport host_init_verifier post_process_props validatekeymapsbuild_image hprof-conv property_info_checker veridexbuild_sepolicy idmap2 protoc-gen-javanano version_policybuild_super_image img2simg resize2fs viewcompilercheckfc imgdiff resize.f2fs vintffmcheckpolicy incident_report secilccheckseapp insertkeys.py sefcontext_compiledata@miPC:~/ROSP-Android/out/host/linux-x86/bin$
Android 模拟器 存在 out/host/linux-x86/bin
android 模拟器内核 被称为 goldfish
加入环境变量:
data@miPC:~/ROSP-Android/out/host/linux-x86/bin$ sudo vi /etc/profile添加内容:export ANDROID_PRODUCT_OUT=/home/data/ROSP-Android/out/target/product/generic_arm64/:$PATHexport PATH=$PATH:~/ROSP-Android/out/host/linux-x86/bin/data@miPC:~/ROSP-Android/out/host/linux-x86/bin$ source /etc/profile
然后:
data@miPC:~/ROSP-Android/out/host/linux-x86/bin$ emulator
emulator:未找到命令
解决方案: 重新make sdk
data@miPC:~/ROSP-Android$ source build/envsetup.sh
data@miPC:~/ROSP-Android$ lunch
You’re building on Linux
Lunch menu… pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_blueline-userdebug
——-当时 编译源码时候是 2, 所以依然选择 2
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera
============================================
data@miPC:~/ROSP-Android$ make sdk -j16 ( -j 后面的数字根据自己的配置)
============================================
data@miPC:~/ROSP-Android$ make sdk -j1617:53:09 chmod out/.path: operation not permittedfailed to build some targetsdata@miPC:~/ROSP-Android$data@miPC:~/ROSP-Android$ sudo chmod 777 out/.pathdata@miPC:~/ROSP-Android$ make sdk -j8解决:文件不能操作的原因是加了i属性,所以相应的解决方案就是把文件的i属性去除,然后对此文件内容进行修 改,最好在操作完成后恢复文件的i属性。去除i属性:chattr -i /etc/sysctl.conf
development/build/sdk-linux-x86.atree:34: couldn’t locate source file: lib64/libclang_android.so
development/build/sdk-linux-x86.atree:36: couldn’t locate source file: lib64/libaapt2_jni.so
development/build/sdk.atree:49: couldn’t locate source file: bin/dmtracedump
development/build/sdk.atree:50: couldn’t locate source file: bin/etc1tool
development/build/sdk.atree:78: couldn’t locate source file: bin/aidl
development/build/sdk.atree:79: couldn’t locate source file: bin/split-select
development/build/sdk.atree:80: couldn’t locate source file: bin/zipalign
解决:
好像是 编译 sdk 时,, 需要lunch sdk-eng
然后 make sdk -j16
[ 99% 44656/44660] //frameworks/base:offline-sdk-docs doclava javadoc: 警告 - 已计划在未来的 JDK 发行版中删除程序包 com.sun.javadoc, com.sun.tools.doclets 及其实现中的旧 Doclet 和 Taglet API。 这些组件在 jdk.javadoc.doclet 中已由新 API 取代。 强烈建议用户迁移到新 API。 [100% 44660/44660] Package SDK: out/host/linux-x86/sdk/sdk/android-sdk_eng.data_linux-x86.zip SDK: warning: including GNU target out/target/product/emulator_arm/system/etc/xtables.lock SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libcups.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libexif.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2_blkid.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2_com_err.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2_e2p.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2_misc.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2_quota.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2_uuid.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libext2fs.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libiprouteutil.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/liblz4.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libnetlink.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libnl.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libselinux.so SDK: warning: including GNU target out/target/product/emulator_arm/system/lib/libselinux_bindgen.dylib.so
build completed successfully (48:59 (mm:ss))
data@miPC:~/ROSP-Android$ git clone https://android.googlesource.com/platform/prebuilt git clone https://android.googlesource.com/platform/prebuilt
编译完成!!!
运行 emulator 不带参数: 默认 已经设置好的 PATH 和 ANDROID_PRODUCT_OUT 两个环境变量
2> 编译运行Andorid 内核代码
android 源代码 工程 默认不包含 它使用的 linux 内核 的源代码
所以我们需要做 1部分 课外作业
if需要运行定制的 linux 内核, 就要下载它的源码
通过 git:
Android 源码路径下的 交叉编译工具:
data@miPC:~/ROSP-Android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9$ l
arm-linux-androideabi/ COPYING3.LIB libexec/ repo.prop
bin/ COPYING.LIB MODULE_LICENSE_GPL
COPYING COPYING.RUNTIME NOTICE
COPYING3 lib/ OWNERS
data@miPC:~/ROSP-Android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9$
2-1 下载
data@miPC:~/ROSP-Android$ mkdir mkerneldata@miPC:~/ROSP-Android$ cd mkernel/data@miPC:~/ROSP-Android/mkernel$ git clone http://android.googlesource.com/kernel/goldfish.git用 git checkout 来指定需要的分支data@miPC:~/ROSP-Android/mkernel$ cd goldfish/data@miPC:~/ROSP-Android/mkernel/goldfish$ git branch -a* masterremotes/origin/HEAD -> origin/masterremotes/origin/android-3.18remotes/origin/android-4.14-qremotes/origin/android-goldfish-2.6.29remotes/origin/android-goldfish-3.10remotes/origin/android-goldfish-3.10-k-devremotes/origin/android-goldfish-3.10-l-mr1-devremotes/origin/android-goldfish-3.10-m-devremotes/origin/android-goldfish-3.10-n-devremotes/origin/android-goldfish-3.18remotes/origin/android-goldfish-3.18-devremotes/origin/android-goldfish-3.4remotes/origin/android-goldfish-3.4-l-mr1-devremotes/origin/android-goldfish-4.14-devremotes/origin/android-goldfish-4.14-dev.120914098remotes/origin/android-goldfish-4.14-dev.143174688remotes/origin/android-goldfish-4.14-dev.150remotes/origin/android-goldfish-4.14-dev.20190417remotes/origin/android-goldfish-4.14-dev.backupremotes/origin/android-goldfish-4.14-gchipsremotes/origin/android-goldfish-4.4-devremotes/origin/android-goldfish-4.9-devremotes/origin/android-goldfish-5.4-devremotes/origin/heads/for/android-goldfish-3.18-devremotes/origin/linux-goldfish-3.0-wipremotes/origin/masterdata@miPC:~/ROSP-Android/mkernel/goldfish$ git checkout remotes/origin/android-goldfish-2.6.29
2-2 编译 kernel
之前编译源码时候:
Which would you like? [aosp_arm-eng] 2 2. aosp_arm64-eng
PLATFORM_VERSION_CODENAME=S PLATFORM_VERSION=S TARGET_PRODUCT=aosp_arm64 TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=generic TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv8-a TARGET_2ND_CPU_VARIANT=generic HOST_ARCH=x86_64 HOST_2ND_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-5.4.0-70-generic-x86_64-Ubuntu-18.04.5-LTS HOST_CROSS_OS=windows HOST_CROSS_ARCH=x86 HOST_CROSS_2ND_ARCH=x86_64 HOST_BUILD_TYPE=release BUILD_ID=AOSP.MASTER OUT_DIR=out PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera
(1)
编译之前, 需要修改 它的 Makefile 文件
android 模拟器使用 cpu 体系结构是 arm 的
所以 将 Makefile 中的 ARCH 变量的值 设置为 arm
如果是在 pc 机上 为 android 模拟器编译内核
所以 需要指定 交叉编译工具链
即 修改 Makefile 里的 CROSS_COMPILE变量的值
Android 源码目录下的 /prebuilt/linux-x86/toolchain 子目录中存在 适用 android 模拟器内核的交叉编译工具
ARCH: arm
CROSS_COMPILE: arm-eabi-
表示 使用的 交叉编译工具名称以 arm-eabi- 为前缀
(2)
然后 修改 一下 硬件配置文件 goldfish_deconfig, 即 Kconfig
(2)Kconfig
要将新的开发板信息在make menuconfig/xconfig…时体现在配置选项菜单上,就必须修改Kconfig文件。主要包括arch/arm/Kconfig和arch/arm/mach-pxa/Kconfig,形如MACH_MAINSTONE。在2.4内核中则对应于arch/arm/config.in文件,形如CONFIG_ARCH_MAINSTONE。
arch/arm/Kconfig中设置相关配置:
例如:
config LEDS
bool \”Timer and CPU usage LEDs\”
depends on ARCH_CDB89712 || ARCH_CO285 || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || ARCH_AT91 || MACH_TRIZEPS4 || ARCH_DAVINCI || ARCH_KS8695 || MACH_XSBASE270
另外还有驱动相关的Kconfig文件:例如drivers/mtd/maps/Kconfig中,需要加入开发板的FLASH存储器配置选项。
config MTD_XSBASE270
tristate \”CFI Flash device mapped on Emdoor XSBASE270 eval board\”
depends on MACH_XSBASE270 && MTD_CFI_INTELEXT
select MTD_PARTITIONS
help
This provides a driver for the on-board flash of the Emdoor
\’XSBASE270\’ evaluation board.arch/arm/mach-pxa/Kconfig 中添加:
config MACH_XSBASE270
bool \”Emdoor XSBASE270 Developemnt Platform\”
select PXA27x
(3)
make
2-3 运行 emulator
执行不带参数的 emulator 时, 使用的内核镜像文件 zImage 是位于 Android 源码根目录下的 Android/out/host/linux-x86/bin/ kernel-qumu 文件
编译过了 kernel , 则 使用 -kernel 选项来 指定模拟器使用的内核镜像
https://blog.csdn.net/yf210yf/article/details/9901375
2-4 单独编译 Android 应用模块
3> 编译 kenel
data@miPC:~$ mkdir mkernel
data@miPC:~$ cd mkernel/
data@miPC:~/mkernel$ git clone git://mirrors.ustc.edu.cn/aosp/kernel/goldfish.git
正克隆到 ‘goldfish’…
remote: Enumerating objects: 7457846, done.
remote: Total 7457846 (delta 0), reused 0 (delta 0)
接收对象中: 100% (7457846/7457846), 1.54 GiB | 5.58 MiB/s, 完成.
处理 delta 中: 100% (6274424/6274424), 完成.
data@miPC:~/mkernel$ l
goldfish/
data@miPC:~/mkernel$ cd goldfish/
data@miPC:~/mkernel/goldfish$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.18
remotes/origin/android-4.14-q
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.10-k-dev
remotes/origin/android-goldfish-3.10-l-mr1-dev
remotes/origin/android-goldfish-3.10-m-dev
remotes/origin/android-goldfish-3.10-n-dev
remotes/origin/android-goldfish-3.18
remotes/origin/android-goldfish-3.18-dev
remotes/origin/android-goldfish-3.4
remotes/origin/android-goldfish-3.4-l-mr1-dev
remotes/origin/android-goldfish-4.14-dev
remotes/origin/android-goldfish-4.14-dev.120914098
remotes/origin/android-goldfish-4.14-dev.143174688
remotes/origin/android-goldfish-4.14-dev.150
remotes/origin/android-goldfish-4.14-dev.20190417
remotes/origin/android-goldfish-4.14-dev.backup
remotes/origin/android-goldfish-4.14-gchips
remotes/origin/android-goldfish-4.4-dev
remotes/origin/android-goldfish-4.9-dev
remotes/origin/android-goldfish-5.4-dev
remotes/origin/heads/for/android-goldfish-3.18-dev
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
data@miPC:~/mkernel/goldfish$
data@miPC:~/mkernel/goldfish$ git checkout remotes/origin/android-goldfish-4.9-dev
正在检出文件: 54% (30472/56428)
正在检出文件: 100% (56428/56428), 完成.
注意:正在检出 ‘remotes/origin/android-goldfish-4.9-dev’。
您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以通过另外
的检出分支操作丢弃在这个状态下所做的任何提交。
如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在检出命令添加
参数 -b 来实现(现在或稍后)。例如:
git checkout -b <新分支名>
HEAD 目前位于 2bcbbd5b3924 Merge 4.9.97 into android-4.9
data@miPC:~/mkernel/goldfish$
data@miPC:~/mkernel/goldfish$
烧录初体验
1> /out 分析
源码编译完成后, 会在当前工程目录下 新生成 /out 目录
data@miPC:~/ROSP-Android$ ls Android.bp BUILD device libnativehelper prebuilts WORKSPACE art compatibility external Makefile sdk bionic cts frameworks out system bootable dalvik hardware packages test bootstrap.bash developers kernel pdk toolchain build development libcore platform_testing tools data@miPC:~/ROSP-Android$
然后在对应的 /out/target/product/*/ 存放生成的 image
data@miPC:~/ROSP-Android$ cd ./out/target/product/generic_arm64/data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ lsandroid-info.txt installed-files.jsonapex installed-files-ramdisk-debug.jsonappcompat installed-files-ramdisk-debug.txtboot-4.19-gz.img installed-files-ramdisk.jsonboot-5.10-allsyms.img installed-files-ramdisk.txtboot-5.10-gz-allsyms.img installed-files-root.jsonboot-5.10-gz.img installed-files-root.txtboot-5.10.img installed-files.txtboot-5.10-lz4-allsyms.img kernel-4.19-gzboot-5.10-lz4.img kernel-5.10boot-5.4-allsyms.img kernel-5.10-allsymsboot-5.4-gz-allsyms.img kernel-5.10-gzboot-5.4-gz.img kernel-5.10-gz-allsymsboot-5.4.img kernel-5.10-lz4boot-5.4-lz4-allsyms.img kernel-5.10-lz4-allsymsboot-5.4-lz4.img kernel-5.4boot-debug-4.19-gz.img kernel-5.4-allsymsboot-debug-5.10-allsyms.img kernel-5.4-gzboot-debug-5.10-gz-allsyms.img kernel-5.4-gz-allsymsboot-debug-5.10-gz.img kernel-5.4-lz4boot-debug-5.10.img kernel-5.4-lz4-allsymsboot-debug-5.10-lz4-allsyms.img kernel-mainlineboot-debug-5.10-lz4.img kernel-mainline-gzboot-debug-5.4-allsyms.img kernel-mainline-lz4boot-debug-5.4-gz-allsyms.img misc_info.txtboot-debug-5.4-gz.img module-info.jsonboot-debug-5.4.img module-info.json.rspboot-debug-5.4-lz4-allsyms.img objboot-debug-5.4-lz4.img obj_armboot-debug-mainline-gz.img previous_build_config.mkboot-debug-mainline.img ramdiskboot-debug-mainline-lz4.img ramdisk-debug.imgboot-mainline-gz.img ramdisk.imgboot-mainline.img rootboot-mainline-lz4.img super_empty.imgbuild_fingerprint.txt symbolsbuild_thumbprint.txt systemclean_steps.mk system.imgdebug_ramdisk testcasesfake_packages vbmeta.imggen vendordata@miPC:~/ROSP-Android/out/target/product/generic_arm64$
需要 特别关注的是 system.img boot.img ramdisk.img userdata.img verdor.img
一般学习和分析 android 系统, 只需要改动 system 分区
if 要改动 kernel , 需要刷入 boot.img
Android 常见 image 文件包:
[ boot.img ] : 包含内核启动参数, 内核等多个元素
[ ramdisk.img] : 1 个小型的文件系统, 是 android 系统启动的关键
[ system.img ] : Android 系统的运行程序包, framework 在这里, 将被挂载到 设备中的 /system 节点下
[ userdata.img]: 各程序的数据存储所在, 被挂载到 /data 下
[ recovery.img]: 设备进入 恢复模式 时需要的镜像包
[ cache.img ] : 缓冲区 、cache 节点
——————————————————————————————————————————————————————————-
boot.img 的制作工具: mkbootimg 存在于 /system/core/mkbootimg 中
一般情况下 包括了 ramdisk, kernel, KERNEL_CMDLINE, FLASH_PAGE_SIZE
ramdisk.img 制作:
制作路径 data@miPC:~/ROSP-Android/out/target/product/generic_arm64/root$
一般的 线刷包的 结构:
ex:
包名: hammerhead-ktu84p
flash-all.batflash-all.shflash-base.shhammerhead-ktu84p.zipbootloader-hammerhead-hhz11k.imgradio-hammerhead-m8974a-1.0.50.1.16.img其中 hammerhead-ktu84p.zip 中包含android-info.txtboot.imgsystem.imgrecovery.imgcache.imguserdata.img
刷入 这 5 个对应的镜像 data@miPC:~/ROSP-Android$ fastboot -w flashall
error: ANDROID_PRODUCT_OUT not set
是因为 没有制定 ROM 的路径
solution:
1、自己写一个 flash 执行脚本 ( 推荐 )
2、配置环境变量 ANDROID_PRODUCT_OUT
data@miPC:~/ROSP-Android$ sudo vi /etc/profile添加export ANDROID_PRODUCT_OUT=/home/data/ROSP-Android/out/target/product/generic_arm64/然后输入data@miPC:~/ROSP-Android$ source /etc/profile使得 相关配置生效data@miPC:~$ fastboot -w flashallerror: could not load 'boot.img': No such file or directory// 发现找不到 boot.img是因为 目录下的 生成的 boot.img 名称有前缀 例如:boot-5.10-lz4-allsyms.img kernel-4.19-gzboot-5.10-lz4.img kernel-5.10boot-5.4-allsyms.img kernel-5.10-allsymsboot-5.4-gz-allsyms.img kernel-5.10-gzboot-5.4-gz.img解决办法: One: 复制一个 boot-**.img 改名为 boot.imgTwo: 参考 方案 1 自己写一个 flash 脚本会更加灵活
[1] 解锁 bootloader
一般为了安全, 非官方 rom 无法刷入, 或者 刷入了无法起来
手机 关于本机 中的设备号 连续点击 5 次进入开发者模式
usb 选择 usb debugging
data@miPC:~/vayu_android_images_1.03.30.native.userdebug_11.0/images$ fastboot oem unlock
连接 设备
/
data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ adb devicesList of devices attached9b4672c2 devicedata@miPC:~/ROSP-Android/out/target/product/generic_arm64$ adb shell127|vayu:/ $ reboot bootloaderdata@miPC:~/ROSP-Android/out/target/product/generic_arm64$
[2] 利用 fastboot 刷机
fastboot:
是 bootloader 后期进入的一个特殊阶段, 可以通过数据线和 电脑连接, 然后在电脑上执行一些命令,例如 刷系统镜像到手机上, 可以理解为 fastboot 实现了一个简单的通信协议 fastboot 需要 bootloader 的支持, 一般和 adb 配合使用
bootloader:
机器要启动, cpu 最先执行的一段程序就是 bootloader,
bootloader 是在操作系统内核 运行之前运行的一段小程序, 通过这一小段程序——-> 初始化硬件环境, 建立内存空间映射图, 从而将 系统的软硬件 环境带到一个 ok 的状态
2-1 要先 进行数据擦除, 不然会报错
writing ‘system’ 1/2… FAILED (remote: Partition not found) finished. total time: 23.637s
(1) 分区数据擦除
<手机进入fastboot模式>
走一遍 “写入操作”
fastboot erase system
fastboot erase boot
——-
可能出现问题:
erasing ‘system’… FAILED (remote: Check device console.) finished. total time: 0.004s
data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ fastboot devices
no permissions (user data is not in the plugdev group); see [http://developer.android.com/tools/device.html] fastboot
data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ sudo fastboot erase system
erasing ‘system’…
FAILED (remote: Check device console.)
finished. total time: 0.004s
data@miPC:~/ROSP-Android/out/target/product/generic_arm64$
原因是在 linux 系统下, adb 无法连接 devices
需要修改 USB 的设置, 解决方案:
在 系统里 加上 udev 的 rule, 即 配置 adb在 udev 下添加用户 自定义的 设备挂在规则[1]> 在 /etc/udev/relus.d/ 目录下创建 Name.rules 名字任意data@miPC:/etc/udev/rules.d$ sudo touch Myfastdev1.relus增加可写入权限data@miPC:/etc/udev/rules.d$ ls -l Myfastdev1.relus-rw-r--r-- 1 root root 0 4月 1 11:19 Myfastdev1.relusdata@miPC:/etc/udev/rules.d$ sudo chmod 664 Myfastdev1.relusdata@miPC:/etc/udev/rules.d$ ls -l Myfastdev1.relus-rw-rw-r-- 1 root root 0 4月 1 11:19 Myfastdev1.relus要写入的值:KERNEL: 内核设备名称,USBATTRS{idVendor} -- 18d1ATTRS{idProduct} -- d00dSUBSYSTEMSMODE -- 777 或 664SYMLINK
data@miPC:/etc/udev/rules.d$
lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 413c:2113 Dell Computer Corp. Bus 001 Device 003: ID 413c:301a Dell Computer Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub data@miPC:/etc/udev/rules.d$lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 413c:2113 Dell Computer Corp. Bus 001 Device 003: ID 413c:301a Dell Computer Corp. Bus 001 Device 112: ID 18d1:d00d Google Inc. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub data@miPC:/etc/udev/rules.d$
插拔 数据 先分别 lsusb 发现手机设备为 Bus 001 Device 112: ID 18d1:d00d Google Inc.
data@miPC:~/ROSP-Android$ fastboot -w flashall< waiting for any device >^Z[3]+ 已停止 fastboot -w flashalldata@miPC:~/ROSP-Android$
(常见错误的解决办法)
data@miPC:/etc/udev/rules.d$fastboot devices
no permissions (user data is not in the plugdev group); see [http://developer.android.com/tools/device.html] fastboot
进入 报错的网址
Ubuntu Linux:需要正确进行两项设置:希望使用 adb 的每个用户都需要位于 plugdev 组中,并且需要为系统添加涵盖设备的 udev 规则。
1- 将当前用户添加到 plugdev 组中
(2) 分区写入
fastboot flash system system.img
fastboot flash boot boot.img
——-
fastboot reboot || fastboot 模式下重启手机
