Lucky
1. 准备编译环境
首先需要在 x86_64 架构的 Linux 主机上安装必要的编译工具和依赖项:
sudo apt-get update
sudo apt-get install -y git build-essential gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \
u-boot-tools device-tree-compiler lzop bc libncurses5-dev libssl-dev mtools parted \
e2fsprogs dosfstools rsync
2. 获取 Rockchip SDK
从 Rockchip 官方或开源社区获取 RK3568 的 SDK 源代码:
mkdir rk3568_ubuntu && cd rk3568_ubuntu
git clone https://github.com/rockchip-linux/rkbin.git -b master --depth=1
git clone https://github.com/rockchip-linux/kernel.git -b linux-5.10-rockchip --depth=1
git clone https://github.com/rockchip-linux/u-boot.git -b master --depth=1
git clone https://github.com/rockchip-linux/external.git -b master --depth=1
3. 编译 U-Boot
配置并编译 U-Boot 引导加载程序:
cd u-boot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rk3568_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)
cd ..
4. 编译 Linux 内核
配置并编译 Linux 内核,根据需求选择配置选项:
cd kernel
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_linux_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig # 可选:自定义内核配置
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j$(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs -j$(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules -j$(nproc)
cd ..
5. 创建 Ubuntu 根文件系统
使用 debootstrap 工具创建基础 Ubuntu 根文件系统:
sudo apt-get install -y qemu-user-static debootstrap
mkdir -p rootfs/
# 下载Ubuntu Jammy (22.04)根文件系统
sudo debootstrap --arch=arm64 --foreign jammy rootfs/ http://ports.ubuntu.com/
sudo cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/
sudo chroot rootfs/ /debootstrap/debootstrap --second-stage
# 配置根文件系统
cat << EOF | sudo tee rootfs/etc/fstab
/dev/mmcblk0p1 /boot/efi vfat defaults 0 1
/dev/mmcblk0p2 / ext4 defaults 0 1
EOF
# 设置网络
sudo mkdir -p rootfs/etc/netplan/
cat << EOF | sudo tee rootfs/etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
EOF
6. 安装内核模块
将编译好的内核模块安装到根文件系统中:
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
INSTALL_MOD_PATH=../rootfs modules_install
7. 配置系统
配置 Ubuntu 系统的基本设置:
# 设置主机名
echo "rk3568-ubuntu" | sudo tee rootfs/etc/hostname
# 设置时区
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai rootfs/etc/localtime
# 创建initramfs
sudo mkinitramfs -o rootfs/boot/initrd.img-$(uname -r)
8. 创建启动脚本
创建 U-Boot 启动脚本:
cat << EOF > boot.cmd
setenv bootargs 'console=ttyFIQ0,115200 root=/dev/mmcblk0p2 rootwait rw earlycon=uart8250,mmio32,0xff1a0000'
load mmc 0:1 ${kernel_addr_r} Image
load mmc 0:1 ${fdt_addr_r} rockchip/rk3568-evb.dtb
booti ${kernel_addr_r} - ${fdt_addr_r}
EOF
mkimage -C none -A arm64 -T script -d boot.cmd boot.scr
sudo cp boot.scr rootfs/boot/
9. 创建 SD 卡 / EMMC 映像
创建分区表并生成可烧录的镜像文件:
# 创建空镜像文件
dd if=/dev/zero of=rk3568_ubuntu.img bs=1M count=4096
sudo losetup -fP rk3568_ubuntu.img
# 创建分区
sudo parted /dev/loop0 -- mklabel gpt
sudo parted /dev/loop0 -- mkpart primary fat32 1MiB 257MiB
sudo parted /dev/loop0 -- mkpart primary ext4 257MiB 100%
sudo parted /dev/loop0 -- set 1 boot on
# 格式化分区
sudo mkfs.vfat /dev/loop0p1
sudo mkfs.ext4 /dev/loop0p2
# 挂载分区
mkdir -p mnt/boot mnt/rootfs
sudo mount /dev/loop0p1 mnt/boot
sudo mount /dev/loop0p2 mnt/rootfs
# 复制文件到分区
sudo cp u-boot/idbloader.img u-boot/uboot.img u-boot/trust.img mnt/boot/
sudo cp kernel/arch/arm64/boot/Image mnt/boot/
sudo cp kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtb mnt/boot/
sudo cp rootfs/boot/boot.scr mnt/boot/
sudo cp -a rootfs/* mnt/rootfs/
# 卸载分区
sudo umount mnt/boot mnt/rootfs
sudo losetup -d /dev/loop0
10. 烧录系统
使用 RKDevTool 或 dd 工具将生成的镜像烧录到 SD 卡或 EMMC:
# 使用dd命令烧录到SD卡(替换为正确的设备名,如/dev/sdb)
sudo dd if=rk3568_ubuntu.img of=/dev/sdX bs=4M status=progress oflag=sync