编译 Tina Linux
在搭建好编译环境并下载好源码后,即可对源码进行编译,编译打包好后,即可将打包好的固件烧写到设备中去。本文主要介绍编译和烧写的方法。
V853官方适配Tina5.0版本。Tina5.0同时支持openWrt
和buildroot
双编译环境
*编译环境搭建的方法见: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)有礼貌。