SSD_DispCam环境搭建


1. 编译环境搭建

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

注:

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

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

  3. 如果要读Register或者烧录裸Flash,需要使用debug Tool。

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


2. 安装Linux Build Code服务器

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


2.1. 安装ubuntu 16.04 server

  1. 下载1604的server版

  2. 安装VMware Worksation;

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

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

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

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


2.2. 添加新用户

  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.3. 安装samba

samba用于共享linux文件到windows。

# sudo apt-get install samba samba-common

# sudo smbpasswd -a xxx (添加samba账户,用于windows访问linux samba目录)

修改/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)


2.4. 安装ssh

安装ssh用于登陆调试。

sudo apt-get install openssh-server;

安装结束即可使用。


2.5. 其他工具

为避免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

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


2.6. 修改sh

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

# sudo rm /bin/sh

# sudo ln –s /bin/bash /bin/sh

2.7. 安装toolchain

  • 拷贝gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf.tar.xz/tools/toolchain/,自定义目录。

  • 解压toolchain

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

  • 在/etc/profile添加:

    export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/:$PATH
    
  • 配置完成后,可以按照如下方式确认gcc版本是否已经切换到9.1.0版本。

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


3. SDK开发包编译步骤

如下分别提到了“编译boot”,“编译kernel”,“编译sdk”,boot已经默认编译好放到project路径,因此刚开始验证的时候,可以直接跳过“编译boot”和“编译kernel”,直接从“编译sdk”(kernel的编译已经集成到编译sdk里面,默认会编译kernel)开始编译出来整个image,就可以烧写、验证了。

注意: 编译之前一定要确认上个步骤toolchain路径要设置正确。


3.1. 代码获取

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


3.2. 编译boot

  • spi-nor

    glibc:

    step1: 设置编译环境

    #declare -x ARCH="arm"
    或者采用 export ARCH=arm
    
    #declare -x CROSS_COMPILE="arm-linux-gnueabihf-"
    或者采用 export CROSS_COMPILE=arm-linux-gnueabihf-
    

    step2: 选取合适config

    #make pioneer3_dualenv_defconfig(从V011版本开始默认打开ENV双备份和USB升级,是公版release的默认配置)
    或 make pioneer3_defconfig;
    

    step3: clean并编译

    #make clean;make
    

    编译完成后生成的image在:

    pioneer3_defconfig: `boot/u-boot.xz.img.bin`,把它替换到
    `project/board/p3/boot/nor/uboot/u-boot.xz.img.bin`,
    重新编译project即可;
    
    pioneer3_dualenv_defconfig: `boot/u-boot.xz.img.bin`,把它替换到
    `project/board/p3/boot/nor/uboot/u-boot_dualenv.xz.img.bin`,
    重新编译project即可;
    
  • spi-nand

    glibc:

    step1: 设置编译环境

    #declare -x ARCH="arm"
    或者采用 export ARCH=arm
    
    #declare -x CROSS_COMPILE="arm-linux-gnueabihf-"
    或者采用 export CROSS_COMPILE=arm-linux-gnueabihf-
    

    step2: 选取合适config

    #make pioneer3_dualenv_spinand_defconfig(从V011版本开始默认打开ENV双备份和USB升级,是公版release的默认配置)
    或 make pioneer3_spinand_defconfig;
    

    step3: clean并编译

    #make clean;make
    

    编译完成后生成的image在:

    pioneer3_spinand_defconfig: `boot/u-boot_spinand.xz.img.bin`,把它替换到
    `project/board/p3/boot/spinand/uboot/u-boot_spinand.xz.img.bin`,
    重新编译project即可;
    
    pioneer3_dualenv_spinand_defconfig: `boot/u-boot_spinand.xz.img.bin`,把它替换到
    `project/board/p3/boot/spinand/uboot/u-boot_dualenv_spinand.xz.img.bin`,
    重新编译project即可;
    
    Flash Type Other Defconfig
    SPI-NOR 基本 pioneer3_defconfig
    SPI-NAND 基本 pioneer3_spinand_defconfig
    SPI-NOR 在默认基础上添加ENV双备份机制 pioneer3_dualenv_defconfig
    SPI-NAND 在默认基础上添加ENV双备份机制 pioneer3_dualenv_spinand_defconfig

3.3. 编译kernel

编译alkaid会默认编译kernel,和SSD201/SSD202不同。因此建议修改相关kernel之后,直接在project下编译,会默认编译kernel的内容,并且不需要手动release到project下的路径。

step1: 设置编译环境

#declare -x ARCH="arm"
或者采用 export ARCH=arm

#declare -x CROSS_COMPILE="arm-linux-gnueabihf-"
或者采用 export CROSS_COMPILE=arm-linux-gnueabihf-

step2: 选取合适config

Chip Packaging Memory Flash Type Toolchain Other Defconfig
SSD210 QFN68 64M SPI-NOR glibc 不带sensor make pioneer3_ssc021a_s01a_demo_defconfig
SSD210 QFN68 64M SPI-NOR glibc 带sensor make pioneer3_ssc021a_s01a_demo_camera_defconfig
SSD210 QFN68 64M SPI-NAND glibc 不带sensor make pioneer3_ssc021a_s01a_spinand_demo_defconfig
SSD210 QFN68 64M SPI-NAND glibc 带sensor make pioneer3_ssc021a_s01a_spinand_demo_camera_defconfig
SSD212 QFN128 64M SPI-NOR glibc NA make pioneer3_ssc020a_s01a_demo_defconfig
SSD212 QFN128 64M SPI-NOR glibc sdio wifi make pioneer3_ssc020a_s01a_demo_wifi_defconfig
SSD212 QFN128 64M SPI-NAND glibc NA make pioneer3_ssc020a_s01a_spinand_demo_defconfig
SSD212 QFN128 64M SPI-NAND glibc sdio wifi make pioneer3_ssc020a_s01a_spinand_demo_wifi_defconfig
SSD222 QFN128 64M SPI-NOR glibc NA make pioneer3_ssc020a_s01a_demo_camera_defconfig
SSD222 QFN128 64M SPI-NOR glibc sdio wifi make pioneer3_ssc020a_s01a_demo_camera_wifi_defconfig
SSD222 QFN128 64M SPI-NAND glibc NA make pioneer3_ssc020a_s01a_spinand_demo_camera_defconfig
SSD222 QFN128 64M SPI-NAND glibc sdio wifi make pioneer3_ssc020a_s01a_spinand_demo_camera_wifi_defconfig
SSD222 QFN128 64M SPI-NAND glibc 2lane sensor make pioneer3_ssc020a_s01a_spinand_demo_camera_2lane_defconfig
SSD222D QFN128 128M SPI-NOR glibc NA make pioneer3_ssc020a_s01a_demo_camera_defconfig
SSD222D QFN128 128M SPI-NOR glibc sdio wifi make pioneer3_ssc020a_s01a_demo_camera_wifi_defconfig
SSD222D QFN128 128M SPI-NAND glibc NA make pioneer3_ssc020a_s01a_spinand_demo_camera_defconfig
SSD222D QFN128 128M SPI-NAND glibc sdio wifi make pioneer3_ssc020a_s01a_spinand_demo_camera_wifi_defconfig
SSD222D QFN128 128M nor+emmc glibc nor配合emmc make pioneer3_ssc020a_s01a_emmc-nor_demo_camera_defconfig
SSD222D QFN128 128M sdmmc glibc sd-boot make pioneer3_ssc020a_s01a_sdmmc_demo_camera_defconfig
SSD222Q QFN128 256M SPI-NOR glibc NA make pioneer3_ssc020b_s01a_defconfig
SSD222Q QFN128 128M SPI-NOR glibc sdio wifi make pioneer3_ssc020b_s01a_sdiowifi_defconfig
SSD222Q QFN128 256M SPI-NAND glibc NA make pioneer3_ssc020b_s01a_spinand_defconfig
SSD222Q QFN128 256M SPI-NAND glibc sdio wifi make pioneer3_ssc020b_s01a_spinand_sdiowifi_defconfig

step3: clean并编译

#make clean;make -j8

如果kernel 有新增kernel modules需要将相应的module添加到kernel_mod_list/kernel_mod_list_late(kernel_mod_list_late里的ko会在mi module之后装载)

修改路径:project/kbuild/customize/$(KERNEL_VERSION)/$(CHIP)/$(PRODUCT)/kernel_mod_list


3.4. 编译SDK

默认编译sdk时,会先build kernel,第一次编译通过make clean;make image -j8命令全部编译,后续如果不需要build kernel可以用make image-fast代替make image

step1: 设置编译环境

#declare -x ARCH="arm"
或者采用 export ARCH=arm

#declare -x CROSS_COMPILE="arm-linux-gnueabihf-"
或者采用 export CROSS_COMPILE=arm-linux-gnueabihf-

step2: 选取合适config

Chip Packaging Memory Flash Type Toolchain Other Defconfig
SSD210 QFN68 64M SPI-NOR glibc 不带sensor make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn68.demo_defconfig
SSD210 QFN68 64M SPI-NOR glibc 带sensor make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn68.demo_camera_defconfig
SSD212 QFN128 64M SPI-NOR glibc NA make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn128.demo_defconfig
SSD212 QFN128 64M SPI-NOR glibc sdio wifi make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn128.demo_wifi_defconfig
SSD222 QFN128 64M SPI-NOR glibc NA make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn128.demo_camera_defconfig
SSD222 QFN128 64M SPI-NOR glibc sdio wifi make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn128.demo_camera_wifi_defconfig
SSD222D QFN128 128M SPI-NOR glibc NA make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.128.qfn128.demo_camera_defconfig
SSD222D QFN128 128M SPI-NOR glibc sdio wifi make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.128.qfn128.demo_camera_wifi_defconfig
SSD222Q QFN128 256M SPI-NOR glibc NA make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.256.qfn128_defconfig
SSD222Q QFN128 256M SPI-NOR glibc sdio wifi make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.256.qfn128_sdiowifi_defconfig
SSD210 QFN68 64M SPI-NAND glibc 不带sensor make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn68.demo_defconfig
SSD210 QFN68 64M SPI-NAND glibc 带sensor make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn68.demo_camera_defconfig
SSD212 QFN128 64M SPI-NAND glibc NA make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn128.demo_defconfig
SSD212 QFN128 64M SPI-NAND glibc sdio wifi make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn128.demo_wifi_defconfig
SSD222 QFN128 64M SPI-NAND glibc NA make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn128.demo_camera_defconfig
SSD222 QFN128 64M SPI-NAND glibc sdio wifi make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn128.demo_camera_wifi_defconfig
SSD222D QFN128 128M SPI-NAND glibc NA make dispcam_p3_spinand.glibc-9.1.0-s01a.128.qfn128.demo_camera_defconfig
SSD222D QFN128 128M SPI-NAND glibc sdio wifi make dispcam_p3_spinand.glibc-9.1.0-s01a.128.qfn128.demo_camera_wifi_defconfig
SSD222 QFN128 64M SPI-NAND glibc 2lane sensor make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn128.demo_camera_2lane_defconfig
SSD222D QFN128 128M nor+emmc glibc nor配合emmc make dispcam_p3_emmc-nor.glibc-9.1.0-ext4fs.s01a.128.qfn128.demo_camera_defconfig
SSD222D QFN128 128M sdmmc glibc sd-boot make dispcam_p3_sdmmc.glibc-9.1.0-s01a.128.qfn128.demo_camera_defconfig
SSD222Q QFN128 256M SPI-NAND glibc NA make dispcam_p3_spinand.glibc-9.1.0-s01a.256.qfn128_defconfig
SSD222Q QFN128 256M SPI-NAND glibc sdio wifi make dispcam_p3_spinand.glibc-9.1.0-s01a.256.qfn128_sdiowifi_defconfig

step3: clean并编译

make clean; make image -j8

编译完成后生成的image在project/image/output/images

V011版本以上defconfig默认都切换到env双备份机制,包括两部分:uboot默认也要使用双备份config生成的bin;分区文件用的是双备份的配置。

非双env备份版本和双env备份版本之间不能直接通过tftp升级,要从isp tool烧写boot开始,然后再通过tftp升级。

版本 Flash Type boot partition
V011之前 NOR project/board/p3/boot/nor/uboot/u-boot.xz.img.bin nor.squashfs.partition.dispcam.config
V011之前 NAND project/board/p3/boot/spinand/uboot/u-boot_spinand.xz.img.bin spinand.ubifs.partition.dispcam.config
V011之后 NOR project/board/p3/boot/nor/uboot/u-boot_dualenv.xz.img.bin nor.squashfs.partition.dualenv.dispcam.config
V011之后 NAND project/board/p3/boot/spinand/uboot/u-boot_dualenv_spinand.xz.img.bin spinand.ubifs.partition.dualenv.dispcam.config

4. demo板连接图

SSD221 SSD210 SSC9211 demo板连接图:

SSD212 demo板连接图:

SSD222 SSD222D demo板连接图:


5. 烧录Image到板子

5.1. 烧录空flash

空板烧录(或uboot无法运行的板子)需要用isp tool连接烧录(此方法只供开发阶段使用,正式生产使用烧录器烧录母片的方式),具体方法如下。

使用isptool连接前请先断开串口,避免isptool连接失败。断开串口步骤如下:

  • 在uboot console下直接输入debug,然后关闭串口终端;

  • 在kernel 下直接输入11111,串口显示disable uart时,关闭串口终端。

关闭uart后按如下方法使用isptool烧录。

5.1.1. 烧录SPI NOR Flash

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

  1. 打开isptool,选择spinor,然后点击connect,工具显示connected表示已连接成功。

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

    Binary file offset Binary放置目录
    boot.bin 0x00000 $


5.1.2. 烧录SPI NAND Flash

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

  1. 打开isptool,选择spinand,然后点击connect,工具显示connected表示已连接成功。

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

    Binary file offset Binary放置目录
    cis.bin 0x00000 $
    cis.bin 0x20000 $
    boot.bin 0x140000 $

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

  4. 烧录完uboot后,关闭isptool然后重新连接串口,板子断电重启可进入uboot终端用tftp升级主程序。


5.2. tftp网络烧录image

使用tftp网络烧录image的前提是板子带有uboot程序,如果没有请参考isptool烧录的方法烧录uboot,然后再按如下方法使用tftp烧录。

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

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

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

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

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

    注:

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

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

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

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

      #estart(默认uboot是关闭网络初始化的,为了节省开机时间,estart命令可以手动初始化uboot的网络参数)
      
      #estar (或:estar auto_update.txt,指定auto_update.txt某一行烧录其中某一个分区)