环境搭建
1. 编译环境搭建¶
通常我们会以交叉编译的方式进行开发和调试,即“宿主机+目标机”的形式。而宿主机和目标机的连接我们一般采用串口连接或网络连接,如下图所示:
注:
-
我们提供的debug tool作用除了可以debug外,还可以通过PC工具读寄存器和烧写空flash。
-
如果是仅调试可以使用串口设备正确对接调试线序即可(con3),线序请和原理图对齐。
-
如果需要读Register或者烧录裸Flash的时候,需要Debug Tool。
-
tool根据需求量自行购买。点击购买。
2. 安装Linux Build Code服务器¶
推荐使用Ubuntu 16.04,该版本已进行验证,如果使用其他版本遇到环境问题将不予支持。
2.1. 安装ubuntu 16.04 server¶
-
安装VMware Worksation;
-
选择1604的iso,装载然后安装即可;
-
简易安装直接点击完成,系统会自动进行安装;
-
安装VMtools,用于拷贝将windows目录,共享到ubuntu,点击获取参考信息。
ubuntu至此安装成功,接下来安装开发需要的环境。
2.2. 添加新用户¶
-
新装ubuntu,首先要设置root密码,进入系统设置root密码:
# sudo passwd
,连续输入密码即可,提示成功即可; -
添加用户,进入系统后重新创建用户,
# sudo adduser xxx --force
来创建用户,此时会提示输入account的一些信息,一直回车即可; -
此时账户已经建立,那么需要安装相关的工具以及编译环境,执行
# 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,用于共享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)
2.4. 安装ssh,用于登陆调试¶
sudo apt-get install openssh-server;
安装结束即可使用。
2.5. 针对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是必须的,因为编译过程中会用到相关内容。这边就不一一说明是哪个错误,可以尝试先不安装编译来查看相关错误,为了省事,在编译之前一次性安装即可。
2.6. 如果默认sh不是bash,需要将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
-
uclibc 将arm-sigmastar-linux-uclibcgnueabihf-9.1.0.tar.gz解压后如上同样的方法配置即可。
-
配置完成后,可以按照如下方式确认gcc版本是否已经切换到9.1.0版本。
-
至此编译环境就已经全部搭建完成了,下面进行sdk的编译工作。
3. SDK开发包编译步骤¶
3.1. 代码获取¶
可从FTP获取对应的SDK开发包。
3.2. 编译boot¶
-
spi-nor
glibc:
#declare -x ARCH="arm"或者采用export ARCH=arm #declare -x CROSS_COMPILE="arm-linux-gnueabihf-"或者采用export CROSS_COMPILE=arm-linux-gnueabihf- #make pioneer3_dualenv_defconfig(从V011版本开始默认打开ENV双备份和USB升级,是公版release的默认配置)或 make pioneer3_defconfig; #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:
#declare -x ARCH="arm"或者采用export ARCH=arm #declare -x CROSS_COMPILE="arm-linux-gnueabihf-"或者采用export CROSS_COMPILE=arm-linux-gnueabihf- #make pioneer3_dualenv_spinand_defconfig(从V011版本开始默认打开ENV双备份和USB升级,是公版release的默认配置)或 make pioneer3_spinand_defconfig; #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, 和Takoyaki不同。因此建议修改相关kernel之后,直接在project下编译,会默认编译kernel的内容,并且不需要手动release到project下的路径。
#declare -x ARCH="arm"或者采用export ARCH=arm #declare -x CROSS_COMPILE="arm-linux-gnueabihf-"或者采用export CROSS_COMPILE=arm-linux-gnueabihf-
Chip | Packaging | Memory | Flash Type | Toolchain | Other | Defconfig |
---|---|---|---|---|---|---|
SSD210 | QFN68 | 64M | SPI-NOR | glibc | NA | pioneer3_ssc021a_s01a_demo_defconfig |
SSD212 | QFN128 | 64M | SPI-NOR | glibc | NA | pioneer3_ssc020a_s01a_demo_defconfig |
SSD212 | QFN128 | 64M | SPI-NOR | glibc | sdio wifi | pioneer3_ssc020a_s01a_demo_wifi_defconfig |
SSD222 | QFN128 | 64M | SPI-NOR | glibc | NA | pioneer3_ssc020a_s01a_demo_camera_defconfig |
SSD222 | QFN128 | 64M | SPI-NOR | glibc | sdio wifi | pioneer3_ssc020a_s01a_demo_camera_wifi_defconfig |
SSD222D | QFN128 | 128M | SPI-NOR | glibc | NA | pioneer3_ssc020a_s01a_demo_camera_defconfig |
SSD222D | QFN128 | 128M | SPI-NOR | glibc | sdio wifi | pioneer3_ssc020a_s01a_demo_camera_wifi_defconfig |
SSD210 | QFN68 | 64M | SPI-NAND | glibc | NA | pioneer3_ssc021a_s01a_spinand_demo_defconfig |
SSD212 | QFN128 | 64M | SPI-NAND | glibc | NA | pioneer3_ssc020a_s01a_spinand_demo_defconfig |
SSD212 | QFN128 | 64M | SPI-NAND | glibc | sdio wifi | pioneer3_ssc020a_s01a_spinand_demo_wifi_defconfig |
SSD222 | QFN128 | 64M | SPI-NAND | glibc | NA | pioneer3_ssc020a_s01a_spinand_demo_camera_defconfig |
SSD222 | QFN128 | 64M | SPI-NAND | glibc | sdio wifi | pioneer3_ssc020a_s01a_spinand_demo_camera_wifi_defconfig |
SSD222D | QFN128 | 128M | SPI-NAND | glibc | NA | pioneer3_ssc020a_s01a_spinand_demo_camera_defconfig |
SSD222D | QFN128 | 128M | SPI-NAND | glibc | sdio wifi | pioneer3_ssc020a_s01a_spinand_demo_camera_wifi_defconfig |
#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
。
#declare -x ARCH="arm"或者采用export ARCH=arm #declare -x CROSS_COMPILE="arm-linux-gnueabihf-"或者采用export CROSS_COMPILE=arm-linux-gnueabihf-
Chip | Packaging | Memory | Flash Type | Toolchain | Other | Defconfig |
---|---|---|---|---|---|---|
SSD210 | QFN68 | 64M | SPI-NOR | glibc | NA | make dispcam_p3_nor.glibc-9.1.0-squashfs.s01a.64.qfn68.demo_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 |
SSD210 | QFN68 | 64M | SPI-NAND | glibc | NA | make dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn68.demo_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 |
make clean; make image -j8
编译完成后生成的image在project/image/output/images
V011版本以上defconfig默认都切换到env双备份机制,包括两部分:1.uboot默认也要使用双备份config生成的bin。2.分区文件用的是双备份的配置
非双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板连接图¶
图4-1 SSD221 SSD210 SSC9211 demo板连接图
图4-2 SSD212 demo板连接图
图4-3 SSD222 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,具体方法如下:
-
打开isptool,选择spinor,然后点击connect,工具显示connected表示已连接成功。
-
按如下红框的步骤,选择需要烧录boot.bin以及对应的flash地址(如下),然后点击run即可,烧录完成后工具显示pass表示已烧录成功。
Binary file offset Binary放置目录 boot.bin 0x00000 ${ALKAID}\project\image\output\images\boot.bin
5.1.2. 烧录SPI NAND Flash¶
新的flash架构,nor flash只需要烧写boot.bin,nand flash只需要烧写cis.bin和boot.bin,具体方法如下:
-
打开isptool,选择spinor,然后点击connect,工具显示connected表示已连接成功。
-
按如下红框的步骤,选择需要烧录cis.bin以及对应的flash地址(如下),然后点击run即可,烧录完成后工具显示pass表示已烧录成功。
Binary file offset Binary放置目录 cis.bin 0x00000 ${ALKAID}\project\image\output\images\cis.bin cis.bin 0x20000 ${ALKAID}\project\image\output\images\cis.bin boot.bin 0x140000 ${ALKAID}\project\image\output\images\boot.bin -
同样的步骤烧录第二次cis.bin(注意和第一次的地址不一样,并且Erase Device不勾选)和boot.bin(注意Erase Device不勾选) ,注意flash地址需要填对应分区的地址:
烧录完uboot后,可以关闭isptool然后重新连上串口,板子断电重启后就可以进入到uboot终端用tftp升级主程序了:
5.2. tftp网络烧录image¶
使用tftp网络烧录image的前提是板子里面已经带有uboot程序才行,如果没有uboot程序需要参考isptool烧录的方法先烧录uboot,然后再按如下方法tftp烧录:
-
打开tftp工具指向image path:
SDK\project\image\output\images\
,并选择正确的网卡。 -
板子连接网络,并确保板子跟PC处于同一个网段(PC需要关闭防火墙)
-
板子开机,长按回车,进入uboot终端:
-
首次烧录需要设置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
注:
-
为了保证烧录顺利,请保证PC和开发板处于同一网段。
-
请采用静态方式固定分配ip。防止烧录时ip地址跳变。
-
您也可以使用独立网卡使PC端直连开发板,固定该网卡的内网ip地址,并按上述方法设定开发板。
-
在uboot终端使用如下命令进行烧录
#estart #estar (OR: estar auto_update.txt,也可以指定auto_update.txt某一行烧录其中某一个分区)
-