milkv-duo启动流程分析:手动构建fip.bin [2/2]

本文详细描述了如何在RISC-V架构下手动编译FSBL以获取bl2.bin,解决编译过程中的错误,并使用fiptool.py创建fip.bin的过程,包括设置CPU参数和加载二进制文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手动合成fip.bin和boot.sd [2/2]

编译FSBL

编译FSBL是为了得到bl2.bin。注意到我们需要配置一些参数:

ARCH ?=

ifneq ($(origin CROSS_COMPILE),command line)
ifeq ($(ARCH),riscv)
CROSS_COMPILE := ${CROSS_COMPILE_GLIBC_RISCV64}
BOOT_CPU ?= riscv
else
CROSS_COMPILE := ${CROSS_COMPILE_64}
BOOT_CPU := aarch64
ARCH := aarch64
endif
endif

ifeq (${CHIP_ARCH},)
$(error CHIP_ARCH is undefined)
endif

ifeq (${CROSS_COMPILE},)
$(error CROSS_COMPILE is undefined)
endif

我们需要

make ARCH=riscv CROSS_COMPILE=riscv64-buildroot-linux-musl- BOOT_CPU=riscv CHIP_ARCH=cv180x PROJECT_FULLNAME=cv1800b_milkv_duo_sd bl2

此时又报错:

lib/cpu/riscv/bl2_entrypoint.S: Assembler messages:
lib/cpu/riscv/bl2_entrypoint.S:60: Error: unknown CSR `mxstatus'
lib/cpu/riscv/bl2_entrypoint.S:69: Error: unknown CSR `mcor'
lib/cpu/riscv/bl2_entrypoint.S:71: Error: unknown CSR `mcor'
lib/cpu/riscv/bl2_entrypoint.S:74: Error: unknown CSR `mhcr'
lib/cpu/riscv/bl2_entrypoint.S:77: Error: unknown CSR `mcor'
lib/cpu/riscv/bl2_entrypoint.S:79: Error: unknown CSR `mcor'
lib/cpu/riscv/bl2_entrypoint.S:82: Error: unknown CSR `mhcr'
make: *** [Makefile:195: build/cv180x/bl2/bl2_entrypoint.o] Error 1

打开lib/cpu/riscv/bl2_entrypoint.S,在头部添加

#define mxstatus 0x7c0
#define mhcr 0x7c1
#define mcor 0x7c2

问题解决。继续,又碰到riscv64-buildroot-linux-musl-ld: warning: build/cv180x/bl2/bl2.elf has a LOAD segment with RWX permissions。直接禁用掉--fatal-warnings。修改lib/cpu/riscv/cpu.mk

ASFLAGS +=\
$(CPPFLAGS) \
-DRISCV \
-D__ASSEMBLY__ \
-march=rv64imafdc -mstrict-align \
-mcmodel=medany \
-mabi=lp64d \
-ffreestanding  \
-Wa

TF_LDFLAGS += \
-Os \
--gc-sections \
${TF_LDFLAGS_aarch64}

问题解决,在build/cv180x下可发现bl2.bin

riscv64-buildroot-linux-musl-ld: warning: build/cv180x/bl2/bl2.elf has a LOAD segment with RWX permissions
  BIN     build/cv180x/bl2.bin
riscv64-buildroot-linux-musl-objcopy -O binary build/cv180x/bl2/bl2.elf build/cv180x/bl2.bin

Built build/cv180x/bl2.bin successfully

  SYM     build/cv180x/bl2/bl2.sym
riscv64-buildroot-linux-musl-readelf -s build/cv180x/bl2/bl2.elf | sort -b -r -g -k 3 > build/cv180x/bl2/bl2.sym
  OD      build/cv180x/bl2/bl2.dis
riscv64-buildroot-linux-musl-objdump -dx build/cv180x/bl2/bl2.elf > build/cv180x/bl2/bl2.dis
  TARGET bl2

制作fip.bin

制作chip_conf.bin

进入fsbl/plat/cv180x/chip_conf.py,执行./chip_conf.py chip_conf.bin

ddr_param.bin

此二进制文件位于test/cv181x/ddr_param.bin,没有关于其的更多信息。

fiptool.py

使用以下脚本可以使用fiptool.py脚本生成需要的二进制文件。

mkdir fip-play
cp fsbl/build/cv180x/bl2.bin fip-play/
cp fsbl/plat/cv180x/chip_conf.bin fip-play/
cp fsbl/plat/cv180x/fiptool.py
cp fsbl/test/cv181x/ddr_param.bin fip-play/
cp opensbi/build/platform/generic/firmware/fw_dynamic.bin fip-play/
cp u-boot/u-boot.bin fip-play/

./fiptool.py genfip fip.bin \
    --MONITOR_RUNADDR=0x80000000 \
    --CHIP_CONF=chip_conf.bin \
    --NOR_INFO=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \
    --NAND_INFO=00000000 \
    --BL2=bl2.bin \
    --BLCP_IMG_RUNADDR=0x05200200 \
    --BLCP_PARAM_LOADADDR=0 \
    --DDR_PARAM=ddr_param.bin \
    --MONITOR=fw_dynamic.bin \
    --LOADER_2ND=u-boot.bin

此时,目录下出现了fip.bin。上电,已经可以成功进入u-boot。

[root@fanruan bin]# ./finekey INFO : 2025/07/23 15:34:42 Reading config file /opt/ops/finekey/conf/finekey.yaml INFO : 2025/07/23 15:34:42 use default ip:192.168.100.120 INFO : 2025/07/23 15:34:42 192.168.100.120 use local exec INFO : 2025/07/23 15:34:42 exec sudo success INFO : 2025/07/23 15:34:42 node selinux status check pass got [Disabled] INFO : 2025/07/23 15:34:42 node root path acls check pass INFO : 2025/07/23 15:34:42 begin check config valid! INFO : 2025/07/23 15:34:42 The deployment mode is online INFO : 2025/07/23 15:34:42 over check config valid! INFO : 2025/07/23 15:34:42 node 192.168.100.120 check ~/data/fanruan_71df1430 path auto mount or not INFO : 2025/07/23 15:34:42 node 192.168.100.120 found ~/data/fanruan_71df1430 path auto mounted INFO : 2025/07/23 15:34:42 begin check net and port~ INFO : 2025/07/23 15:34:42 begin start server and bind ports in all nodes~ INFO : 2025/07/23 15:34:43 192.168.100.120 time: 2025-07-23/15:34:43 +0800 INFO : 2025/07/23 15:34:43 start check net config bip and fip INFO : 2025/07/23 15:34:43 [MTUChecker] interface ens192 mtu 1500. INFO : 2025/07/23 15:34:44 192.168.100.120 begin install docker~ INFO : 2025/07/23 15:34:44 skip add docker group to user root INFO : 2025/07/23 15:34:44 docker exist, docker client version:Docker version 26.1.4, build 5650f9b INFO : 2025/07/23 15:34:44 no need to check docker bin path for docker version [26.1.4] INFO : 2025/07/23 15:34:44 node 192.168.100.120 no need to check docker bin path for docker version [26.1.4] INFO : 2025/07/23 15:34:44 chosen docker version:Docker version 26.1.4, build 5650f9b INFO : 2025/07/23 15:34:44 docker already start! INFO : 2025/07/23 15:34:44 docker install success ERROR: 2025/07/23 15:34:44 create network fanruan_exporter_net failed, cmd : docker network create fanruan_exporter_net --subnet=10.17.0.0/16 --gateway=10.17.0.1 --opt com.docker.network.bridge.name=br-fanruan , error: res:Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-fanruan -j RETURN: iptables: No chain/target/match by that name. (exit status 1)) , err:exit status 1 ERROR: 2025/07/23 15:34:44 create exporter net failed, error: res:Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-fanruan -j RETURN: iptables: No chain/target/match by that name. (exit status 1)) , err:exit status 1 ERROR: 2025/07/23 15:34:44 install docker and repo error! please check check error log info! INFO : 2025/07/23 15:34:44 begin rollback deployed components ERROR: 2025/07/23 15:34:44 deployment fail, please check error log info and fix it! bye~
最新发布
07-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值