开发环境搭建

Version 1.2


1. 编译环境搭建

通常我们会以交叉编译的方式进行开发和调试,即“宿主机+目标机”的形式。而宿主机和目标机的连接我们一般采用串口连接或网络连接,如下图所示:

注:

  1. 我们提供的debug tool作用除了可以debug外,还可以通过PC工具读寄存器和烧写空flash。

  2. 如果是仅调试可以使用串口设备正确对接调试线序即可,线序请和原理图对齐。

  3. 如果需要读Register或者烧录裸Flash的时候,需要Debug Tool。

  4. tool根据需求量自行购买


2. 安装Linux BuildCode服务器

推荐使用Ubuntu 16.04,该版本已进行验证,如果使用其他版本遇到环境问题将不予支持。


2.1. 安装ubuntuserver

  1. 下载1604的server版(64 位版本);

  2. 安装VMware Worksation;

  3. 选择1604的iso,装载然后安装即可;

  4. 简易安装直接点击完成,系统会自动进行安装;

  5. 安装VMtools,用于拷贝将windows目录,共享到ubuntu,点击获取参考信息

ubuntu安装成功,接下来安装开发需要的环境。


2.2. 安装编译需要的lib & tool

  1. 添加新用户

    1. 新装ubuntu,首先要设置root密码,进入系统设置root密码:# sudo passwd,连续输入密码即可,提示成功即可;

    2. 添加用户,进入系统后重新创建用户,# sudo adduser xxx--force来创建用户,此时会提示输入account的一些信息,一直回车即可;

    3. 此时账户已经建立,那么需要安装相关的工具以及编译环境,执行# sudo apt-get install libncurses5-dev libncursesw5-dev,这时候会提示当前用户无法执行sudoers,需要做如下修改:

      sudo chmod u+w /etc/sudoers
      
      vi /etc/sudoers;
      

      参考: root ALL=(ALL:ALL) ALL,

      添加一行: xxx ALL=(ALL:ALL) ALL

      sudo chmod u-w /etc/sudoers
      

      再执行sudo操作即可安装了,建议在安装完后执行#sudo apt-get update来更新源。

  2. 安装samba

    samba用于共享linux文件到windows。

    # sudo apt-get install samba samba-common
    
    # sudo smbpasswd -a xxx (添加samba账户,用于windows访问linuxsamba目录)
    

    修改/etc/samba/smb.conf

    [xxx]
    
    path=/home/xxx
    
    public=yes
    
    writable=yes
    
    valid users=xxx
    
    available=yes
    
    browseable=yes
    
    guest ok = yes
    

    这样samba已经配置好了,重启samba 服务即可,测试从windows访问samba:\\192.168.1.11 (your ubuntu ip)

  3. 安装ssh

    安装ssh用于登陆调试。

    sudo apt-get install openssh-server;
    

    安装结束即可使用。

  4. 其他工具

    针对SDK编译安装一些tool,否则会编译失败。

    # 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
    

    如上这些需要安装的tool && lib是必须的,因为编译过程中会用到相关内容。这边就不一一说明是哪个错误,可以尝试先不安装编译来查看相关错误,为了省事,在编译之前一次性安装即可。

  5. 修改sh

    如果默认sh不是bash,需要将sh改成bash

    sudo rm /bin/sh
    
    sudo ln -s /bin/bash /bin/sh
    
  6. 安装toolchain

    1. 拷贝gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi.tar.gzgcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf.tar.xz/tools/toolchain/,目录自行定义。

    2. 解压toolchain

    3. 将toolchain设置到环境变量中,避免每次手动export;

    4. 在/etc/profile添加:

      export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin/:$PATH
      

      配置完成后,可以按照如下方式确认gcc版本是否已经切换到9.1.0版本。

      至此编译环境就已经全部搭建完成了,下面进行sdk的编译工作。

    注: sdk提供的脚本默认都是用bash,如果以下编译发生脚本执行出错,请检查/bin/sh是否是指向/bin/bash,如果不是,请指向/bin/bash


3. SDK开发包编译步骤


3.1. 代码获取

可从FTP获取对应的SDK开发包。


3.2. 编译boot

Toolchain: gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf

ufu设置:

  1. 选择配置

    • Nor

      make pioneer3_defconfig;
      
    • Spinand

      make pioneer3_spinand_defconfig;
      
  2. u-boot 开启 ufu command

    make menuconfig进入如下界面

    注意:如果选择 Auto run ufu command in boot,那么 u-boot 就会启动跑进 ufu停住,等待升级。 此项用在空片升级才需要选,正常情况是不需要选上,否则会一直进入ufu模式导致进不到系统

    • Nor flash

      glibc:

      declare -x ARCH="arm";declare -x CROSS_COMPILE=" arm-linux-gnueabihf-"
      
      make pioneer3_defconfig;
      
      make clean;make
      

      编译完成后生成的image在: boot/u-boot.xz.img.bin,把它替换到project/board/p3/boot-rtos/nor/uboot,重新编译project即可;

    • spinand

      glibc:

      declare -x ARCH="arm";declare -x CROSS_COMPILE=" arm-linux-gnueabihf-"
      
      make pioneer3_spinand_defconfig;
      
      make clean;make
      

      编译完成后生成的image在: boot/u-boot_spinand.xz.img.bin,把它替换到project/board/p3/boot-rtos/spinand/uboot,重新编译project即可。


3.3. 编译RTOS

Toolchain: gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi

  • glibc

    1. sdk中提供 rtk_xxxx_xxxx-xx-xx-xxxx-IKAYAKI_URS00VXXX.tar.xztar -xvf xx.xz解压,解压后会出现一个rtk文件夹

    2. toolchain设置         

      $ export CROSS_COMPILE=arm-eabi-
      
      $ export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin/:$PATH
      
    3. cd rtk/proj;./tng/configure.pl 会跳出编译配置选项,如下:

      Index Product Config DDR Size(MB) Packaging Chip Flash Type Function
      0 pioneer3_ssc020a_128_freertos_smp_isw_display 128 QFN128 SSD222D 默认使用SPI-NOR 默认TTL Display
      1 pioneer3_ssc020a_64_freertos_smp_isw_display 64 QFN128 SSD222 SSD212 默认使用SPI-NOR 默认TTL Display
      2 pioneer3_ssc020a_64_freertos_smp_isw_usbdev 64 QFN128 SSD222 SSD212 默认使用SPI-NOR 默认UVC Dual Sensor
      3 pioneer3_ssc021a_16_freertos_smp_isw_display 16 QFN68 SSC9211F 默认使用SPI-NOR 默认SPI Display
      4 pioneer3_ssc021a_16_freertos_smp_isw_usbdev 16 QFN68 SSC9211F 默认使用SPI-NOR 默认UVC Single Sensor
      5 pioneer3_ssc021a_64_freertos_smp_isw_display 64 QFN68 SSD210 SSC9211 默认使用SPI-NOR 默认SPI Display
      6 pioneer3_ssc021a_64_freertos_smp_isw_usbdev 64 QFN68 SSD210 SSC9211 默认使用SPI-NOR 默认UVC Dual Sensor

      根据对应需求,选择Product Config序号,点击回车到结束即可选中配置。相关的配置均在rtk/proj/mak/product/中。例如,pioneer3_ssc020a_64_freertos_smp_isw_usbdev这个配置,对应的就是rtk/proj/mak/product/mak/product/options_pioneer3_ssc020a_64_freertos_smp_isw_usbdev.mak,用户可根据自身需要修改配置。

    4. make clean; make 将进行编译

    5. 生成的bin文件在:rtk/proj/build/$PRODUCT/out/$PRODUCT.bin,注意这里的$PRODUCT请根据./tng/configure.pl中选择的选项确定。例如,使用配置pioneer3_ssc020a_64_freertos_smp_isw_usbdev,对应生成的文件为rtk/proj/build/pioneer3_ssc020a_64_freertos_smp_isw_usbdev/out/pioneer3_ssc020a_64_freertos_smp_isw_usbdev.bin


3.4. 打包image

Toolchain: gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf

  1. sdk提供 project-IKAYAKI-URS00VXXX.tar.gz用于打包镜像。

    tar -xvzf project-IKAYAKI-URS00VXXX.tar.gz
    
  2. toolchain设置

    declare -x ARCH="arm"
    
    declare -x CROSS_COMPILE="arm-linux-gnueabihf-"
    
    export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin:$PATH
    
  3. 打包

    请将在rtos工程(3.3. 编译rtos)生成的bin文件复制到project/board/p3/rtos/下,这样在打包的时候会将project/board/p3/rtos/路径下相应的bin文件一起打包。可在相对应的defconfig中查看CONFIG_RTOS_BIN的值确认打包bin文件的名称,具体请见下表:

    Chip Packaging Memory Flash Type Rename Function Defconfig
    SSD222D QFN128 128MB SPI-NOR pioneer3_ssc020a_128_freertos_smp_isw_display.bin Dual Sensor + Display usbcam-rtos_p3_nor.glibc-9.1.0-020a.128.qfn128.dual_uvc_demo_defconfig
    SSD222D QFN128 128MB SPI-NAND pioneer3_ssc020a_128_freertos_smp_isw_display.bin Dual Sensor + Display usbcam-rtos_p3_spinand.glibc-9.1.0-020a.128.qfn128.dual_uvc_demo_defconfig
    SSD222 SSD212 QFN128 64MB SPI-NOR pioneer3_ssc020a_64_freertos_smp_isw_usbdev.bin Dual Sensor usbcam-rtos_p3_nor.glibc-9.1.0-020a.64.qfn128.dual_uvc_demo_defconfig
    SSD222 SSD212 QFN128 64MB SPI-NOR pioneer3_ssc020a_64_freertos_smp_isw_display.bin Display usbcam-rtos_p3_nor.glibc-9.1.0-020a.64.qfn128.disp_demo_defconfig
    SSD222 SSD212 QFN128 64MB SPI-NAND pioneer3_ssc020a_64_freertos_smp_isw_usbdev.bin Dual Sensor usbcam-rtos_p3_spinand.glibc-9.1.0-020a.64.qfn128.dual_uvc_demo_defconfig
    SSD222 SSD212 QFN128 64MB SPI-NAND pioneer3_ssc020a_64_freertos_smp_isw_display.bin Display usbcam-rtos_p3_spinand.glibc-9.1.0-020a.64.qfn128.disp_demo_defconfig
    SSD210 SSC9211 QFN68 64M SPI-NOR pioneer3_ssc021a_64_freertos_smp_isw_usbdev.bin Common usbcam-rtos_p3_nor.glibc-9.1.0-021a.64.qfn68_defconfig
    SSD210 SSC9211 QFN68 64M SPI-NOR pioneer3_ssc021a_64_freertos_smp_isw_display.bin Display usbcam-rtos_p3_nor.glibc-9.1.0-021a.64.qfn68.disp_demo_defconfig
    SSD210 SSC9211 QFN68 64M SPI-NAND pioneer3_ssc021a_64_freertos_smp_isw_usbdev.bin Common usbcam-rtos_p3_spinand.glibc-9.1.0-021a.64.qfn68_defconfig
    SSD210 SSC9211 QFN68 64M SPI-NAND pioneer3_ssc021a_64_freertos_smp_isw_display.bin Display usbcam-rtos_p3_spinand.glibc-9.1.0-021a.64.qfn68.disp_demo_defconfig
    SSC9211F QFN68 64M SPI-NOR pioneer3_ssc021a_16_freertos_smp_isw_usbdev.bin Common usbcam-rtos_p3_nor.glibc-9.1.0-021a.16.qfn68_defconfig
    SSC9211F QFN68 64M SPI-NOR pioneer3_ssc021a_16_freertos_smp_isw_display.bin Display usbcam-rtos_p3_nor.glibc-9.1.0-021a.16.qfn68.disp_demo_defconfig
    SSC9211F QFN68 64M SPI-NAND pioneer3_ssc021a_16_freertos_smp_isw_usbdev.bin Common usbcam-rtos_p3_spinand.glibc-9.1.0-021a.16.qfn68_defconfig
    SSC9211F QFN68 64M SPI-NAND pioneer3_ssc021a_16_freertos_smp_isw_display.bin Display usbcam-rtos_p3_spinand.glibc-9.1.0-021a.16.qfn68.disp_demo_defconfig

    例如,RTOS工程使用pioneer3_ssc020a_64_freertos_smp_isw_usbdev配置,SPI-NOR启动且需要dual sensor uvc,在将编译生成的pioneer3_ssc020a_64_freertos_smp_isw_usbdev.bin复制到project/board/p3/rtos/后,则进行如下操作:

    make usbcam-rtos_p3_nor.glibc-9.1.0-020a.64.qfn128.dual_uvc_demo_defconfig
    make image_install
    

    如果是使用其他配置,例如,pioneer3_ssc021a_16_freertos_smp_isw_display,SPI-NAND启动,可用:

    make usbcam-rtos_p3_spinand.glibc-9.1.0-021a.16.qfn68.disp_demo_defconfig
    make image_install
    

    做完上面一步后,生成的固件在project/image/output/images文件夹下。关于不同配置的应用场景并不是固定的,用户可以根据自身应用场景需要自行添加配置,通常自行复制一个配置,在其上进行修改,默认公版配置之间的差异亦可通过文本对比工具查看。


4. Demo板连接图


4.1. SSD210/SSC9211/SSC9211F接口位置示意图


4.2. SSD212接口位置示意图

4.3. SSD222/SSD222D接口位置示意图


5. 烧录Image到板子


5.1. flash tool烧录空flash

烧录空flash或者无法跑起来uboot的板子。

空板烧录需要用flash tool连接烧录(此方法只供开发阶段使用,正式生产请使用烧录器烧录母片的方式),flash tool一般只用于烧录引导启动的文件,保证板子能够跑起来uboot,然后再通过uboot进行具体应用的升级。具体方法如下。

使用flash tool连接前请务必先断开串口,不然flash tool会连接失败!断开串口步骤如下:

  • 板端断电后对PC串口会话长按enter键再上电即可进入uboot,此时会跳出Sigmastar #字样,表明已经运行在uboot阶段。在uboot console下面,直接输入debug或者de,会出现debug mode on, cmdline is disabled,此时板端UART功能关闭,PC将无法和板端进行交互,然后关闭PC终端的串口会话。

  • 跳出SS-RTOS #字样表明处于RTOS阶段。在rtos console下面,直接输入222222,板端UART功能关闭,PC将无法和板端进行交互,然后关闭PC终端的串口会话。

关闭UART后,就可以按如下方法使用flash tool烧录了。

注:flash tool连接需要使用指定的串口板,普通串口板无法连接成功!

5.1.1. 烧录SPI NOR Flash

新的flash架构,nor flash只需要烧写boot.bin,具体方法如下:

  1. 打开flash tool,点击SPI,在Type栏目选择SPINOR,然后点击Connect,工具显示Connected表示已连接成功。

  2. 按如下红框的步骤,选择需要烧录boot.bin以及对应的flash地址(如下),然后点击run即可,烧录完成后工具显示pass表示已烧录成功。

    boot.bin -> 0x00000000 -> project\image\output\images\boot.bin

5.1.2. 烧录SPI NAND Flash

新的flash架构,nand flash只需要烧写cis.bin和boot.bin,具体方法如下:

  1. 打开flash tool,选择SPINAND,然后点击connect,工具显示Connected表示已连接成功。

  2. 按如下红框的步骤,选择需要烧录cis.bin以及对应的flash地址(如下),然后点击run即可,烧录完成后工具显示pass表示已烧录成功。

    Binary file offset Binary放置目录
    cis.bin 0x00000 \project\image\output\images\cis.bin
    cis.bin 0x20000 \project\image\output\images\cis.bin
    boot.bin 0x140000 \project\image\output\images\boot.bin

  3. 同样的步骤烧录第二次cis.bin(注意和第一次的地址不一样,并且Erase Device不勾选)和boot.bin(注意Erase Device不勾选),注意flash地址需要填对应分区的地址。

    烧录完uboot后,可以关闭flash tool然后重新连上串口,板子断电重启后就可以进入到uboot终端用tftp升级主程序。

5.1.3. 批量烧录指定文件

上述步骤较为繁琐,flash tool也支持一键烧录的功能,需要事先配置好一个*.cfg后缀的文本文件,其语法格式为烧录文件 : 偏移地址,以nand flash为例:

cis.bin : 0x00000000
cis.bin : 0x00020000
boot.bin : 0x00140000

只需要在flash tool导入*.cfg的文件直接烧录即可。


5.2. tftp网络烧录image

使用tftp网络烧录image的前提是板子里面已经带有uboot程序才行,如果没有uboot程序需要参考flash tool烧录的方法先烧录uboot,然后再按如下方法tftp烧录。

  1. 打开tftp工具指向image path:\project\image\output\images\,并选择正确的网卡。

  2. 板子连接网络,并确保板子跟PC处于同一个网段(PC需要关闭防火墙)

  3. 板子开机,长按回车,进入uboot终端

  4. 首次烧录需要设置IP地址

    SigmaStar # setenv gatewayip 192.168.1.1
    SigmaStar # setenv ipaddr 192.168.1.127       //设定FTP Client (EVB板子)使用的IP
    SigmaStar # setenv netmask 255.255.255.0
    SigmaStar # setenv serverip 192.168.1.100     //设定FTP server (PC) 的IP
    SigmaStar # saveenv
    

    注:

    1. 为了保证烧录顺利,请保证PC和开发板处于同一网段。

    2. 请采用静态方式固定分配ip,防止烧录时ip地址跳变。

    3. 也可以使用独立网卡使PC端直连开发板,固定该网卡的内网ip地址,并按上述方法设定开发板。

    4. 在uboot终端使用如下命令进行烧录。

      SigmaStar # estart
      SigmaStar # estar (or: estar auto_update.txt,也可以指定auto_update.txt某一行烧录)
      

5.3. USBDownloadTool空片升级

USBDownloadTool工具包文件如下,其中u-boot.bin 是uboot下使用对应nor或者nand flash的config编译出来的u-boot.bin。该文件可以直接从project/board/p3/boot/usb/upgrade中获得,RTOS只使用u-boot.img_single.bin(SPI-NOR)或u-boot_spinand.img_single.bin(SPI-NAND)即可,注意需要更名成u-boot.bin。这个工具适合开发调试阶段使用,不建议用于量产!

5.3.1. UFU空片升级

  1. 将上面的4个文件,拷贝到打包好的镜像中,如放到project/output/image/images中,如下图。

  2. 将flash erase掉,erase的方式如下两种方式:

    方法一:在uboot下 sf probe;sf erase 0 10000  (针对nor flash);在uboot下 nand erase.chip  (针对nand flash)

    方法二:用flash tool连接上,connect后,选择erase选项卡,选择end of chip,然后erase,如下图

    如果flash erase成功,断电重启后,可以在设备管理器通用串行总线控制器选项中看到一个大容量存储设备。

  3. 打开USBDownloadTool.exe,点击Update Firmware进行升级


5.3.2. Uboot下UFU升级

USBDownload Tool除了可以空片升级外,也可以在uboot下进行ufu升级,平常开发调试阶段建议使用这种方式进行升级。

  1. uboot开启ufu command

    注:如果选择 Auto run ufu command in boot,那么 u-boot 就会启动跑进 ufu 停住,等待升级。 此项用在空片升级才需要选,正常情况是不需要选上,否则会进不到系统,会一直处于ufu状态。

  2. uboot下升级

    板子启动进入uboot命令行,执行以下两条命令:

    setenv ota_upgrade_status 1
    saveenv
    

    然后重启,此时uboot将进入ufu command停住,如下图:

    将4个tool文件放到image路径下,然后运行USBDownloadTool.exe,点击“Upgrade Firmware”等待完成升级:

    升级完成后,注意要清楚ota_upgrade_status,然后重启,否则将会再次进入ufu command:

    setenv ota_upgrade_status 0
    saveenv
    

5.3.3. Linux PC下UFU升级

Linux 系统UFU烧录工具目前支持flash启动和ram启动两种,flash启动即在有nor/nand flash情况下,将IPL、boot、kernel等分区烧录flash后启动;ram启动则是在无flash情况下,直接将IPL、rtos或kernel拷贝到ram中,通过IPL直接启动OS,掉电后信息擦除。

UFU Flash 启动:

  1. 将usbdownload 拷贝到需要烧录的image文件夹中

  2. 开发板连接usb, 将开发板擦成空板或在uboot下输入ufu命令,待PC端识别出/dev/sg*或者/dev/sda* (需chmod +x /dev/sg* 修改下执行权限)

  3. 在root 用户下执行 ./usbdownload /dev/sg*,烧入成功截图如下:

UFU RAM启动:

  1. 将usbdownload、usb_updater.bin、AitUVCExtApi.dll 和将要烧入的root.bin或env、kernel、rootfs.ramfs 拷贝到同一目录下

  2. 开发板连接usb,待PC端识别出/dev/sg*或者/dev/sda* (需chmod +x /dev/sg* 修改下执行权限)

  3. 在root 用户下 执行 ./usbdownload /dev/sg* 即可

注:直启Linux时由于需要传递bootargs 给kernel,所以需要 env文件,IPL读取env中的bootargs传递给kernel。rootfs只支持 ramfs。


5.4. USB Factory Tool升级

USB Factory Tool支持空片、ufu升级,步骤同上述一致。如果量产不使用flash母片升级(先烧好flash再贴片),空片批量升级请使用USB Factory Tool工具。在确保make image_install成功打包出镜像后,可在project目录下执行命令./make_usb_factory_sigmastar.sh可生成形如SstarUsbImage_xxxxyyyyzzzz.bin的文件,其中xxxx为年份,yyyy为日期,zzzz为时分。该脚本会将所有打包出来的文件将压缩成一个bin,量产时仅提供一个bin,避免整包镜像缺失部分文件造成问题。

工具升级过程可见下图: