BananaPiBPI-F3RISC-V开发板OpenWRT系统...

开源不如不打烊 2024-07-20 07:52:43
简介

基于原生OpenWrt 23.05集成Spacemit Stone 系列芯片的 BSP,包含监管程序接口(OpenSBI)、引导加载程序(U-Boot/UEFI)、Linux 内核、根文件系统(包含各种中间件和库)以及示例等。其目标是为客户提供软路由和NAS方案支持,并且可以开发驱动或应用。

Banana Pi BPI-F3

主要组件

以下是OpenWrt的组件:

OpenSBIU-BootLinux Kernelmpp: Media Process Platform

更多组件正在适配中

onnxruntime (with Hardware Accelerated)ai-support: AI demok1x-vpu-firmware: Video Process Unit firmwarek1x-vpu-test: Video Process Unit test programk1x-jpu: JPEG Process Unit APIFFmpeg (with Hardware Accelerated)GStreamer (with Hardware Accelerated)

快速指南​下载和编译设备管理方案管理进阶指南​

系统开发指南

预编译​

进迭OpenWrt源站点

BPI-F3、MUSE-Pi固件

MUSE-N1固件

设备管理

本文档介绍如何通过EEPROM实现自适应设备(板型),包括如何添加新板型支持和实现自适应启动。

后续文档描述的设备和板型等效

添加新设备​

以下以新增k1-x_MUSE-Pi板型为例说明

kernel设备树​

如参考deb1硬件设计,则拷贝k1-x_deb1.dts到如下文件,修改相应内容

target/linux/spacemit/dts/k1-x_MUSE-Pi.dts

对于新增的版型,dts文件均存放在以上目录。编译的时候打包进bootfs分区,uboot启动kernel前加载设备树文件。

uboot设备树​

新增板型需要在uboot源码仓库修改,如下:

添加uboot设备树u-boot-2022.10/arch/riscv/dts/k1-x_MUSE-Pi.dts修改Makefile,将k1-x_MUSE-Pi.dtb添加到里面,如下:(注意后缀改成dtb) 11 dtb-$(CONFIG_TARGET_SPACEMIT_K1X) += k1-x_evb.dtb k1-x_deb2.dtb k1-x_deb1.dtb k1-x_hs450.dtb \ 12 k1-x_kx312.dtb k1-x_MINI-PC.dtb k1-x_mingo.dtb k1-x_MUSE-N1.dtb \ 13 k1-x_MUSE-Pi.dtb k1-x_spl.dtb k1-x_milkv-jupiter.dtb \ 14 k1-x_MUSE-Book.dtb 15 修改uboot-2022.10/board/spacemit/k1-x/configs/uboot_fdt.its,添加新节点。@@ -46,15 +46,6 @@ algo = "crc32"; }; };+ fdt_4 {+ description = "k1-x_MUSE-Pi";+ type = "flat_dt";+ compression = "none";+ data = /incbin/("../dtb/1-x_MUSE-Pi.dtb");+ hash-1 {+ algo = "crc32";+ };+ }; }; configurations {@@ -74,10 +65,5 @@ loadables = "uboot"; fdt = "fdt_3"; };+ conf_4 {+ description = "k1-x_MUSE-Pi";+ loadables = "uboot";+ fdt = "fdt_4";+ }; }; };修改uboot-2022.10/include/configs/k1-x.h,更新DEFAULT_PRODUCT_NAME,FSBL和u-boot将默认根据DEFAULT_PRODUCT_NAME加载dtb。如果板子有EEPROM记录product_name等信息,则优先级更高,FSBL和u-boot将使用EEPROM的信息实现自适应启动。@@ -25,7 +25,7 @@ #define CONFIG_GATEWAYIP 10.0.92.1 #define CONFIG_NETMASK 255.255.255.0-#define DEFAULT_PRODUCT_NAME "k1_deb1"+#define DEFAULT_PRODUCT_NAME "k1-x_MUSE-Pi" #define K1X_SPL_BOOT_LOAD_ADDR (0x20200000) #define DDR_TRAINING_DATA_BASE (0xc0829000)加入方案​

如是开发板形态,则修改openwrt/target/linux/spacemit/image/k1-sbc.mk,添加k1-x_MUSE-Pi板型支持

DEVICE_DTS := k1-x_deb1 k1-x_MUSE-Pi

如果需要新增方案,请参考方案管理

支持单CS DDR​

FSBL默认支持双CS DDR,修改uboot-2022.10/arch/riscv/dts/k1-x_spl.dts可以支持单CS DDR。

@@ -79,7 +79,7 @@ ddr@c0000000 { /* dram data rate, should be 1200, 1600, or 2400 */ datarate = <2400>;- cs-num = <2>;+ cs-num = <1>; u-boot,dm-spl; };

如果设备有EEPROM,支持通过EEPROM实现自适应,待更新。

通过EEPROM实现自适应​

通过进迭Titanflasher工具给板子eeprom写号,实现启动的自适应,即一个固件支持多个板子。

系统启动时读取eeprom的信息,匹配uboot_fdt.its中信息,从而实现多板型支持。

相关文件:

uboot-2022.10/arch/riscv/dts/k1-x_spl.dtsuboot-2022.10/arch/riscv/dts/k1-x_*.dtsEEPROM支持列表​atmel,24c02添加新EEPROM​修改uboot-2022.10/arch/riscv/dts/k1-x_spl.dts,更新EEPROM的I2C地址,例如新地址为0xA0。@@ -121,7 +121,7 @@ eeprom@50{ compatible = "atmel,24c02"; u-boot,dm-spl;- reg = <0x50>;+ reg = <0xA0>; bus = <6>; #address-cells = <1>; #size-cells = <1>;修改uboot-2022.10/arch/riscv/dts/k1-x_*.dts,添加新EEPROM的配置。@@ -60,9 +60,9 @@ pinctrl-0 = <&pinctrl_i2c2_0>; status = "okay"; - eeprom@50{- compatible = "atmel,24c02";- reg = <0x50>;+ eeprom@A0{+ compatible = "atmel,24c04";+ reg = <0xA0>; vin-supply-names = "eeprom_1v8"; status = "okay"; };使用tlv_eeprom写号​

写号是指将product_name等信息写入EEPROM。目前,在EEPROM中的信息是按照TLV编码的,可以使用u-boot的tlv_eeprom命令写号。

PC接上设备的调试串口,设备启动时,在PC串口终端按下键盘的s键,直到进入u-boot shell。Autoboot in 0 seconds=> 烧写product_name,例如k1-x_MUSE-Pi。=> tlv_eeprom set 0x21 k1-x_MUSE-Pi=> tlv_eeprom writeProgramming passed.Programming passed.表示写入成功。请以设备dts的文件名(不带后缀)命名,方便u-boot自动加载dtb。reset检查是否可以加载k1-x_MUSE-Pi的dtb,正常的话u-boot有如下打印。product_name: k1-x_MUSE-Pidetect dtb_name: k1-x_MUSE-Pi.dtb

SDK还支持从EEPROM读取以下信息:

Serial Number:0x23Base MAC Address:0x24Manufacture Date:0x25Device Version:0x26MAC Addresses:0x2AManufacturer:0x2BSDK Version:0x40

其中MAC Address会更新到dtb,作为网卡物理地址。

方案管理

本文档介绍进迭OpenWrt SDK的方案管理,目前发行的SDK默认适配k1-sbc、k1-nas方案,每个方案支持多个板型,如k1-sbc方案支持k1-x_MUSE-Pi、k1-x_deb1板型,未来会持续更新。

方案总览​

以开发板方案k1-sbc为例,通常跟以下配置文件有关,后续章节逐一介绍

#方案配置feeds/spacemit_openwrt_feeds/spacemit_k1_defconfig#方案编译入口openwrt/target/linux/spacemit/Makefile#方案定义openwrt/target/linux/spacemit/k1-sbc/config-6.1openwrt/target/linux/spacemit/k1-sbc/target.mkopenwrt/target/linux/spacemit/k1-sbc/base-files/#方案设备树管理openwrt/target/linux/spacemit/dts/#方案启动参数openwrt/target/linux/spacemit/image/env_k1-x.txt#固件定义openwrt/target/linux/spacemit/image/k1-sbc.mk#方案的固件分区openwrt/target/linux/spacemit/image/partition_tables/partition_2M.jsonopenwrt/target/linux/spacemit/image/partition_tables/partition_flash.jsonopenwrt/target/linux/spacemit/image/partition_tables/partition_universal.json#方案首次启动配置openwrt/target/linux/spacemit/base-files/etc/uci-defaults/方案配置​

feeds/spacemit_openwrt_feeds/spacemit_k1_defconfig

k1-sbc方案的编译配置,用于指导OpenWrt的编译行为

方案Makefile​

openwrt/target/linux/spacemit/Makefile

SUBTARGETS添加方案名称

... 12 SUBTARGETS:=k1-nas k1-sbc ...方案目录​

openwrt/target/linux/spacemit/k1-sbc

创建跟方案名称同名目录:k1-sbc,包含以下内容

openwrt/target/linux/spacemit/k1-sbc/config-6.1config-6.1为方案的kernel配置,编译kernel时合并openwrt/target/linux/generic/config-6.1 与本方案config-6.1,相同的配置选项以本方案为主openwrt/target/linux/spacemit/k1-sbc/target.mk定义方案的通用信息,如DEVICE_TYPE:=router(可选router、nas)。此为OpenWrt定义,不同device type默认包含不同软件包openwrt/target/linux/spacemit/k1-sbc/base-files/包含要打包进rootfs的配置文件,如下:openwrt/target/linux/spacemit/k1-sbc/base-files$ tree.├── etc│ ├── board.d│ │ ├── 01_leds│ │ └── 02_network│ ├── hostapd.conf│ ├── hosts│ ├── init.d│ │ └── custom_wifi_ap│ └── inittab├── lib│ ├── preinit│ │ └── 79_move_config│ └── upgrade│ └── platform.sh└── usr └── bin ├── uas-gadget2-bot.sh ├── uas-gadget2.sh └── uas-gadget3.sh8 directories, 11 files方案设备树​

openwrt/target/linux/spacemit/dts/

不同板型的内核设备树,可参考设备管理添加一个新板型支持

方案分区表​

openwrt/target/linux/spacemit/image/partition_tables/

这里的分区表是多个方案通用。里面包含不同存储介质的分区表配置,

也可自行添加跟板载存储介质容量一致的分区表,TitanFlasher工具烧写固件时自动匹配

partition_2M.json,用于nor刷机启动,一般与emmc/ssd等blk设备一起使用partition_universal.json,用于blk设备的刷机启动,partition_flash.json,用于spacemit Titanflasher工具制作卡量产

修改分区表可能会影响到系统正常启动,详细的修改方式请参考《启动》文档

方案启动参数​

openwrt/target/linux/spacemit/image/env_k1-x.txt

uboot最高优先级环境变量,这里可以设定bootargs启动参数,loglevel等

默认的bootargs为:

commonargs=setenv bootargs earlycon=${earlycon} earlyprintk console=tty1 console=${console} loglevel=${loglevel} clk_ignore_unused swiotlb=65536 rdinit=${init}

可在env_k1-x.txt中重定义earlycon/console/loglevel/init等环境变量

# Common parameterearlycon=sbiconsole=ttyS0,115200init=/initbootdelay=0loglevel=8

也可以直接重定义整个bootargs

bootargs=earlycon=sbi console=ttyS0,115200 loglevel=4方案固件​

openwrt/target/linux/spacemit/image/k1-sbc.mk

制定方案的固件编译,如包含支持的板型、生成sdcard.img、spacemit.zip刷机包等,

比如不想生成sdcard.img,可去掉IMAGE/pack.zip中的sdcard-img。

比如对本方案增加MUSE-Pi板型支持,则DEVICE_DTS增加k1-x_MUSE-Pi设备树名称,

且openwrt/target/linux/spacemit/dts/需有一份k1-x_MUSE-Pi.dts

# SPDX-License-Identifier: GPL-2.0-only## Copyright (C) 2024 Spacemit Ltd.define Device/debX DEVICE_VENDOR := Spacemit DEVICE_MODEL :=k1-x deb board DEVICE_DTS_DIR:= ../dts DEVICE_DTS := k1-x_deb1 k1-x_MUSE-Pi SOC := KeyStone KERNEL_NAME := Image KERNEL_IMG := Image.itb KERNEL := kernel-bin | fit none IMAGES := pack.zip IMAGE/pack.zip := $(KERNEL_IMG) | boot-common | sdcard-img | archive-zipendefTARGET_DEVICES += debX方案首次启动​

openwrt/target/linux/spacemit/base-files/etc/uci-defaults/

UCI默认设置提供了一种使用UCI预配置您的镜像的方法。 要在设备首次启动时设置一些系统默认值,

请在目录此中创建一个脚本。

新增方案​

以k1-sbc方案为例,需要修改以下内容:

修改openwrt/target/linux/spacemit/Makefile中的SUBTARGETS,添加方案名称,如k1-sbc新增方案目录,如openwrt/target/linux/spacemit/k1-sbc/,添加如下文件openwrt/target/linux/spacemit/k1-sbc/config-6.1openwrt/target/linux/spacemit/k1-sbc/target.mk新增固件编译和兼容板型 openwrt/target/linux/spacemit/image/k1-sbc.mkfeeds/spacemit_openwrt_feeds/目录下新增编译配置,如k1-sbc方案spacemit_k1_defconfig新增板型​

每个方案下至少有一个或多个板型,新增板型支持可参考设备管理

uboot/opensbi编译配置​

如有需要增加uboot/opensbi新的编译配置,可参考修改以下内容

uboot​uboot源码仓库新增编译配置,如u-boot-2022.10/configs/k1_defconfig修改openwrt/package/boot/uboot-spacemit/Makefile 50 define Build/Configure 51 $(MAKE) -C $(LOCAL_SOURCE_DIR) k1_defconfig 52 endef 53 opensbi​opensbi源码仓库新增编译配置,如opensbi-1.3/platform/generic/configs/k1_defconfig修改package/boot/opensbi-spacemit/Makefile 59 define Build/Compile 60 $(eval $(Package/opensbi_$(BUILD_VARIANT))) \ 61 +$(MAKE_VARS) $(MAKE) -C $(LOCAL_SOURCE_DIR) \ 62 PLATFORM=$(PLAT) PLATFORM_DEFCONFIG=k1_defconfig 63 endef 64
0 阅读:0