mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-15 19:29:16 +08:00
[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:
Executable
+1
@@ -0,0 +1 @@
|
||||
Image
|
||||
@@ -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信息:**
|
||||
|
||||
Executable
+44
@@ -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.
BIN
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
MONITOR_RUNADDR=0x0000000080000000
|
||||
BLCP_2ND_RUNADDR=0x000000008fe00000
|
||||
Binary file not shown.
Binary file not shown.
+803
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -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";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
Binary file not shown.
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user