# HƯỚNG DẪN BIÊN DỊCH VÀ CÀI ĐẶT UBUNTU 24.04 CHO ONEKIWI RZ/V2H SOM (SDK 6.2 - Styhead)

Tài liệu này cung cấp hướng dẫn từng bước từ khi bắt đầu cho đến khi ghi thẻ nhớ và chạy thành công hệ điều hành Ubuntu 24.04 trên board OneKiwi RZ/V2H SOM (8GB) sử dụng môi trường SDK 6.2 (Styhead).

> [!IMPORTANT]
> **Yêu cầu môi trường chuẩn bị:**
> * **Hệ điều hành:** Khuyến nghị sử dụng **Ubuntu 24.04** (có thể chạy máy thực/Server hoặc thông qua WSL2 trên Windows).
> * **Mã nguồn:** Mã nguồn Yocto, Kernel `linux-rz` và bộ script đóng gói `rz-build-scripts` (đã được fix lỗi cho SDK 6.2).

---

## BƯỚC 1: CÀI ĐẶT MÔI TRƯỜNG VÀ THƯ VIỆN CẦN THIẾT

Trước khi bắt đầu, bạn cần mở Terminal trên Ubuntu và chạy các lệnh sau để cài đặt các thư viện biên dịch:

```bash
sudo apt update
sudo apt install -y gcc-aarch64-linux-gnu build-essential bc bison flex libssl-dev git jq qemu-user-static zstd dos2unix
```

---

## BƯỚC 2: BIÊN DỊCH YOCTO BSP (Tạo Rootfs cơ bản)

*Mục đích: Yocto sẽ tự động tải các driver phần cứng độc quyền của Renesas (GPU Mali, Codec, VSPM) và tạo ra hệ thống tệp gốc (rootfs).*

Để build Yocto, bạn làm theo hướng dẫn chi tiết tại link sau:
👉 [Hướng dẫn Build Yocto SOM V2H SDK 6.2](https://ontech-com-vn.gitbook.io/product/som-rz-v2h)

**Lưu ý cực kỳ quan trọng đối với bản SDK 6.2:** 
1. Trong quá trình lấy mã nguồn Yocto, bạn **bắt buộc phải thay thế thư mục `meta-renesas` mặc định bằng thư mục `meta-renesas` của OneKiwi** (cấu hình cho mạch 8GB). Bạn có thể tải folder `meta-renesas` của OneKiwi từ link sau:
   👉 [Tải meta-renesas tại đây](https://linuxbsp.onekiwi.com.vn/SOM_V2H/images/ubuntu/)
2. Sau khi copy `meta-renesas` của OneKiwi vào, bạn **BẮT BUỘC** phải chạy lệnh sau để ép Yocto tương thích với hệ Styhead (SDK 6.2):
   ```bash
   sudo find /đường_dẫn_tới_thư_mục_yocto/meta-renesas -name "layer.conf" -exec sed -i 's/scarthgap/styhead/g' {} +
   ```

Khi hoàn tất quá trình build Yocto, bạn sẽ thu được file gốc Rootfs (`.tar.bz2`) tại đường dẫn Yocto của bạn (thường là `build/tmp/deploy/images/onekiwi-rzv2h-8gb/core-image-weston-onekiwi-rzv2h-8gb.rootfs.tar.bz2`).

---

## BƯỚC 3: BIÊN DỊCH NHÂN KERNEL (Bật hỗ trợ USB 3.0 & Camera UVC)

*Mục đích: Cấu hình lõi nhân Linux (file `Image`) để kích hoạt driver điều khiển cổng USB 3.0 và hỗ trợ cắm Camera USB.*

1. Tải (Clone) mã nguồn Linux RZ từ Github:
   ```bash
   git clone -b ubuntu/rz-v2h-rdk https://github.com/Renesas-SST/linux-rz.git
   cd linux-rz
   ```
2. Thiết lập trình biên dịch chéo (Cross-compiler) cho chip ARM64:
   ```bash
   export ARCH=arm64
   export CROSS_COMPILE=aarch64-linux-gnu-
   ```
3. Xoá cấu hình cũ và nạp cấu hình chuẩn của Renesas:
   ```bash
   make clean
   make renesas_defconfig
   ```
4. **Bật các module bắt buộc cho USB và Camera:**
   ```bash
   scripts/config --enable CONFIG_RESET_RZV2H_USBPHY_CTRL  # Bật nguồn cổng USB 3.0
   scripts/config --enable CONFIG_USB_VIDEO_CLASS           # Nhận diện Webcam/Camera (UVC)
   scripts/config --module CONFIG_SND_USB_AUDIO             # Hỗ trợ thu âm thanh qua USB
   make olddefconfig
   ```
5. Bắt đầu biên dịch Kernel:
   ```bash
   make -j$(nproc) Image modules
   ```
6. **Kết quả thu được:**
   Bạn sẽ thu được file Kernel đã được tích hợp driver USB tại: `arch/arm64/boot/Image`

---

## BƯỚC 4: ĐÓNG GÓI HỆ ĐIỀU HÀNH UBUNTU (File .WIC)

*Mục đích: Nhúng hệ thống Ubuntu 24.04, tích hợp driver OpenCV, Codec vào một file ảnh duy nhất để ghi ra thẻ nhớ.*

1. **Tải và giải nén bộ Script đóng gói Ubuntu:**
   Bạn cần tải bộ script đóng gói (`rz-build-scripts`) của OneKiwi từ đường dẫn sau:
   👉 [Tải rz-build-scripts tại đây](https://linuxbsp.onekiwi.com.vn/SOM_V2H/images/ubuntu/)
   
   Sau khi tải về và giải nén ra máy tính Ubuntu, hãy di chuyển vào thư mục script:
   ```bash
   cd rz-build-scripts/rz-cmn-srp
   ```
2. **Copy file Rootfs (từ Bước 2) sang đây và đổi tên (BẮT BUỘC):**
   ```bash
   cp /đường_dẫn_tới_thư_mục_yocto/build/tmp/deploy/images/onekiwi-rzv2h-8gb/core-image-weston-onekiwi-rzv2h-8gb.rootfs.tar.bz2 ./renesas-ubuntu.tar.bz2
   ```
3. **Đưa cấu hình mạch OneKiwi vào hệ thống đóng gói:**
   Copy thư mục `meta-renesas` của OneKiwi (đã tải ở Bước 2) vào trong không gian làm việc của script:
   ```bash
   mkdir -p yocto_rzcmn_board
   cp -r /đường_dẫn_tới_thư_mục_yocto/meta-renesas ./yocto_rzcmn_board/
   ```
4. **Tải thư viện Video Codec độc quyền của hãng (BẮT BUỘC):**
   Bạn bắt buộc phải cung cấp file Codec của hãng để script có thể tích hợp driver Video.
   * Truy cập trang chủ Renesas và tải file: `RTK0EF0045Z15001ZJ-v1.1.0_EN.zip`
   * Copy file `.zip` này thả trực tiếp vào trong thư mục `rz-cmn-srp`.
5. **Xử lý lỗi cấp quyền và định dạng Windows (CRLF):**
   Để tránh lỗi Yocto chết đứng không rõ nguyên nhân do nhiễm ký tự rác từ Windows, hãy chạy lệnh dọn dẹp sau:
   ```bash
   # Ép toàn bộ mã nguồn về chuẩn Unix
   sudo find .. -type f -print0 | sudo xargs -0 dos2unix
   
   chmod +x rz_builder.sh
   chmod +x jq-linux-amd64
   ```
6. **Bắt đầu tiến trình tạo file ảnh Ubuntu:**
   ```bash
   sudo MACHINE=onekiwi-rzv2h-8gb IMAGE=ubuntu-core ./rz_builder.sh build
   ```

> [!TIP]
> **Các hiện tượng bình thường trong lúc chạy Script:**
> * **Layer is missing & Cloning:** Bạn sẽ thấy script tự động chạy lệnh `git clone` để tải các layer (ví dụ: `meta-arm`). Đây là tính năng thông minh của script.
> * **Lỗi chmod (Cosmetic Error):** Nếu bạn thấy dòng chữ vàng/đỏ ghi `chmod: cannot access...`, hãy **YÊN TÂM BỎ QUA**.

7. **Kết quả thu được:**
   Khi màn hình báo `Deploying ubuntu build artifacts`, file ảnh hệ điều hành cuối cùng sẽ được xuất ra tại:
   `yocto_rzcmn_board/build/tmp/deploy/images/onekiwi-rzv2h-8gb/target/images/ubuntu-core-image.wic` (hoặc file `.wic.gz`)

---

## BƯỚC 5: GHI FILE HỆ ĐIỀU HÀNH (.WIC) VÀO THẺ NHỚ

Bước này thực hiện trên máy tính Windows của bạn.

1. **Copy file từ Server:** Tải file `ubuntu-core-image.wic` (hoặc `.wic.gz`) vừa được sinh ra ở Bước 4 từ máy Server về máy tính Windows của bạn.
2. **Tiến hành Flash:** Dùng phần mềm **Rufus** hoặc **BalenaEtcher** để ghi (flash) file `.wic` này vào thẻ nhớ MicroSD.

---

## BƯỚC 6: COPY ĐÈ KERNEL MỚI (IMAGE) VÀO THẺ NHỚ (QUAN TRỌNG)

> [!WARNING]
> Nếu bạn bỏ qua bước này, thẻ nhớ sẽ boot bằng Kernel mặc định và **sẽ KHÔNG nhận diện được Camera USB**. Bạn bắt buộc phải copy đè bản Kernel tùy chỉnh đã build ở Bước 3.

1. Sau khi flash thẻ nhớ xong ở Bước 5, **đừng vội rút thẻ ra**. Hãy rút ra và cắm lại vào máy tính Windows.
2. Windows sẽ nhận diện được một phân vùng ổ đĩa nhỏ của thẻ nhớ mang tên **`boot`** (khoảng vài chục MB).
3. Quay lại Server, lấy file `Image` vừa được sinh ra ở **Bước 3** (nằm tại `arch/arm64/boot/Image`).
4. **Copy chép đè** trực tiếp file `Image` này vào thư mục gốc của ổ **`boot`** trên thẻ nhớ. 

*(Lưu ý: File `.dtb` đã được Yocto đóng gói sẵn và chuẩn xác trong thẻ nhớ rồi, bạn không cần phải đụng tới hay chép đè file `.dtb` nữa).*

---

## BƯỚC 7: KIỂM TRA TRÊN BOARD

Khi đã chép đè xong file `Image`, rút thẻ nhớ ra và cắm vào board OneKiwi RZ/V2H. Đảm bảo cấu hình DIP Switch boot đúng từ thẻ nhớ, cắm cáp Serial, cắm Camera USB vào cổng USB 3.0 và khởi động.

Kiểm tra kết nối Camera bằng lệnh trên Terminal của Board:
```bash
# Kiểm tra cổng USB có điện và đã nhận diện phần cứng
dmesg | grep usb
lsusb

# Kiểm tra Camera Video đã nhận thành công chưa
ls /dev/video*
```
Nếu xuất hiện `/dev/video0`, xin chúc mừng, bạn đã hoàn tất thành công quá trình cài đặt!
