一、前言

最近在进行 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 编译环境,主要需要关注以下几个方面:

  1. Python 版本
  2. 内核代码中的编译参数
  3. 32 位兼容库
  4. CMake
  5. ncurses
  6. bc
  7. xz-utils
  8. automake
  9. libtool
  10. libevdev
  11. 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

找到定义 HOSTCFLAGSCFLAGS 的位置。

也可以直接在文件末尾添加:

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 核心板:

https://item.taobao.com/item.htm?id=1057662479099&mi_id=0000ycm8iN-urZUFatLpaI7uHAKUYOq-90WiWVcCipwtTaM&spm=tbpc.boughtlist.suborder_itemtitle.1.40052e8dSV0G0I

后续还会继续更新 SSD202 平台的开发教程,包括 SDK 编译、系统烧录、GPIO、串口、网络以及 Qt 应用等内容。

更多推荐