Zephyr_01, environment

前言

使用qemu_cortex_m3模拟的板子

目录结构

SDK和测试工程路径如下

测试工程目录结构如下

复制代码
wwl@wwl-pc:~/testprj/0_mode$ tree .
.
├── CMakeLists.txt
├── hp.sh
├── prj.conf
└── src
    ├── app.c
    └── main.c

main.c内容如下

c 复制代码
#include <zephyr/kernel.h>

int main(void)
{
   return 0;
}

app.c是测试工程,我会在这里做一些测试任务

CMakeLists.txt

复制代码
cmake_minimum_required(VERSION 3.20.0)

set(BOARD qemu_cortex_m3)
set(ENV{ZEPHYR_BASE} "/home/wwl/zephyrproject/zephyr")

find_package(Zephyr REQUIRED HINTS ${ZEPHYR_BASE})

project(hello)

target_sources(app PRIVATE src/main.c)
target_sources(app PRIVATE src/app.c)

prj.conf工程配置文件

复制代码
CONFIG_QEMU_ICOUNT=y
CONFIG_QEMU_ICOUNT_SHIFT=5
CONFIG_QEMU_ICOUNT_SLEEP=y

hp.sh我打包了一些编译相关指令,不爱用west

sh 复制代码
#!/bin/bash

# 配置区(根据你的实际路径修改)
VENV_PATH="$HOME/zephyrproject/.venv"
ZEPHYR_SDK_PATH="${ZEPHYR_SDK_PATH:-$HOME/zephyr-sdk-1.0.1}"  # 添加这行!
QEMU_ARM="$ZEPHYR_SDK_PATH/hosttools/sysroots/x86_64-pokysdk-linux/usr/bin/qemu-system-arm"
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"  # 脚本所在目录

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 激活虚拟环境
activate_venv() {
    if [ -f "$VENV_PATH/bin/activate" ]; then
        source "$VENV_PATH/bin/activate"
        echo -e "${GREEN}✓ 虚拟环境已激活${NC}"
    else
        echo -e "${RED}✗ 虚拟环境未找到: $VENV_PATH${NC}"
        exit 1
    fi
}

# 退出虚拟环境
deactivate_venv() {
    deactivate 2>/dev/null || true
    echo -e "${GREEN}✓ 虚拟环境已退出${NC}"
}

# 构建函数
do_build() {
    echo -e "${YELLOW}>>> 开始构建...${NC}"
    cmake -B build "$PROJECT_DIR"
    if [ $? -ne 0 ]; then
        echo -e "${RED}✗ CMake 配置失败${NC}"
        return 1
    fi
    
    make -C build -j$(nproc)
    if [ $? -ne 0 ]; then
        echo -e "${RED}✗ 编译失败${NC}"
        return 1
    fi
    
    echo -e "${GREEN}✓ 构建成功!固件位于: build/zephyr/zephyr.bin${NC}"
}

do_gdb() {
    echo -e ">>> 启动 QEMU GDB server (端口 1234)...${NC}"
    echo -e ">>> 另开终端运行: arm-none-eabi-gdb build/zephyr/zephyr.elf${NC}"
    echo -e ">>> 然后在 GDB 内执行: target remote :1234${NC}"
    $QEMU_ARM -M lm3s6965evb -cpu cortex-m3 -kernel build/zephyr/zephyr.elf -s -S -serial stdio
}

do_build() {
    echo -e "${YELLOW}>>> 开始构建...${NC}"
    cmake -B build "$PROJECT_DIR"
    if [ $? -ne 0 ]; then
        echo -e "${RED}✗ CMake 配置失败${NC}"
        return 1
    fi
    
    make -C build -j$(nproc)
    if [ $? -ne 0 ]; then
        echo -e "${RED}✗ 编译失败${NC}"
        return 1
    fi
    
    echo -e "${GREEN}✓ 构建成功!${NC}"
}

# 清理函数
do_clean() {
    echo -e "${YELLOW}>>> 清理构建目录...${NC}"
    rm -rf build
    echo -e "${GREEN}✓ 清理完成${NC}"
}

# 主命令处理
case "$1" in
    build)
        activate_venv
        do_build
        deactivate_venv
        ;;
    run)
        activate_venv
        make -C build run
        deactivate_venv
        ;;
    rebuild)
        activate_venv
        do_clean
        do_build
        deactivate_venv
        ;;
    gdb)
        activate_venv
        do_gdb
        deactivate_venv
        ;;
    clean)
        do_clean
        ;;
    *)
        echo "用法: $0 {build|run|rebuild|clean}"
        echo ""
        echo "  build       - 完整构建(cmake + make)"
        echo "  gdb         - 启动 GDB 调试模式"
        echo "  run         - 启动 QEMU 运行"
        echo "  rebuild     - 清理后重新构建"
        echo "  clean       - 删除 build 目录"
        exit 1
        ;;
esac

Vscode配置

.vscode/launch.json 这个文件让我可以使用GDB调试

复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach GDB to QEMU",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/0_mode/build/zephyr/zephyr.elf",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/home/wwl/zephyr-sdk-1.0.1/gnu/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb",
            "miDebuggerServerAddress": "localhost:1234",
            "setupCommands": [
                {
                    "text": "set architecture arm",
                    "ignoreFailures": false
                }
            ]
        }
    ]
}

.vscode/settings.json VScode 配置文件,主要是排除SDK中的venv和west文件

复制代码
{
    "files.watcherExclude": {
        "**/.venv": true,
        "**/.west": true,
    },
    "files.exclude": {
        "**/.venv": true,
        "**/.west": true,
    },
    "search.exclude": {
        "**/.venv": true,
        "**/.west": true,
    },
    "C_Cpp.codeAnalysis.exclude": {
        "**/.venv": true,
        "**/.west": true,
    },
    "C_Cpp.errorSquiggles": "disabled",
}
相关推荐
rannn_1111 分钟前
【力扣hot100】二叉树专题+总结
java·算法·leetcode·二叉树
摇滚侠26 分钟前
《Docker技术入门与实战 第4版》阅读笔记 6 使用 Dockerfile 创建镜像 2
java·笔记·docker
恋猫de小郭39 分钟前
Flutter A2UI 的正确用法,怎么把 AI 和动态 UI 结合有效生产
android·前端·flutter
余额瞒着我当琳44 分钟前
C++--vector第二讲:手写 C++ STL:vector 源码剖析与迭代器失效分析
android·java·c++
程序员-珍1 小时前
安卓开发:同名 styles.xml 在不同分支/文件夹的合并规则
android·xml·前端
资源大佬星 课it1 小时前
黑马 Java+AI新版V16零基础就业班视频课程百度网盘下载
java·开发语言·人工智能
二十雨辰1 小时前
[Java]-微服务面试题
java·开发语言·微服务
我命由我123451 小时前
Compose Codelab 学习 - Compose 中的基本布局
android·java·java-ee·kotlin·android studio·android-studio·android runtime
ii_best1 小时前
手机自动化脚本按键精灵实战:随机布局安全数字键盘的自动化输入方案
android·运维·ios·自动化·手机
界面开发小八哥1 小时前
界面控件DevExpress Blazor v26.1新版亮点 - TreeList & 数据编辑器
javascript·编辑器·.net·界面控件·blazor·devexpress·用户界面