【rk3566】瑞芯微制作根文件系统(sd)记录

烧录idbloader.img

现在貌似最新sdk里面叫idblock.img
在u-boot里面,将rkbin安装到u-boot同级目录下然后./make.sh rk3566后,进行./make.sh --idblock
这样目录下会多一个idblock.img,用rkdevelopertool烧录到sector 64下,也就是dd if=idblock.img of=/dev/sdxxx

在u-boot里烧录gpt分区表

原因是烧完u-boot启动后,rk默认参数会执行

然后出现

GUID Partition Table Header signature is wrong: 0xE3B60966E3B60965 != 0x5452415020494645

说明guid分区损坏(因为我之前把LBA1清空了)
然后根据文章深度探索uboot
gpt write mmc 0 $partitions 烧录gpt参数
关于partitions环境变量,在include/configs/rockchip-common.h里的PARTS_RKIMG定义了

#define PARTS_RKIMG \
	"uuid_disk=${uuid_gpt_disk};" \
	"name=uboot,start=8MB,size=4MB,uuid=${uuid_gpt_loader2};" \
	"name=trust,size=4M,uuid=${uuid_gpt_atf};" \
	"name=misc,size=4MB,uuid=${uuid_gpt_misc};" \
	"name=resource,size=16MB,uuid=${uuid_gpt_resource};" \
	"name=kernel,size=32M,uuid=${uuid_gpt_kernel};" \
	"name=boot,size=32M,bootable,uuid=${uuid_gpt_boot};" \
	"name=recovery,size=32M,uuid=${uuid_gpt_recovery};" \
	"name=backup,size=112M,uuid=${uuid_gpt_backup};" \
	"name=cache,size=512M,uuid=${uuid_gpt_cache};" \
	"name=system,size=2048M,uuid=${uuid_gpt_system};" \
	"name=metadata,size=16M,uuid=${uuid_gpt_metadata};" \
	"name=vendor,size=32M,uuid=${uuid_gpt_vendor};" \
	"name=oem,size=32M,uuid=${uuid_gpt_oem};" \
	"name=frp,size=512K,uuid=${uuid_gpt_frp};" \
	"name=security,size=2M,uuid=${uuid_gpt_security};" \
	"name=userdata,size=-,uuid=${uuid_gpt_userdata};\0"

然后在include/configs/rk3568_common.h定义了

#define CONFIG_EXTRA_ENV_SETTINGS \
	ENV_MEM_LAYOUT_SETTINGS \
	"partitions=" PARTS_RKIMG \
	ROCKCHIP_DEVICE_SETTINGS \
	RKIMG_DET_BOOTDEV \
	BOOTENV

但是这些uuid_gpt_loader2(具体定义看上面那篇文章或者rk官方的wiki)之类的参数貌似要自己输入

补充资料

GUID Partition Table

Orangepi-build的流程

1. build.sh

source “${SRC}”/scripts/main.sh
进入scripts下的main.sh

2. scripts/main.sh

通过whiptail选择菜单后确定BOARD变量,
然后

BOARD_TYPE="conf"
# shellcheck source=/dev/null
source "${EXTER}/config/boards/${BOARD}.${BOARD_TYPE}"
LINUXFAMILY="${BOARDFAMILY}"

执行相应板级配置文件

external/config/boards/orangepi3b.conf
BOARD_NAME="OPI 3B"
BOARDFAMILY="rockchip-rk356x"
BOOTCONFIG="orangepi-3b-rk3566_defconfig"
MODULES="sprdbt_tty sprdwl_ng"
MODULES_BLACKLIST_LEGACY="bcmdhd"
KERNEL_TARGET="legacy,current"
BOOT_LOGO="desktop"
BOOT_SUPPORT_SPI="yes"
DISTRIB_TYPE_LEGACY="focal jammy bullseye bookworm raspi"
BOOTFS_TYPE="fat"
IMAGE_PARTITION_TABLE="gpt"
BOOT_FDT_FILE="rockchip/rk3566-orangepi-3b.dtb"
REVISION="1.0.4"

然后LINUXFAMILY等于rockchip-rk356x

scripts/configuration.sh

其实scripts下面的sh都是会执行的,除了main.sh之外的都是一些工具函数,其中最重要(我认为)的是configuration.sh,里面调用了
source “${EXTER}/config/sources/families/${LINUXFAMILY}.conf”
也就是external/config/sources/families/rockchip-rk356x.conf

external/config/sources/families/rockchip-rk356x.conf

这里第一行include了source "${BASH_SOURCE%/*}/include/rockchip64_common.inc"

external/config/sources/families/include/rockchip64_common.inc

其中其实还调用了

source "${BASH_SOURCE%/*}/rk3399_gpu_vpu.inc"
source "${BASH_SOURCE%/*}/rk35xx_gpu_vpu.inc"
source "${BASH_SOURCE%/*}/rk356x_gpu_vpu.inc"

这些是一些vpu,gpu的依赖deb包,有兴趣的自己看
这个文件主要是指定了bl31,u-boot(本体,tpl,spl)怎么编译,打包(idbloader/idblock),然后写入(dd)到sd卡
比如打包tpl+spl

		if [[ $BOARD =~ orangepicm4|orangepi3b ]]; then
			tools/mkimage -n rk3568 -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img
		elif [[ $BOARD =~ orangepi4-lts|orangepi800 ]]; then
			tools/mkimage -n rk3399 -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img
		fi

打包ddr+spl(第一次知道ddr还可以和spl结合而不是和miniloder)

		elif [[ $BOOT_USE_BLOBS == yes ]]; then

		local tempfile=$(mktemp)
		tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin
		cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin
		loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000
		trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini

        elif [[ $BOOT_SCENARIO == "spl-blobs" || $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]]; then
		if [[ $BOARD =~ orangepicm4|orangepi3b ]]; then
			tools/mkimage -n rk3568 -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img
		elif [[ $BOARD =~ orangepi4-lts|orangepi800 ]]; then
			tools/mkimage -n rk3399 -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img
		fi

还有比如考虑把uboot全部打包成一个img

	if [[ ${MERGE_UBOOT} ]]; then

		display_alert "Merge u-boot" "u-boot-${BOARD}-merged.bin" "info"

		dd if=/dev/zero of=u-boot-${BOARD}-merged.bin bs=1M count=32 > /dev/null 2>&1
		dd if=idbloader.bin of=u-boot-${BOARD}-merged.bin seek=64 conv=notrunc status=none
		dd if=uboot.img of=u-boot-${BOARD}-merged.bin seek=16384 conv=notrunc status=none
		dd if=trust.bin of=u-boot-${BOARD}-merged.bin seek=24576 conv=notrunc status=none
		mv u-boot-${BOARD}-merged.bin ${DEB_STORAGE}/u-boot/
	fi

等等

是怎么启动kernel的

未完待续(其实就是在fat32加载kernel,然后在kernel的启动参数里(这个在设备树写进去了)对应好rootfs的gpt partition的uuid就行

香橙派mali加载原理

linux的loader按照这个顺序加载shared library

The order is documented in the manual of the dynamic linker, which is ld.so. It is:
1.directories from LD_LIBRARY_PATH;
2.directories from /etc/ld.so.conf;
3./lib;
4./usr/lib.

source
然后在香橙派的/etc/ld.so.conf.d/下面有mali的override,然后他最优先找/usr/lib/aarch64-linux-gnu/mali这个路径
然后glmark2-es2优先加载这个路径的so库libEGL.so,因此不用慌都丢在aarch64-linux-gnu这个路径下和mesa的库冲突

orangepi@orangepi3b:/etc$ ls /etc/ld.so.conf.d/
00-aarch64-mali.conf             fakeroot-aarch64-linux-gnu.conf
aarch64-linux-gnu.conf           libc.conf
orangepi@orangepi3b:/etc$ vim /etc/ld.so.conf.d/

并且/usr/lib/aarch64-linux-gnu这个路径也是由aarch64-linux-gnu.conf这个文件确定的

# Multiarch support
/usr/local/lib/aarch64-linux-gnu
/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu

香橙派怎么实现开机显示cpu温度等信息的

通过/etc/update-motd.d下面的文件显示motd

香橙派官方运用rkbin打包idbloader(idblock)

见https://github.com/orangepi-xunlong/orangepi-build/blob/d91089989f73c77e8346400a32f5cd54206992c0/external/config/sources/families/include/rockchip64_common.inc#L67

tools/mkimage -n rk3568 -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img
dd if=/dev/zero of=u-boot-${BOARD}-merged.bin bs=1M count=32 > /dev/null 2>&1
dd if=idbloader.bin of=u-boot-${BOARD}-merged.bin seek=64 conv=notrunc status=none
dd if=uboot.img of=u-boot-${BOARD}-merged.bin seek=16384 conv=notrunc status=none
dd if=trust.bin of=u-boot-${BOARD}-merged.bin seek=24576 conv=notrunc status=none
  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值