.. index:: cloning-integrated .. _new.clone: Cloning, Integrated =================== .. seealso:: :ref:`New version 5Jan2020` In :ref:`Cloning, manual` I show how to clone a working Mecrisp-Stellaris MCU using 8 manual steps, which is easy enough, but required a Serial Terminal with logging and so on. Boring, slow, and error prone. Cloning, A New Method --------------------- In this article I will show a much easier single step method. There is also a YouTube Video at: https://www.youtube.com/watch?v=od4pkkT9sS8 Included is a cloned kernel image of my default development kernel for a STM32F051, used in the STM32F0 Discovery Board. It contains a number of development aids, see the kernel README.txt for the contents and notes. .. note:: This, like all my Forth apps, is designed for Unix, developed on FreeBSD, and should run on Linux, OpenBsd etc. The usual default Unix utils are used and most should already be present on your Unix system. Dependencies ------------ * Gnu Screen * DD * arm-none-eabi-objcopy * st-flash * MD5 of some kind if you want to fingerprint the Kernel Image * clone.sh * f051-clone.fs Operation --------- 1) Install "clone.sh" in your path 2) Install "f051-clone.fs" in your path 3) Have a OPEN Interactive GnuScreen session to the development board/chip 4) Execute "clone.sh" ... done. .. note:: Clone will produce a binary named after the MD5sum, which is symlinked to 'clone.bin' Downloads --------- Download :download:`clone.sh` Download :download:`f051-clone.fs` Download :download:`f0-disco-48mhz.fs ` Download Kernel :download:`ea85d79924b9c367f125f4fa12a6c6e3.bin ` 64KB Download Wordlist :download:`ea85d79924b9c367f125f4fa12a6c6e3.words.txt ` 57KB Download README :download:`ea85d79924b9c367f125f4fa12a6c6e3.README.txt ` 3.5KB clone.sh -------- :: #!/bin/sh # Program Name: clone.fs # Date: Sat 5 Jan 2019 03:01:34 AEDT # Copyright 2018 t.porter , licensed under the GPL # For Mecrisp-Stellaris by Matthias Koch. # https://sourceforge.net/projects/mecrisp/ # Dependencies # ------------ # * Gnu Screen # * DD # * arm-none-eabi-objcopy # * st-flash # * MD5 of some kind if you want to fingerprint the Kernel Image # # Operation # --------- # # 1) Install "clone.sh" in your path # 2) Have a OPEN Interactive GnuScreen session to the development board/chip # xterm -title 'GnuScreen@cuaU0:460800 bps | CTRL A :quit | ' -e screen -t SCREEN1 -S SCREEN1 dev/cuaU0 460800,crtscts & # 3) Execute "clone.sh" ... done. AUTHOR="terry porter" # <--- CHANGE ME TO YOUR NAME !!! SCREENAME="SCREEN1" PROJECT=`basename $PWD` LIBRARY=/home/tp/projects/programming-languages/forth/mecrisp-stellaris/library FILE_NAME_1=f051-clone.fs LOGFILE="screenlog.0" HEXFILE=$PROJECT.hex BINARYFILE=$PROJECT.bin LEADING_BYTES_TO_REMOVE=8 TRAILING_BYTES_TO_REMOVE=8 FINGERPRINT_APPLICATION="md5" # ............................................. # screen -p $SCREENAME -X stuff 'compiletoram\n' screen -p $SCREENAME -X stuff 'reset\n' screen -p $SCREENAME -X stuff 'f0-disco-48mhz\n' screen -p $SCREENAME -X readreg x $LIBRARY/$FILE_NAME_1 screen -p $SCREENAME -X paste x screen -p $SCREENAME -X logtstamp off screen -p $SCREENAME -X log on screen -p $SCREENAME -X stuff 'clone\n' # sleep while logging the memory dump or screen will cut it off while incomplete sleep 10 screen -p $SCREENAME -X log off BYTES=$(cat screenlog.0 | wc -c) X=$((BYTES-LEADING_BYTES_TO_REMOVE)) Y=$((X-TRAILING_BYTES_TO_REMOVE)) dd if=$LOGFILE of=$HEXFILE bs=1 skip=$LEADING_BYTES_TO_REMOVE count=$Y arm-none-eabi-objcopy -I ihex -O binary $HEXFILE $BINARYFILE $FINGERPRINT_APPLICATION $BINARYFILE > $BINARYFILE.md5sum rm $LOGFILE $HEXFILE md5name=$(md5 -q $BINARYFILE) screen -p $SCREENAME -X log on screen -p $SCREENAME -X stuff 'words\n' sleep 10 screen -p $SCREENAME -X log off mv screenlog.0 $md5name.words.txt mv $BINARYFILE $md5name.bin ln -s $md5name.bin clone.bin touch $md5name.README.txt echo $md5name.README: Specific Notes regarding Mecrisp-Stellaris >$md5name.README.txt echo Kernel $md5name.bin >>$md5name.README.txt echo Created `date +%Y%m%d-%H%M` by $AUTHOR >> $md5name.README.txt echo ----------------------------------------------------------------------------------- >> $md5name.README.txt echo >> $md5name.README.txt echo All Finished! # Flash the binary: # st-flash erase # st-flash write $BINARYFILE 0x08000000