gnu: r-abaenrichment: Update to 1.14.0.
[jackhill/guix/guix.git] / gnu / packages / flashing-tools.scm
CommitLineData
4acd5c0f 1;;; GNU Guix --- Functional package management for GNU
eff5f452 2;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
4acd5c0f 3;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
af3166c3 4;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
ca1499ce 5;;; Copyright © 2016, 2018 Ludovic Courtès <ludo@gnu.org>
7526edb9 6;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
29ac89a6 7;;; Copyright © 2017 Jonathan Brielmaier <jonathan.brielmaier@web.de>
f282aa53 8;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
7d4cbd99 9;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
4acd5c0f
MR
10;;;
11;;; This file is part of GNU Guix.
12;;;
13;;; GNU Guix is free software; you can redistribute it and/or modify it
14;;; under the terms of the GNU General Public License as published by
15;;; the Free Software Foundation; either version 3 of the License, or (at
16;;; your option) any later version.
17;;;
18;;; GNU Guix is distributed in the hope that it will be useful, but
19;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;;; GNU General Public License for more details.
22;;;
23;;; You should have received a copy of the GNU General Public License
24;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
eff5f452 26(define-module (gnu packages flashing-tools)
f282aa53 27 #:use-module ((guix licenses) #:prefix license:)
4acd5c0f 28 #:use-module (guix download)
7526edb9 29 #:use-module (guix git-download)
4acd5c0f
MR
30 #:use-module (guix packages)
31 #:use-module (gnu packages)
f282aa53 32 #:use-module (guix build-system cmake)
4acd5c0f 33 #:use-module (guix build-system gnu)
0297a160 34 #:use-module (guix build-system python)
4acd5c0f 35 #:use-module (gnu packages bison)
f282aa53 36 #:use-module (gnu packages compression)
4acd5c0f
MR
37 #:use-module (gnu packages flex)
38 #:use-module (gnu packages elf)
9721c0b6 39 #:use-module (gnu packages pciutils)
eff5f452 40 #:use-module (gnu packages pkg-config)
4acd5c0f 41 #:use-module (gnu packages libusb)
eff5f452
MR
42 #:use-module (gnu packages libftdi)
43 #:use-module (gnu packages pciutils)
f282aa53 44 #:use-module (gnu packages qt)
af3166c3 45 #:use-module (gnu packages autotools)
eff5f452
MR
46 #:use-module (gnu packages admin))
47
48(define-public flashrom
49 (package
50 (name "flashrom")
17499793 51 (version "1.0.1")
eff5f452
MR
52 (source (origin
53 (method url-fetch)
54 (uri (string-append
17499793 55 "https://download.flashrom.org/releases/flashrom-v"
eff5f452
MR
56 version ".tar.bz2"))
57 (sha256
58 (base32
17499793 59 "0i6yrrl69hrqmwd7azj7x3j46m0qpvzmk3b5basym7mnlpfzhyfm"))))
eff5f452
MR
60 (build-system gnu-build-system)
61 (inputs `(("dmidecode" ,dmidecode)
62 ("pciutils" ,pciutils)
63 ("libusb" ,libusb)
64 ("libftdi" ,libftdi)))
65 (native-inputs `(("pkg-config" ,pkg-config)))
66 (arguments
326654e4
TGR
67 '(#:make-flags
68 (list "CC=gcc"
326654e4
TGR
69 (string-append "PREFIX=" %output)
70 "CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no")
a03abe78 71 #:tests? #f ; no 'check' target
eff5f452 72 #:phases
dc1d3cde 73 (modify-phases %standard-phases
a03abe78 74 (delete 'configure) ; no configure script
dc1d3cde
KK
75 (add-before 'build 'patch-exec-paths
76 (lambda* (#:key inputs #:allow-other-keys)
77 (substitute* "dmi.c"
78 (("\"dmidecode\"")
79 (format #f "~S"
80 (string-append (assoc-ref inputs "dmidecode")
81 "/sbin/dmidecode"))))
82 #t)))))
291b5de9 83 (home-page "https://flashrom.org/")
eff5f452
MR
84 (synopsis "Identify, read, write, erase, and verify ROM/flash chips")
85 (description
86 "flashrom is a utility for identifying, reading, writing,
87verifying and erasing flash chips. It is designed to flash
88BIOS/EFI/coreboot/firmware/optionROM images on mainboards,
89network/graphics/storage controller cards, and various other
90programmer devices.")
f282aa53 91 (license license:gpl2)))
4acd5c0f 92
29ac89a6
JB
93(define-public 0xffff
94 (package
95 (name "0xffff")
03df9e5a 96 (version "0.8")
29ac89a6
JB
97 (source
98 (origin
659afdae
TGR
99 (method git-fetch)
100 (uri (git-reference
101 (url "https://github.com/pali/0xffff.git")
102 (commit version)))
103 (file-name (git-file-name name version))
104 (sha256
105 (base32 "1a5b7k96vzirb0m8lqp7ldn77ppz4ngf56wslhsj2c6flcyvns4v"))))
29ac89a6
JB
106 (build-system gnu-build-system)
107 (inputs
03df9e5a 108 `(("libusb" ,libusb-0.1))) ; doesn't work with libusb-compat
29ac89a6
JB
109 (arguments
110 '(#:phases
111 (modify-phases %standard-phases
03df9e5a
TGR
112 (delete 'configure)) ; no configure
113 #:make-flags
114 (list "CC=gcc"
115 "BUILD_DATE=GNU Guix"
116 (string-append "PREFIX=" %output))
117 #:tests? #f)) ; no 'check' target
29ac89a6
JB
118 (home-page "https://github.com/pali/0xFFFF")
119 (synopsis "Flash FIASCO images on Maemo devices")
120 (description
121 "The Open Free Fiasco Firmware Flasher (0xFFFF) is a flashing tool
122for FIASCO images. It supports generating, unpacking, editing and
123flashing of FIASCO images for Maemo devices. Use it with care. It can
124brick your device.")
f282aa53 125 (license license:gpl3+)))
29ac89a6 126
4acd5c0f
MR
127(define-public avrdude
128 (package
129 (name "avrdude")
3b31d985 130 (version "6.3")
4acd5c0f
MR
131 (source
132 (origin
133 (method url-fetch)
134 (uri (string-append "mirror://savannah/avrdude/avrdude-"
135 version ".tar.gz"))
136 (sha256
3b31d985 137 (base32 "15m1w1qad3dj7r8n5ng1qqcaiyx1gyd6hnc3p2apgjllccdp77qg"))))
4acd5c0f
MR
138 (build-system gnu-build-system)
139 (inputs
140 `(("libelf" ,libelf)
b0069a67 141 ("libusb" ,libusb-compat)
4acd5c0f
MR
142 ("libftdi" ,libftdi)))
143 (native-inputs
144 `(("bison" ,bison)
145 ("flex" ,flex)))
340978d7 146 (home-page "https://www.nongnu.org/avrdude/")
4acd5c0f
MR
147 (synopsis "AVR downloader and uploader")
148 (description
149 "AVRDUDE is a utility to download/upload/manipulate the ROM and
a1942cf0
TGR
150EEPROM contents of AVR microcontrollers using the @acronym{ISP, in-system
151programming} technique.")
f282aa53 152 (license license:gpl2+)))
2a9a4fb8
MR
153
154(define-public dfu-programmer
155 (package
156 (name "dfu-programmer")
702675c5 157 (version "0.7.2")
2a9a4fb8
MR
158 (source
159 (origin
160 (method url-fetch)
de67e922
LF
161 (uri (string-append "mirror://sourceforge/dfu-programmer/dfu-programmer/"
162 version "/dfu-programmer-" version ".tar.gz"))
2a9a4fb8
MR
163 (sha256
164 (base32
702675c5 165 "15gr99y1z9vbvhrkd25zqhnzhg6zjmaam3vfjzf2mazd39mx7d0x"))
fc1adab1 166 (patches (search-patches "dfu-programmer-fix-libusb.patch"))))
2a9a4fb8 167 (build-system gnu-build-system)
702675c5
DT
168 (native-inputs
169 `(("pkg-config" ,pkg-config)))
2a9a4fb8
MR
170 (inputs
171 `(("libusb" ,libusb)))
172 (home-page "http://dfu-programmer.github.io/")
173 (synopsis "Device firmware update programmer for Atmel chips")
174 (description
7c125ce0
AK
175 "Dfu-programmer is a multi-platform command-line programmer for
176Atmel (8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting
177ISP.")
f282aa53 178 (license license:gpl2+)))
af3166c3
HG
179
180(define-public dfu-util
181 (package
182 (name "dfu-util")
183 (version "0.9")
184 (source (origin
185 (method url-fetch)
186 (uri (string-append
187 "http://dfu-util.sourceforge.net/releases/dfu-util-"
188 version ".tar.gz"))
189 (sha256
190 (base32
191 "0czq73m92ngf30asdzrfkzraag95hlrr74imbanqq25kdim8qhin"))))
192 (build-system gnu-build-system)
193 (inputs
194 `(("libusb" ,libusb)))
195 (native-inputs
196 `(("pkg-config" ,pkg-config)))
197 (synopsis "Host side of the USB Device Firmware Upgrade (DFU) protocol")
198 (description
199 "The DFU (Universal Serial Bus Device Firmware Upgrade) protocol is
200intended to download and upload firmware to devices connected over USB. It
201ranges from small devices like micro-controller boards up to mobile phones.
202With dfu-util you are able to download firmware to your device or upload
203firmware from it.")
204 (home-page "http://dfu-util.sourceforge.net/")
f282aa53 205 (license license:gpl2+)))
d3a858cb
HG
206
207(define-public teensy-loader-cli
208 ;; The repo does not tag versions nor does it use releases, but a commit
209 ;; message says "Importing 2.1", while the sourcce still says "2.0". So pin
210 ;; to a fixed commit.
211 (let ((commit "f289b7a2e5627464044249f0e5742830e052e360"))
212 (package
213 (name "teensy-loader-cli")
214 (version (string-append "2.1-1." (string-take commit 7)))
215 (source
216 (origin
217 (method url-fetch)
218 (uri (string-append "https://github.com/PaulStoffregen/"
219 "teensy_loader_cli/archive/" commit ".tar.gz"))
220 (sha256 (base32 "17wqc2q4fa473cy7f5m2yiyb9nq0qw7xal2kzrxzaikgm9rabsw8"))
221 (file-name (string-append "teensy-loader-cli-" version ".tar.gz" ))
222 (modules '((guix build utils)))
223 (snippet
224 `(begin
225 ;; Remove example flash files and teensy rebooter flash binaries.
226 (for-each delete-file (find-files "." "\\.(elf|hex)$"))
227 ;; Fix the version
228 (substitute* "teensy_loader_cli.c"
229 (("Teensy Loader, Command Line, Version 2.0\\\\n")
230 (string-append "Teensy Loader, Command Line, " ,version "\\n")))
231 #t))
232 (patches (search-patches "teensy-loader-cli-help.patch"))))
233 (build-system gnu-build-system)
234 (arguments
235 '(#:tests? #f ;; Makefile has no test target
236 #:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
237 #:phases
238 (modify-phases %standard-phases
239 (delete 'configure)
240 (replace 'install
241 (lambda* (#:key outputs #:allow-other-keys)
242 (let* ((out (assoc-ref outputs "out"))
243 (bin (string-append out "/bin")))
244 (install-file "teensy_loader_cli" bin)
245 #t))))))
246 (inputs
247 `(("libusb-compat" ,libusb-compat)))
248 (synopsis "Command line firmware uploader for Teensy development boards")
249 (description
250 "The Teensy loader program communicates with your Teensy board when the
251HalfKay bootloader is running, so you can upload new programs and run them.
252
253You need to add the udev rules to make the Teensy update available for
254non-root users.")
255 (home-page "https://www.pjrc.com/teensy/loader_cli.html")
f282aa53 256 (license license:gpl3))))
7526edb9
EF
257
258(define-public rkflashtool
259 (let ((commit "094bd6410cb016e487e2ccb1050c59eeac2e6dd1")
260 (revision "1"))
261 (package
262 (name "rkflashtool")
263 (version (string-append "0.0.0-" revision "." (string-take commit 7)))
264 (source
265 (origin
266 (method git-fetch)
267 (uri (git-reference
268 (url "https://github.com/linux-rockchip/rkflashtool.git")
269 (commit commit)))
270 (file-name (string-append name "-" version "-checkout"))
271 (sha256
272 (base32
273 "1zkd8zxir3rfg3sy9r20bcnxclnplryn583gqpcr3iad0k3xbah7"))))
274 (build-system gnu-build-system)
275 (arguments
276 '(#:phases
277 (modify-phases %standard-phases
278 (delete 'configure)) ; no configure
279 #:make-flags (list (string-append "PREFIX=" %output))
280 #:tests? #f)) ; no tests
281 (native-inputs
282 `(("pkg-config" ,pkg-config)))
283 (inputs
284 `(("libusb" ,libusb)))
285 (home-page "https://github.com/linux-rockchip/rkflashtool")
286 (synopsis "Tools for flashing Rockchip devices")
287 (description "Allows flashing of Rockchip based embedded linux devices.
288The list of currently supported devices is: RK2818, RK2918, RK2928, RK3026,
289RK3036, RK3066, RK312X, RK3168, RK3188, RK3288, RK3368.")
f282aa53
JL
290 (license license:bsd-2))))
291
292(define-public heimdall
293 (package
294 (name "heimdall")
295 (version "1.4.2")
296 (source (origin
297 (method url-fetch)
298 (uri (string-append "https://github.com/Benjamin-Dobell/Heimdall"
299 "/archive/v" version ".tar.gz"))
300 (file-name (string-append name "-" version ".tar.gz"))
301 (sha256
302 (base32
303 "1y7gwg3lipyp2zcysm2vid1qg5nwin9bxbvgzs28lz2rya4fz6sq"))))
304 (build-system cmake-build-system)
305 (arguments
3def739d
TGR
306 `(#:build-type "Release"
307 #:tests? #f ; no tests
f282aa53
JL
308 #:phases
309 (modify-phases %standard-phases
310 (add-after 'unpack 'patch-invocations
311 (lambda* (#:key outputs #:allow-other-keys)
312 (substitute* '("heimdall-frontend/source/aboutform.cpp"
313 "heimdall-frontend/source/mainwindow.cpp")
314 (("start[(]\"heimdall\"")
315 (string-append "start(\"" (assoc-ref outputs "out")
316 "/bin/heimdall\"")))
317 #t))
318 (replace 'install
319 (lambda* (#:key outputs #:allow-other-keys)
320 (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
321 (lib (string-append (assoc-ref outputs "out") "/lib")))
322 (install-file "bin/heimdall" bin)
323 (install-file "bin/heimdall-frontend" bin)
324 (install-file "libpit/libpit.a" lib)
325 #t))))))
326 (inputs
327 `(("libusb" ,libusb)
328 ("qtbase" ,qtbase)
329 ("zlib" ,zlib)))
330 (home-page "http://glassechidna.com.au/heimdall/")
331 (synopsis "Flash firmware onto Samsung mobile devices")
332 (description "@command{heimdall} is a tool suite used to flash firmware (aka
333ROMs) onto Samsung mobile devices. Heimdall connects to a mobile device over
334USB and interacts with low-level software running on the device, known as Loke.
335Loke and Heimdall communicate via the custom Samsung-developed protocol typically
336referred to as the \"Odin 3 protocol\".")
337 (license license:expat)))
501e1847
DM
338
339(define-public ifdtool
340 (package
341 (name "ifdtool")
7d4cbd99 342 (version "4.9")
501e1847
DM
343 (source (origin
344 (method git-fetch)
345 (uri (git-reference
7d4cbd99 346 (url "https://github.com/coreboot/coreboot.git")
501e1847
DM
347 (commit version)))
348 (file-name (git-file-name name version))
349 (sha256
350 (base32
7d4cbd99 351 "0jidj29jh6p65d17k304wlzhxvp4p3c2namgcdwg2sxq8jfr0zlm"))))
501e1847
DM
352 (build-system gnu-build-system)
353 (arguments
354 `(#:make-flags
355 (list "CC=gcc"
356 "INSTALL=install"
357 (string-append "PREFIX=" (assoc-ref %outputs "out")))
358 #:phases
359 (modify-phases %standard-phases
7d4cbd99
TGR
360 (add-after 'unpack 'chdir
361 (lambda _
362 (chdir "util/ifdtool")
363 #t))
364 (delete 'configure)) ; no configure script
365 #:tests? #f)) ; no test suite
501e1847
DM
366 (home-page "https://github.com/corna/me_cleaner/")
367 (synopsis "Intel Firmware Descriptor dumper")
ec0f3d0a 368 (description "This package provides @command{ifdtool}, a program to
501e1847
DM
369dump Intel Firmware Descriptor data of an image file.")
370 (license license:gpl2)))
9721c0b6
DM
371
372(define-public intelmetool
373 (package
374 (name "intelmetool")
375 (version "4.7")
376 (source (origin
377 (method git-fetch)
378 (uri (git-reference
379 (url "https://review.coreboot.org/p/coreboot")
380 (commit version)))
381 (file-name (git-file-name name version))
382 (sha256
383 (base32
384 "0nw555i0fm5kljha9h47bk70ykbwv8ddfk6qhz6kfqb79vzhy4h2"))))
385 (build-system gnu-build-system)
386 (inputs
387 `(("pciutils" ,pciutils)
388 ("zlib" ,zlib)))
389 (arguments
390 `(#:make-flags
391 (list "CC=gcc"
392 "INSTALL=install"
393 (string-append "PREFIX=" (assoc-ref %outputs "out")))
394 #:phases
395 (modify-phases %standard-phases
396 (add-after 'unpack 'chdir
397 (lambda _
398 (chdir "util/intelmetool")
399 #t))
400 (delete 'configure)
401 (delete 'check))))
402 (home-page "https://github.com/zamaudio/intelmetool")
8e60743d 403 (synopsis "Intel Management Engine tools")
9721c0b6
DM
404 (description "This package provides tools for working with Intel
405Management Engine (ME). You need to @code{sudo rmmod mei_me} and
406@code{sudo rmmod mei} before using this tool. Also pass
407@code{iomem=relaxed} to the Linux kernel command line.")
ca1499ce
LC
408 (license license:gpl2)
409
410 ;; This is obviously an Intel thing, plus it requires <cpuid.h>.
411 (supported-systems '("x86_64-linux" "i686-linux"))))
0297a160
DM
412
413(define-public me-cleaner
414 (package
415 (name "me-cleaner")
416 (version "1.1")
417 (source (origin
418 (method url-fetch)
419 (uri (string-append "https://github.com/corna/me_cleaner/"
420 "archive/v" version ".tar.gz"))
421 (sha256
422 (base32
423 "1pgwdqy0jly80nhxmlmyibs343497yjzs6dwfbkcw0l1gjm8i5hw"))
424 (file-name (string-append name "-" version ".tar.gz"))))
425 (build-system python-build-system)
426 (arguments
427 `(#:phases
428 (modify-phases %standard-phases
ca1499ce 429 (add-after 'unpack 'create-setup.py
0297a160
DM
430 (lambda _
431 (call-with-output-file "setup.py"
432 (lambda (port)
433 (format port "\
434from setuptools import setup
435setup(name='me_cleaner', version='~a', scripts=['me_cleaner.py'])
436" ,version)))
437 #t)))))
438 (home-page "https://github.com/corna/me_cleaner")
439 (synopsis "Intel ME cleaner")
440 (description "This package provides tools for disabling Intel
441ME as far as possible (it only edits ME firmware image files).")
ca1499ce
LC
442 (license license:gpl3+)
443
444 ;; This is an Intel thing.
445 (supported-systems '("x86_64-linux" "i686-linux"))))
347bc151
DM
446
447(define-public uefitool
448 (package
449 (name "uefitool")
450 (version "0.22.4")
451 (source (origin
452 (method url-fetch)
453 (uri (string-append "https://github.com/LongSoft/UEFITool/archive/"
454 version ".tar.gz"))
455 (sha256
456 (base32
457 "05jmhv7jpq08kqbd1477y1lgyjvcic3njrd0bmzdy7v7b7lnhl82"))
458 (file-name (string-append name "-" version ".tar.gz"))))
459 (build-system gnu-build-system)
460 (arguments
461 `(#:phases
462 (modify-phases %standard-phases
463 (replace 'configure
464 (lambda _
465 (invoke "qmake" "-makefile")))
466 (replace 'install
467 (lambda* (#:key outputs #:allow-other-keys)
468 (install-file "UEFITool" (string-append (assoc-ref outputs "out")
469 "/bin"))
470 #t)))))
471 (inputs
472 `(("qtbase" ,qtbase)))
473 (home-page "https://github.com/LongSoft/UEFITool/")
474 (synopsis "UEFI image editor")
475 (description "@code{uefitool} is a graphical image file editor for
476Unifinished Extensible Firmware Interface (UEFI) images.")
477 (license license:bsd-2)))