Licheerv Dock 实现交叉编译(十)

目录

一. SDK目录

1. build目录

2. config 目录

3. docs 目录

4. lichee 目录

5. package 目录

6. prebuilt 目录

7. scripts 目录

8. target 目录

9. toolchain 目录

10. tools 目录

11. out 目录

二. 编译打包 

三. 编译第一个程序:Hello Word

四. 进阶:使用makefile编写一个工程

五. 参考资料


一. SDK目录

build:
这个目录通常用于存放构建过程中的临时文件,例如编译中间产物。当您运行 make 命令时,构建系统会在这个目录下生成各种文件。
Config.in:
这是一个配置文件,用于定义构建系统的配置选项。它通常会被用来生成最终的配置文件,例如 .config。
dl:
这个目录用于存放从外部下载的源代码或依赖包。当构建系统需要外部库时,这些文件会被下载到这里。
Makefile:
这是构建系统的主 Makefile 文件,定义了构建过程中的规则和目标。它告诉构建系统如何编译源代码、生成二进制文件等。
package:
这个目录可能包含了用于打包固件或软件的脚本和配置文件。如果 pack 脚本存在,很可能在这里或其子目录中。
prebuilt:
这个目录用于存放预先构建的库文件或工具。这些通常是不需要重新编译的第三方组件。
rules.mk:
这是一个 Makefile 规则文件,通常包含了构建过程中的通用规则和变量定义。
target:
这个目录可能包含了针对不同目标平台的配置文件和源代码。例如,针对不同的 Allwinner 处理器的特定配置。
toolchain:
这个目录包含了用于构建固件的工具链文件,例如交叉编译器等。
config:
这个目录可能包含了配置文件,例如 .config 文件,用于保存构建时选择的配置选项。
device:
这个目录包含了特定设备的配置文件和源代码,例如针对 Tina D1 Open V2 的特定配置。
lichee:
这个目录可能包含了与 Lichee 相关的源代码或配置文件,例如针对 Lichee RV 开发板的特定代码。
out:
这个目录用于存放构建输出,例如编译好的固件文件。当您运行 make 命令时,最终的固件文件通常会被放置在这里。
scripts:
这个目录包含了构建过程中使用的脚本文件,例如用于设置环境变量的 envsetup.sh。
tmp:
这个目录用于存放构建过程中的临时文件,例如缓存文件或中间文件。
tools:
这个目录包含了构建过程中使用的工具脚本,例如 pack 脚本。如果 pack 脚本存在,很可能在这个目录或其子目录中。

1. build目录

build 目录存放 Tina Linux 的构建系统文件,此目录结构下主要是一系列基于 Makefile 规格编写的 mk 文件。主要的功能是:
1.检测当前的编译环境是否满足 Tina Linux 的构建需求
2.生成 host 包编译规则
3.生成工具链的编译规则
4. 生成 target 包的编译规则
5.生成 linux kernel 的编译规则
6.生成系统固件的生成规则

2. config 目录

主要存放Tina Linux 中配置菜单的界面以及一些固定的配置项。

3. docs 目录

docs 目录主要存放用于开发的文档

4. lichee 目录

主要存放uboot和内核代码

5. package 目录

存放target机器上的软件包源码和编译规则,目录按照目标软件包的功能进行分类

6. prebuilt 目录

prebuild 目录存放预编译交叉编译器

7. scripts 目录

scripts 目录用于存放pc端或小机端使用的一些脚本

8. target 目录

target 目录用于存放目标板相关的配置以及sdk和toolchain生成的规格

9. toolchain 目录

toolchain目录包含交叉工具链构建配置,规则

10. tools 目录

tools 目录用于存放 host 端工具的编译规则

11. out 目录

out 目录 ,编译后会自动生成此目录

二. 编译打包 

source build/envsetup.sh

lunch

make -j32

pack

source build/envsetup.sh:获取环境变量

lunch 会提供方案选项以供选择,其中lunch d1-h_nezha-tina 是  d1-h_nezha-tina的标准方案,lunch d1-h_nezha_min-tina是只能让系统跑起来的最小系统方案。

make -j32:编译,其中-j后面的数字参数为编译用的线程数,可根据开发者编译用的PC实际情况选择

pack:打包,将编译好的固件打包成一个.img格式的固件,固件路径/out/d1-h_nezha-tina/tina_d1-h-nezha_uart0.img

之后便可以把此生成的镜像文件烧录到SD卡,再运行查看效果,这样我们最开始的SDK编译出的镜像就完成了。

三. 编译第一个程序:Hello Word

接下来,我们用电脑(上位机)交叉编译一个打印 hello word 的小应用,并将其push到开发板(下位机)上运行起来,打印出 hello word

 在Tina SDK中带有完整的编译工具链,我的在如下路径

/home/allwinner/LicherPI/tina-d1-h/tina_d1_open_v2/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702

如果只是用编译工具链单独尝试编译一个小demo,也可以在Ubuntu任意目录下创建文件

# 创建hello_world.c文件
touch hello_world.c

编写 Hello Word 代码,在 hello_word.c 中写入:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    printf("Hello World\n");
    return 0;
}

交叉编译

/home/allwinner/LicherPI/tina-d1-h/tina_d1_open_v2/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc -o hello_world hello_world.c

这时候我们用交叉编译工具链在虚拟机用./hello_world是运行不了的,我们得用scp把文件传输到荔枝派上。

我们可以用多种方式传入文件

  1. ADB工具
  2. nfs挂载文件系统
  3. 使用SD卡挂载
  4. scp

我使用的scp,我将荔枝派和本机电脑都连接的手机热点,虚拟机和本机使用桥接网络。

scp username@ip:contents

username:荔枝派的用户名,如果是用到Tina系统,那么就是root

ip:荔枝派连接手机热点后获得的ip,可以先试试虚拟机能不能ping通,如果不行,可能是虚拟机或者荔枝派没有关闭防火墙

contents: 要传文件到的目录

输入命令后,会提示输入密码,如果是Tina的话,默认密码是Tina

文件传输完成后,运行文件

./hello_world

执行结果 

root@TinaLinux:~# ls

hello_world main

root@TinaLinux:~# chmod +x hello_world

root@TinaLinux:~# ./hello_world

Hello World

四. 进阶:使用makefile编写一个工程

根据Tina开发惯例,建议开发者的应用工程放在package下,在package中创建test文件夹,在test文件夹中创建hello_world.c文件。

为了紧密结合嵌入式开发,此处提供使用Makefile 文件来进行编译Hello word 方法:

在源码目录创建Makefile文件:

touch Makefile

编写Makefile:

# 设置编译链路径及工具
CTOOL := riscv64-unknown-linux-gnu-
CCL := /home/allwinner/LicherPI/tina-d1-h/tina_d1_open_v2/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
CC := ${CCL}/bin/${CTOOL}gcc

# 设置编译规则
hello_world: hello_world.c
        @$(CC) -o $@ $<

# 清理规则
clean:
        rm -f hello_world

注意,每行第一个不能是空格,要不就没有,要不就的是Tab。不要忘了CCL和CTOOL更改为自己的路径。

之后输入make,就能生成需要的可执行文件,再通过scp传输到荔枝派,运行即可

五. 参考资料

全志D1-H/D1s RISC-V(基于平头哥C906) 哪吒开发板超全资料合集 / 全志 SOC / WhyCan Forum(哇酷开发者社区)

D1-H (aw-ol.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值