网购了一块树莓派4B(8G)开发版,携带的手册是创乐博版本。
参照内容的总入口:
https://github.com/android-rpi/device_arpi_rpi4/tree/arpi-10
(1)下载Android源码,参照我的另一篇文章。
Android源码编译
根据第(2)步中的android源码需要下载android-10.0.0_r41。
(2)树莓派编译lunch添加:
树莓派分支代码下载
github上的branch选择arpi-10
$ repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r41
上面这行命令在(1)中已经执行,这里只需要执行下面两行:
$ git clone https://github.com/android-rpi/local_manifests .repo/local_manifests -b arpi-10
$ repo sync
代码repo sync时报错:
解决办法:
$ repo sync --force-sync external/mesa3d
$ repo sync
以下内容参照总入口网址 https://github.com/android-rpi/device_arpi_rpi4/tree/arpi-10
(3)Build Kernel:
$ sudo apt install gcc-arm-linux-gnueabihf libssl-dev
$ cd kernel/arpi
$ ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2711_defconfig kernel/configs/android-base.config kernel/configs/android-recommended.config
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make dtbs
关于dtb的解释:
现今的内核版本使用了Device Tree:
1)内核不再包含对硬件的描述,它以二进制的形式单独存储在另外的位置:the device tree blob
2)bootloader需要加载两个二进制文件:内核镜像和DTB
内核镜像仍然是uImage或者zImage;
DTB文件在arch/arm/boot/dts中,每一个board对应一个dts文件;
(4)Install python mako module:
$ sudo apt install python-mako
Mako是一个高性能的Python模板库
(5)Patch framework source:
https://github.com/android-rpi/device_arpi_rpi4/wiki/Android-10-:-patch-framework-source
(6)Build Android source:
$ source build/envsetup.sh
$ lunch rpi4-eng
$ make ramdisk systemimage vendorimage -j16
Use -j[n] option with make, if build host has a good number of CPU cores.
(7)Prepare sd card
Partitions of the card should be set-up like followings.
p1 128MB for boot : Do fdisk, set W95 FAT32(LBA) & Bootable type, mkfs.vfat
p2 768MB for /system : Do fdisk, new primary partition
p3 128MB for /vendor : Do fdisk, new primary partition
p4 remainings for /data : Do fdisk, mkfs.ext4
Set volume label of /data partition as userdata
: use -L option for mkfs.ext4, and -n option for mkfs.vfat
具体方法如下:
该段内容参照的知识
将SD卡连接到linux系统上,(我使用的是linux的虚拟机,设置“虚拟机”的“可移动设备”选项进行设置。)
$ sudo fdisk -l
得到SD卡是/dev/sdb
$ sudo fdisk /dev/sdb
d:先删掉/dev/sdb1
n:创建新的四个分区(/root /system /vendor /data),都是primary分区类型,设置分区大小时输入需要的MB。
a:设置boot分区为bootable
t:改变分区的类型(W95 FAT32 (LBA),Linux)
$ sudo mkfs.vfat -n boot /dev/sdb1
$ sudo mkfs.ext4 -L “system” /dev/sdb2
$ sudo mkfs.ext4 -L “vendor” /dev/sdb3
$ sudo mkfs.ext4 -L “data” /dev/sdb4
(8)Write system & vendor partition
$ cd out/target/product/rpi4
$ sudo dd if=system.img of=/dev/sdb2 bs=1M
$ sudo dd if=vendor.img of=/dev/sdb3 bs=1M
(9)Copy kernel & ramdisk to BOOT partition
device/arpi/rpi4/boot/* to p1:/
kernel/arpi/arch/arm/boot/zImage to p1:/
kernel/arpi/arch/arm/boot/dts/bcm2711-rpi-4-b.dtb to p1:/
kernel/arpi/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4.dtbo to p1:/overlays/
out/target/product/rpi4/ramdisk.img to p1:/
(10)启动后的Android系统中的APP较少,后装了一些APP,运行起来很流畅。
我是用的显示器是电脑的显示器,设置分辨率方式:adb shell wm size 分辨率长x分辨率宽