跳到主要内容

编译 Tina Linux

在搭建好编译环境并下载好源码后,即可对源码进行编译,编译打包好后,即可将打包好的固件烧写到设备中去。本文主要介绍编译和烧写的方法。

V853官方适配Tina5.0版本。Tina5.0同时支持openWrtbuildroot双编译环境

*编译环境搭建的方法见:Tina 编译环境配置

*源码下载的方法见:Tina SDK源码获取

*Tina v5.0更多内容详见:Tina Linux v5.0

本文将分为两个部分,分别介绍 openWrt 编译方法与 buildroot 的编译方法。

两套编译系统并不是完全独立的,在 openWrt 内修改的 kernel menuconfig 会影响到 buildroot的 kernel 配置

openWrt 编译

openWrt 的编译大致分为以下流程:

(1) source build/envsetup.sh  # 获取 Tina 环境变量
(2) lunch # 载入方案列表,选择方案
(3) mp # 编译打包

(1)获取 Tina 环境变量

tina@VirtualBox:~/tina-v853$ source build/envsetup.sh
NOTE: The SDK(/home/tina/tina-v853) was successfully loaded
load openwrt... ok
Please run lunch next for openwrt.
load buildroot,sata,dragonboard,bsp...ok
Please run ./build.sh config next for buildroot, bsp.

(2)载入方案列表,选择方案

之后使用 lunch 命令载入方案列表,可以看到 方案 1 对应的是 v853-vision 板子,也正是 V853 开发板。输入 1 回车即可。如果是其他板子,也可以输入对应板子的序号选择方案。

tina@VirtualBox:~/tina-v853$ lunch

You're building on Linux

Lunch menu... pick a combo:
1 v853-vision-tina

Which would you like? []: 1

第一次 lunch 需要阅读使用协议,同意表示同意全志科技相关用户协议与SDK的使用协议。如果同意,输入y即可。

...上略...
You can read /home/tina/tina-v853/build/disclaimer/Allwinnertech_Disclaimer(Cn_En)_20181122.md for detailed information.

You read time left 8 seconds....
I have already read, understood and accepted the above terms? [Y/N]

之后 SDK 会自动根据你所选择的方案解压编译工具链,创建环境,耐心等待下即可。输出如下:

Jump to longan autoconfig
/home/tina/tina-v853/build.sh autoconfig -o openwrt -i v853 -b vision -n default
========ACTION List: mk_autoconfig -o openwrt -i v853 -b vision -n default;========
options :
INFO: Prepare toolchain ...
INFO: kernel defconfig: generate /home/tina/tina-v853/kernel/linux-4.9/.config by /home/tina/tina-v853/device/config/chips/v853/configs/vision/linux-4.9/config-4.9
INFO: Prepare toolchain ...
make: Entering directory `/home/tina/tina-v853/kernel/linux-4.9'
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on '../../../../../device/config/chips/v853/configs/vision/linux-4.9/config-4.9'
#
# configuration written to .config
#
make: Leaving directory `/home/tina/tina-v853/kernel/linux-4.9'
INFO: clean buildserver
INFO: prepare_buildserver

看到 INFO: prepare_buildserver 并且没有报错就说明编译环境准备完毕了。

(3)编译打包

Tina Linux 里可以使用 make 命令进行编译,pack 命令打包。

tina@VirtualBox:~/tina-v853$ make

当然,也可以在 make 命令后面增加参数,支持多线程编译、选择是否输出日志的选项,例如:

make -j128       # 以 128 线程编译 SDK
make V=s # 开启全部日志输出
make V=s -j128 # 以 128 线程编译 SDK 并开启全部日志输出

编译完成之后,使用 pack 命令打包。

tina@VirtualBox:~/tina-v853$ pack

最后,如果编译完成,则会输出以下内容,代表编译打包完成,可以在/home/tina/tina-v853/out/v853/vision/openwrt 目录下找到打包完成的固件。

----------image is at----------
27M /home/tina/tina-v853/out/v853/vision/openwrt/v853_linux_vision_uart0.img
pack finish

buildroot 编译

buildroot 的编译大致分为以下流程:

(1) ./build.sh config  # 配置编译模式和项目文件
(2) ./build.sh # 编译
(3) ./build.sh pack # 打包

(1) 配置编译模式,项目文件

使用 ./build.sh config 配置编译模式与项目文件。

tina@VirtualBox:~/tina-v853$ ./build.sh config
========ACTION List: mk_config ;========
options :
All available platform: # 选择 linux 平台,V853 不支持安卓平台
0. android
1. linux
Choice [linux]:
All available linux_dev: # 选择 buildroot
0. bsp
1. buildroot
2. tinyos
3. openwrt
Choice [openwrt]: 1
All available ic: # 选择 v853 芯片
0. v853
Choice [t113]: 0
All available board: # 选择 v853 开发板 vision
0. vision
Choice [vision]: 0
All available flash: # 选择储存介质,默认default
0. default
1. nor
Choice [default]: 0

(2)编译固件

使用 ./build.sh 编译固件。

tina@VirtualBox:~/tina-v853$ ./build.sh
========ACTION List: build_linuxdev;========
options :
INFO: ----------------------------------------
INFO: build linuxdev ...
INFO: chip: sun8iw21p1
INFO: platform: linux
INFO: kernel: linux-4.9
INFO: board: vision
...下略...

编译成功后会显示下列信息。

sun8iw21p1 compile Kernel successful

INFO: ----------------------------------------
INFO: build Tina OK.
INFO: ----------------------------------------

(3)打包固件 使用 ./build.sh pack 编译固件。可以在 /home/tina/tina-v853/out/v853/vision/buildroot/ 目录下找到打包完成的固件。

tina@VirtualBox:~/tina-v853$ ./build.sh pack
...上略...
Dragon execute image.cfg SUCCESS !
----------image is at----------

71M /home/tina/tina-v853/out/v853/vision/buildroot/v853_linux_vision_uart0.img

pack finish

进阶编译操作

单独重编某个应用

重编应用包应用场景一般为:只修改了应用,不想重新烧写固件,只需要安装应用安装包即可
请确保进行过一次固件的编译,确保SDK基础已经编译,才能单独重编应用包。
请确保在编译前已加载tina环境:

$ source build/envsetup.sh
$ lunch

(1)方法一

当在应用包的目录(包括其子目录)中,可执行

$ mm [-B]
=> B参数则先clean此应用临时文件再编译

示例: 假设软件包路径为:openwrt/package/feeds/utils/memtester/,则:

$ cd openwrt/package/feeds/utils/memtester/
$ mm -B

编译出应用安装包保存路径为:

out/IC型号/方案名/openwrt/extra/packages/arm_cortex-a7_neon/base/memtester_4.3.0-1_arm_cortex-a7_neon.ipk

对于v853开发板,便是
out/v853/vision/openwrt/extra/packages/arm_cortex-a7_neon/base/memtester_4.3.0-1_arm_cortex-a7_neon.ipk

(2)方法二

任意目录下执行

$ mmo [-B] 软件包名
=> B参数则先clean此应用临时文件再编译

示例: 假设软件包路径为:openwrt/package/feeds/utils/memtester/,包名由PKG_NAME决定,即memtester:

$ mmo -B  memtester

其他快捷命令

命令命令有效目录作用
maketina根目录编译整个sdk
make menuconfigtina根目录启动软件包配置界面
make kernel_menuconfigtina根目录启动内核配置界面
croottina下任意目录快速切换到tina根目录
cconfigstina下任意目录快速切换到方案的bsp配置目录
cplattina下任意目录快速切换到方案配置目录
ctargettina下任意目录快速切换到openWrt软件包编译产物目录
crootfstina下任意目录快速切换到openWrt rootfs目录
copsrctina下任意目录快速切换到openWrt目录
couttina下任意目录快速切换到方案的输出目录
cboottina下任意目录快速切换到bootloader目录
cgreptina下任意目录在c/c++/h文件中查找字符串
mm [-B]软件包目录编译软件包,-B指编译前先clean
mmo [-B] pkgtina下任意目录编译指定的软件包,-B指编译前先clean
packtina根目录打包固件
mtina下任意目录make的快捷命令,编译整个sdk
ptina下任意目录pack的快捷命令,打包固件

编译异常问题解决

由于不同电脑的系统环境不一样,经常会出现不同的编译异常,并且每个异常都各不相同,属于疑难杂症,这也是新手学习嵌入式开发的一大难点。

为此全志在线开发者社区专门开辟了编译和烧写问题专区,如果出现了错误可以到 全志开发者论坛 - 编译和烧写问题专区 与社区的开发者们沟通讨论。社区有工程师巡场解决问题,也有很多热心的小伙伴积极献言献策。

提问注意事项:

(1)贴出你的log;

(2)说明你的编译环境和做的操作、修改等;

(4)有礼貌。