接 上篇 博文, 应该已经完成编译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$ l
android-sdk_eng.data_linux-x86/ android-sdk_eng.data_linux-x86.zip.rsp
android-sdk_eng.data_linux-x86.zip sdk_deps.mk
是 android-sdk.eng.$USER$_linux-x86.zip
USER 指的是当前登陆到系统中的用户名
有了这个 sdk, 就可以在 IDE 环境中 开发android 程序

  1. data@miPC:~/ROSP-Android$ source build/envsetup.sh
  2. data@miPC:~/ROSP-Android$ lunch
  3. You're building on Linux
  4. Lunch menu... pick a combo:
  5. 1. aosp_arm-eng
  6. 2. aosp_arm64-eng
  7. 3. aosp_blueline-userdebug
  8. 4. aosp_blueline_car-userdebug
  9. 5. aosp_bonito-userdebug
  10. 6. aosp_bonito_car-userdebug
  11. 7. aosp_bramble-userdebug
  12. 8. aosp_car_arm-userdebug
  13. 9. aosp_car_arm64-userdebug
  14. 10. aosp_car_x86-userdebug
  15. 11. aosp_car_x86_64-userdebug
  16. 12. aosp_cf_arm64_auto-userdebug
  17. 13. aosp_cf_arm64_phone-userdebug
  18. 14. aosp_cf_x86_64_pc-userdebug
  19. 15. aosp_cf_x86_64_phone-userdebug
  20. 16. aosp_cf_x86_auto-userdebug
  21. 17. aosp_cf_x86_phone-userdebug
  22. 18. aosp_cf_x86_tv-userdebug
  23. 19. aosp_coral-userdebug
  24. 20. aosp_coral_car-userdebug
  25. 21. aosp_crosshatch-userdebug
  26. 22. aosp_crosshatch_car-userdebug
  27. 23. aosp_flame-userdebug
  28. 24. aosp_flame_car-userdebug
  29. 25. aosp_redfin-userdebug
  30. 26. aosp_sargo-userdebug
  31. 27. aosp_sunfish-userdebug
  32. 28. aosp_trout_arm64-userdebug
  33. 29. aosp_trout_x86-userdebug
  34. 30. aosp_x86-eng
  35. 31. aosp_x86_64-eng
  36. 32. arm_krait-eng
  37. 33. arm_v7_v8-eng
  38. 34. armv8-eng
  39. 35. armv8_cortex_a55-eng
  40. 36. armv8_kryo385-eng
  41. 37. beagle_x15-userdebug
  42. 38. beagle_x15_auto-userdebug
  43. 39. car_x86_64-userdebug
  44. 40. db845c-userdebug
  45. 41. fuchsia_arm64-eng
  46. 42. fuchsia_x86_64-eng
  47. 43. hikey-userdebug
  48. 44. hikey64_only-userdebug
  49. 45. hikey960-userdebug
  50. 46. hikey960_tv-userdebug
  51. 47. hikey_tv-userdebug
  52. 48. pixel3_mainline-userdebug
  53. 49. poplar-eng
  54. 50. poplar-user
  55. 51. poplar-userdebug
  56. 52. qemu_trusty_arm64-userdebug
  57. 53. silvermont-eng
  58. 54. uml-userdebug
  59. 55. yukawa-userdebug
  60. 56. yukawa_sei510-userdebug
  61. Which would you like? [aosp_arm-eng] 2
  62. ============================================
  63. PLATFORM_VERSION_CODENAME=S
  64. PLATFORM_VERSION=S
  65. TARGET_PRODUCT=aosp_arm64
  66. TARGET_BUILD_VARIANT=eng
  67. TARGET_BUILD_TYPE=release
  68. TARGET_ARCH=arm64
  69. TARGET_ARCH_VARIANT=armv8-a
  70. TARGET_CPU_VARIANT=generic
  71. TARGET_2ND_ARCH=arm
  72. TARGET_2ND_ARCH_VARIANT=armv8-a
  73. TARGET_2ND_CPU_VARIANT=generic
  74. HOST_ARCH=x86_64
  75. HOST_2ND_ARCH=x86
  76. HOST_OS=linux
  77. HOST_OS_EXTRA=Linux-5.4.0-70-generic-x86_64-Ubuntu-18.04.5-LTS
  78. HOST_CROSS_OS=windows
  79. HOST_CROSS_ARCH=x86
  80. HOST_CROSS_2ND_ARCH=x86_64
  81. HOST_BUILD_TYPE=release
  82. BUILD_ID=AOSP.MASTER
  83. OUT_DIR=out
  84. PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera
  85. ============================================
  86. data@miPC:~/ROSP-Android$ make adk -j16
  87. build/make/core/soong_config.mk:197: warning: BOARD_PLAT_PUBLIC_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS instead.
  88. build/make/core/soong_config.mk:198: warning: BOARD_PLAT_PRIVATE_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS instead.
  89. ============================================
  90. PLATFORM_VERSION_CODENAME=S
  91. PLATFORM_VERSION=S
  92. TARGET_PRODUCT=aosp_arm64
  93. TARGET_BUILD_VARIANT=eng
  94. TARGET_BUILD_TYPE=release
  95. TARGET_ARCH=arm64

编译 sdk 完成后
执行:

  1. data@miPC:~/ROSP-Android$ source build/envsetup.sh
  2. data@miPC:~/ROSP-Android$ lunch
  3. You're building on Linux
  4. Lunch menu... pick a combo:
  5. 1. aosp_arm-eng
  6. 2. aosp_arm64-eng
  7. 3. aosp_blueline-userdebug
  8. 4. aosp_blueline_car-userdebug
  9. 5. aosp_bonito-userdebug
  10. 6. aosp_bonito_car-userdebug
  11. 7. aosp_bramble-userdebug
  12. 8. aosp_car_arm-userdebug
  13. 9. aosp_car_arm64-userdebug
  14. 10. aosp_car_x86-userdebug
  15. 11. aosp_car_x86_64-userdebug
  16. 12. aosp_cf_arm64_auto-userdebug
  17. 13. aosp_cf_arm64_phone-userdebug
  18. 14. aosp_cf_x86_64_pc-userdebug
  19. 15. aosp_cf_x86_64_phone-userdebug
  20. 16. aosp_cf_x86_auto-userdebug
  21. 17. aosp_cf_x86_phone-userdebug
  22. 18. aosp_cf_x86_tv-userdebug
  23. 19. aosp_coral-userdebug
  24. 20. aosp_coral_car-userdebug
  25. 21. aosp_crosshatch-userdebug
  26. 22. aosp_crosshatch_car-userdebug
  27. 23. aosp_flame-userdebug
  28. 24. aosp_flame_car-userdebug
  29. 25. aosp_redfin-userdebug
  30. 26. aosp_sargo-userdebug
  31. 27. aosp_sunfish-userdebug
  32. 28. aosp_trout_arm64-userdebug
  33. 29. aosp_trout_x86-userdebug
  34. 30. aosp_x86-eng
  35. 31. aosp_x86_64-eng
  36. 32. arm_krait-eng
  37. 33. arm_v7_v8-eng
  38. 34. armv8-eng
  39. 35. armv8_cortex_a55-eng
  40. 36. armv8_kryo385-eng
  41. 37. beagle_x15-userdebug
  42. 38. beagle_x15_auto-userdebug
  43. 39. car_x86_64-userdebug
  44. 40. db845c-userdebug
  45. 41. fuchsia_arm64-eng
  46. 42. fuchsia_x86_64-eng
  47. 43. hikey-userdebug
  48. 44. hikey64_only-userdebug
  49. 45. hikey960-userdebug
  50. 46. hikey960_tv-userdebug
  51. 47. hikey_tv-userdebug
  52. 48. pixel3_mainline-userdebug
  53. 49. poplar-eng
  54. 50. poplar-user
  55. 51. poplar-userdebug
  56. 52. qemu_trusty_arm64-userdebug
  57. 53. silvermont-eng
  58. 54. uml-userdebug
  59. 55. yukawa-userdebug
  60. 56. yukawa_sei510-userdebug
  61. Which would you like? [aosp_arm-eng] 2
  62. ============================================
  63. PLATFORM_VERSION_CODENAME=S
  64. PLATFORM_VERSION=S
  65. TARGET_PRODUCT=aosp_arm64
  66. TARGET_BUILD_VARIANT=eng
  67. TARGET_BUILD_TYPE=release
  68. TARGET_ARCH=arm64
  69. TARGET_ARCH_VARIANT=armv8-a
  70. TARGET_CPU_VARIANT=generic
  71. TARGET_2ND_ARCH=arm
  72. TARGET_2ND_ARCH_VARIANT=armv8-a
  73. TARGET_2ND_CPU_VARIANT=generic
  74. HOST_ARCH=x86_64
  75. HOST_2ND_ARCH=x86
  76. HOST_OS=linux
  77. HOST_OS_EXTRA=Linux-5.4.0-70-generic-x86_64-Ubuntu-18.04.5-LTS
  78. HOST_CROSS_OS=windows
  79. HOST_CROSS_ARCH=x86
  80. HOST_CROSS_2ND_ARCH=x86_64
  81. HOST_BUILD_TYPE=release
  82. BUILD_ID=AOSP.MASTER
  83. OUT_DIR=out
  84. PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera
  85. ============================================
  86. data@miPC:~/ROSP-Android$ emulator
  87. emulator: Android emulator version 30.5.3.0 (build_id 7209397) (CL:N/A)
  88. emulator: INFO: ignore sdcard for arm at api level >= 30
  89. emulator: WARNING: encryption is off
  90. cannot add library /home/data/ROSP-Android/prebuilts/android-emulator/linux-x86_64/qemu/linux-x86_64/lib64/vulkan/libvulkan.so: failed
  91. added library /home/data/ROSP-Android/prebuilts/android-emulator/linux-x86_64/lib64/vulkan/libvulkan.so
  92. cannot add library /home/data/ROSP-Android/prebuilts/android-emulator/linux-x86_64/lib64/vulkan/libvulkan.so.1: full
  93. emulator: ERROR: VkCommonOperations.cpp:537: Failed to create Vulkan instance.
  94. ProbeKVM: This user doesn't have permissions to use KVM (/dev/kvm).
  95. 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:

  1. data@miPC:~/ROSP-Android/out/host/linux-x86$ cd bin/
  2. data@miPC:~/ROSP-Android/out/host/linux-x86/bin$ ls
  3. aapt checkvintf ld.mc sepolicy-analyze
  4. aapt2 conv_linker_config lpdump sepolicy_tests
  5. adb deapexer lpmake sgdisk
  6. ahat debugfs_static lz4 signapk
  7. appcompat.sh defrag.f2fs make_f2fs simg2img
  8. aprotoc dexdiag make_f2fs_casefold sload_f2fs
  9. assemble_vintf dexdump mdnsd sqlite3
  10. atest-dev dexlist minigzip tinyplay
  11. avbtool dump.f2fs mkbootfs toybox
  12. badblocks e2fsck mkbootimg treble_sepolicy_tests
  13. bcc e2fsdroid mke2fs tune2fs
  14. bcc_strip_attr fastboot mke2fs.conf tzdatacheck
  15. bit fc_sort mkerofsimage.sh unpack_bootimg
  16. blk_alloc_to_base_fs fec mkf2fsuserimg.sh unwind_info
  17. boot_signer fec32 mkfs.erofs unwind_reg_info
  18. brotli flags_health_check mkuserimg_mke2fs unwind_symbols
  19. bsdiff fsck.f2fs oatdump update-vndk-list.sh
  20. BugReport host_init_verifier post_process_props validatekeymaps
  21. build_image hprof-conv property_info_checker veridex
  22. build_sepolicy idmap2 protoc-gen-javanano version_policy
  23. build_super_image img2simg resize2fs viewcompiler
  24. checkfc imgdiff resize.f2fs vintffm
  25. checkpolicy incident_report secilc
  26. checkseapp insertkeys.py sefcontext_compile
  27. data@miPC:~/ROSP-Android/out/host/linux-x86/bin$

Android 模拟器 存在 out/host/linux-x86/bin
android 模拟器内核 被称为 goldfish

加入环境变量:

  1. data@miPC:~/ROSP-Android/out/host/linux-x86/bin$ sudo vi /etc/profile
  2. 添加内容:
  3. export ANDROID_PRODUCT_OUT=/home/data/ROSP-Android/out/target/product/generic_arm64/:$PATH
  4. export PATH=$PATH:~/ROSP-Android/out/host/linux-x86/bin/
  5. 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 后面的数字根据自己的配置)

============================================

  1. data@miPC:~/ROSP-Android$ make sdk -j16
  2. 17:53:09 chmod out/.path: operation not permitted
  3. failed to build some targets
  4. data@miPC:~/ROSP-Android$
  5. data@miPC:~/ROSP-Android$ sudo chmod 777 out/.path
  6. data@miPC:~/ROSP-Android$ make sdk -j8
  7. 解决:
  8. 文件不能操作的原因是加了i属性,所以相应的解决方案就是把文件的i属性去除,然后对此文件内容进行修 改,最好在操作完成后恢复文件的i属性。
  9. 去除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 下载

  1. data@miPC:~/ROSP-Android$ mkdir mkernel
  2. data@miPC:~/ROSP-Android$ cd mkernel/
  3. data@miPC:~/ROSP-Android/mkernel$ git clone http://android.googlesource.com/kernel/goldfish.git
  4. git checkout 来指定需要的分支
  5. data@miPC:~/ROSP-Android/mkernel$ cd goldfish/
  6. data@miPC:~/ROSP-Android/mkernel/goldfish$ git branch -a
  7. * master
  8. remotes/origin/HEAD -> origin/master
  9. remotes/origin/android-3.18
  10. remotes/origin/android-4.14-q
  11. remotes/origin/android-goldfish-2.6.29
  12. remotes/origin/android-goldfish-3.10
  13. remotes/origin/android-goldfish-3.10-k-dev
  14. remotes/origin/android-goldfish-3.10-l-mr1-dev
  15. remotes/origin/android-goldfish-3.10-m-dev
  16. remotes/origin/android-goldfish-3.10-n-dev
  17. remotes/origin/android-goldfish-3.18
  18. remotes/origin/android-goldfish-3.18-dev
  19. remotes/origin/android-goldfish-3.4
  20. remotes/origin/android-goldfish-3.4-l-mr1-dev
  21. remotes/origin/android-goldfish-4.14-dev
  22. remotes/origin/android-goldfish-4.14-dev.120914098
  23. remotes/origin/android-goldfish-4.14-dev.143174688
  24. remotes/origin/android-goldfish-4.14-dev.150
  25. remotes/origin/android-goldfish-4.14-dev.20190417
  26. remotes/origin/android-goldfish-4.14-dev.backup
  27. remotes/origin/android-goldfish-4.14-gchips
  28. remotes/origin/android-goldfish-4.4-dev
  29. remotes/origin/android-goldfish-4.9-dev
  30. remotes/origin/android-goldfish-5.4-dev
  31. remotes/origin/heads/for/android-goldfish-3.18-dev
  32. remotes/origin/linux-goldfish-3.0-wip
  33. remotes/origin/master
  34. data@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

  1. data@miPC:~/ROSP-Android$ cd ./out/target/product/generic_arm64/
  2. data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ ls
  3. android-info.txt installed-files.json
  4. apex installed-files-ramdisk-debug.json
  5. appcompat installed-files-ramdisk-debug.txt
  6. boot-4.19-gz.img installed-files-ramdisk.json
  7. boot-5.10-allsyms.img installed-files-ramdisk.txt
  8. boot-5.10-gz-allsyms.img installed-files-root.json
  9. boot-5.10-gz.img installed-files-root.txt
  10. boot-5.10.img installed-files.txt
  11. boot-5.10-lz4-allsyms.img kernel-4.19-gz
  12. boot-5.10-lz4.img kernel-5.10
  13. boot-5.4-allsyms.img kernel-5.10-allsyms
  14. boot-5.4-gz-allsyms.img kernel-5.10-gz
  15. boot-5.4-gz.img kernel-5.10-gz-allsyms
  16. boot-5.4.img kernel-5.10-lz4
  17. boot-5.4-lz4-allsyms.img kernel-5.10-lz4-allsyms
  18. boot-5.4-lz4.img kernel-5.4
  19. boot-debug-4.19-gz.img kernel-5.4-allsyms
  20. boot-debug-5.10-allsyms.img kernel-5.4-gz
  21. boot-debug-5.10-gz-allsyms.img kernel-5.4-gz-allsyms
  22. boot-debug-5.10-gz.img kernel-5.4-lz4
  23. boot-debug-5.10.img kernel-5.4-lz4-allsyms
  24. boot-debug-5.10-lz4-allsyms.img kernel-mainline
  25. boot-debug-5.10-lz4.img kernel-mainline-gz
  26. boot-debug-5.4-allsyms.img kernel-mainline-lz4
  27. boot-debug-5.4-gz-allsyms.img misc_info.txt
  28. boot-debug-5.4-gz.img module-info.json
  29. boot-debug-5.4.img module-info.json.rsp
  30. boot-debug-5.4-lz4-allsyms.img obj
  31. boot-debug-5.4-lz4.img obj_arm
  32. boot-debug-mainline-gz.img previous_build_config.mk
  33. boot-debug-mainline.img ramdisk
  34. boot-debug-mainline-lz4.img ramdisk-debug.img
  35. boot-mainline-gz.img ramdisk.img
  36. boot-mainline.img root
  37. boot-mainline-lz4.img super_empty.img
  38. build_fingerprint.txt symbols
  39. build_thumbprint.txt system
  40. clean_steps.mk system.img
  41. debug_ramdisk testcases
  42. fake_packages vbmeta.img
  43. gen vendor
  44. data@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

  1. flash-all.bat
  2. flash-all.sh
  3. flash-base.sh
  4. hammerhead-ktu84p.zip
  5. bootloader-hammerhead-hhz11k.img
  6. radio-hammerhead-m8974a-1.0.50.1.16.img
  7. 其中 hammerhead-ktu84p.zip 中包含
  8. android-info.txt
  9. boot.img
  10. system.img
  11. recovery.img
  12. cache.img
  13. userdata.img

刷入 这 5 个对应的镜像 data@miPC:~/ROSP-Android$ fastboot -w flashall
error: ANDROID_PRODUCT_OUT not set
是因为 没有制定 ROM 的路径
solution:
1、自己写一个 flash 执行脚本 ( 推荐 )

2、配置环境变量 ANDROID_PRODUCT_OUT

  1. data@miPC:~/ROSP-Android$ sudo vi /etc/profile
  2. 添加
  3. export ANDROID_PRODUCT_OUT=/home/data/ROSP-Android/out/target/product/generic_arm64/
  4. 然后输入
  5. data@miPC:~/ROSP-Android$ source /etc/profile
  6. 使得 相关配置生效
  7. data@miPC:~$ fastboot -w flashall
  8. error: could not load 'boot.img': No such file or directory
  9. // 发现找不到 boot.img
  10. 是因为 目录下的 生成的 boot.img 名称有前缀 例如:
  11. boot-5.10-lz4-allsyms.img kernel-4.19-gz
  12. boot-5.10-lz4.img kernel-5.10
  13. boot-5.4-allsyms.img kernel-5.10-allsyms
  14. boot-5.4-gz-allsyms.img kernel-5.10-gz
  15. boot-5.4-gz.img
  16. 解决办法: One: 复制一个 boot-**.img 改名为 boot.img
  17. Two: 参考 方案 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

连接 设备
/

  1. data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ adb devices
  2. List of devices attached
  3. 9b4672c2 device
  4. data@miPC:~/ROSP-Android/out/target/product/generic_arm64$ adb shell
  5. 127|vayu:/ $ reboot bootloader
  6. data@miPC:~/ROSP-Android/out/target/product/generic_arm64$

手机进入 fastboot 模式

[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 的设置,
解决方案:

  1. 系统里 加上 udev rule, 配置 adb
  2. udev 下添加用户 自定义的 设备挂在规则
  3. [1]> /etc/udev/relus.d/ 目录下创建 Name.rules 名字任意
  4. data@miPC:/etc/udev/rules.d$ sudo touch Myfastdev1.relus
  5. 增加可写入权限
  6. data@miPC:/etc/udev/rules.d$ ls -l Myfastdev1.relus
  7. -rw-r--r-- 1 root root 0 4 1 11:19 Myfastdev1.relus
  8. data@miPC:/etc/udev/rules.d$ sudo chmod 664 Myfastdev1.relus
  9. data@miPC:/etc/udev/rules.d$ ls -l Myfastdev1.relus
  10. -rw-rw-r-- 1 root root 0 4 1 11:19 Myfastdev1.relus
  11. 要写入的值:
  12. KERNEL: 内核设备名称,USB
  13. ATTRS{idVendor} -- 18d1
  14. ATTRS{idProduct} -- d00d
  15. SUBSYSTEMS
  16. MODE -- 777 664
  17. SYMLINK

data@miPC:/etc/udev/rules.d$ lsusb Bus 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$ lsusb Bus 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.

  1. data@miPC:~/ROSP-Android$ fastboot -w flashall
  2. < waiting for any device >
  3. ^Z
  4. [3]+ 已停止 fastboot -w flashall
  5. data@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 模式下重启手机