SSU_开发环境搭建


1. 编译环境搭建

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

注:

  1. 如果仅使用串口基本功能,使用普通串口设备正确对接调试UART0的RX/TX线序即可,详情参考原理图,串口默认波特率为115200,串口终断设置如下:

  2. 如果需要进阶调试读取Register或者烧录裸Flash,则需要搭配PC端工具使用专用的Debug Tool(参考工具使用说明),Debug 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,点击获取参考信息

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


2.2. 添加新用户

a. 设置密码

新装的ubuntu首先需要设置root密码。进入系统设置root密码:# sudo passwd,连续输入密码直到提示成功;

b. 添加用户

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

c. 安装相关的工具以及编译环境

此时账户已经建立,需要安装相关的工具以及编译环境,执行# 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编译失败,需要确保安装以下工具:

1. SDK Linux大部分python脚本需要python解析器为2.7,python -V查看版本,确保是2.7的版本。

2. 部分SSTAR脚本需要python3的支持,已经在脚本中制定解析器路径:#!/usr/bin/python3,所以需要确保存在/usr/bin/python3。

# 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
# sudo apt-get install bison
# sudo apt-get install libssl-dev
# sudo apt-get install mtd-utils
# sudo apt-get install flex

Project需要clang-13的支持:

CLANG_TIDY = /tools/bin/clang-13/clang-tidy
CLANG_FORMAT = /tools/bin/clang-13/clang-format

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


2.6. 修改sh

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

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

2.7. 安装toolchain

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

  • 解压toolchain

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

  • 在/etc/profile添加:

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

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

注意:

如果使用arm-linux-gnueabihf-gcc -v有报错:libiconv.so.2: cannot open shared object file可以参考以下链接安装libiconv.so

  1. 网上下载libiconv-1.14.tgz并解压:

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
    tar -zxvf libiconv-1.14.tar.gz
    
  2. 配置

    cd libiconv-1.14
    ./configure --prefix=/usr/local
    make;make install
    

    如make过程中有: ./stdio.h:1010:1: error: 'gets' undeclared here (not in a function) 报错,请参考:

    https://blog.csdn.net/u013873761/article/details/110946856

  3. 创建软链接

    ln -s /usr/local/lib/libiconv.so.2  /usr/lib/libiconv.so.2
    

3. SDK开发包编译步骤

以下分别针对 project编译、boot编译、kernel编译 做了介绍说明,实际上直接 project编译 即可编译出来整个images,为更方便使用以及理解,这里还是列出了单独编译boot以及kernel的方法,尽请参考。

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


3.1. 代码获取

可从指定的FTP/官方论坛等途径获取对应的SDK开发包(以实际情况为准)。

正常情况下,完整的SDK code应包含如下部分:

boot-xxx.tar.gz: Uboot源码

kernel-xxx.tar.gz:kernel源码

project-xxx.tar.gz:编译制作image的部分,包含非开源部分的lib/ko, 以及对外api头文件参考

sdk-xxx.tar.gz:测试Demo/应用打包框架部分


3.2. 编译SDK

3.2.1. 编译链指定

编译前先配置好指定的编译链:

export PATH=/tools/toolchain/gcc-6.4.0-20220722-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin/:$PATH
declare -x ARCH="arm"
declare -x CROSS_COMPILE="arm-linux-gnueabihf-"
或者
export PATH=/tools/toolchain/gcc-10.2.1-20210303-sigmastar-glibc-x86_64_aarch64-linux-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64

3.2.2. 解压SDK

tar zxvf project-xxx.tar.gz
tar zxvf boot-xxx.tar.gz
tar zxvf kernel-xxx.tar.gz
tar zxvf sdk-xxx.tar.gz

3.2.3. project编译

进入前面解压出来的project目录:cd project/

a、根据Boot_Type选择对应的config

其中glibc-6.4.0为32bit Linux toolchain,glibc-10.2.1为64bit Linux toolchain

Chip Packaging Memory Flash Type Toolchain Defconfig
SSU9383 BGA 16x16 External SPI-NOR glibc make dispcam_p5.nor.glibc-6.4.0-squashfs.028A.512bga_demo_defconfig
SSU9383 BGA 16x16 External SPI-NAND glibc make dispcam_p5.spinand.glibc-6.4.0-squashfs.028A.512bga_demo_defconfig
或者
make dispcam_p5.spinand.glibc-10.2.1-squashfs.028A.512bga_demo_defconfig
SSU9386 BGA 19x19 External SPI-NAND glibc make dispcam_p5.spinand.glibc-6.4.0-squashfs.028B.1024x1024bga_demo_defconfig
或者
make dispcam_p5.spinand.glibc-10.2.1-squashfs.028B.1024x1024bga_demo_defconfig
SSU9383 BGA 16x16 External EMMC glibc make dispcam_p5.emmc.glibc-6.4.0-ext4fs.028A.512bga_demo_defconfig
或者
make dispcam_p5.emmc.glibc-10.2.1-ext4fs.028A.512bga_demo_defconfig
SSU9386 BGA 19x19 External EMMC glibc make dispcam_p5.emmc.glibc-6.4.0-ext4fs.028B.1024x1024bga_demo_defconfig
或者
make dispcam_p5.emmc.glibc-10.2.1-ext4fs.028B.1024x1024bga_demo_defconfig
SSD2381 BGA 16x16 External EMMC glibc make dispcam_p5.emmc.glibc-6.4.0-ext4fs.028C.1024bga_demo_defconfig
或者
make dispcam_p5.emmc.glibc-10.2.1-ext4fs.028C.1024bga_demo_defconfig

b、clean并编译

make clean;make image -j8

c、例如:选择Nand Flash的情况下则执行以下命令全编即可

make dispcam_p5.spinand.glibc-6.4.0-squashfs.028A.512bga_demo_defconfig;
make clean;make image -j8;

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

注意:

  • 首次编译请务必在project下执行make clean;make image -j8命令完整编译(包含整编boot/kernel)
  • 为增加调试效率,除首次编译外,后续debug可以直接在project下编译对应修改模块然后重新快速打包即可,例如:

    仅编译kernel:make linux-kernel_clean;make linux-kernel -j8 仅编译boot: make boot_clean;make boot -j8 仅快速打包sdk image:make image-fast-nocheck -j8


3.2.3. boot编译

project下SDK编译已经添加boot编译选项,因此建议boot修改之后,直接在project下编译使用make boot编译boot,编译后不需要手动release到project下的路径,直接重新打包project即可

进入前面解压出来的boot目录:cd boot/

a、根据Flash_Type选择对应的config

Boot Type Other Defconfig
SPI-NOR Demo Board常规配置 make pioneer5_demo_defconfig
SPI-NAND Demo Board常规配置 make pioneer5_demo_spinand_defconfig
或者
make pioneer5_demo_64_spinand_defconfig
EMMC Demo Board常规配置 make pioneer5_emmc_defconfig
或者
make pioneer5_64_emmc_defconfig

b、clean并编译 make clean;make image -j8

c、例如:选择Nand Flash的情况下则执行以下命令编译boot即可

make pioneer5_spinand_demo_defconfig;
make clean;make image -j8;

注意:在boot目录下单独编译需要先将生成image手动release到project对应目录之后打包才行

Nand Flash Nor Flash Emmc
u-boot_spinand.xz.img.bin u-boot.xz.img.bin u-boot_emmc.xz.img.bin
project/board/boot/u-boot.bin project/board/boot/u-boot.bin project/board/uboot/u-boot.bin

3.2.5. kernel编译

project下SDK编译已经添加kernel编译选项,因此建议kernel修改之后,直接在project下编译使用make linux-kernel编译kernel,编译后不需要手动release到project下的路径,直接重新打包project即可

进入前面解压出来的kernel目录:cd kernel/

a、根据Flash_Type选择对应的config

Chip Packaging Memory Flash Type Toolchain Defconfig
SSU9383 BGA 16x16 External SPI-NOR glibc make pioneer5_ssz028a_s01a_m_defconfig
SSU9383 BGA 16x16 External SPI-NAND glibc make pioneer5_ssz028a_s01a_m_spinand_defconfig
SSU9386 BGA 19x19 External SPI-NAND glibc make pioneer5_ssz028b_s01a_s_spinand_defconfig
SSU9383 BGA 16x16 External EMMC glibc make pioneer5_ssz028a_s01a_m_emmc_defconfig
SSU9386 BGA 19x19 External EMMC glibc make pioneer5_ssz028b_s01a_s_emmc_defconfig
SSD2381 BGA 16x16 External EMMC glibc make pioneer5_ssz028c_s01a_s_emmc_defconfig

b、clean并编译

make clean;make -j8

c、例如:选择Nand Flash的情况下则执行以下命令编译kernel即可

make  pioneer5_ssz028a_s01a_m_spinand_defconfig;
make clean;make image -j8;

注意:project中打包是直接软链接指向的kernel目录,所以kernel不需要再手动release,直接做project打包动作即可

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

修改路径:project/kbuild/customize/5.10/p5/dispcam/kernel_mod_list