一、前言
最近在进行 SigmaStar SSD202/SSD20X 平台开发时,需要搭建 SDK 编译环境。
SSD202 官方资料中比较常见的开发环境是 Ubuntu 16.04,但现在很多开发电脑使用的已经是 Ubuntu 20.04 或 Ubuntu 22.04。直接使用较新的 Ubuntu 系统进行 SDK 编译时,可能会遇到 Python 版本、编译工具以及 32 位依赖库等兼容性问题。
本文主要记录 SSD202 SDK 在 Ubuntu 22.04 环境下进行编译时需要注意的配置方法,方便后续进行 SSD202 核心板、开发板 的软件开发。
二、SSD202 SDK为什么建议使用Ubuntu 16.04?
在 SSD20X 使用资料中,系统源码编译部分建议使用 Ubuntu 16.04。
如果使用其他版本的 Ubuntu,则需要根据实际环境进行相应修改。
因此,如果使用 Ubuntu 22.04 编译 SSD202 SDK,不能简单地按照 Ubuntu 16.04 的环境直接操作,需要针对编译环境进行调整。
三、Ubuntu 22.04下需要修改哪些内容?
根据实际 SDK 编译环境,主要需要关注以下几个方面:
Python 版本
内核代码中的编译参数
32 位兼容库
CMake
ncurses
bc
xz-utils
automake
libtool
libevdev
pkg-config
下面分别进行处理。
四、修改Python版本
首先需要注意 Python 版本问题。
修改方式是:
/usr/bin/python -> /usr/bin/python2.7
AI写代码
也就是说,SDK 中部分编译脚本仍然依赖 Python 2.7 环境。
如果你的 Ubuntu 22.04 环境中 Python 版本与 SDK 要求不一致,就需要根据实际环境进行调整。
这里建议大家不要直接修改系统中所有 Python 配置。
如果是在虚拟机或者专门用于 SSD202 SDK 编译的 Ubuntu 环境中操作,会更加方便后续维护。
五、修改内核代码中的编译参数
第二个比较重要的问题是内核代码的编译。
进入 SDK 内核源码:
scripts/dtc/Makefile
AI写代码
找到定义 HOSTCFLAGS 或 CFLAGS 的位置。
也可以直接在文件末尾添加:
HOSTCFLAGS += -fcommon
AI写代码
这个修改主要用于解决较新的 GCC 编译环境下可能出现的兼容性问题。
如果使用 Ubuntu 22.04 编译 SSD202 SDK,这一步建议重点检查。
六、安装SDK编译所需要的依赖
SSD202 SDK 编译过程中需要一些额外的工具和库。
可以根据实际环境安装以下依赖:
sudo apt-get install libc6-dev-i386
AI写代码
sudo apt-get install lib32z1 lib32ncurses5
AI写代码
sudo apt-get install libuuid1:i386
AI写代码
sudo apt-get install cmake
AI写代码
sudo apt-get install libncurses5-dev libncursesw5-dev
AI写代码
sudo apt install bc
AI写代码
sudo apt-get install xz-utils
AI写代码
sudo apt-get install automake
AI写代码
sudo apt-get install libtool
AI写代码
sudo apt-get install libevdev-dev
AI写代码
sudo apt-get install pkg-config
AI写代码
这些依赖主要用于满足 SDK 编译过程中不同工具链和源码模块的编译需求。
七、开始编译SSD202 SDK
环境配置完成以后,就可以进入 SDK 工程目录进行编译。
例如 NAND 版本 SSD202,可以使用:
./build.sh -f nand -p ssd202 -m 128
AI写代码
其中:
-f nand
AI写代码
表示使用 NAND 相关配置。
-p ssd202
AI写代码
表示目标平台为 SSD202。
-m 128
AI写代码
为当前编译配置中的参数。
八、编译完成以后做什么?
SDK 编译完成以后,后续就可以进入镜像生成、烧录和系统启动阶段。
SSD202 的开发过程中,常见的系统更新方式包括:
ISP 烧录
U-Boot
TFTP 网络下载
U 盘升级
单独更新 Kernel
单独更新 Rootfs 等系统组件
其中,第一次使用 SSD202 核心板时,比较容易遇到的就是 U-Boot、网络配置以及系统烧录问题。
后面的文章我会继续整理这些内容。
九、SSD202开发过程中几个比较容易混淆的概念
刚开始接触 SSD202 的时候,很容易把下面几个东西混在一起:
SDK编译 ≠ 烧录
SDK 编译主要解决的是:
源代码 → 系统镜像
而烧录解决的是:
系统镜像 → SSD202硬件
例如 SDK 编译完成以后,需要通过 ISP、U-Boot、TFTP 或 U 盘等方式把对应镜像写入开发板。
因此,如果 SDK 已经编译成功,但是开发板无法启动,就应该继续检查烧录过程、U-Boot配置以及硬件连接,而不是反复修改 SDK 编译环境。
十、后续SSD202开发内容
备注:当flash没有烧过系统或系统损坏时,可以先通过ISP烧录BOOT,烧录UBOOT的需要用到ISP烧入工具。
网络下载
1、pc端启动tftp服务,选择images 目录,本机服务IP
2、板子进入uboot设置板端服务IP
setenv autoestart 1 # 重新允许网卡自动初始化
setenv ipaddr 192.168.1.101
setenv serverip 192.168.1.100
estart
AI写代码
3、全部更新
estar
4、单独更新
estar scripts/[[uboot.es
estar scripts/[[logo.es
estar scripts/[[kernel.es
estar scripts/[[rootfs.es
estar scripts/[[miservice.es
estar scripts/[[customer.es
estar scripts/[[appconfigs.es
estar scripts/[[kernel.es
AI写代码
注意:保存变量内核长度可能变化
estar scripts/set_config
AI写代码
u盘下载
在烧录前,我们需要先确认已经使用ISP烧录了Uboot,并且Uboot中包含了usbstar命令。执行以下步骤包含usbstar命令:
首先我们已经使用Release_to_customer.sh脚本成功编译出images目录,接下来通过make_usb_upgrade_sigmastar.sh来制作USB升级镜像:
AI写代码
[start] func_process_main_script
Upgrade [[cis.es? (y/N)y
Upgrade [[set_partition.es? (y/N)y
Upgrade [[ipl.es? (y/N)y
Upgrade [[ipl_cust.es? (y/N)y
Upgrade [[uboot.es? (y/N)y
Upgrade [[logo.es? (y/N)y
Upgrade [[kernel.es? (y/N)y
Upgrade [[rootfs.es? (y/N)y
Upgrade [[miservice.es? (y/N)y
Upgrade [[customer.es? (y/N)y
Upgrade [[appconfigs.es? (y/N)y
UpgradeImage Generating.....
/usr/bin/crc32
enable crc32
1+0 records in
1+0 records out
16 bytes copied, 0.000470793 s, 34.0 kB/s
setenv UpgradePort 1
usbstar
AI写代码
板子上操作
成功生成USB升级镜像:
project/image/output/images/SigmastarUpgrade.bin
AI写代码
将此镜像拷贝到U盘中,然后把U盘接到板子上。
(注意U盘文件类型必须是FAT32)
接着给板子上电并进入uboot,设置UpgradePort为1:
setenv UpgradePort 1
estar
AI写代码
十一、驱动接口使用
1、gpio使用
///uboot 下使用
AI写代码
///文件系统 下使用
//输出设置
echo x > /sys/class/gpio/export //申请GPIO
echo out > /sys/class/gpio/gpiox/direction //设置为输出模式
echo 1 > /sys/class/gpio/gpiox/value //输出高电平
echo 0 > /sys/class/gpio/gpiox/value //输出低电平
echo x > /sys/class/gpio/unexport //卸载该GPIO
//输入demo
echo x > /sys/class/gpio/export //申请ID
echo in > /sys/class/gpio/gpiox/direction //设置为输出模式
cat /sys/class/gpio/gpiox/value //获取输入电平
AI写代码
2、WATCHDOG 使用
SSD20X内部集成了watchdog
watchdog -t 10 /dev/watchdog //表示每10s喂狗一次
watchdog -t 10 -T 5 /dev/watchdog //5s后系统重启
AI写代码
3、应用使用
qt 使用
#鼠标环境变量设置
export QT_QPA_EGLFS_HIDECURSOR=0
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
#运行app
./animatedtiles -platform linuxfb
AI写代码
十二、总结
SSD202 SDK 在 Ubuntu 22.04 下编译,最需要注意的是环境兼容性。
简单总结一下:
Ubuntu 22.04
↓
检查Python版本
↓
修改scripts/dtc/Makefile
↓
增加 HOSTCFLAGS += -fcommon
↓
安装32位兼容库及SDK依赖
↓
执行build.sh
↓
生成系统镜像
↓
进入ISP / U-Boot / TFTP / U盘升级阶段
AI写代码
如果你刚开始接触 SSD202,建议不要一上来就研究应用程序,先把:
SDK编译 → U-Boot → 烧录 → 系统启动 → GPIO → 应用开发
这一整套流程跑通。
这样后面做 SSD202 核心板、摄像头、显示、GPIO、UART、网络以及其他外设开发时,会容易很多。
本文测试平台:迈盛特 SSD202/SSD202D 核心板
本文使用迈盛特 SSD202/SSD202D 核心板进行相关开发测试。
如果你正在学习 SSD202 平台,或者需要进行 SSD202 系统开发,可以使用同平台核心板完成以下开发流程:
SSD202 SDK 编译
U-Boot 系统启动
TFTP 网络下载
U盘系统升级
GPIO 调试
Watchdog 测试
Qt 应用运行
本文中的系统编译、网络下载以及后续 GPIO、Watchdog、Qt 等内容,均围绕 SSD20X 平台开发流程展开。
迈盛特 SSD202/SSD202D 核心板:
离线