跳转至

编译 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

其他快捷命令

命令 命令有效目录 作用
make tina根目录 编译整个sdk
make menuconfig tina根目录 启动软件包配置界面
make kernel_menuconfig tina根目录 启动内核配置界面
croot tina下任意目录 快速切换到tina根目录
cconfigs tina下任意目录 快速切换到方案的bsp配置目录
cplat tina下任意目录 快速切换到方案配置目录
ctarget tina下任意目录 快速切换到openWrt软件包编译产物目录
crootfs tina下任意目录 快速切换到openWrt rootfs目录
copsrc tina下任意目录 快速切换到openWrt目录
cout tina下任意目录 快速切换到方案的输出目录
cboot tina下任意目录 快速切换到bootloader目录
cgrep tina下任意目录 在c/c++/h文件中查找字符串
mm [-B] 软件包目录 编译软件包,-B指编译前先clean
mmo [-B] pkg tina下任意目录 编译指定的软件包,-B指编译前先clean
pack tina根目录 打包固件
m tina下任意目录 make的快捷命令,编译整个sdk
p tina下任意目录 pack的快捷命令,打包固件

编译异常问题解决

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

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

提问注意事项:

(1)贴出你的log;

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

(4)有礼貌。