t113平台tina5.0(openwrt)开发连载-TinaLinux的SDK下如何开发应用程序

SBC-T113S产品特性:

  • 采用Allwinner公司Cortex-A7双核T113-S3/S4处理器,运行最高速度为1.2GHZ;
  • 内置64-bit XuanTie C906 RISC-V协处理器(仅T113-S4支持);
  • 支持JPEG/MJPEG视频编码,最大分辨率1080p@60fps;支持多格式1080P@60fps视频解码 (H.265,H.264, MPEG-1/2/4);
  • 支持RGB666/LVDS/MIPI-DSI,分辨率最高1920x1080;
  • 支持128-256M Bytes DDR3 SDRAM,其中T113-S3内置128MB;T113-S4内置256MB;
  • 支持SPI NAND存储和启动(默认:256MB)或者EMMC启动(默认:4GB,最大32GB);
  • 支持一路USB2.0 OTG(设计为TYPE-A接口);支持二路USB2.0 HOST;
  • 支持七路RS232通信或者6路RS232和1路RS485(非隔离);
  • 支持一路CAN BUS通信(非隔离);
  • 支持一路10/100M以太网;
  • 稳定的操作系统的支持,可预装LINUX 5.4(Preempt)或者OpenWRT;
  • 经典尺寸主板,尺寸为120*100MM;

SBC-T113S产品功能评估图: 

简单应用Hello World的开发

本章节将讲解如何使用电脑(上位机)交叉编译一个打印 Hello Word 的小应用,并将其上传到主板(下位机)上运行起来,打印出 hello word。

准备编译环境

这里我们使用编译环境配置章节所安装的虚拟机进行演示。这个虚拟机已经配置好了一些基础的编译工具和交叉编译工具链,使用较为方便。

我们先在文件夹里新建一个文件夹,作为存放项目的文件夹,命名为 WorkSpcae

 

然后在 WorkSpace文件夹里新建一个文件夹,存放我们的helloworld的代码,命名为 helloworld

 

至此,编译 helloworld 项目的环境就准备完成了。

编写 HelloWorld 代码 

进入 helloworld 文件夹,右键点击空白处可以看到 Open in Terminal 选项

打开命令行,输入 touch main.c 命令,新建 main.c 源文件。

 

双击打开 main.c 源文件,编写源码并保存

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

 

 交叉编译

交叉编译是指在我们的PC机上编译可以在主板上运行的可执行程序文件。因为是在上位机进行编译,然后在不同体系结构的主板上运行,所以叫交叉编译。

交叉编译前,你要知道

交叉编译所使用的交叉编译工具链名叫toolchain-sunxi-musl-gcc-830,它存放在 prebuilt/rootfsbuilt/arm文件夹下。

ping@embedall:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/prebuilt/rootfsbuilt/arm$ ls -al
total 28
drwxrwxr-x 7 ping ping 4096 Jan  8  2024 .
drwxrwxr-x 3 ping ping 4096 Jan  8  2024 ..
drwxrwxr-x 9 ping ping 4096 Jan  8  2024 gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf
drwxrwxr-x 2 ping ping 4096 Jan  8  2024 .git
drwxrwxr-x 4 ping ping 4096 Jan  8  2024 toolchain-sunxi-glibc-gcc-1020
drwxrwxr-x 3 ping ping 4096 Jan  8  2024 toolchain-sunxi-glibc-gcc-830
drwxrwxr-x 3 ping ping 4096 Jan  8  2024 toolchain-sunxi-musl-gcc-830
ping@embedall:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/prebuilt/rootfsbuilt/arm$ pwd
/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/prebuilt/rootfsbuilt/arm

而编译使用的 gcc 编译器在 prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin 文件夹里。

 

当然,光有编译器还不够,还需要提供编译时需要用到的那些库文件和头文件。这些相关文件存放在prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi 文件夹下。

 

开始交叉编译

首先,指定存放交叉编译需要使用的库文件头文件的文件夹

export STAGING_DIR=~/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi

 

设置完路径后,即可使用交叉编译工具链进行编译,可以看到编译出的 helloworld 可执行文件已经生成。

~/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc -o helloworld main.c

 

在主板上运行

我们可以用U盘,adb,nfs,TF卡等等各式各样的方法将文件上传到主板上,这里就使用TF卡把 helloworld 可执行文件上传到主板上。

首先将TF卡插入读卡器并接入电脑,在设备,USB里可以看到有一个Mass Storage设备。选中这个设备。

然后就可以在虚拟机里看到这个读卡器了。

把 helloworld 复制进TF卡

 

主板插入 TF 卡后,使用ls /dev指令 查看下mmcblk0 有没有出现,可以看到这里是有 mmcblk0 的,

[  773.254836] sunxi-mmc 4020000.sdmmc: no vqmmc,Check if there is regulator
[  773.274933] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[  773.299105] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[  773.313653] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[  773.327479] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[  773.342003] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[  773.415356] mmc0: host does not support reading read-only switch, assuming write-enable
[  773.426843] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing SD-HS(SDR25) dt B
[  773.438359] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 50000000Hz bm PP pm ON vdd 21 width 1 timing SD-HS(SDR25) dt B
[  773.450114] sunxi-mmc 4020000.sdmmc: sdc set ios:clk 50000000Hz bm PP pm ON vdd 21 width 4 timing SD-HS(SDR25) dt B
[  773.461806] mmc0: new high speed SDHC card at address 5048
[  773.469006] mmcblk0: mmc0:5048 SD32G 29.7 GiB
[  773.478772]  mmcblk0: p1

root@TinaLinux:/#
root@TinaLinux:/# ls /dev
SUNXI_GPADC_DEV  mtd8ro           tty24            tty9
bus              mtd9             tty25            ttyAS1
by-name          mtd9ro           tty26            ttyAS2
cedar_dev        mtdblock0        tty27            ttyAS3
console          mtdblock1        tty28            ttyAS4
cpu_dma_latency  mtdblock10       tty29            ttyAS5
cuse             mtdblock11       tty3             ttyS0
deinterlace      mtdblock12       tty30            ttyS1
disp             mtdblock13       tty31            ttyS2
fb0              mtdblock2        tty32            ttyS3
full             mtdblock3        tty33            ubi0
fuse             mtdblock4        tty34            ubi0_0
g2d              mtdblock5        tty35            ubi0_1
gpiochip0        mtdblock6        tty36            ubi0_2
i2c-2            mtdblock7        tty37            ubi0_3
i2c-3            mtdblock8        tty38            ubi0_4
input            mtdblock9        tty39            ubi0_5
ion              null             tty4             ubi0_6
kmsg             ptmx             tty40            ubi0_7
mmcblk0          pts              tty41            ubi0_8
mmcblk0p1        random           tty42            ubi0_9

然后挂载TF卡,分区是 mmcblk0p1,把它挂载到 /mnt/SDCARD 路径下,然后 cd 进入 /mnt/SDCARD 文件夹,可以用 ls 命令列出文件,可以看到 helloworld 就在这里。

mount /dev/mmcblk0p1 /mnt/SDCARD/

 

使用 chmod 命令赋予 helloworld 执行的权限,运行 helloworld

chmod a+x helloworld
./helloworld

 

可以看到程序已经执行并把字符 “Hello World” 打印到终端上。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值