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",
}
相关推荐
麻瓜生活睁不开眼6 小时前
Android16修改全局桌面视图边框四直角显示为弧边圆角
android·java·深度学习
dear_bi_MyOnly6 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
2601_953720826 小时前
【计算机毕业设计】基于Spring Boot的心理健康咨询与评测系统的设计与实现
java·spring boot·后端
丈剑走天涯7 小时前
JDK 17 正式特性
java·开发语言
圣光SG8 小时前
Java操作题练习(七)
java·开发语言·算法
AFinalStone9 小时前
Android 7系统休眠唤醒(六)唤醒全链路
android·电源管理·休眠唤醒
用户938515635079 小时前
从零构建《天龙八部》知识库:EPUB 加载→文本分割→向量嵌入→Milvus 存储→RAG 问答,一条链路打通
javascript·人工智能·全栈
@航空母舰9 小时前
SpringBoot通过Map实现天然的策略模式
java·spring boot·后端
雨白10 小时前
深入理解 Kotlin 协程 (九):互通有无,解构 Channel 缓冲策略与底层无锁机制
android·kotlin
Co_Hui10 小时前
Java 并发编程
java