Tina环境搭建
4 Tina开发环境
4.1 概述
嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备好
编译环境,而固件烧写则需要厂家提供专用烧写工具。本章主要讲述这如何搭建环境来实现Tinasdk的编译、烧写。
4.2 编译环境搭建.
一个典型的嵌入式开发环境包括本地开发主机和目标硬件板。
- 本地开发主机作为编译服务器,需要提供Linux操作环境,建立交叉编译环境,为软件开发提供代码更新下载,代码交叉编译服务。
- 本地开发主机通过串口或USB与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板,并调试系统或应用程序。
4.2.1 开发主机配置.
Tina Linux SDK是在ubuntu14.04开发测试的,因此我们 推荐使用Ubuntu 14.04 主机环境进行源码编译,其他版本没有具体测试,可能需要对软件包做相应调整。
4.2.2 软件包配置.
编译Tina Linux SDK 之前,需要先确定编译服务器安装了gcc,binutils,bzip2,flex,python,perl,make,ia32-libs,find,grep,diff,unzip,gawk,getopt,subver-sion,libz-dev,libc headers。
ubuntu可直接执行以下命令安装:
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawkflex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip ia32-libslib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y
ubuntu 16.04及以上版本,执行下面命令安装软件包:
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++ libstdc++6 -y libc6:i386 libstdc++6:i386 lib32ncurses5 lib32z
5 Tina系统获取
5.1 概述
5.2 SDK获取
Allwinner Tina Linux SDK通过全志代码服务器对外发布。客户需要向业务/技术支持窗口申请SDK下载权限。申请需同步提供SSH公钥进行服务器认证授权,获得授权后即可同步代码。
5.3 SDK结构
Tina Linux SDK主要由构建系统、配置工具、工具链、host工具包、目标设备应用程序、文档、脚本、linux内核、bootloader部分组成,下文按照目录顺序介绍相关的组成组件。
Tina-SDK/
├── build
├── config
├── Config.in
├── device
├── dl
├── docs
├── lichee
├── Makefile
├── out
├── package
├── prebuilt
├── rules.mk
├── scripts
├── target
├── tmp
├── toolchain
└── tools
5.3.1 build目录
build目录存放Tina Linux的构建系统文件,此目录结构下主要是一系列基于Makefile规格编 写的mk文件。主要的功能是:
- 检测当前的编译环境是否满足Tina Linux的构建需求。
- 生成host包编译规则。
- 生成工具链的编译规则。
- 生成target包的编译规则。
- 生成linux kernel的编译规则。
- 生成系统固件的生成规则。
build/
├── autotools.mk
├── aw-upgrade.mk
├── board.mk
├── cmake.mk
├── config.mk
├── debug.mk
├── depends.mk
├── device.mk
├── device_table.txt
├── download.mk
├── dumpvar.mk
├── envsetup.sh
5.3.2 config目录
config目录主要存放Tina Linux中配置菜单的界面以及一些固定的配置项,该配置菜单基于内 核的mconf规格书写。
config/
├── Config-build.in
├── Config-devel.in
├── Config-images.in
├── Config-kernel.in
└── top_config.in
5.3.3 devices目录
devices目录用于存放方案的配置文件,包括内核配置,env配置,分区表配置,sys_config.fex, board.dts等。
这些配置在旧版本上是保存于target目录下,新版本挪到device目录。
注意defconfig仍保存在target目录。
快捷跳转命令:cconfigs
5.3.4 docs目录
docs目录主要存放用于开发的文档,以markdown格式书写。
本目录不再更新,请以全志客户服务平台系统文档为准。
docs/
├── build.md
├── config.md
├── init-scripts.md
├── Makefile
├── network.md
├── tina.md
├── wireless.md
└── working.md
5.3.5 lichee目录
lichee目录主要存放bootloader,内核,arisc,dsp等代码。
lichee/
├── bootloader
│ ├── uboot_2011_sunxi_spl
│ └── uboot_2014_sunxi_spl
├── brandy
│ ├── u-boot-2011.09
│ └── u-boot-2014.07
├── brandy-2.0
│ ├── spl
│ ├── tools
│ └── u-boot-2018
├── linux-3.4
├── linux-3.10
├── linux-4.4
├── linux-4.9
├── arisc
快捷跳转命令:ckernel,cboot,cboot0,carisc。
5.3.6 package目录
package目录存放target机器上的软件包源码和编译规则,目录按照目标软件包的功能进行分 类。
package/
├── allwinner
├── base-files
├── devel
├── dragonst
├── firmware
├── kernel
├── ......
└── utils
5.3.7 prebuilt目录
prebuild目录存放预编译交叉编译器,目录结构如下。
prebuilt/
└── gcc
└── linux-x86
├── aarch64
│ ├── toolchain-sunxi-musl
│ └── toolchain-sunxi-glibc
├── arm
│ ├── toolchain-sunxi-arm9-glibc
│ ├── toolchain-sunxi-arm9-musl
│ ├── toolchain-sunxi-glibc
│ ├── toolchain-sunxi-musl
└── host
└── host-toolchain.txt
5.3.8 scripts目录
scripts目录用于存放一些构建编译相关的脚本。
scripts/
├── arm-magic.sh
├── brcmImage.pl
├── bundle-libraries.sh
├── checkpatch.pl
├── clang-gcc-wrapper
├── cleanfile
├── clean-package.sh
├── cleanpatch
├── ......
5.3.9 target目录
target目录用于存放目标板相关的配置以及sdk和toolchain生成的规格。
快捷跳转命令:cdevice。
5.3.10 toolchain目录.
toolchain目录包含交叉工具链构建配置、规则。
toolchain/
├── binutils
├── Config.in
├── fortify-headers
├── gcc
├── gdb
├── glibc
├── info.mk
├── insight
├── kernel-headers
├── Makefile
├── musl
└── wrapper
5.3.11 tools目录.
tools目录用于存放host端工具的编译规则。
5.3.12 out目录.
out目录用于保存编译相关的临时文件和最终镜像文件,编译后自动生成此目录,例如编译方案 r328s2-perf1。
其中host目录用于存放host端的工具以及一些开发相关的文件。
r328s2-perf1目录为方案对应的目录。方案目录下的结构如下:
out/r328s2-perf
├── boot.img
├── compile_dir
├── image
├── md5sums
├── packages
├── r328s2-perf1-boot.img
├── r328s2-perf1-uImage
├── r328s2-perf1-zImage
├── rootfs.img
├── sha256sums
├── staging_dir
└── tina_r328s2-perf1_uart0.img
- boot.img为最终烧写到系统boot分区的数据,可能为boot.img格式也可能为uImage格式。
- rootfs.img为最终烧写到系统rootfs分区的数据,该分区默认为squashfs格式。
- r328s2-perf1-zImage为内核的zImage格式镜像,用于进一步生成uImage。
- r328s2-perf1-uImage为内核的uImage格式镜像,若配置为uImage格式,则会拷贝成boot.img。
- r328s2-perf1-boot.img为内核的boot.img格式镜像,若配置为boot.img格式,则会拷贝成boot.img
- compile_dir为sdk编译host,target和toolchain的临时文件目录,存有各个软件包的源码。
- staging_dir为sdk编译过程中保存各个目录结果的目录。
- packages目录保存的是最终生成的ipk软件包。
- tina_r328s2-perf1_uart0.img为最终固件包(系统镜像),串口信息通过串口输出
- 若使用pack -d,则生成的固件包为xxx_card0.img,串口信息转递到tf卡座输出。
快捷跳转命令:cout。
5.4 SDK更新
SDK更新分为两类:一类是以补丁的形式发布到一号通,发布后系统以邮件形式通知开发者;另一类是定期(半年或季度)的小版本迭代升级,将过往的补丁合入到SDK中,发布后以系统邮件通知开发者,可基于干净的SDK包通过repo sync命令更新。
5.5 问题反馈
Allwinner提供全志客户服务平台(https://open.allwinnertech.com),用来登记客户遇到的问题以及解决状态。方便双方追踪,使问题处理更加高效。后续SDK
问题、技术问题、技术咨询等都可以提交到此系统上,Allwinner技术服务会及时将问题进行分发、处理和跟踪。
注:系统登录帐号需要与Allwinner开通确认。