开发环境搭建¶
1. 开发环境¶
1.1. 开发环境说明¶
由于嵌入式单板的资源有限,不能在单板上运行开发和调试工具,通常需要交叉编译调试的方式进行开发和调试,即“宿主机+目标板”的形式。一般情况下宿主机和目标板的处理器架构不相同。宿主机需要建立适合于目标板的交叉编译环境。程序在宿主机上经过“编译-连接-定位”得到可执行文件。将可执行文件烧写到目标板中,然后在目标板上运行,下面以一种典型的开发环境为例进行说明。
iford 的开发环境通常包括 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 16.04及以上版本的完全安装。 | NFS、telnetd、samba、vim、arm 交叉编译环境(Gcc 版本11.1.0)等。其他应用软件根据具体开发需要而定,通常系统都已默认安装,只要适当配置即可。 |
| 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. 安装交叉编译工具链¶
发布包提供了工具链:
-
glibc:
gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf.tar.xz
安装步骤如下:
step1. 新建工具目录:
sudo mkdir -p /tools/toolchain 或者 sudo mkdir -p /opt/sstar(本文以/tools/toolchain为例)
step2. 解压安装:
sudo tar -xvf ./gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf.tar.xz -C /tools/toolchain
step3. 可直接在每次编译时export 或 直接添加到/etc/profile、~/.bashrc等启动脚本位置
例:export PATH=${PATH}:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin
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. 环境变量配置¶
编译sdk前,配置编译需要的环境变量,PATH指定交叉编译器路径,CROSS_COMPILE指定交叉编译器类型,ARCH指定芯片架构。
export PATH=$PATH:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin
<若1.2.4中已添加至环境变量,则此步骤可省略>
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
2.2. 解压SDK¶
cd SourceCode
tar zxvf project-xxx.tar.gz
tar zxvf boot-xxx.tar.gz
tar zxvf kernel-xxx.tar.gz
tar zxvf sdk-xxx.tar.gz
tar zxvf optee-xxx.tar.gz
boot-xxx.tar.gz: uboot源码
kernel-xxx.tar.gz: kernel源码
project-xxx.tar.gz: 编译制作image的部分,包含非开源部分的lib/ko,以及对外api头文件参考
sdk-xxx.tar.gz: 测试Demo/应用打包框架部分
optee-xxx.tar.gz: optee源码(并非每个项目都有,视实际项目支持情况)
2.3. project编译¶
2.3.1 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/fastboot |
其中DDR_SIZE的含义,以256为例:DDR SIZE 256MB,对应.config文件中的LX_MEM的大小:
256MB=256*1024*1024Byte=0x10000000Byte
同样对应boot下bootargs参数中的LX_MEM=0x10000000
2.3.2 编译¶
进入前面解压出来的project目录:cd project/ 编译镜像:
目前Comake PI D2 支持两个 defconfig,核心板的defconfig仅支持一路4Lane的Sensor,仅包含AI Glasses demo,打包的demo偏少,带底板的defconfig则支持两路 2+2 的Sensor,包含的demo程序较多。关于4 Lane 和 2+2 的Sensor,详情可看第一个应用程序
编译 核心板的 defconfig:
cd project
make ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_ai_glasses_defconfig
make clean;make image -j16
编译 带底板的 defconfig:
cd project
make ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig
make clean;make image -j16
生成空片烧录镜像:
make image-usb-factory -j16
编译完成后生成的镜像在 project/image/output/images/Usb_Ufu_Upgrade 下,在该目录下也可获取烧录所需的工具,烧录方法请参考《软件烧录说明》
注意:
- 切换不同的defconfig编译,需要先执行
make clean,再执行make xxx_defconfig。 否则可能会执行报错
注意:
-
首次编译请务必在project下执行
make clean;make image -j8命令完整编译(包含整编boot/kernel) -
为增加调试效率,除首次编译外,后续debug可以直接在project下编译对应修改模块然后重新快速打包即可,例如:
仅编译kernel:
make linux-kernel_clean;make linux-kernel -j8仅编译boot:
make boot_clean;make boot -j8仅快速打包sdk image:
make image-fast-nocheck -j8
2.3 boot 编译¶
project下SDK编译已经添加boot编译选项,因此建议boot修改之后,直接在project下编译使用make boot编译boot,编译后不需要手动release到project下的路径,直接重新打包project即可。
2.4 kernel 编译¶
project下SDK编译已经添加kernel编译选项,因此建议kernel修改之后,直接在project下编译使用make linux-kernel编译kernel,编译后不需要手动release到project下的路径,直接重新打包project即可。
3. 虚拟网卡的使用¶
3.1. PC端环境¶
3.1.1. 确认PC端是否有安装RNDIS驱动¶
Comake PI D2 开机后加载对应路径下有如下驱动:
insmod /lib/modules/5.10.117/udc-msb250x.ko
insmod /lib/modules/5.10.117/u_ether.ko
insmod /lib/modules/5.10.117/libcomposite.ko
insmod /lib/modules/5.10.117/usb_f_ecm.ko
insmod /lib/modules/5.10.117/usb_f_rndis.ko
insmod /lib/modules/5.10.117/g_ether.ko
使用 ifconfig指令,若能看到 usb0 的节点表示PC端已安装RNDIS驱动,否则,表示PC端未安装RNDIS驱动,需要先安装驱动才能正常配网。
/ # ifconfig -a
lo Link encap:Local Loopback
LOOPBACK MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr CA:F1:94:09:D9:0A
inet addr:169.254.129.241 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:146060 errors:0 dropped:743 overruns:0 frame:0
TX packets:210878 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8347070 (7.9 MiB) TX bytes:326358396 (311.2 MiB)
3.1.2. PC端安装RNDIS驱动¶
-
通过设备管理器能看到新识别的 usb 设备,如果是其他设备,点进去看是没有安装驱动的

-
按照以下步骤进行配置:
1、右键设备-》属性-》驱动程序-》更新驱动程序-》浏览我的电脑-》让我从计算机的可用驱动列表中读取
2、厂商选微软 Microsoft,型号选择 RNDIS,点击下一步安装即可
-
成功安装驱动后在网络适配器一栏可以看到“USB Ethernet/RNDIS Gadget”

3.2. Comake PI D2自动配网¶
执行 /customer/sample_code/bin/resource/setup_rndis.sh 进行配网操作。

网络配置好之后,可以通过 nfs服务 与 mount指令,将windows端的文件映射到板端,详细指令可参考如下:
mount -t nfs -o nolock -o tcp 192.168.7.20:/d/nfs /mnt
其中/d/nfs为Windows D盘下nfs文件,/mnt为板端文件
也可以运行prog_vif_sensor_demo,在windows下使用PotPlayer或者VLC播放器查看Sensor出流效果,具体可参考《第一个应用程序》