├── .gitignore ├── .gitmodules ├── firmware ├── f103 │ ├── flash.bin │ ├── firmware.fwb │ └── bootloader.fwb ├── f150 │ ├── flash.bin │ ├── firmware.fwb │ └── bootloader.fwb └── mergebin.c ├── schematic └── usbjtag_micro.pdf ├── README.md ├── libopencm3.rules.mk └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | src/*.bin 3 | *.hex 4 | *~ 5 | *.map 6 | *.d 7 | *.elf 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "libopencm3"] 2 | path = libopencm3 3 | url = https://github.com/rgwan/libopencm3 4 | -------------------------------------------------------------------------------- /firmware/f103/flash.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/firmware/f103/flash.bin -------------------------------------------------------------------------------- /firmware/f150/flash.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/firmware/f150/flash.bin -------------------------------------------------------------------------------- /firmware/f103/firmware.fwb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/firmware/f103/firmware.fwb -------------------------------------------------------------------------------- /firmware/f150/firmware.fwb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/firmware/f150/firmware.fwb -------------------------------------------------------------------------------- /schematic/usbjtag_micro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/schematic/usbjtag_micro.pdf -------------------------------------------------------------------------------- /firmware/f103/bootloader.fwb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/firmware/f103/bootloader.fwb -------------------------------------------------------------------------------- /firmware/f150/bootloader.fwb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnlogicInfo/anlogic-usbjtag/HEAD/firmware/f150/bootloader.fwb -------------------------------------------------------------------------------- /firmware/mergebin.c: -------------------------------------------------------------------------------- 1 | /* This file is licensed by GPLv3 */ 2 | /* For combining bootloader and firmware */ 3 | /* Zhiyuan Wan 2017 */ 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | int main() 10 | { 11 | FILE *fp1, *fp2, *fp3; 12 | int bsz, fsz; 13 | fp1 = fopen("bootloader.fwb", "rb"); 14 | fp2 = fopen("firmware.fwb", "rb"); 15 | fp3 = fopen("flash.fwb", "wb+"); 16 | 17 | if(!fp1 || !fp2 || !fp3) 18 | { 19 | fprintf(stderr, "I/O error!\n"); 20 | return -1; 21 | } 22 | 23 | fseek(fp1, 0, SEEK_END); 24 | fseek(fp2, 0, SEEK_END); 25 | bsz = ftell(fp1); 26 | fsz = ftell(fp2); 27 | fseek(fp1, 0, SEEK_SET); 28 | fseek(fp2, 0, SEEK_SET); 29 | 30 | printf("bootloader size:%d\n", bsz); 31 | printf("firmware size: %d\n", fsz); 32 | 33 | if(bsz > 8192 || (bsz+fsz) > 65536) 34 | { 35 | fprintf(stderr, "Bootloader is out of memory or firmware is out of memory!\n"); 36 | return -1; 37 | } 38 | printf("flash size: %d\n", bsz+fsz); 39 | 40 | uint8_t *buffer = malloc(8192 + fsz); 41 | 42 | memset(buffer, 0xff, bsz+fsz); 43 | 44 | fread(buffer, 1, bsz, fp1); 45 | fread(&buffer[8192], 1, fsz, fp2); 46 | 47 | fwrite(buffer, 1, 8192 + fsz, fp3); 48 | 49 | printf("firmware written to flash.fwb, You can use STVP or stm32flash to flash it in your microcontroller!\n"); 50 | 51 | free(buffer); 52 | fclose(fp1); 53 | fclose(fp2); 54 | fclose(fp3); 55 | } 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Description 2 | ====== 3 | 4 | A USB-JTAG debugger for Anlogic platform. For some problem, the source has been removed and the license has been changed. 5 | 6 | Dependence 7 | -------------- 8 | 9 | libopencm3 library, GNU make, GNU ARM-baremetal-toolchain (arm-none-eabi-gcc), dfu-utils. 10 | 11 | Hardware requirement and IO assignment 12 | -------------- 13 | 14 | It requires a STM32F103C8T6 or equal microcontroller(GD32) with 8MHz external crystal. 15 | 16 | PA0 - JTAG TDO 17 | 18 | PA1 - JTAG TMS 19 | 20 | PA2 - JTAG TDI 21 | 22 | PA3 - JTAG TMS 23 | 24 | PA8 - USB_PULLUP 25 | 26 | PA9 - BOOT_ENTRY 27 | 28 | PB11 - STATUS_LED with positive polarity 29 | 30 | Flash 31 | -------------- 32 | 33 | This firmware contains a bootloader, which is opensource from dapboot. The firmware folder contains three files: 34 | 35 | bootloader.fwb, The bootloader, you can use STVP or stm32flash to flash into a blank chip. 36 | 37 | firmware.fwb, The firmware, you HAVE TO use dfu-utils or anlogic dfu tool to flash into a chip which already contains a bootloader. 38 | 39 | flash.bin, The firmware and the bootloader. You can use STVP or stm32flash to flash it into a blank chip, and it does work, not require you use dfu-utils to flash again. 40 | 41 | I'm sorry I can't fully open this stuff's source, but I hope you like it! This repository also contains GD32F150 version of anlogic-usbjtag firmware. 42 | 43 | Schematic & BUILD 44 | -------------- 45 | 46 | It is located in 'schematic' directory. You can make one yourself. 47 | 48 | Buy 49 | -------------- 50 | 51 | Contact Anlogic Technologies. 52 | 53 | Website: www.anlogic.com 54 | 55 | License 56 | -------------- 57 | 58 | EULA 59 | 60 | Contribution 61 | -------------- 62 | 63 | Zhiyuan Wan. 64 | 65 | Anlogic Information. 66 | 67 | 2017 68 | -------------------------------------------------------------------------------- /libopencm3.rules.mk: -------------------------------------------------------------------------------- 1 | ## 2 | ## This file is part of the libopencm3 project. 3 | ## 4 | ## Copyright (C) 2009 Uwe Hermann 5 | ## Copyright (C) 2010 Piotr Esden-Tempski 6 | ## Copyright (C) 2013 Frantisek Burian 7 | ## 8 | ## This library is free software: you can redistribute it and/or modify 9 | ## it under the terms of the GNU Lesser General Public License as published by 10 | ## the Free Software Foundation, either version 3 of the License, or 11 | ## (at your option) any later version. 12 | ## 13 | ## This library is distributed in the hope that it will be useful, 14 | ## but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | ## GNU Lesser General Public License for more details. 17 | ## 18 | ## You should have received a copy of the GNU Lesser General Public License 19 | ## along with this library. If not, see . 20 | ## 21 | 22 | # Be silent per default, but 'make V=1' will show all compiler calls. 23 | ifneq ($(V),1) 24 | Q := @ 25 | NULL := 2>/dev/null 26 | endif 27 | 28 | ############################################################################### 29 | # Executables 30 | 31 | PREFIX ?= arm-none-eabi 32 | 33 | CC := $(PREFIX)-gcc 34 | CXX := $(PREFIX)-g++ 35 | LD := $(PREFIX)-gcc 36 | AR := $(PREFIX)-ar 37 | AS := $(PREFIX)-as 38 | OBJCOPY := $(PREFIX)-objcopy 39 | OBJDUMP := $(PREFIX)-objdump 40 | GDB := $(PREFIX)-gdb 41 | STFLASH = $(shell which st-flash) 42 | STYLECHECK := /checkpatch.pl 43 | STYLECHECKFLAGS := --no-tree -f --terse --mailback 44 | STYLECHECKFILES := $(shell find . -name '*.[ch]') 45 | 46 | 47 | ############################################################################### 48 | # Source files 49 | 50 | LDSCRIPT ?= $(BINARY).ld 51 | 52 | OBJS += $(BINARY).o 53 | 54 | 55 | ifeq ($(strip $(OPENCM3_DIR)),) 56 | # user has not specified the library path, so we try to detect it 57 | 58 | # where we search for the library 59 | LIBPATHS := ./libopencm3 ../libopencm3 ../../../../libopencm3 ../../../../../libopencm3 60 | 61 | OPENCM3_DIR := $(wildcard $(LIBPATHS:=/locm3.sublime-project)) 62 | OPENCM3_DIR := $(firstword $(dir $(OPENCM3_DIR))) 63 | 64 | ifeq ($(strip $(OPENCM3_DIR)),) 65 | $(warning Cannot find libopencm3 library in the standard search paths.) 66 | $(error Please specify it through OPENCM3_DIR variable!) 67 | endif 68 | endif 69 | 70 | ifeq ($(V),1) 71 | $(info Using $(OPENCM3_DIR) path to library) 72 | endif 73 | 74 | INCLUDE_DIR = $(OPENCM3_DIR)/include 75 | LIB_DIR = $(OPENCM3_DIR)/lib 76 | SCRIPT_DIR = $(OPENCM3_DIR)/scripts 77 | 78 | ############################################################################### 79 | # C flags 80 | 81 | CFLAGS += -Os -g 82 | CFLAGS += -Wextra -Wshadow -Wimplicit-function-declaration 83 | CFLAGS += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes 84 | CFLAGS += -fno-common -ffunction-sections -fdata-sections 85 | 86 | ############################################################################### 87 | # C++ flags 88 | 89 | CXXFLAGS += -Os -g 90 | CXXFLAGS += -Wextra -Wshadow -Wredundant-decls -Weffc++ 91 | CXXFLAGS += -fno-common -ffunction-sections -fdata-sections 92 | 93 | ############################################################################### 94 | # C & C++ preprocessor common flags 95 | 96 | CPPFLAGS += -MD 97 | CPPFLAGS += -Wall -Wundef 98 | CPPFLAGS += -I$(INCLUDE_DIR) $(DEFS) 99 | 100 | ############################################################################### 101 | # Linker flags 102 | 103 | LDFLAGS += --static -nostartfiles 104 | LDFLAGS += -L$(LIB_DIR) 105 | LDFLAGS += -T$(LDSCRIPT) 106 | LDFLAGS += -Wl,-Map=$(*).map 107 | LDFLAGS += -Wl,--gc-sections 108 | ifeq ($(V),99) 109 | LDFLAGS += -Wl,--print-gc-sections 110 | endif 111 | 112 | ############################################################################### 113 | # Used libraries 114 | 115 | LDLIBS += -l$(LIBNAME) 116 | LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group 117 | 118 | ############################################################################### 119 | ############################################################################### 120 | ############################################################################### 121 | 122 | .SUFFIXES: .elf .bin .hex .srec .list .map .images 123 | .SECONDEXPANSION: 124 | .SECONDARY: 125 | 126 | all: elf 127 | 128 | elf: $(BINARY).elf 129 | bin: $(BINARY).bin 130 | hex: $(BINARY).hex 131 | srec: $(BINARY).srec 132 | list: $(BINARY).list 133 | 134 | images: $(BINARY).images 135 | flash: $(BINARY).flash 136 | 137 | $(LDSCRIPT): 138 | ifeq (,$(wildcard $(LDSCRIPT))) 139 | $(error Unable to find specified linker script: $(LDSCRIPT)) 140 | endif 141 | 142 | %.images: %.bin %.hex %.srec %.list %.map 143 | @#printf "*** $* images generated ***\n" 144 | 145 | %.bin: %.elf 146 | @#printf " OBJCOPY $(*).bin\n" 147 | $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin 148 | 149 | %.hex: %.elf 150 | @#printf " OBJCOPY $(*).hex\n" 151 | $(Q)$(OBJCOPY) -Oihex $(*).elf $(*).hex 152 | 153 | %.srec: %.elf 154 | @#printf " OBJCOPY $(*).srec\n" 155 | $(Q)$(OBJCOPY) -Osrec $(*).elf $(*).srec 156 | 157 | %.list: %.elf 158 | @#printf " OBJDUMP $(*).list\n" 159 | $(Q)$(OBJDUMP) -S $(*).elf > $(*).list 160 | 161 | %.elf %.map: $(OBJS) $(LDSCRIPT) $(LIB_DIR)/lib$(LIBNAME).a 162 | @#printf " LD $(*).elf\n" 163 | $(Q)$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(*).elf 164 | 165 | %.o: %.c 166 | @#printf " CC $(*).c\n" 167 | $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).c 168 | 169 | %.o: %.cxx 170 | @#printf " CXX $(*).cxx\n" 171 | $(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).cxx 172 | 173 | %.o: %.cpp 174 | @#printf " CXX $(*).cpp\n" 175 | $(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).cpp 176 | 177 | clean:: 178 | @#printf " CLEAN\n" 179 | $(Q)$(RM) *.o *.d *.elf *.bin *.hex *.srec *.list *.map 180 | 181 | stylecheck: $(STYLECHECKFILES:=.stylecheck) 182 | styleclean: $(STYLECHECKFILES:=.styleclean) 183 | 184 | # the cat is due to multithreaded nature - we like to have consistent chunks of text on the output 185 | %.stylecheck: % 186 | $(Q)$(SCRIPT_DIR)$(STYLECHECK) $(STYLECHECKFLAGS) $* > $*.stylecheck; \ 187 | if [ -s $*.stylecheck ]; then \ 188 | cat $*.stylecheck; \ 189 | else \ 190 | rm -f $*.stylecheck; \ 191 | fi; 192 | 193 | %.styleclean: 194 | $(Q)rm -f $*.stylecheck; 195 | 196 | 197 | %.stlink-flash: %.bin 198 | @printf " FLASH $<\n" 199 | $(Q)$(STFLASH) write $(*).bin 0x8000000 200 | 201 | %.flash: %.hex 202 | @printf " FLASH $<\n" 203 | @# IMPORTANT: Don't use "resume", only "reset" will work correctly! 204 | $(Q)$(OOCD) -f $(OOCD_INTERFACE) \ 205 | -f $(OOCD_BOARD) \ 206 | -c "init" -c "reset init" \ 207 | -c "flash write_image erase $(*).hex" \ 208 | -c "reset" \ 209 | -c "shutdown" $(NULL) 210 | 211 | .PHONY: images clean stylecheck styleclean elf bin hex srec list 212 | 213 | -include $(OBJS:.o=.d) 214 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | With the exception of files that contain licensing information 2 | stating the contrary, files within the dapboot project are licensed 3 | under the ISC license as follows: 4 | 5 | Copyright (c) 2016, Devan Lai 6 | 7 | Permission to use, copy, modify, and/or distribute this software 8 | for any purpose with or without fee is hereby granted, provided 9 | that the above copyright notice and this permission notice 10 | appear in all copies. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 13 | WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 14 | WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 15 | AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR 16 | CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 17 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 18 | NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 19 | CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | The following files in the dapboot project pertaining to the base 22 | Makefile and linker script are derived from the libopencm3 examples 23 | template and are licensed under the GNU Lesser General Public 24 | License version 3: 25 | * libopencm3.rules.mk 26 | * src/libopencm3.target.mk 27 | * src/stm32f042/stm32f042x6.ld 28 | * src/stm32f103/stm32f103x8.ld 29 | 30 | libopencm3, included as a submodule and statically linked as part 31 | of the build process, is separately licensed under the LGPLv3. 32 | 33 | The following is for informative purposes only: all LICENSE files 34 | contained within the project should be consulted for precise 35 | specifications. 36 | 37 | The LGLPv3 is the most restrictive license applying to any subset 38 | of the dapboot project; all other licensed material is strictly less 39 | restrictive than the LGPLv3. Accordingly, you may distribute the 40 | dapboot project in source or object code form under the terms of 41 | the LGPLv3 without needing to meet additional requirements for 42 | the less restrictively licensed portions of the dapboot project. 43 | 44 | Otherwise, the combined work consisting of the dapboot object code 45 | linked with the libopencm3 object code may be distributed without 46 | distributing a copy of the dapboot source code or any modifications 47 | to it. 48 | 49 | However, if the source code is not distributed, you must provide a 50 | means for the user to "re-link" the libopencm3 object code to 51 | produce a new combined work containing updated libopencm3 object 52 | code along-side any dapboot object code. 53 | 54 | The text of the GNU Lesser General Public License version 3 is 55 | reproduced below for use with the limited portions of the dapboot 56 | project licensed under the LGPLv3: 57 | 58 | GNU LESSER GENERAL PUBLIC LICENSE 59 | Version 3, 29 June 2007 60 | 61 | Copyright (C) 2007 Free Software Foundation, Inc. 62 | Everyone is permitted to copy and distribute verbatim copies 63 | of this license document, but changing it is not allowed. 64 | 65 | 66 | This version of the GNU Lesser General Public License incorporates 67 | the terms and conditions of version 3 of the GNU General Public 68 | License, supplemented by the additional permissions listed below. 69 | 70 | 0. Additional Definitions. 71 | 72 | As used herein, "this License" refers to version 3 of the GNU Lesser 73 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 74 | General Public License. 75 | 76 | "The Library" refers to a covered work governed by this License, 77 | other than an Application or a Combined Work as defined below. 78 | 79 | An "Application" is any work that makes use of an interface provided 80 | by the Library, but which is not otherwise based on the Library. 81 | Defining a subclass of a class defined by the Library is deemed a mode 82 | of using an interface provided by the Library. 83 | 84 | A "Combined Work" is a work produced by combining or linking an 85 | Application with the Library. The particular version of the Library 86 | with which the Combined Work was made is also called the "Linked 87 | Version". 88 | 89 | The "Minimal Corresponding Source" for a Combined Work means the 90 | Corresponding Source for the Combined Work, excluding any source code 91 | for portions of the Combined Work that, considered in isolation, are 92 | based on the Application, and not on the Linked Version. 93 | 94 | The "Corresponding Application Code" for a Combined Work means the 95 | object code and/or source code for the Application, including any data 96 | and utility programs needed for reproducing the Combined Work from the 97 | Application, but excluding the System Libraries of the Combined Work. 98 | 99 | 1. Exception to Section 3 of the GNU GPL. 100 | 101 | You may convey a covered work under sections 3 and 4 of this License 102 | without being bound by section 3 of the GNU GPL. 103 | 104 | 2. Conveying Modified Versions. 105 | 106 | If you modify a copy of the Library, and, in your modifications, a 107 | facility refers to a function or data to be supplied by an Application 108 | that uses the facility (other than as an argument passed when the 109 | facility is invoked), then you may convey a copy of the modified 110 | version: 111 | 112 | a) under this License, provided that you make a good faith effort to 113 | ensure that, in the event an Application does not supply the 114 | function or data, the facility still operates, and performs 115 | whatever part of its purpose remains meaningful, or 116 | 117 | b) under the GNU GPL, with none of the additional permissions of 118 | this License applicable to that copy. 119 | 120 | 3. Object Code Incorporating Material from Library Header Files. 121 | 122 | The object code form of an Application may incorporate material from 123 | a header file that is part of the Library. You may convey such object 124 | code under terms of your choice, provided that, if the incorporated 125 | material is not limited to numerical parameters, data structure 126 | layouts and accessors, or small macros, inline functions and templates 127 | (ten or fewer lines in length), you do both of the following: 128 | 129 | a) Give prominent notice with each copy of the object code that the 130 | Library is used in it and that the Library and its use are 131 | covered by this License. 132 | 133 | b) Accompany the object code with a copy of the GNU GPL and this license 134 | document. 135 | 136 | 4. Combined Works. 137 | 138 | You may convey a Combined Work under terms of your choice that, 139 | taken together, effectively do not restrict modification of the 140 | portions of the Library contained in the Combined Work and reverse 141 | engineering for debugging such modifications, if you also do each of 142 | the following: 143 | 144 | a) Give prominent notice with each copy of the Combined Work that 145 | the Library is used in it and that the Library and its use are 146 | covered by this License. 147 | 148 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 149 | document. 150 | 151 | c) For a Combined Work that displays copyright notices during 152 | execution, include the copyright notice for the Library among 153 | these notices, as well as a reference directing the user to the 154 | copies of the GNU GPL and this license document. 155 | 156 | d) Do one of the following: 157 | 158 | 0) Convey the Minimal Corresponding Source under the terms of this 159 | License, and the Corresponding Application Code in a form 160 | suitable for, and under terms that permit, the user to 161 | recombine or relink the Application with a modified version of 162 | the Linked Version to produce a modified Combined Work, in the 163 | manner specified by section 6 of the GNU GPL for conveying 164 | Corresponding Source. 165 | 166 | 1) Use a suitable shared library mechanism for linking with the 167 | Library. A suitable mechanism is one that (a) uses at run time 168 | a copy of the Library already present on the user's computer 169 | system, and (b) will operate properly with a modified version 170 | of the Library that is interface-compatible with the Linked 171 | Version. 172 | 173 | e) Provide Installation Information, but only if you would otherwise 174 | be required to provide such information under section 6 of the 175 | GNU GPL, and only to the extent that such information is 176 | necessary to install and execute a modified version of the 177 | Combined Work produced by recombining or relinking the 178 | Application with a modified version of the Linked Version. (If 179 | you use option 4d0, the Installation Information must accompany 180 | the Minimal Corresponding Source and Corresponding Application 181 | Code. If you use option 4d1, you must provide the Installation 182 | Information in the manner specified by section 6 of the GNU GPL 183 | for conveying Corresponding Source.) 184 | 185 | 5. Combined Libraries. 186 | 187 | You may place library facilities that are a work based on the 188 | Library side by side in a single library together with other library 189 | facilities that are not Applications and are not covered by this 190 | License, and convey such a combined library under terms of your 191 | choice, if you do both of the following: 192 | 193 | a) Accompany the combined library with a copy of the same work based 194 | on the Library, uncombined with any other library facilities, 195 | conveyed under the terms of this License. 196 | 197 | b) Give prominent notice with the combined library that part of it 198 | is a work based on the Library, and explaining where to find the 199 | accompanying uncombined form of the same work. 200 | 201 | 6. Revised Versions of the GNU Lesser General Public License. 202 | 203 | The Free Software Foundation may publish revised and/or new versions 204 | of the GNU Lesser General Public License from time to time. Such new 205 | versions will be similar in spirit to the present version, but may 206 | differ in detail to address new problems or concerns. 207 | 208 | Each version is given a distinguishing version number. If the 209 | Library as you received it specifies that a certain numbered version 210 | of the GNU Lesser General Public License "or any later version" 211 | applies to it, you have the option of following the terms and 212 | conditions either of that published version or of any later version 213 | published by the Free Software Foundation. If the Library as you 214 | received it does not specify a version number of the GNU Lesser 215 | General Public License, you may choose any version of the GNU Lesser 216 | General Public License ever published by the Free Software Foundation. 217 | 218 | If the Library as you received it specifies that a proxy can decide 219 | whether future versions of the GNU Lesser General Public License shall 220 | apply, that proxy's public statement of acceptance of any version is 221 | permanent authorization for you to choose that version for the 222 | Library. --------------------------------------------------------------------------------