前言¶
概述
本文为SS928V100 SDK的安装及升级使用说明,方便使用者能快速在对应芯片的DEMB板上搭建好SDK运行环境。
说明: 本文以SS928V100描述为例,未有特殊说明,SS927V100与SS928V100内容一致。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS927 |
V100 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修改记录
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
首次安装SDK¶
如果您已安装过SDK,可以直接参看安装、升级SS928V100 DEMO板开发环境。
SS928V100 SDK包位置¶
在"SS928V100R001***/01.software/board"目录下,您可以看到一个 SS928V100_SDK_Vx.x.x.x.tgz 的文件,该文件就是SS928V100的软件开发包。
解压缩SDK包¶
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf SS928V100_SDK_Vx.x.x.x.tgz,解压缩该文件,可以得到一个SS928V100_SDK_Vx.x.x.x目录。
展开SDK包内容¶
返回SS928V100_SDK_Vx.x.x.x目录,运行./sdk.unpack(请用root或sudo权限执行)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。
在linux服务器上搭建开发环境¶
请参考《OpenHarmony Small版本使用指南》。
编译osdrv¶
参见osdrv目录下readme
SDK目录介绍¶
SS928V100_SDK_Vx.x.x.x 目录结构如下:
├── smp #smp目录
│ ├── a55_linux
│ ├── interdrv #mipitx等驱动源代码
│ ├── vendor #外围驱动源代码
│ ├── mpp
│ │ ├── component
│ │ │ ├── gfbg #gfbg源代码
│ │ │ ├── security_subsys #安全子系统源代码
│ │ │ └── pciv #pciv源代码
│ │ ├── cbb
│ │ │ └── isp #isp源代码
│ │ ├── out #mpp编译目标目录
│ │ ├── ko #内核ko
│ │ ├── lib #用户lib库
│ │ ├── include #头文件
│ │ ├── init #内核模块初始化源代码
│ │ └── obj #内核模块obj文件
│ └── osal #操作系统适配层源代码
│ ├── include #操作系统适配层头文件
│ └── linux #linux系统适配层源文件
│ ├── dsp_liteos #dsp驱动
├── open_source #开源第三方源代码
│ ├── u-boot #uboot源代码
│ ├── linux #kernel源代码
│ ├── eigen #eigen源代码
│ ...
├── platform #平台代码
│ ├── liteos #LiteOS代码包
├── osdrv #操作系统相关目录
│ ├── components #自研组件源代码
│ ├── pub #编译好的镜像等
│ ├── rootfs_scripts #文件系统初始目录和脚本
│ ├── tools #系统工具源代码
├── package #SDK的压缩包
│ ├── smp.tgz #媒体处理平台软件压缩包
│ ├── osdrv.tgz #操作系统相关压缩包
│ ├── platform.tgz #平台代码压缩包
│ └── open_source.tgz #第三方开源软件压缩包
├── scripts #shell脚本目录
├── sdk.cleanup #SDK清理脚本
└── sdk.unpack #SDK展开脚本
安装、升级SS928V100 DEMO板开发环境¶
如果您使用的SS928V100的DEMO板,可以按照以下操作烧写uboot、内核以及文件系统,以下操作均使用网络来更新:
如果您拿到的单板没有uboot的话,就需要使用01.software/pc/ToolPlatform进行烧写。更详细的烧写操作步骤及说明,请参见01.software/pc/ToolPlatform目录下的《BurnTool 工具使用指南》。
如果您拿到的单板中已经有uboot,可以按照以下步骤使用网口烧写uboot、kernel及rootfs到Flash中。DEMO板默认为从SPI Flash启动。
配置tftp服务器¶
可以使用任意的tftp服务器,先编译好uboot、kernel和rootfs。将编译好的相关文件拷贝到tftp服务器目录下。
参数配置¶
单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。
setenv serverip xx.xx.xx.xx
setenv ipaddr xx.xx.xx.xx
setenv ethaddr xx:xx:xx:xx:xx:xx
setenv netmask xx.xx.xx.xx
setenv gatewayip xx.xx.xx.xx
ping serverip (确保网络畅通)
须知:
SS928V100启动方案分快速启动(使用u-boot-ss928v100.bin)和非快速启动(非安全启动/安全启动,使用boot_image.bin),详见《SS928V100/SS927V100 安全启动使用指南》文档第二章节 “启动方案”。
其启动方案可通过读取0x10122090寄存器查看确认,如值为0x5为快速启动,其余值为非快速启动。
默认出厂单板为“非安全启动”,下文以该模式为例烧写镜像。
烧写映像文件到SPI Nor Flash¶
以32MB SPI Nor Flash为例。地址空间说明:
1MB |
11MB |
19MB |
1MB |
boot_image.bin |
kernel |
rootfs |
sample.bin |
以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
烧写u-boot
sf probe 0 mw.b 0x42000000 0xff 0x100000 tftp 0x42000000 boot_image.bin sf probe 0 sf erase 0 0x100000 sf write 0x42000000 0 0x100000 reset
烧写内核
mw.b 0x42000000 0xff 0xb00000 tftp 0x42000000 uImage_ss928v100 sf probe 0 sf erase 0x100000 0xb00000 sf write 0x42000000 0x100000 0xb00000
烧写文件系统
mw.b 0x42000000 0xff 0x1300000 tftp 0x42000000 rootfs_ss928v100_64k.jffs2 sf probe 0 sf erase 0xc00000 0x1300000 sf write 0x42000000 0xc00000 0x1300000
烧写LiteOS 镜像(可选)
mw.b 0x42000000 0xff 0x100000 tftp 0x42000000 sample.bin sf probe 0 sf erase 0x1f00000 0x100000 sf write 0x42000000 0x1f00000 0x100000
设置启动参数
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=sfc:1M(boot),11M(kernel),19M(rootfs),1M(sample.bin)';sa setenv bootcmd 'sf probe 0;sf read 0x44000000 0x1f00000 0x100000;go_riscv 0x44000000; sf read 0x50000000 0x100000 0xb00000;bootm 0x50000000';sa 无LiteOS时: setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=sfc:1M(boot),11M(kernel),19M(rootfs) ';sa setenv bootcmd 'sf probe 0; sf read 0x50000000 0x100000 0xb00000;bootm 0x50000000';sa
烧写映像文件到NAND Flash¶
以64MB NAND Flash为例。地址空间说明:
1MB |
11MB |
32MB |
1MB |
boot_image.bin |
kernel |
rootfs |
sample.bin |
以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
烧写u-boot
mw.b 0x42000000 0xff 0x100000 tftp 42000000 boot_image.bin nand erase 0 0x100000 nand write 0x42000000 0 0x100000 reset
烧写内核
mw.b 0x42000000 0xff 0xb00000 tftp 0x42000000 uImage_ss928v100 nand erase 0x100000 0xb00000 nand write 0x42000000 0x100000 0xb00000
烧写文件系统
mw.b 0x42000000 0xff 0x2000000 tftp 0x42000000 rootfs_ss928v100_2k_128k_32M.ubifs nand erase 0xc00000 0x2000000 nand write 0x42000000 0xc00000 0x2000000
烧写LiteOS镜像(可选)
mw.b 0x42000000 0xff 0x100000 tftp 0x42000000 sample.bin nand erase 0x2c00000 0x100000 nand write 0x42000000 0x2c00000 0x100000
设置启动参数
setenv bootargs 'mem=512M console=ttyAMA0,115200 clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(boot),11M(kernel),32M(rootfs.ubifs),1M(sample)';sa setenv bootcmd 'nand read 0x44000000 0x2c00000 0x100000;go_riscv 0x44000000;nand read 0x50000000 0x100000 0xb00000;bootm 0x50000000';sa 无LiteOS时: setenv bootargs 'mem=512M console=ttyAMA0,115200 clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(boot),11M(kernel),32M(rootfs.ubifs) ';sa setenv bootcmd 'nand read 0x50000000 0x100000 0xb00000;bootm 0x50000000';sa
烧写镜像文件到EMMC¶
地址空间:
1MB |
11MB |
96MB |
1MB |
boot_image.bin |
kernel |
rootfs |
sample.bin |
以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
烧写u-boot
mw.b 0x42000000 0xff 0x100000 tftp 42000000 boot_image.bin mmc write 0 0x42000000 0 0x800 reset
烧写内核
mw.b 0x42000000 0xff 0xb00000 tftp 0x42000000 uImage_ss928v100 mmc write 0 0x42000000 0x800 0x5800
烧写文件系统
mw.b 0x42000000 0xff 0x6000000 tftp 0x42000000 rootfs_ss928v100_96M.ext4 mmc write 0 0x42000000 0x6000 0x30000
烧写LiteOS 镜像(可选)
mw.b 0x42000000 0xff 0x100000 tftp 0x42000000 sample.bin mmc write 0 0x42000000 0x36000 0x800
设置启动参数
setenv bootargs 'mem=512M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(uboot.bin),11M(kernel),96M(rootfs.ext4),1M(sample)';sa setenv bootcmd ' mmc read 0 0x44000000 0x36000 0x800;go_riscv 0x44000000;mmc read 0 0x50000000 0x800 0x5800; bootm 50000000';sa 无 LiteOS 时: setenv bootargs 'mem=512M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(uboot.bin),11M(kernel),96M(rootfs.ext4)';sa setenv bootcmd 'mmc read 0 0x50000000 0x800 0x5800; bootm 50000000';sa
须知:
上述烧写映像文件到SPI Nor Flash-烧写镜像文件到EMMC 镜像请按照实际大小调整,LiteOS的默认启动地址是 0x44000000,若客户内存布局有调整,请调整LiteOS的启动地址;若无LiteOS时客户可调整 linux 启动地址。
启动新系统¶
reset # 重启进入新系统。
开发前环境准备¶
管脚复用¶
与媒体业务相关的管脚复用、DDR优先级配置等在interdrv/sys_config开源驱动中配置(使用linux DTS进行管理),如果与实际情况不符可直接修改,sys_config.ko驱动被load_ss928v100调用,在加载mpp内核模块之前被执行。
MPP之外的其他管脚复用统一在uboot中配置,详细说明请参见《SS928V100/SS927V100 U-boot 移植应用开发指南》。
使用SDK和DEMO板进行开发¶
开启Linux下的网络¶
设置网络
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx; ifconfig eth0 xx.xx.xx.xx netmask xx.xx.xx.xx; route add default gw xx.xx.xx.xx
然后ping一下其他机器,如无意外,网络将能正常工作。
使用NFS文件系统进行开发¶
在开发阶段,推荐使用NFS作为开发环境,可以省去重新制作和烧写根文件系统的工作。
挂载NFS文件系统的操作命令:
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 xx.xx.xx.xx:/your-nfs-path /mnt然后就可以在/mnt目录下访问服务器上的文件,并进行开发工作。
开启telnet服务¶
# 网络正常后,运行命令 telnetd & 就可以启动单板telnet服务,然后才能使用telnet登录到单板。
运行MPP业务¶
在单板linux系统下,进入mpp/out/ko目录,加载ko
cd mpp/ko
./load_ss928v100 -a
Linux和LiteOS 切换¶
将编译好的sample.bin和load_riscv工具拷贝到linux系统下,然后执行如下命令。
cp load_riscv /bin
chmod +x /bin/load_riscv
load_riscv 0x44000000 sample.bin
注:load_riscv工具在osdrv/tools/board/load_riscv/bin路径下
在Linux系统下使用 telnet服务登录单板并进入komod目录,加载ko
cd /komod
insmod ipcm.ko
insmod virt-tty.ko
执行如下指令进入 LiteOS
virt-tty riscv
在 LiteOS 可通过 “ctrl + c”键切换到 Linux 系统
地址空间分配与使用¶
DDR内存管理说明¶
所有DDR内存中,一部分由操作系统管理,称为OS内存;另一部分由MMZ模块管理,供媒体业务单独使用,称为MMZ内存。
OS内存起始地址为0x50000000,内存大小可通过bootargs进行配置,例如第三章中的setenv bootargs 'mem=512M ... ',表示分配给操作系统内存为512M,您可以根据实际情况进行调整。
MMZ内存由osal内核模块管理(mpp/out/ko目录下的ot_osal.ko),加载osal模块时,通过模块参数指定其起始地址及大小,load脚本中根据MMZ的起始地址mmz_start及大小mmz_size。
请注意MMZ内存地址范围不能与OS内存重叠。
DEMO板DDR内存管理示意¶
以容量为4G Bytes的DDR内存为例,以下为根据本文档和SDK默认配置得到的内存管理示意图:
DDR:
|-------------|--------------------| 0x40000000 # Memory managed by IPCM.
| 2MB | IPCM |
|-------------|--------------------| 0x40200000 # Memory managed by DSP LiteOS.
| 62MB | DSP |
|-------------|--------------------| 0x44000000 # Memory managed by RISC-V LiteOS.
| 192MB | RISV-V |
|-------------|--------------------| 0x50000000 # Memory managed by Linux OS.
| 512MB | Linux OS |
|-------------|--------------------| 0x70000000 # Memory managed by MMZ block anonymous.
| 3328MB | MMZ |
|-------------|--------------------| 0xFFFFFFFF # End of memory managed by MMZ.
注意:
用户在配置启动参数时需要设置OS的管理内存为512MB,“setenv bootargs 'mem=512M...”。
如果有特殊应用,可以自行修改load_ss928v100脚本,进行mmz区域划分,如“insmod ot_osal.ko anony=1 mmz_allocator=ot mmz=anonymous,0,0x70000000,1786M:jpeg,0,0xDFA00000,6M”。




