08 部署第一个应用程序
本章节介绍如何在 Pico-G1 开发板上编写一个"hello word"引用程序、并将其编译进rootfs根文件系统中,烧录并运行应用程序,完成从源码编写到板端运行的完整流程。
具体操作步骤
1. 新建工程
为了工程结构清晰、便于维护,建议将应用程序放在SDK/source/app目录下:
mkdir -p source/app/helloworld # 创建helloword应用程序
cd source/app/helloworld/ # 切换目录
touch helloworld.c # 创建.c文件
touch Makefile # 创建Makefile文件2. 编写应用程序
vim helloworld.chelloworld.c如下
#include <stdio.h>
int main(void)
{
printf("hello world from firmware!\n");
return 0;
}3. 编写Makefile
vim MakefileMakefile如下
# SDK 根目录。
# 当前 Makefile 位于 source/app/helloworld/ 下
# 往上三级正好回到 SDK 根目录。
SDK_DIR := $(shell cd $(shell pwd)/../../.. && /bin/pwd)
# 引入 SDK 公共构建配置。
# 这里会定义交叉编译器、编译参数、链接参数、rootfs 输出目录等变量。
include $(SDK_DIR)/build/base.mk
# 最终生成的可执行文件名。
TARGET := helloworld
# 源文件列表。
SRCS := helloworld.c
# 由源文件名自动推导目标文件名。
# 例如 helloworld.c -> helloworld.o
OBJS := $(SRCS:.c=.o)
# 声明伪目标,避免与同名文件冲突。
.PHONY: all clean install
# 默认目标。
# 执行 make 时,会先构建最终程序。
all: $(TARGET)
# 链接规则。
# 将 .o 目标文件链接成最终可执行文件。
$(TARGET): $(OBJS)
$(CC) $(SDK_LD_CFLAGS) -o $@ $^
# 编译规则。
# 将 .c 源文件编译成 .o 目标文件。
%.o: %.c
$(CC) $(SDK_USR_CFLAGS) -c -o $@ $<
# 安装到 rootfs。
# 板端最终路径将是 /usr/bin/helloworld
install: all
@mkdir -p $(XMEDIA_ROOTFS_DIR)/usr/bin
@cp -f $(TARGET) $(XMEDIA_ROOTFS_DIR)/usr/bin/$(TARGET)
@chmod 755 $(XMEDIA_ROOTFS_DIR)/usr/bin/$(TARGET)
@echo "Installed $(TARGET) to $(XMEDIA_ROOTFS_DIR)/usr/bin/$(TARGET)"
# 清理编译产物。
clean:
rm -f $(TARGET) $(OBJS)4. 编译
编译应用程序
# 在SDK根目录中执行:
make -C source/app/helloworld clean # 清理旧的编译结果
make -C source/app/helloworld # 重新交叉编译生成开发板可运行的 helloworld编译rootfs
# 在SDK根目录中执行:
make rootfs_clean
make rootfs将应用程序安装进rootfs目录中
# 在SDK根目录中执行:
make -C source/app/helloworld install预期出现:
ljh@lcwt-KNPP-D32-R-Series:~/GK7206$ make -C source/app/helloworld install
make: Entering directory '/home/diskh/ljh/GK7206/source/app/helloworld'
Installed helloworld to /home/diskh/ljh/GK7206/out/xm7206v12a/rootfs/usr/bin/helloworld
make: Leaving directory '/home/diskh/ljh/GK7206/source/app/helloworld'
#### make "-C source/app/helloworld install" completed successfully! ####此时切换到
/out/xm7206v12a/rootfs/usr/bin目录下能够看到helloworld应用程序ls -l out/xm7206v12a/rootfs/usr/bin/helloworld
5. 打包
make fs_image6. 烧录
请参考 烧录章节:镜像烧录 烧录 SPI 镜像。
7. 运行应用程序
使用SSH或串口进入板子的 Shell(命令行)环境
cd /usr/bin/
helloworld此时会看到打印
hello world from firmware!