编译DAPLink源码:Keil工程实战指南

DAPLink源码生成Keil工程并编译成功——笔记

  • 一、前期准备工作
  • 二、初始化安装
  • 三、启动虚拟环境
  • 四、生成Keil工程文件
  • 五、编译工程的遇到坑
  • 坑一:Arm v5编译器
  • 坑二:Git的环境变量(或许该怪windows?)
  • 坑三:未关闭虚拟环境脚本
  • 补充–10.13
  • 结语

  • 本文介绍使用DAP源码生产Keil工程的步骤以及遇到的坑。

    一、前期准备工作

    以下1~4为步骤:

    1. 安装Python 3 (https://www.python.org/downloads/),并添加至路径 PATH,此处忘截图了,总之看见pip、all user、add to PATH之类的就勾选。(网上也有些帖子说暂时不支持Python 3要用Python 2.7的,本人实测Python 3也可以,可能是以前不行的现在可以了)

    2. 安装 Git (https://git-scm.com/downloads),添加至路径 PATH(安装第三步 选项里推荐使用Notepad++作为默认编辑器,没有Notepad++需要先安装好,剩下的就一路默认即可)安装后会自动添加好路径D:\Git\bin\ 和D:\Git\cmd
      请添加图片描述

    3. 安装 Keil MDK (https://developer.arm.com/tools-and-software/embedded/keil-mdk),安装与License的方法网上一大堆,这里就不说明了

    4. 用命令行安装 virtualenv (最好用管理员权限打开cmd),输入 pip install virtualenv

      请添加图片描述

      如果提示pip需要升级什么的就按提示继续输入命令升级pip,一般不会有什么大问题

    二、初始化安装

    1. 方法一:从Github上下载DAP源码 (https://github.com/mbedmicro/DAPLink),下载后的是名为DAPLink-main.zip的压缩包,需要解压。

      方法二:也可先新建个文件夹(命名为英文,如NEW),对着它右键选Git Bash Here,就会打开Git Bash的命令窗口,

    请添加图片描述
    请添加图片描述
    输入
    $ git clone https://github.com/mbedmicro/DAPLink
    clone后的文件夹叫DAPLink ,无需解压(速度慢的话推荐第一种,反正都是一样的)

    1. clone完后把Git Bash根目录切换到源码的根目录。
      上述方法一的根目录为DAPLink-main,方法二的根目录为DAPLink,即对着这个文件夹右键Git Bash Here(关闭原来的Git Bash命令窗口),或者原来的窗口输入$ cd DAPLink

      请添加图片描述

    2. 输入$ pip install virtualenv 安装虚拟环境

      请添加图片描述

    3. 输入$ virtualenv venv 进入虚拟环境,此时DAPlink文件下会出现venv文件夹

    请添加图片描述

    请添加图片描述

    三、启动虚拟环境

    1. 输入:

      $ venv/Scripts/activate (For Linux)
      $ venv/Scripts/activate.bat (For Windows)
      如果venv/Scripts/activate.bat不行就按照图片的提示前面加个source ,或者这个不需要命令行执行,直接在DAPlink目录下venv—Scripts文件夹里找到activate.bat,右键管理员打开即可

    请添加图片描述
    请添加图片描述

    1. 输入$ pip install -r requirements.txt(用于获取很多支持包,这步很关键,时长取决于你的网络,如果网络不好可能会下载不了,只要命令行里有显示Error或Warning之类的一律出问题)
      请添加图片描述

    最后的显示是Successfully installed xxxxxxxxx 才是完全安装成功,出现Error或Warning之类需要重新执行$ pip install -r requirements.txt

    四、生成Keil工程文件

    1. 输入 $ progen generate -t uvision 一步生成,

    2. 如果这一步显示 bash: progen: command not found 之类的 均是上一步没弄好,可以重复执行上一步
      $ pip install -r requirements.txt直至完全获取支持包

    3. 此使可以关闭Git bash了(其实还不行,还有一个步骤,详见下文 坑三…),进入到文件夹里面,会发现多出个文件夹projectfiles,即刚刚生成的Keil工程文件,里面有116个工程文件,找到对应的芯片型号即可。

      如常用的STM系列芯片:

      以 _if 结尾的工程是对应工程的应用程序;_bl 结尾的是对应工程的Bootloader应用程序,以STM32F103C8为例,首先烧写bootloader,即stm32f103xb_bl工程编译出来的hex文件,然后再烧写stm32f103xb_if编译出来的hex文件即完成一个DAPLink制作。

    五、编译工程的遇到坑

    坑一:Arm v5编译器

    1. 用Keil打开,界面如下:

      编译,确保有相应的芯片支持包(也称固件包),如果出现如下则是缺少Arm compiler version 5编译器,

      Rebuild started: Project: stm32f103xb_if
      *** Target 'stm32f103xb_if' uses ARM-Compiler 'Default Compiler Version 5' which is not available.
      *** Please review the installed ARM Compiler Versions:
         'Manage Project Items - Folders/Extensions' to manage ARM Compiler Versions.
         'Options for Target - Target' to select an ARM Compiler Version for the target.
      *** Rebuild aborted.
      Build Time Elapsed:  00:00:00
      

      目前最新下载的Keil版本都是v6的编译器了,相关的v5编译器安装网上也有很多帖子,好多都指向官网说在官网下载,但是本人花了十几首歌的时间浏览查找注册收验证码登录… 才发现Keil官网上已经没得下载了(这是个大坑!) 放弃官网寻找后才发现个帖子有说明v5编译器的文件夹地方,在以前的版本里安装目录下Keil_v5—ARM—ARMCC文件夹,

      最新版本已经没有ARMCC这个文件夹了,所以可以用以前的版本copy过来放到ARM文件夹目录下,此处本人共享一波ARMCC文件夹出来:

      链接:https://pan.baidu.com/s/1gYGGfa1w7sSQ_GWs_Bp6KA
      提取码:ku9q
      如果需要将自己的ARMCC文件夹打包copy给别人,建议用7z格式压缩,压缩前428M,压缩后78.7M(zip)、17.8M(7z) (7z YYDS!)

    2. 此处简略说明安装过程:打开Keil点击魔术棒旁边红绿黄三个小方块的东西(Manage Project Items—Floders/Extensions—Use ARM Compiler处点击右边三个小点点,把ARMCC文件夹添加进去即可(或搜Arm compiler version 5安装,会有很多帖子有很详尽的教程)

    3. Arm compiler version 5 安装完后打开Keil—魔术棒—Target—Code Generation会出现Use default compirler version 5,并选择它(没装ARMCC时只有Use default compirler version 6) ,OK即可用v5来编译

    坑二:Git的环境变量(或许该怪windows?)

    1. 然而继续编译会出现新的问题,如下:

      'git' 不是内部或外部命令,也不是可运行的程序
      或批处理文件。
      #> Getting git description
      #> ERROR: Failed to get git description, do you have git.exe in your PATH environment variable?
      ".\build\stm32f103xb_if.axf" - 1 Error(s), 0 Warning(s).
      Target not created.
      

      这是因为 git 的环境变量未配置好,也有一个方法检测git是否正常运行,Win+R 输入cmd打开命令行,输入git,正常的话是可以显示git相关信息的,但本人的显示 “git’ 不是内部或外部命令,也不是可运行的程序或批处理文件“ 所以需要添加git的PATH路径。这一部分本人折腾了很久,网上找了很多添加git路径的帖子,有些是重复的,有些又不一样,在这里我整合了需要添加的路径(不一定都需要添加,但都加上又没什么影响):

      注意安装路径不同的话要做修改。

    2. 至于为什么本人在添加PATH部分卡这么久,全怪Window神奇的bug(或者不是bug,只是我还不了解为什么,有了解情况的可以评论区一波),添加路径有两种方法,一种新建后直接在空白行输入,

      还有一种是点击编辑文本

      弹出提示点击确认即如下图所示,每一个PATH中间都由英文符号 ; 分号隔开,

    3. 然而我用了第一种方法,直接新建空白处填写路径,显示效果如下,却怎么都不行,cmd永远还是显示 “git’ 不是内部或外部命令,也不是可运行的程序或批处理文件。“

      人都快崩溃时候无意点了下”编辑文档“,终于破案,

      多了一对引号和分号,删掉之后再次cmd输入git ,终于大功告成!

      但为什么会出现上述这样的问题本人也不知道,打开编译页面显示的跟未修改前的还是一样,根本看不出会对一双引号和分号

      还是建议添加修改PATH用方法二吧,比较稳妥。

    坑三:未关闭虚拟环境脚本

    1. cmd输入git也可以了,又开始Keil编译,一点编译,0.5秒都不到就听到 滴灵~ 一声编译完成,瞬间崩溃。一看问题,还是显示 ” ‘git’ 不是内部或外部命令“ …更加崩溃!接下来就是更加疯狂地google,

    2. 终于找到一篇帖子分享DAPLink的源码生成步骤有一处不一样,TA的最后一步需要关闭虚拟环境脚本 deactivate,在上述启动虚拟环境第一步就把虚拟环境脚本开启了,但是大部分的帖子以及官方的DEVELOPERS-GUIDE(在DAPLink目录下的docs里,包括了DAPLink的全部资料文档)均没有提及需要关闭(或许是我看漏)

    3. 已经是最后一根稻草了立马就试了下,Git bash里$venv/Scripts/deactivate.bat 或直接管理员打开venv—Scripts—deactivate.bat,再重开Keil编译,终于,大功告成,编译正常通过!

    4. 至于为什么有的帖子需要关闭有的帖子又没写关闭就不知道了,知情的热心网友可以评论区一波。


    补充–10.13

    1. 补充说明第三章启动虚拟环境中 如果用$ venv/Scripts/activate.bat没有反应的话就改为 $ source venv/Scripts/activate注意后面不带.bat的,成功进入虚拟环境是会显示(venv)的。
    2. 网上也有帖子说必须要用DAPLink\tools里的launch_uvision.bat来启动(官方文档的最后一行也有提及),
      但本人亲测好像直接工程打开也是可以的,并且后来又发现并不一定要退出虚拟环境deactivate后才能编译,总之有点迷,反正遇到问题了就都试试。
    3. 关于launch_uvision.bat的启动需要修改Keil路径,如图片选中地方所示
    4. 获取方式似乎也有不同的地方,本人亲测以上方法如果是Github上直接下下来解压的无论如何都不会编译通过,用git clone的均可以编译并且没有那么多奇奇怪怪的问题,git clone后$cd DAPLink 跳转到DAPLink的根目录,这时会出现(main)的字样,而如果使用压缩包解压再cd进DAPLink根目录下是没有这个(main)的,因此推荐使用git clone来获取DAPLink源码!!!所以以上的截图都是错误的,正常的应该从cd DAPLink 命令后都会带有(main)
    5. 这里我汇总一下全部使用的git bash 命令:
    $ git clone https://github.com/mbedmicro/DAPLink   //clone整个工程过来
    $ cd DAPLink                                       //这个步骤会出现main
    $ pip install virtualenv                           //pip安装虚拟环境     
    $ virtualenv venv                                  //pip进入虚拟环境 
    $ source venv/Scripts/activate                     //使能虚拟环境     
    $ pip install -r requirements.txt                  //安装支持包
    $ progen generate -t uvision                       //生成全部Keil工程文件
    //--------------------------------------------------------//
    //如果不需要生成全部一百多个工程文件,就只挑需要的来生成即可,以STM32F103xb为例:
    $ progen generate -p stm32f103xb_bl -t uvision     //只生成stm32f103xb_bl工程
    $ progen generate -p stm32f103xb_stm32f103rb_if -t uvision   //只生成stm32f103xb_if工程
    //--------------------------------------------------------//
    $ venv/Scripts/deactivate.bat					   //取消虚拟环境,此步不一定需要
    
    
    1. 如果遇到更多的情况可以参考官方DAPLink的Issues部分,有很多网友也提出了与本文类似的问题:https://github.com/ARMmbed/DAPLink/issues

    结语

    分享这篇文章出来旨在帮助坑友们排雷,节省十几首歌的时间,并且由于本人认知有限,本文的方法仅供参考,并不一定适用于任何情况。感谢DAPLink官方如此优秀的开源!

    物联沃分享整理
    物联沃-IOTWORD物联网 » 编译DAPLink源码:Keil工程实战指南

    发表评论