Zalo Inbox

Xây dựng Android Automotive 15 cho Raspberry Pi 4


  • author-image

    devlinux

  • blog-tag aosp, aaos
  • blog-comment 0 Bình luận
  • blog-comment 544 Views
  • created-date 11 Feb, 2025
blog-image


Android 15 mang đến nhiều cải tiến về hiệu suất, bảo mật và trải nghiệm người dùng. Trong bài viết này, mình sẽ hướng dẫn các bạn xây dựng phiên bản hệ điều hành Android 15 cho Automotive chạy trên board Raspberry Pi 4. Đây là một dự án thú vị dành cho những ai muốn khám phá và tận dụng tối đa khả năng của Raspberry Pi 4.

1. Máy build

1.1. Ubuntu 22.04

Các bạn có thể dùng cấu hình sau.

  • Ubuntu 22.04
  • 16GB RAM
  • 300GB SSD
  • 4core x 2Thread 3.2Ghz

1.2. Hardware

  • 1 Board Raspberry Pi 4 Model B Ram 4G
  • 1 thẻ nhớ SDcard có dung lượng từ 8GB
  • Một nguồn 5V 3A (Đầu type C)
  • Một usb uart cp2102 để debug

2. Chuẩn bị môi trường

2.1. Cài đặt các công cụ cần thiết

sudo apt-get update
sudo apt-get install openjdk-11-jdk git python3 bison flex git  bc build-essential curl g++-multilib gcc-multilib  lib32ncurses5-dev lib32readline-dev liblz4-tool libncurses5 libncurses5-dev meson cmake pkg-config -y

2.2. Cài đặt repo tool

Mã nguồn Android thuộc tập hợp các kho lưu trữ Git do Google lưu trữ. Để tải xuống toàn bộ mã nguồn Android cho thiết bị chúng ta sẽ cần sử dụng tới tool repo.

mkdir -p ~/.bin
PATH="${HOME}/.bin:${PATH}"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+rx ~/.bin/repo

2.3. Cấu hình git

git config --global user.name "your name"
git config --global user.email "your email"

3. Download mã nguồn

3.1. Download mã nguồn Android 15

mkdir ~/android
cd ~/android
repo init -u https://android.googlesource.com/platform/manifest -b android-15.0.0_r2 --depth=1
curl -o .repo/local_manifests/manifest_brcm_rpi.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-15.0/manifest_brcm_rpi.xml --create-dirs
curl -o .repo/local_manifests/remove_projects.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-15.0/remove_projects.xml
repo sync -j4

Giải thích:

  • mkdir ~/android: Tạo thư mục mới tên android trong cây thư mục gốc của người dùng.
  • cd ~/android: Di chuyển thư mục hiện tại sang thư mục android.
  • repo init -u https://android.googlesource.com/platform/manifest -b android-15.0.0_r14 --depth=1
    • Khởi tạo kho chứa mã nguồn Android với manifest URL và branch phiên bản Android 15.
  • repo sync -j4:
    • Download toàn bộ mã nguồn Android với 4 tác vụ đồng thời.
    • Quá trình này có thể diễn ra nhanh hay chậm tùy thuộc vào tốc độ mạng, loại ổ cứng lưu trữ là SSD hay HDD. Nhanh thì có thể diễn ra trong vài tiếng hoặc chậm thì có thể kéo dài tới cả ngày.

3.2. Download mã nguồn Kernel

mkdir ~/rpi_kernel
cd ~/rpi_kernel
repo init -u https://android.googlesource.com/kernel/manifest -b common-android15-6.6-lts
curl -o .repo/local_manifests/manifest_brcm_rpi.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_kernel_manifest/android-15.0/manifest_brcm_rpi.xml --create-dirs
repo sync

4. Build RPi4 image

4.1. Build Android 15

Di chuyển tới folder chứa mã nguồn Android sau đó cấu hình build cho raspberrry pi4.

source build/envsetup.sh
lunch aosp_rpi4_car-ap3a-userdebug
make bootimage systemimage vendorimage

Giải thích:

  • source build/envsetup.sh: Thiết lập môi trường.
  • lunch aosp_rpi4_car-ap3a-userdebug: Chọn cấu hình build cho Raspberry Pi 4 với chế độ userdebug.
  • make bootimage systemimage vendorimage: Tiến hành build với chương trình make. Thực thi đồng thời 4 tác vụ.

4.2. Build kernel

Di chuyển tới folder chứa mã nguồn kernel.

tools/bazel build --config=fast --config=stamp //common:rpi4

Có thể tìm thấy kernel đã biên dịch, dtbs và dtbo trong bazel-bin/common/rpi4/arch/arm64/boot

  • Image
  • bcm2711-rpi-400.dtb
  • bcm2711-rpi-4-b.dtb
  • bcm2711-rpi-cm4.dtb
  • bcm2711-rpi-cm4-io.dtb
  • bcm2711-rpi-cm4s.dtb

5. Chuẩn bị thẻ nhớ SD

Trong thời gian chờ đợi quá trình build diễn ra, chúng ta sẽ tiến hành phân vùng SD card.

Tạo các phân vùng như sau:

  • p1: 256MB FAT32
  • p2: 2048MB ext4 (system)
  • p3: 1024MB ext4 (vendor)
  • p4: Remaining space ext4 (userdata)

5.1. Sử dụng gparted để tạo các phân vùng

Cài đặt tool gparted.

sudo apt-get install gparted -y

Tiến hành phân vùng với giao diện trực quan.

5.2. Sử dụng command line

Tạo các phân vùng với parted. Giả sử thẻ SD của bạn được nhận diện là /dev/sdb, bạn sẽ thay thế sdX bằng sdb trong tất cả các lệnh

sudo parted /dev/sdX --script mkpart primary fat32 1MiB 257MiB
sudo parted /dev/sdX --script mkpart primary ext4 257MiB 2305MiB
sudo parted /dev/sdX --script mkpart primary ext4 2305MiB 3329MiB
sudo parted /dev/sdX --script mkpart primary ext4 3329MiB 100%

Định dạng phân vùng.

sudo mkfs.vfat /dev/sdX1
sudo mkfs.ext4 -L system /dev/sdX2
sudo mkfs.ext4 -L vendor /dev/sdX3
sudo mkfs.ext4 -L userdata /dev/sdX4

Giải thích:

  • parted: Phân vùng bộ nhớ.
  • mkfs.vfat: Tạo hệ thống tệp FAT32 cho phân vùng khởi động.
  • mkfs.ext4: Tạo hệ thống tệp ext4 trên các phân vùng còn lại.

Sau khi phân vùng thành công các bạn sẽ thu được kết quả như sau (ở đây thiết bị của mình được nhận diện là sdb):

6. Cài Android 15 lên thẻ nhớ SD

6.1. Sao chép images vào phân vùng thẻ nhớ

Di chuyển vào thư mục chứa mã nguồn Android 15.

  • Flash boot.img vào p1
  • Flash system.img vào p2
  • Flash vendor.img vào p3
sudo dd if=out/target/product/rpi4/boot.img of=/dev/<p1> bs=1M
sudo dd if=out/target/product/rpi4/system.img of=/dev/<p2> bs=1M
sudo dd if=out/target/product/rpi4/vendor.img of=/dev/<p3> bs=1M

Giải thích:

  • dd: Công cụ để sao chép và chuyển đổi dữ liệu. if là tệp nguồn, of là tệp đích, bs là kích thước khối dữ liệu.

6.4. Umount SD card

sudo umount /mnt
sudo eject /dev/<p>

6.5. Kết nối CP2102 với Debug Port của Raspberry Pi 4

  • Nối chân GND của CP2102 với GND của Raspbery Pi 4 (Chân số 6)
  • Nối chân RX của CP2102 với TX của Raspbery Pi 4 (Chân số 8)
  • Nối chân TX của CP2102 với RX của Raspbery Pi 4 (Chân số 10)

Cắm thẻ SD vào Raspberry Pi 4 và khởi động.

6.6. Kết quả

Tài liệu tham khảo: https://github.com/raspberry-vanilla/android_local_manifest

author_photo
devlinux

0 Bình luận