[bsp][cvitek] Milk-V Duo 256M Supports running ARM large core and RISCV small core

支持将rtthread.bin和dtb文件合成boot.sd文件,使用uboot直接通过bootcmd命令启动rtthread内核。

支持构建带有小核riscv程序的fip.bin文件,保证在运行arm大核的同时运行小核的riscv程序。
This commit is contained in:
liYangYang
2024-04-21 09:52:47 -04:00
committed by GitHub
parent 3ff2b08d82
commit f13220d911
15 changed files with 925 additions and 1 deletions
+1
View File
@@ -0,0 +1 @@
Image
+17 -1
View File
@@ -63,7 +63,7 @@ scons -j12
## 3. 运行
> 目前仅支持使用uboot对 `rtthread.bin` 文件进行加载,uboot对 `boot.sd` 的加载方式后续会实现。
### 3.1 uboot加载rtthread.bin
1. 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 `FAT32`
@@ -81,6 +81,22 @@ go 0x80200000
> 0x80200000为rtthread.bin加载到内存的位置,可在menuconfig中自己修改,注意不能与小核固件加载位置重叠。
### 3.2 uboot加载boot.sd
1. 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 `FAT32`
2. 将bsp的boot目录下的 `fip.bin` 和编译生成的 `boot.sd` 复制 SD 卡第一个分区中。后续更新固件只需要复制 `boot.sd` 文件即可。
配置**串口0**参数: 115200 8N1 ,硬件和软件流控为关。
直接上电运行,uboot会自动调用bootcmd解析boot.sd文件,然后加载`rtthread.bin`运行。
### 3.3 如何生成fip.bin
在本bsp的boot/milkv-duo256m目录下存放了所有需要构建出fip.bin的一些依赖文件和相关脚本。用户只需要在boot目录下执行`combine.sh`即可生成fip.bin。
> 如何用户编译了小核c906_little的bsp,那么`combine.sh`脚本将会生成带有小核程序的fip.bin。未编译则不会。
完成后可以看到串口的输出信息:
**标准版log信息:**
+44
View File
@@ -0,0 +1,44 @@
C906_LITTLE_BIN_PATH=../../c906_little/rtthread.bin
GEN_FIP_PATH=.
DEPENDS_FILE_PATH=${GEN_FIP_PATH}/milkv-duo256m
BLCP_IMG_RUNADDR=0x05200200
BLCP_PARAM_LOADADDR=0
NAND_INFO=00000000
NOR_INFO='FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
FIP_COMPRESS=lzma
CHIP_CONF_PATH=${DEPENDS_FILE_PATH}/chip_conf.bin
DDR_PARAM_TEST_PATH=${DEPENDS_FILE_PATH}/ddr_param.bin
BL2_PATH=${DEPENDS_FILE_PATH}/bl2.bin
BLCP_PATH=${DEPENDS_FILE_PATH}/empty.bin
MONITOR_PATH=${DEPENDS_FILE_PATH}/bl31.bin
LOADER_2ND_PATH=${DEPENDS_FILE_PATH}/u-boot-raw.bin
if [ -f "$C906_LITTLE_BIN_PATH" ]; then
echo "The file $C906_LITTLE_BIN_PATH exist."
BLCP_2ND_PATH=${C906_LITTLE_BIN_PATH}
else
echo "The file $C906_LITTLE_BIN_PATH does not exist. Execute scons to compile it."
fi
echo "Combining fip.bin..."
. ${DEPENDS_FILE_PATH}/blmacros.env && \
${DEPENDS_FILE_PATH}/fiptool.py -v genfip \
${GEN_FIP_PATH}/fip.bin \
--MONITOR_RUNADDR="${MONITOR_RUNADDR}" \
--BLCP_2ND_RUNADDR="${BLCP_2ND_RUNADDR}" \
--CHIP_CONF=${CHIP_CONF_PATH} \
--NOR_INFO=${NOR_INFO} \
--NAND_INFO=${NAND_INFO} \
--BL2=${BL2_PATH} \
--BLCP_IMG_RUNADDR=${BLCP_IMG_RUNADDR} \
--BLCP_PARAM_LOADADDR=${BLCP_PARAM_LOADADDR} \
--BLCP=${BLCP_PATH} \
--DDR_PARAM=${DDR_PARAM_TEST_PATH} \
--BLCP_2ND=${BLCP_2ND_PATH} \
--MONITOR=${MONITOR_PATH} \
--LOADER_2ND=${LOADER_2ND_PATH} \
--compress=${FIP_COMPRESS}
echo "Combining fip.bin done!"
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
MONITOR_RUNADDR=0x0000000080000000
BLCP_2ND_RUNADDR=0x000000008fe00000
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,56 @@
/*
* U-Boot uImage source file with multiple kernels, ramdisks and FDT blobs
*/
/dts-v1/;
/ {
description = "Various kernels, ramdisks and FDT blobs";
#address-cells = <2>;
images {
kernel-1 {
description = "cvitek kernel";
data = /incbin/("./Image.lzma");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "lzma";
load = <0x0 0x80200000>;
entry = <0x0 0x80200000>;
hash-2 {
algo = "crc32";
};
};
/*FDT*/
fdt-sg2002_milkv_duo256m_arm_sd {
description = "cvitek device tree - sg2002_milkv_duo256m_arm_sd";
data = /incbin/("./sg2002_milkv_duo256m_arm_sd.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
hash-1 {
algo = "sha256";
};
};
};
/*CFG*/
configurations {
config-sg2002_milkv_duo256m_arm_sd {
description = "boot cvitek system with board sg2002_milkv_duo256m_arm_sd";
kernel = "kernel-1";
fdt = "fdt-sg2002_milkv_duo256m_arm_sd";
};
};
};
+2
View File
@@ -45,3 +45,5 @@ if PLATFORM == 'gcc':
DUMP_ACTION = OBJDUMP + ' -D -S $TARGET > rtt.asm\n'
POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
POST_ACTION += OBJCPY + ' -O binary $TARGET Image \n' + SIZE + ' $TARGET \n'
POST_ACTION += 'cd .. && bash mksdimg.sh ' + os.getcwd() + ' Image \n'