diff --git a/device/rockchip/ok3568c/config b/device/rockchip/ok3568c/config index 6e088ed..4dea873 100644 --- a/device/rockchip/ok3568c/config +++ b/device/rockchip/ok3568c/config @@ -26,12 +26,14 @@ ROOT_FSTYPE="ext4" # platform section # # put it in blobs dir -RK_DDR="rk3568_ddr_1560MHz_v1.21.bin" +RK_DDR="rk3568_ddr_1560MHz_v1.23.bin" BL31="rk3568_bl31_v1.44.elf" +UBOOT_BUILD="make KCFLAGS='-Wno-error' BL31={BL31} spl/u-boot-spl.bin u-boot.dtb u-boot.itb CROSS_COMPILE='{ARCH}-linux-gnu-'" MKIMAGE_CMD="tools/mkimage -n {BOOT_SOC} -T rksd -d {RK_DDR}:spl/u-boot-spl.bin idbloader.img" -UBOOT_BUILD="make BL31={BL31} spl/u-boot-spl.bin u-boot.dtb u-boot.itb CROSS_COMPILE='{ARCH}-linux-gnu-'" -# make BL31=rk3568_bl31_v1.44.elf spl/u-boot-spl.bin u-boot.dtb u-boot.itb CROSS_COMPILE="aarch64-linux-gnu-" +# url to download rockchip bootloader blobs +BLOBS_URL="https://github.com/rockchip-linux/rkbin/raw/refs/heads/master/bin/rk35/" +# make BL31=rk3568_bl31_v1.44.elf spl/u-boot-spl.bin u-boot.dtb u-boot.itb CROSS_COMPILE="aarch64-linux-gnu-" # dd if=idbloader.img of=/dev/loop1 seek=64 conv=notrunc status=none # dd if=u-boot.itb of=/dev/loop1 seek=16384 conv=notrunc status=none # mkimage -A arm64 -O linux -T ramdisk -C gzip -n uInitrd -d /boot/initramfs-6.1.75.img /boot/uInitrd diff --git a/utils/common.py b/utils/common.py index a3734f2..e91eed1 100644 --- a/utils/common.py +++ b/utils/common.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import os import subprocess +from urllib.request import urlretrieve def load_config(config_path): config = {} @@ -18,3 +19,16 @@ def clone_repo(repo_url, branch, dest_dir, name): else: os.makedirs(dest_dir, exist_ok=True) subprocess.run(["git", "clone", "--depth", "1", repo_url, "-b", branch, dest_dir], check=True) + + +def download_blob(blob_url, destination): + """Download a file from the given URL and save it to the destination.""" + try: + print(f"Downloading {blob_url} to {destination}...") + os.makedirs(os.path.dirname(destination), exist_ok=True) + urlretrieve(blob_url, destination) + print(f"Downloaded: {destination}") + return True + except Exception as e: + print(f"Warning: Unable to download {blob_url}. {e}") + return False diff --git a/utils/uboot.py b/utils/uboot.py index 353d5a2..da6e3fa 100644 --- a/utils/uboot.py +++ b/utils/uboot.py @@ -5,9 +5,9 @@ import os import sys import subprocess from utils.common import clone_repo +from utils.common import download_blob from utils.patch import apply_uboot_patches - def build_uboot(TMP_DIR, BASE_DIR, config, vendor, device): if "UBOOT" not in config or "UBOOT_VERSION" not in config: print("U-Boot configuration not found. Skipping U-Boot build.") @@ -18,28 +18,53 @@ def build_uboot(TMP_DIR, BASE_DIR, config, vendor, device): uboot_config = config.get("UBOOT_CONFIG") uboot_build_cmd = config.get("UBOOT_BUILD") mkimage_cmd = config.get("MKIMAGE_CMD") + blobs_url = config.get("BLOBS_URL", "") - blobs_dir = os.path.join(BASE_DIR, "device", vendor, device, "blobs") - rk_ddr = os.path.join(blobs_dir, config.get("RK_DDR", "")) - bl31 = os.path.join(blobs_dir, config.get("BL31", "")) - - if not os.path.isfile(rk_ddr) or not os.path.isfile(bl31): - print(f"Missing required files in blobs directory: {rk_ddr}, {bl31}") - return - + # Clone U-Boot repository uboot_dir = os.path.join(TMP_DIR, vendor, device, "u-boot") clone_repo(uboot_git, uboot_branch, uboot_dir, "u-boot") apply_uboot_patches(BASE_DIR, vendor, device, uboot_dir) + # Download RK_DDR blob to uboot_dir + rk_ddr = None + if "RK_DDR" in config: + rk_ddr = os.path.join(uboot_dir, os.path.basename(config.get("RK_DDR"))) + rk_ddr_url = os.path.join(blobs_url, os.path.basename(rk_ddr)) + if not os.path.isfile(rk_ddr): + if not download_blob(rk_ddr_url, rk_ddr): + print(f"Warning: RK_DDR blob {rk_ddr_url} could not be downloaded.") + + # Download BL31 blob to uboot_dir + bl31 = None + if "BL31" in config: + bl31 = os.path.join(uboot_dir, os.path.basename(config.get("BL31"))) + bl31_url = os.path.join(blobs_url, os.path.basename(bl31)) + if not os.path.isfile(bl31): + if not download_blob(bl31_url, bl31): + print(f"Warning: BL31 blob {bl31_url} could not be downloaded.") + + # Build U-Boot os.chdir(uboot_dir) try: print(f"Building U-Boot for {vendor}/{device} {uboot_config}...") subprocess.run(["make", uboot_config], check=True) - build_command = uboot_build_cmd.format(BL31=bl31, ARCH=config.get("ARCH", "aarch64")) + + # Format U-Boot build command + build_command = uboot_build_cmd.format( + BL31=bl31 or "", + ARCH=config.get("ARCH", "aarch64") + ) subprocess.run(build_command, shell=True, check=True) - mkimage_command = mkimage_cmd.format(BOOT_SOC=config.get("BOOT_SOC", ""), RK_DDR=rk_ddr) + + # Format mkimage command + mkimage_command = mkimage_cmd.format( + BOOT_SOC=config.get("BOOT_SOC", ""), + RK_DDR=rk_ddr or "" + ) + print(mkimage_command) subprocess.run(mkimage_command, shell=True, check=True) + print("U-Boot build completed successfully.") except subprocess.CalledProcessError as e: print(f"Error during U-Boot build: {e}") - + os.chdir(BASE_DIR)