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",
}
相关推荐
敲敲千反田12 小时前
Spring 相关
java·后端·spring
极客小俊12 小时前
【从零到一】用HTML5+CSS+JavaScript实现一个属于自己的mp3免费音乐播放器 (4) JS交互功能(音乐进度条)
javascript·css·html5·前端开发·免费教程·代码案例·手搓音乐播放器
@小柯555m12 小时前
Java八股刷题
java·开发语言·八股
bzmK1DTbd12 小时前
Java在人工智能:TensorFlow Java API的使用
java·人工智能·tensorflow
小碗羊肉12 小时前
【JavaWeb | 第四篇】分层解耦
java·后端·servlet
EM-FF12 小时前
idea快捷键
java·ide·intellij-idea
薪火铺子12 小时前
Redis 分布式锁与 Redisson 原理深度解析
java·redis·分布式·后端
胡楚昊12 小时前
BUU WEB之旅(1)
java·数据库·mybatis
FlyWIHTSKY12 小时前
Element Plus 中 el-row 和 el-col 的完整使用指南**
javascript·vue.js·ecmascript
摇滚侠13 小时前
基于 Redis 实现验证码登录
javascript·redis·bootstrap