首页 > 其他分享 >milkv-duo启动流程分析:手动构建fip.bin [2/2]

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

时间:2023-10-15 19:33:57浏览次数:40  
标签:bin fip duo riscv bl2 cv180x build

手动合成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。

标签:bin,fip,duo,riscv,bl2,cv180x,build
From: https://www.cnblogs.com/maomaotou-thu/p/17766024.html

相关文章

  • BinLog的基本原理
    BinLog记录模式与文件结构 BinLog基本概念Binlog是记录所有MySQL表结构变更以及表数据发生变更的二进制日志。binlog中不会记录select、show等的查询操作,binlog是以事件形式记录相关的变更操作,并且还会包含语句执行所消耗的时间,它从整体上有两个最重要的场景:主从复制、数据......
  • 了解 MySQL 数据库的三大日志(redo log、undo log、binary log)
    前言MySQL中有以下几种日志,包括:redolog(重做日志)undolog(回滚日志)binarylog(二进制日志)errorlog(错误日志)slowquerylog(慢查询日志)generallog(一般查询日志)relaylog(中继日志)事务的特性:原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子......
  • CF1204D2 Kirk and a Binary String (hard version) 题解
    CF1204D2KirkandaBinaryString(hardversion)题解分析先来分析\(01\)串的最长不下降子序列。全是\(0\)显然是不下降的,如果中间出现一个\(1\),为了维护不下降的性质,后面就只能全是\(1\)。一句话概括一下,\(0\)后面能跟\(0,1\),\(1\)后面只能跟\(1\)。现在来分析这......
  • Binary Tree Postorder Traversal
    SourceGivenabinarytree,returnthepostordertraversalofitsnodes'values.ExampleGivenbinarytree{1,#,2,3},1\2/3return[3,2,1].ChallengeCanyoudoitwithoutrecursion?题解1-递归首先使用递归便于理解。C++-Tra......
  • Android 的ViewBinding实现的原理
    AndroidViewBinding是一种用于替代传统的findViewById和findViewById的视图绑定方法。它允许你以类型安全的方式访问应用布局中的视图元素,而无需手动查找它们。ViewBinding的实现原理如下:布局文件解析:在编译期间,AndroidGradle插件会扫描项目中的布局文件(XML文件),并为每个......
  • /usr/bin/ld: cannot find -lxxx 的解决方法总结
    问题原因:1、系统没有按照相应的lib2、相对应的lib版本不对3、lib的symboliclink不对,没有连接到正确的函数库文件(so)解决:对于1,2种情况:apt-getinstalllibxxx-dev对于3中情况:可以先用locate和find找到指定的lib文件,查看链接文件是否正确的指向了我们希望的lib,如果不是,......
  • [论文精读][基于点云的蛋白-配体亲和力]A Point Cloud-Based Deep Learning Strategy
    我需要的信息代码,论文不考虑共价键,每个点包括了六种原子信息,包括xyz坐标,范德华半径,原子重量以及来源(1是蛋白质,-1是配体)。原子坐标被标准化,其它参数也被标准化。对不足1024个原子的的复合体,补0到1024。增加考虑的原子从1024到2048,没有提升,增加原子信息通道,没有提升(见resul......
  • vue中v-bind绑定元素属性
    vue中v-bind绑定元素属性<html>  <head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>vue.js</title>  </head>  <b......
  • Android 通过bin二进制程序调用jar原理
    最近在研究monkey测试,发现monkey测试的代码都是JAVA编写的,通过编译生成jar包,而我们在执行测试时直接执行/system/bin/monkey这个二进制程序的,那么它是如何能调起java程序的呢?先来看看monkey二进程程序的生成.development\cmds\monkey\Android.mkLOCAL_PATH:=$(callmy-dir)i......
  • (关于创建时用com/example和com.example导致的mapper包对应不上)org.apache.ibatis.bi
    日志输出:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptionisorg.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.example.mapper.EmpMapper.li......