Zephyr应用笔记:Python实现JLink下载程序脚本

本文介绍了一个Python脚本,用于通过J-Link接口将固件加载到指定设备中。该脚本利用了JLinkExe工具,并通过命令行方式实现了设备的复位、固件加载及启动等功能。同时,文中还提供了一个Makefile示例,展示了如何整合此脚本到自动化构建流程中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python脚本内容:

#!/usr/bin/env python3
#
# Copyright (c) 2018 Noitom
#
# SPDX-License-Identifier: Apache-2.0

import argparse
import os
import tempfile
import subprocess

def do_jlink(args):
        lines = ['r'] # Reset and halt the target
        lines.append('loadfile {} {}'.format(args.load_path, args.load_offset))
        lines.append('g') # Start the CPU
        lines.append('q') # Close the connection and quit
        with tempfile.NamedTemporaryFile(suffix='.jlink') as f:
                f.writelines(bytes(line + '\n', 'utf-8') for line in lines)
                f.flush()

                cmd = (['JLinkExe'] + ['-if', 'swd','-speed', '4000','-device', args.device,'-CommanderScript', f.name])
                subprocess.check_call(cmd)  
        
def args():
        parser = argparse.ArgumentParser()
        parser.add_argument("-d", "--device", metavar='filename', required=True)
        parser.add_argument("-load", "--load_path", metavar='filename', required=True)
        parser.add_argument("-offset", "--load_offset", metavar='filename', required=True)
        args = parser.parse_args()
        do_jlink(args)

if __name__ == '__main__':
args()


Makefile内容如下:

BOARD = mimxrt1050_evk

KERNEL_BIN_NAME = image.bin

JLINK_FLASH_LOAD_ADDRESS = 0x60000000

SOURCE_DIRECTORY := $(CURDIR)
BUILD_DIRECTORY := $(CURDIR)/$(BOARD)

IMGTOOL = $(CURDIR)/merge.py
IMGJLINK = $(CURDIR)/jlink.py
IMG_HEADER_LEN = 8192

image: check
    (mkdir -p $(BOARD) && \
        cd $(BOARD) && \
        cmake -DBOARD=$(BOARD) $(SOURCE_DIRECTORY) && \
        make -j$(nproc))
    $(IMGTOOL) -k $(BUILD_DIRECTORY)/zephyr/zephyr.bin \
        -i $(KERNEL_BIN_NAME) \
        -head head.bin \
        -H $(IMG_HEADER_LEN)

flash: check
    $(IMGJLINK) -d MIMXRT1052xxxxA \
    -load $(KERNEL_BIN_NAME) \
    -offset $(JLINK_FLASH_LOAD_ADDRESS)
    
menuconfig: check
    cd $(BOARD) && make menuconfig
    
clean: check
    @rm -f ${MCUBOOT_KERNEL_BIN_NAME}
    cd $(BOARD) && make clean
    
check:
    @if [ -z "$$ZEPHYR_BASE" ]; then echo "Zephyr environment not set up"; false; fi
    @if [ -z "$(BOARD)" ]; then echo "You must specify BOARD=<board>"; false; fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值