SSU_开发环境搭建
1. 编译环境搭建¶
通常我们会以交叉编译的方式进行开发和调试,即“宿主机+目标机”的形式。而宿主机和目标机的连接我们一般采用串口连接或网络连接,如下图所示:
注:
-
如果仅使用串口基本功能,使用普通串口设备正确对接调试UART0的RX/TX线序即可,详情参考原理图,串口默认波特率为115200,串口终断设置如下:
-
如果需要进阶调试读取Register或者烧录裸Flash,则需要搭配PC端工具使用专用的Debug Tool(参考工具使用说明),Debug tool请根据需求量自行购买。点击购买。
2. 安装Linux Build Code服务器¶
推荐使用Ubuntu 16.04,该版本已进行验证,如果使用其他版本遇到环境问题将不予支持。
2.1. 安装ubuntu 16.04 server¶
- 下载1604的server版;
- 安装VMware Worksation;
- 选择1604的iso,装载然后安装即可;
- 简易安装直接点击完成,系统会自动进行安装;
- 安装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
-
网上下载libiconv-1.14.tgz并解压:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxvf libiconv-1.14.tar.gz
-
配置
cd libiconv-1.14 ./configure --prefix=/usr/local make;make install
如make过程中有:
./stdio.h:1010:1: error: 'gets' undeclared here (not in a function)
报错,请参考: -
创建软链接
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