radxa Rock 5B rk3588 buildroot 编译

rockchip RK3588 Rock 5B 开发板-启动

硬件:RK3588 Rock 5B
软件: Rock 5B U-Boot 2017.09, linux 5.10.110-gd29d8a1f1f33-dirty
问题
硬件: 散热小风扇 2W, Rock 5B 16G-RAM, 256G 固态硬盘, 65W DP 充电器, 诱骗稳压器(正点原子 DP100)

1.重启问题

	我使用小米的67W充电器 Type-A(5V 3A),多数时间启动过程中重启,且一直循环。
    官方信息:USB Type‑C™ PD Version 2.0 with 9V/2A, 12V/2A, 15V/2A and 20V/2A.

• Power adapter with fixed voltage in 5V to 20V range on the USB Type‑C port
• 5V Power applied to the GPIO PIN 2 & 4
The recommended power source should be able to produce, at least, 24W without a M.2 SSD or 30W
with a M.2 SSD.
注意: 我这边使用方案为普通 DP电源 65W(5V 3A, 9V 3A, 12V 3A, 15V 3A, 20V 3.25A) + DP100(正点原子)诱骗到20V 然后降压到12V 使用。看电影功耗在7W(12v, 0.6a) ~12.5W(12v, 1.2),跟网络关系很大,在使用浏览器时功耗较高。

2.buildroot 问题

	A. 使用在buildroot 中指定 Rock 5B 的uboot, kernel. 后出现打包 idbloader.img 失败。 
	 原因:使用,buildroot 编译出的uboot-tools(mkimage) 不支持 rk3588,需要使用 rock 5b uboot 下的 /tools/mkimage 做打包
	B. ubuntu22.04 编译打包 BL31 时调用python 失败(该错误不会导致编译失败,需要谨慎)
	 原因:ubuntu 22.04 默认安装的是 python3(python3.10 需要降级到 python3.8), uboot 内部打包 BL31 的python 脚本指定是 python。需要将python 链接到python3

3.NVME 盘启动问题

	A. uboot 通过 ctrl+c ,进入命令行(如果无法进入,请在uboot 内部将 stdin disable 关闭 CONFIG_DISABLE_CONSOLE ),然后首先输入 pci enum 查找到设备。然后再进行 nvme scan, nvme info 扫描

4.WIFI 网卡无法启动问题

我是用的是 rtl8852be ,但是网卡无法扫描到设备, 蓝牙不能使用

该版本中有wifi rtl8852be 驱动错误
/kernel-linux-5.10-gen-rkr3.4/drivers/net/wireless/rockchip_wlan/rtl8852be/phl/phl_cmd_ser.c 修改如下即可

_phl_ser_mdl_init
	pq_init(drv, &cser->stslist); # 添加 修复bug
_phl_ser_mdl_deinit
	pq_deinit(drv, &cser->stslist); # 添加 修复bug

5. RK3588 U-Boot编译报错

U-Boot 2017.09 编译时,需要使用到python, 但 ubuntu 默认安装python3 (python3.10 降级到 python3.8)需要 ,需要ln -s [python3] [python]链接。
U-Boot 编译产生 u-boot.itb, u-boot-spl.bin 两个文件,在后面要用到(需要通过u-boot-spl.bin 合成 idbloader.img), rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.08.bin 文件由官方SDK 提供(注意: mkimage必须使用RK 提供的uboot/tools下的工具)

U-Boot-2017.09/tools/mkimage -n rk3588 -T rksd -d board/radxa/rock-5b/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.08.bin:$BINARIES_DIR/u-boot-spl.bin $BINARIES_DIR/idbloader.img

6. 编译U-Boot/Kernel 时出现错误

原因Ubuntu22.04 安装gcc 版本为 gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04.1)
解决方式: 降级 gcc 版本到 gcc9

/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here

出现某些dts文件编译报错直接修改u-boot/arch/arm/dts/Makefile将报错的dts 删除

  DTC     arch/arm/dts/rk3036-sdk.dtb
  DTC     arch/arm/dts/rk3066a-mk808.dtb
  DTC     arch/arm/dts/rk3126-evb.dtb
  DTC     arch/arm/dts/rk3128-evb.dtb
  DTC     arch/arm/dts/rk3188-radxarock.dtb
  DTC     arch/arm/dts/rk3288-evb.dtb
  DTC     arch/arm/dts/rk3288-fennec.dtb
  DTC     arch/arm/dts/rk3288-firefly.dtb
  DTC     arch/arm/dts/rk3288-miqi.dtb
  DTC     arch/arm/dts/rk3288-phycore-rdk.dtb
Error: arch/arm/dts/.rk3036-sdk.dtb.pre.tmp:77.1-10 syntax error
FATAL ERROR: Unable to parse input tree
make[2]: *** [scripts/Makefile.lib:319: arch/arm/dts/rk3036-sdk.dtb] Error 1
make[2]: *** Waiting for unfinished jobs....
  DTC     arch/arm/dts/rk3288-popmetal.dtb
Error: arch/arm/dts/.rk3188-radxarock.dtb.pre.tmp:383.1-10 syntax error
FATAL ERROR: Unable to parse input tree
make[2]: *** [scripts/Makefile.lib:319: arch/arm/dts/rk3188-radxarock.dtb] Error 1
make[1]: *** [dts/Makefile:101: arch-dtbs] Error 2
make: *** [Makefile:882: dts/dt.dtb] Error 2
ERROR: Running build_uboot failed!
ERROR: exit code 2 from line 245:

7.Buildroot 配置文件 rock_5b_defconfig

# Architecture
BR2_aarch64=y
BR2_cortex_a76_a55=y

# Linux headers same as kernel, a 5.10 series
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y

# Bootloader
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="rock5b-2017.09"
BR2_TARGET_UBOOT_VERSION="rock5b-2017.09"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rock-5b-rk3588"
BR2_TARGET_UBOOT_NEEDS_DTC=y
BR2_TARGET_UBOOT_NEEDS_PYTHON3=y
BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
# BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y
# BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y
BR2_TARGET_UBOOT_FORMAT_DTB=y
BR2_TARGET_UBOOT_FORMAT_ITB=y
BR2_TARGET_UBOOT_SPL=y
BR2_TARGET_UBOOT_SPL_NAME="spl/u-boot-spl.bin"
BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="BL31=$(TOPDIR)/board/radxa/rock-5b/rk35/rk3588_bl31_v1.28.elf"

# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="rock5b-5.10.110"
BR2_LINUX_KERNEL_USE_DEFCONFIG=y
BR2_LINUX_KERNEL_DEFCONFIG="rockchip_linux"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3588-rock-5b"
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y

# system
BR2_DL_DIR="$(TOPDIR)/../dl"
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_OVERLAY="../configs/rootfs"
BR2_TARGET_GENERIC_ROOT_PASSWD="root"

# toolchain
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_PATH="../gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-none-linux-gnu"
BR2_TOOLCHAIN_EXTERNAL_GCC_10=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_WCHAR=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
BR2_TOOLCHAIN_EXTERNAL_INET_RPC=n

# Filesystem
BR2_TARGET_GENERIC_HOSTNAME="rock-5b"
BR2_TARGET_GENERIC_ISSUE="Welcome to ROCK-5B"
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="160M"
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_LZO=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/radxa/rock-5b/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/radxa/rock-5b/genimage.cfg"
BR2_ROOTFS_POST_BUILD_SCRIPT="board/radxa/rock-5b/post-build.sh"

合成脚本 genimage.sh

output/build/uboot-rock5b-2017.09/tools/mkimage -n rk3588 -T rksd -d board/radxa/rock-5b/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.08.bin:$BINARIES_DIR/u-boot-spl.bin $BINARIES_DIR/idbloader.img

配置genimage.cfg

image boot.vfat {
	vfat {
		files = {
			"Image",
			"rootfs.cpio.lzo",
			"rk3588-rock-5b.dtb",
			"extlinux"
		}
	}
	size = 112M
}

image norflash.img {
	hdimage {
	}
	partition loader1 {
		in-partition-table = "no"
		image = "idbloader.img"
		offset = 32K
	}
	partition loader2 {
		in-partition-table = "no"
		image = "u-boot.itb"
		offset = 8M
	}
}

image sdcard.img {
	hdimage {
		partition-table-type = "gpt"
		# default GPT location conflicts with spl, move it after
		gpt-location = 1M
	}

	partition loader1 {
		in-partition-table = "no"
		image = "idbloader.img"
		offset = 32K
	}

	partition loader2 {
		in-partition-table = "no"
		image = "u-boot.itb"
		offset = 8M
	}

	partition boot {
		partition-type-uuid = c12a7328-f81f-11d2-ba4b-00a0c93ec93b
		bootable = "true"
		image = "boot.vfat"
		offset = 16M
	}
	partition rootfs {
		partition-type-uuid = b921b045-1df0-41c3-af44-4c6f280d3fae
		image = "rootfs.ext4"
	}
}

extlinux.conf

label RK3588_ROCK_5B linux
  kernel /Image
  initrd /rootfs.cpio.lzo
  devicetree /rk3588-rock-5b.dtb
  append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/ram0 rw rootwait
RK3588S是瑞芯微推出的一款高性能、低功耗的处理器芯片,适用于嵌入式系统和物联网设备。Buildroot是一个开源的嵌入式Linux系统构建工具,可以帮助用户快速构建定制化的Linux系统。 要进行RK3588S的Buildroot编译,可以按照以下步骤进行操作: 1. 下载Buildroot源码:首先需要从Buildroot官方网站(https://buildroot.org/)下载最新版本的Buildroot源码包。 2. 配置Buildroot:解压下载的源码包后,进入解压后的目录,在终端中运行`make menuconfig`命令,进入配置界面。 3. 选择目标平台:在配置界面中,选择`Target options`,然后选择`Target Architecture`,找到并选择`ARM (little endian)`作为目标平台。 4. 配置目标设备:在配置界面中,选择`Target options`,然后选择`Target options`,根据实际情况选择RK3588S所在的开发板型号。 5. 配置文件系统:在配置界面中,选择`Filesystem images`,然后选择`tar the root filesystem`,选择所需的文件系统格式和压缩方式。 6. 配置内核:在配置界面中,选择`Kernel`,然后选择`Kernel version`,输入所需的内核版本号。可以选择使用已有的内核配置文件或者手动配置内核选项。 7. 配置软件包:在配置界面中,选择`Target packages`,可以选择需要的软件包和工具链。 8. 保存配置并退出:完成配置后,选择`Save`保存配置,然后选择`Exit`退出配置界面。 9. 开始编译:在终端中运行`make`命令,开始进行编译编译过程可能需要一段时间,取决于系统配置和计算机性能。 10. 获取编译结果:编译完成后,在Buildroot源码目录下的`output/images`目录中可以找到生成的镜像文件和根文件系统。 以上是RK3588S的Buildroot编译的基本步骤,具体的配置和操作可能会因实际需求和环境而有所不同。建议在进行编译前,详细阅读Buildroot的文档和相关资料,以确保正确配置和操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值