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",
}
相关推荐
Flynn Liang1 小时前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang1 小时前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j
巫山老妖1 小时前
Android 应用架构演进:MVC / MVP / MVVM / MVI (2026)
android·android jetpack
聪明的笨猪猪2 小时前
实际工程问题:AI生成Redis分布式锁的原子性缺陷导致库存超卖
java·经验分享·面试·ai编程
RobinDevNotes2 小时前
从 Electron 到 GPUI,9 个跨平台桌面方案该怎么选
前端·javascript·rust·electron·openresty·前端开发工具
软件技术NINI3 小时前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
程序员大阳3 小时前
HTML+CSS+JS对话式实战(6)-学生端查看活动功能开发
javascript·css·html·模块·查看学生
Flynn Liang3 小时前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
噢,我明白了4 小时前
JAVA中的一些基础应用知识点
java·开发语言
SL_staff5 小时前
私有化低代码不是妥协,而是企业级数字化的自主可控主航道
java