SSD202 SDK在Ubuntu 22.04下编译失败怎么办?完整环境搭建与解决方法
一、前言
最近在进行 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 编译环境搭建为主,后续还会继续整理 SSD202 的 U-Boot、TFTP 网络烧录、U 盘升级、GPIO、Watchdog 等开发内容。
二、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
也就是说,SDK 中部分编译脚本仍然依赖 Python 2.7 环境。
如果你的 Ubuntu 22.04 环境中 Python 版本与 SDK 要求不一致,就需要根据实际环境进行调整。
这里建议大家不要直接修改系统中所有 Python 配置。
如果是在虚拟机或者专门用于 SSD202 SDK 编译的 Ubuntu 环境中操作,会更加方便后续维护。
五、修改内核代码中的编译参数
第二个比较重要的问题是内核代码的编译。
进入 SDK 内核源码:
scripts/dtc/Makefile
找到定义 HOSTCFLAGS 或 CFLAGS 的位置。
也可以直接在文件末尾添加:
HOSTCFLAGS += -fcommon
这个修改主要用于解决较新的 GCC 编译环境下可能出现的兼容性问题。
如果使用 Ubuntu 22.04 编译 SSD202 SDK,这一步建议重点检查。
六、安装SDK编译所需要的依赖
SSD202 SDK 编译过程中需要一些额外的工具和库。
可以根据实际环境安装以下依赖:
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32z1 lib32ncurses5
sudo apt-get install libuuid1:i386
sudo apt-get install cmake
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt install bc
sudo apt-get install xz-utils
sudo apt-get install automake
sudo apt-get install libtool
sudo apt-get install libevdev-dev
sudo apt-get install pkg-config
这些依赖主要用于满足 SDK 编译过程中不同工具链和源码模块的编译需求。
如果某一步提示缺少对应的库或工具,可以根据终端报错信息继续定位。
七、开始编译SSD202 SDK
环境配置完成以后,就可以进入 SDK 工程目录进行编译。
例如 NAND 版本 SSD202,可以使用:
./build.sh -f nand -p ssd202 -m 128
其中:
-f nand
表示使用 NAND 相关配置。
-p ssd202
表示目标平台为 SSD202。
-m 128
为当前编译配置中的参数。
具体参数仍然需要根据自己使用的 SDK 版本以及硬件配置进行确认。
八、编译完成以后做什么?
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
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
注意:保存变量内核长度可能变化
estar scripts/set_config
u盘下载
在烧录前,我们需要先确认已经使用ISP烧录了Uboot,并且Uboot中包含了usbstar命令。执行以下步骤包含usbstar命令:
首先我们已经使用Release_to_customer.sh脚本成功编译出images目录,接下来通过make_usb_upgrade_sigmastar.sh来制作USB升级镜像:
# cd project
# ./make_usb_upgrade_sigmastar.sh
[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
板子上操作
成功生成USB升级镜像:
project/image/output/images/SigmastarUpgrade.bin
将此镜像拷贝到U盘中,然后把U盘接到板子上。
(注意U盘文件类型必须是FAT32)
接着给板子上电并进入uboot,设置UpgradePort为1:
setenv UpgradePort 1
estar
十一、驱动接口使用
1、gpio使用
///uboot 下使用
# gpio output num 0 //输出低电平
# gpio input num //设置为输入
# gpio get num //获取输入电平
# gpio toggle num //比如前面num输出了低电平,则执行次命令后num输出高电平
///文件系统 下使用
//输出设置
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 //获取输入电平
2、WATCHDOG 使用
SSD20X内部集成了watchdog
watchdog -t 10 /dev/watchdog //表示每10s喂狗一次
watchdog -t 10 -T 5 /dev/watchdog //5s后系统重启
3、应用使用
qt使用
#鼠标环境变量设置
export QT_QPA_EGLFS_HIDECURSOR=0
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
#运行app
./animatedtiles -platform linuxfb
十二、总结
SSD202 SDK 在 Ubuntu 22.04 下编译,最需要注意的是环境兼容性。
简单总结一下:
Ubuntu 22.04
↓
检查Python版本
↓
修改scripts/dtc/Makefile
↓
增加 HOSTCFLAGS += -fcommon
↓
安装32位兼容库及SDK依赖
↓
执行build.sh
↓
生成系统镜像
↓
进入ISP / U-Boot / TFTP / U盘升级阶段
如果你刚开始接触 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 核心板:
后续还会继续更新 SSD202 平台的开发教程,包括 SDK 编译、系统烧录、GPIO、串口、网络以及 Qt 应用等内容。
更多推荐



所有评论(0)