开发环境搭建
1. 开发环境¶
1.1. 开发环境说明¶
由于嵌入式单板的资源有限,不能在单板上运行开发和调试工具,通常需要交叉编译调试的方式进行开发和调试,即“宿主机+目标板”的形式。一般情况下宿主机和目标板的处理器架构不相同。宿主机需要建立适合于目标板的交叉编译环境。程序在宿主机上经过“编译-连接-定位”得到可执行文件。将可执行文件烧写到目标板中,然后在目标板上运行,下面以一种典型的开发环境为例进行说明。
ifado 的开发环境通常包括 Linux服务器、Windows工作台(宿主机)和EVB(目标板),三者处于同一个网络中,如图1-1所示
目标板上的Bootloader(IPL+uboot)启动后,目标板中的操作信息通过串口输出到宿主机上显示。在宿主机上的控制台中输入命令,可以控制目标机。
在Linux服务器上建立交叉编译环境,Windows 工作台通过串口与EVB 单板连接,开发人员可以在Windows工作台中进行程序开发或者远程登录到Linux服务器进行程序开发。各部分具体软件介绍如表1-1所示。
图1-1 嵌入式开发图示
表1-1 开发环境部分软件描述
操作平台 | 操作系统 | 软件描述 |
---|---|---|
Windows工作台 | Windows XP/7/10/11 | putty(或Xshell/SecureCRT等)、tftp服务器(tftpd32)、SStar ISP工具(Flash_Tool_xxx.exe) |
Linux服务器 | Ubuntu或CentOS。建议使用Ubuntu 18.04及以上版本的完全安装。 | NFS、telnetd、samba、vim、arm 交叉编译环境(Gcc 版本11.1.0 for alkaid/kernel,Gcc 9.1.0 for RTOS,Gcc 10.3 for pmrtos)等。其他应用软件根据具体开发需要而定,通常系统都已默认安装,只要适当配置即可。 |
EVB | SStar Linux | Linux内核基于Linux标准内核5.10.117版包移植开发,根文件系统基于busybox 1.20.2版本制作而成。含telnetd等Linux常用命令。 |
1.2. 搭建开发环境¶
推荐用户使用64 位Linux 服务器,本开发包在32 位Linux 服务器、较老版本的Linux服务器、偏冷门的Linux 服务器上可能存在未知的兼容性问题。 推荐的硬件配置如下:
- CPU Intel(R) Xeon(R) CPU E5-2450 0 @ 2.10GHz 或更好CPU
- DDR: >= 16GB
- Hard disk >= 600GB
- Gigabit Ethernet
- OS: Ubuntu 18.04 64bit
或者 使用相同配置的虚拟机。
1.2.1 发布包使用的Linux Server 版本¶
cat /proc/version
Linux version 4.15.0-112-generic (buildd@lcy01-amd64-027) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020
lsb_release -a
LSB Version: core-9.20170808ubuntu1-noarch:printing-9.20170808ubuntu1-noarch:security-9.20170808ubuntu1-noarch Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic
1.2.2. 网络环境搭建¶
请用户自行配置,并安装nfs、samba、ssh等网络组件。
1.2.3. 软件包安装¶
sudo apt-get install libc6-dev-i386 lib32z1 lib32ncurses5 libuuid1 cmake libncurses5-dev libncursesw5-dev bc xz-utils automake libtool libevdev-dev pkg-config mtd-utils android-tools-fsutils bison flex libssl-dev libmpc-dev squashfs-tools gawk rename
1.2.4. 安装交叉编译工具链¶
发布包提供了工具链:
For Alkaid/Kernel:
-
glibc
gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf.tar.xz
-
uclibc
arm-sigmastar-linux-uclibcgnueabihf-9.1.0.tar.xz
For Rtos:
gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi.tar.xz
安装步骤如下:
step1. 新建工具目录:
sudo mkdir -p /tools/toolchain 或者 sudo mkdir -p /opt/sstar(本文以/tools/toolchain为例)
step2. 解压安装:
# glibc sudo tar -xvf ./gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf.tar.xz -C /tools/toolchain # uclibc sudo tar -xvf ./arm-sigmastar-linux-uclibcgnueabihf-9.1.0.tar.xz -C /tools/toolchain # other sudo tar -xvf ./gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi.tar.xz -C /tools/toolchain
step3. 可直接在每次编译时export
或 直接添加到/etc/profile
、~/.bashrc
等启动脚本位置
例:export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATH
1.3. 其他配置¶
1.3.1. 默认shell配置¶
编译脚本默认使用的是bash,要求系统的默认shell为bash,可通过ls -la /bin/sh
命令来确认。以最常用的Ubuntu为例,高版本的Ubuntu默认shell为dash,修改方式如下:
# ls -la /bin/sh lrwxrwxrwx 1 root root 4 Jun 15 08:49 /bin/sh -> dash # sudo dpkg-reconfigure dash #在弹出的界面选择<NO> # ls -la /bin/sh lrwxrwxrwx 1 root root 4 Jun 15 08:49 /bin/sh -> bash
1.3.2. 设置默认python版本为python2.x¶
python2与python3的语义有差别,SDK编译脚本使用的是python2的语义,因此需要将系统默认python版本设置为python2.x,修改方式请参考网络上的相关文档,比如使用update-alternatives
工具来配置。
注意:mksquashfs ubuntu自带有,若没有,再根据提示安装即可。
如果使用低版本的Ubuntu,如在Ubuntu 16.04上建议进行更新源的操作,具体操作请参考网络上的相关文档,若不更新可能会导致后续的编译错误。
1.3.3. 设置默认awk实现¶
编译脚本默认使用awk/gawk,系统的awk版本需要为awk/gawk,可通过awk --help和awk --version命令来确认。以Ubuntu为例:
# awk --help Usage: awk [POSIX or GNU style options] -f progfile [--] file ... Usage: awk [POSIX or GNU style options] [--] 'program' file ... POSIX options: GNU long options: (standard) -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val ... # awk --version GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2) Copyright (C) 1989, 1991-2016 Free Software Foundation. ...
如果默认awk实现不是awk/gawk,安装gawk,然后修改awk实现为gawk:
sudo apt-get install gawk sudo update-alternatives --config awk # 选择 gawk 作为默认的 awk 实现
2. 硬件连接¶
2.1. EVB板连接方式(以EVB板 SSC032B-S01A为例)¶
电源: DC 12V;调试串口: TTL电平,波特率115200
连接方式: 将SigmaStar Debug Tool小板Type-A USB口连接至Windows,另一端连接至EVB CON2 Debug口,连接方式如图2-1所示 用网线通过ETH CON6的RJ45网口将EVB板连接与Windows连接至同一网段
图2-1 EVB板Uart Debug连接图示
2.2. 开机进入Uboot¶
为了快速开机,一般开机流程会跳过Uboot,若要开机进入uboot,请通过Detect Key和GPIO控制(具体看使用的IPL),IPL命名中BOOT_GPIO=y代表GPIO开机。
表1-2 启动模式差异表
控制方式 | 快速启动 | 普通模式(UBOOT) |
---|---|---|
Keyboard | IPL_Cus启动wait 20ms,如果没有Enter键入,则进入该模式 | IPL_Cus启动,如果20ms内有Enter键入,则进入该模式 |
GPIO | 判断GPIO状态,[PAD_GPIO0 = high],EVB板预设为高电平,默认进入该模式 | 判断GPIO状态[PAD_GPIO0 = low],将JP74位置LDC_VSYNC[PAD_GPIO0]接地,开机前长按Enter键即可进入该模式 |
由于这类功能在IPL实现,这里仅对IPL分类进行介绍。
sstar提供的IPL放置在sdk以下路径:alkaid\project\board\${chip}\boot\flash_type\ipl-dualos
表1-3 不同启动模式IPL差异表
名字 | 描述 |
---|---|
IPL.ifado_nand_dualos.xxx.bin IPL_CUST.ifado_nand_dualos.xxx.bin |
xxx为IPL配置选项,IPL命名中 不含有"BOOT_GPIO=y" 关键字 。默认为长按键盘Enter键进入uboot(需要等待键盘输入,多花费20ms) |
IPL.ifado_nand_dualos.xxx.BOOT_GPIO=y.LOGGING_LEVEL=0.xxx.bin IPL_CUST.ifado_nand_dualos.xxx.BOOT_GPIO=y.LOGGING_LEVEL=0.xxx.bin |
xxx为IPL配置选项,IPL命名中 含有"BOOT_GPIO=y" 关键字 。默认GPIO为高进入uboot(使用gpio判断节约时间),并且含有"LOGGING_LEVEL=0"关键字,关掉IPL输出打印,一般用于最终产品。 |
使用方法,以nand flash为例:
在实际的分区表中project\image\configs\general\spinand-ramdisk.rtos.partition.config
ipl$(RESOURCE) = 指定需要的IPL
ipl_cust$(RESOURCE) = 指定需要的IPL_CUST
然后重新make image即可
以上GPIO方式需要硬件预留GPIO,该GPIO需要跟mcu或者按键连接。由外部去控GPIO水平状态来决定模式启动(默认为high进入快起模式),一般来说量产都建议用GPIO来控制,因为这样会省20ms的wait时间,也可以进入Uboot模式进行升级以及debug。对于该GPIO没有特别的要求,但建议都预留公版默认的GPIO,如下表1-5的Sigmastar DualOS 平台系列芯片默认的控制方式以及GPIO引脚说明,如图2-2为GPIO在EVB版上接线示意图。
表1-4 启动模式判断GPIO说明
控制方式 | Ifado平台 |
---|---|
Keyboard | 公版默认该模式 |
GPIO | 对应GPIO为:SR_IO14,如果该GPIO状态为**low** 则进入快起boot,如果为 **high**则进入uboot。 |
烧录完成后请拔掉GPIO连接线,避免再次进入uboot。
图2-2 EVB板通过GPIO进入uboot
2.3. EVB板启动方式设置¶
2.3.1. SPI NOR启动¶
For SSC032A-S01A-S:
图2-3 SSC032A-S01A-S EVB板SPI NOR启动 跳线帽连接图示
For SSC032B-S01A-S:
图2-4 SSC032B-S01A-S EVB板SPI NOR启动 跳线帽连接图示
2.3.2. SPI NAND启动¶
For SSC032A-S01A-S:
图2-5 SSC032A-S01A-S EVB板SPI NAND启动 跳线帽连接图示
For SSC032B-S01A-S:
图2-6 SSC032B-S01A-S EVB板SPI NAND启动 跳线帽连接图示
2.3.3 外挂SPI NAND启动¶
For SSC032B-S01A-S:
图2-7 EVB板外挂SPI NAND启动 跳线帽连接图示
For SSC032B-S01A-S:
图2-8 EVB板外挂SPI NAND启动 跳线帽连接图示
2.3.4. 其他启动待补充¶
eMMC启动:NA(待补充)
3. 编译¶
以本芯片支持的SPI NAND/NOR启动方式为例。在SDK中编译有所区分,通过不同的配置文件来实现,SDK中包含了最新的alkaid/kernel和RTOS的image,并且脚本打包成可烧录的image。ifado平台Alkaid和RTOS做了整合,Alkaid project下就可以直接编译RTOS的image并copy回来,无需再分别编译alkaid image和RTOS image。
3.1. Toolchain配置¶
glibc:
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATH <若1.2.4中已添加至环境变量,则此步骤可省略>
uclibc:
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/arm-sigmastar-linux-uclibcgnueabihf-9.1.0/bin:$PATH <若1.2.4中已添加至环境变量,则此步骤可省略>
3.2. 编译生成image¶
解压SourceCode
cd SourceCode tar zxvf xxx.tar.gz
3.2.1. EVB板对应defconfig¶
EVB板根据flash类型,可以分为nand和nor。
For QFN128 EVB Board:
编译SPINAND:
cd project make ipc-rtos_ifado.spinand.glibc-11.1.0-ramdisk.ssc032a.128.qfn128_defconfig make clean;make image -j32
For QFN88 EVB Board
编译nor:
cd project make ipc-rtos_ifado.nor.uclibc-9.1.0-ramdisk.ssc032b.64.qfn88_defconfig make clean;make image -j32
从alkaid/project/image/output/images目录可获取烧录所需的所有bin档
注意:
- 切换不同的defconfig编译,需要先执行
make clean
,再执行make xxx_defconfig
。 否则可能会执行报错
3.3. defconfig命名说明¶
编译之前需要选择对应的defconfig,defconfig各字段说明如下:
$(PRODUCT).$(FLASH).$(TOOLCHAIN)-$(TOOLCHAIN_VERSION)-$(FS_TYPE).$(BAROD).$(DDR_SIZE).$(PACKAGE)_[$(DDR_TYPE)]_[$(OPTION)]_defconfig
字段 | 字段说明 | 举例 |
---|---|---|
PRODUCT | 产品形态 | 如:ipc/usbcam/nvr/dispcam/ipc-rtos |
FLASH | flash类型 | 如:nor/nand/emmc |
TOOLCHAIN | 编译链 | 如:glibc/uclibc |
TOOLCHAIN_VERSION | 编译链版本 | 如:11.1.0/10.2.1 |
FS_TYPE | 文件系统类型 | 如:ramdisk/ext4fs/ramfs/squashfs |
BAROD | 板子类型 | 如:ssc029a/ssm00a/ssm00c |
DDR_SIZE | DDR大小 | 如:256/512x512(两颗512) |
PACKAGE | 芯片封装类型 | 如:bga1/bga2/qfn128 |
DDR_TYPE | DDR类型,此字段为可选字段 | 如:ddr4/ddr3/lpddr3/lpddr4/lpddr4x。如果此字段为空,DDR类型为ddr4 |
OPTION | 标识其它一些功能,此字段为可选字段 | 如:hyp/optee/pm_rtos_dram/str |
其中DDR_SIZE的含义,以512为例:DDR SIZE 512MB,对应.config文件中的LX_MEM
的大小:
512MB=512*1024*1024Byte=0x20000000Byte
同样对应boot下bootargs
参数中的LX_MEM=0x20000000
3.4. Linux Config必选项¶
以 Linux 5.10 为基准,DualOS架构下必需要开启的一些linux配置项
CONFIG_BLK_DEV_INITRD=y CONFIG_SS_DUALOS=y CONFIG_SSTAR_CLK_IGNORE_UNUSED=y CONFIG_SS_BUILTIN_UNFDT=y CONFIG_FB_DTS_SKIP_CRC=y CONFIG_FB_DTS_SCAN_MEMORY_ONCE=y CONFIG_FB_DTS_SKIP_ATAGS_TO_FDT=y CONFIG_DEFERRED_INIICALLS_SLAB_SYSFS=y CONFIG_DEFERRED_INIICALLS_PARAM_SYSFS=y CONFIG_DEFERRED_INIICALLS_PPERF_SYSFS=y CONFIG_DEFERRED_INIICALLS_MORE_SYSFS=y CONFIG_DEFERRED_CREATE_DTS_SYSNODE=y CONFIG_DEFERRED_CRYPTIO_WQ_INIT=y CONFIG_DEFERRED_RTC_HCTOSYS=y CONFIG_PARAVIRT_TIME_ACCOUNTING=y CONFIG_SS_PROXYFS=y CONFIG_SSTAR_DUALOS_DRIVER=y CONFIG_SSTAR_LH_RTOS_VIRTIO=y
若使用 Hypervisor架构还需要配置(ifado暂不支持):
CONFIG_MONITOR_FIRMWARE=y CONFIG_LINUX_ON_SS_HYPERVISOR=y CONFIG_TEE=y CONFIG_OPTEE=y
4. 烧写¶
4.1. ISP Tool烧写¶
请确定 ISP Tool 为5.0.30及以上版本。ISP Tool会在首次版本发布的时候一起打包在tool目录下。
4.1.1. Nor Flash烧写¶
注意:在项目开发的过程或者不同的项目上,分区很可能会不同。实际使用的分区请参考编译镜像中的images/partition_layout.txt。
Nor flash烧录步骤:
step1. 打开ISP tool。并且关闭UART terminal,否则可能无法正常'Connect'。
step2. 选择SPI tab,点击'More' 并且选择类型为'SPINOR',点击'Domain' 并且选择为'NON-PM'。
step3. 点击'Connect',加载image "boot.bin",并点击'Run'。
4.1.2. Nand Flash烧写¶
默认的分区配置如下表,在项目开发的过程或者不同的项目上,分区很可能会不同。实际使用的分区请参考编译镜像中的image/partition_layout.txt。
Nand flash 烧录步骤:
step1. 打开ISP tool。并且关闭UART terminal,否则可能无法正常'Connect'。
step2. 选择SPI tab,点击'More' 并且选择类型为'SPINAND',点击'Domain' 并且选择为'NON-PM'。
step3. 点击'Connect',加载image "cis.bin",并点击'Run'
注意:cis.bin 必须同时烧0地址和0x20000地址,否则boot会起不来。
step4. 加载image "cis.bin", base shift= 0x20000, 并点击'Run'。
step5. 加载image "boot.bin",base shift= 0x140000,并点击'Run'。
注意:如果烧录过程中遇到bad block skip导致烧录失败,可以勾选工具的OpMarkbadBlock,这样工具就不会检查bad block。如果flash真有bad balck,在烧录过程中的verify会报错。
注意:
- 烧录时。如果勾选了oob,烧录的又不是ecc bin,就会出现很多bad block,这时可以erase整块flash擦除oob。
- 出厂坏块无法被擦除,flash厂商有做保护。
4.1.3. 其他烧写方式待补充¶
eMMC烧写:NA(待补充)
4.2. TFTP烧写¶
在PC端运行tftp(FTP server):
step1. 使用tftp工具指向image path:project\image\output\images\(或单独拷贝到其他目录),并选择正确的网卡。
step2. 连接板子的网口到PC端(与PC同一网段即可),连接Debug串口工具到PC端,并检查连接的正确性。
在板子端运行tftp(FTP Client):
step1. 板子开机,长按回车,进入bootloader command line。
首次烧录请设置IP:(除非ip设置变更或者更换flash)
# set -f gatewayip 192.168.1.1 # set -f ipaddr 192.168.1.101 (设定FTP Client (板子)使用的IP) # set -f netmask 255.255.255.0 # set -f serverip 192.168.1.100 (设定FTP server (PC) 的IP) # saveenv
注意:
为了保证烧录顺利,请保证PC和开发板处于同一网段;
请采用静态方式固定分配ip,防止烧录时ip地址跳变;
也可以使用独立网卡使PC端直连开发板,固定该网卡的内网ip地址,并按上述方法设定开发板。
step2. 在UBOOT console下执行estar
即可自动通过网络烧录。
如果烧录成功,会自动重启进入kernel。
如果烧录失败,简单排查方法:
-
先检查网络是否能ping通,在uboot下ping serverip,如不能ping 通,先检查网络配置是否有误;
-
如果可ping通,检查image下
auto_update.txt
文件,该文件为烧录脚本,检查auto_update.txt
文件里所需烧录的bin文件,image下是否已齐全。
5. Preload demo¶
5.1 运行方法¶
RTOS preload demo在开机启动时会自动运行,参数设定在/misc/PreloadSetting.txt文件,参数修改请参考DualOS架构。
linux preload demo在linux起来后,cd /customer/mi_demo/rtos_preload
,运行./prog_rtos_preload
5.2 Source Code路径¶
RTOS preload demo:
rtos/proj/sc/application/pipeline_demo/dualos_camera
linux preload demo:
sdk/verify/mi_demo/source/rtos_preload
6. 启动时间¶
启动时间可通过命令cat /sys/class/sstar/msys/booting_time
获取各阶段时间戳,分析方法查看RTOS Earlyinit及TTFF/TTCL说明。
7. 快起Flash参考¶
下表提供Sigmastar平台公版验证中快起效果最佳的Flash型号,客户可以参考选择。
表1-5 Sigmastar平台DualOS快起的Spi Flash参考
Spi Flash厂商型号 | Flash id |
---|---|
WB - W25N01JW | EF-BC-21 |
在Sigmastar 平台上,如果id是一样就可以归为一个型号,但因为Flash厂商的具体型号可能有很多名字,这个需要检查一下Flash id是否在Flash支持列表,如果在则默认支持使用。如需保证快启时间,做到与Sigmastar提供的参考数据,就需要Flash足够快,一般的Flash达不到要求,对flash要求支持的特性有:Continuous Read Mode、Double Transfer Rate,如果支持这些特性就能满足快开的需求,不然就需要承受Flash读Image慢的时间。
8. APPLICATION SELECTOR介绍¶
新增APPLICATION SELECTOR功能,通过json动态配置要启动的app。rtos/proj/sc/application/pipeline_demo
目录下增加application_selector文件夹,此为application selector的总入口。如果只有一个app可以忽略此功能。如果使用的defconfig中包含ptree,可以将ptree拿掉以达到减少code size的目的。
设置方法: 在project下make menuconfig,选择Rtos ---> Rtos Application Options ---> Support pipeline demo applications ---> Support application selector