mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-28 09:01:55 +02:00
smdk-dltool: update to latest upstream version
This fixes the missing libusb SLOT depend and updates it to libusb-1.0. BUG=chromium-os:25695 TEST=`emerge smdk-dltool` works and links against libusb-1.0 TEST=send to dianders and he said it ran fine Change-Id: I65fc2b6385d4b52443cd40e431e1467472f6bd3d Reviewed-on: https://gerrit.chromium.org/gerrit/15090 Reviewed-by: Doug Anderson <dianders@chromium.org> Tested-by: Doug Anderson <dianders@chromium.org> Commit-Ready: Mike Frysinger <vapier@chromium.org> Tested-by: Mike Frysinger <vapier@chromium.org>
This commit is contained in:
parent
0be4c0b1e9
commit
3a2a36859c
@ -2,7 +2,7 @@ respect env build settings
|
||||
|
||||
--- a/releases/smdk-tools-v0.20/dltool/Makefile
|
||||
+++ b/releases/smdk-tools-v0.20/dltool/Makefile
|
||||
@@ -7,8 +7,11 @@
|
||||
@@ -7,8 +7,13 @@
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
@ -10,7 +10,9 @@ respect env build settings
|
||||
- $(CC) -O2 -Wall -g -lusb -o smdk-usbdl dltool.c
|
||||
+CFLAGS ?= -O2 -g
|
||||
+CFLAGS += -Wall
|
||||
+LDLIBS = -lusb
|
||||
+PKG_CONFIG ?= pkg-config
|
||||
+CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libusb)
|
||||
+LDLIBS = $(shell $(PKG_CONFIG) --libs libusb)
|
||||
+
|
||||
+all: dltool
|
||||
|
||||
|
@ -0,0 +1,326 @@
|
||||
migrate to libusb-1 by me (Mike Frysinger)
|
||||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -10,8 +10,8 @@
|
||||
CFLAGS ?= -O2 -g
|
||||
CFLAGS += -Wall
|
||||
PKG_CONFIG ?= pkg-config
|
||||
-CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libusb)
|
||||
-LDLIBS = $(shell $(PKG_CONFIG) --libs libusb)
|
||||
+CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libusb-1.0)
|
||||
+LDLIBS = $(shell $(PKG_CONFIG) --libs libusb-1.0)
|
||||
|
||||
all: dltool
|
||||
|
||||
--- a/dltool.c
|
||||
+++ b/dltool.c
|
||||
@@ -13,9 +13,11 @@
|
||||
#include <stdio.h>
|
||||
#include <getopt.h>
|
||||
#include <fcntl.h>
|
||||
+#include <errno.h>
|
||||
+#include <unistd.h>
|
||||
|
||||
|
||||
-#include <usb.h>
|
||||
+#include <libusb.h>
|
||||
|
||||
unsigned int debug = 0;
|
||||
unsigned long dl_addr = 0x30000000L;
|
||||
@@ -23,12 +25,22 @@ unsigned long dl_size = 0L;
|
||||
unsigned char *dl_data = NULL;
|
||||
|
||||
char *dl_file = "download.dat";
|
||||
-char *dl_udev = NULL;
|
||||
-char *dl_ubus = NULL;
|
||||
+libusb_context *ctx = NULL;
|
||||
+libusb_device_handle *devh = NULL;
|
||||
|
||||
int ep_out = 0;
|
||||
|
||||
#define DBG(x) if (debug) { printf x; }
|
||||
+#define err(fmt, args...) \
|
||||
+ do { \
|
||||
+ if (devh) \
|
||||
+ libusb_close(devh); \
|
||||
+ if (ctx) \
|
||||
+ libusb_exit(ctx); \
|
||||
+ fprintf(stderr, "dltool: " fmt "\n", ## args); \
|
||||
+ exit(1); \
|
||||
+ } while (0)
|
||||
+#define errp(fmt, args...) err(fmt ": %s", ## args, strerror(errno))
|
||||
|
||||
void write_u32(unsigned char *dp, unsigned long val)
|
||||
{
|
||||
@@ -108,25 +120,30 @@ void calc_cksum(unsigned char *data, ssize_t len)
|
||||
cp[1] = cksum >> 8;
|
||||
}
|
||||
|
||||
-int verify_device(struct usb_device *dev)
|
||||
+int verify_device(libusb_device *dev)
|
||||
{
|
||||
+ struct libusb_device_descriptor desc;
|
||||
+
|
||||
+ if (libusb_get_device_descriptor(dev, &desc))
|
||||
+ return 0;
|
||||
+
|
||||
DBG(("dev %p: configurations %d\n",
|
||||
- dev, dev->descriptor.bNumConfigurations));
|
||||
+ dev, desc.bNumConfigurations));
|
||||
|
||||
- if (dev->descriptor.bNumConfigurations != 1)
|
||||
+ if (desc.bNumConfigurations != 1)
|
||||
return 0;
|
||||
|
||||
- DBG(("\t=> bLength %d\n", dev->descriptor.bLength));
|
||||
- DBG(("\t=> bType %d\n", dev->descriptor.bDescriptorType));
|
||||
- DBG(("\t=> bcdUSB %x\n", dev->descriptor.bcdUSB));
|
||||
- DBG(("\t=> idVendor %x\n", dev->descriptor.idVendor));
|
||||
- DBG(("\t=> idProduct %x\n", dev->descriptor.idProduct));
|
||||
+ DBG(("\t=> bLength %d\n", desc.bLength));
|
||||
+ DBG(("\t=> bType %d\n", desc.bDescriptorType));
|
||||
+ DBG(("\t=> bcdUSB %x\n", desc.bcdUSB));
|
||||
+ DBG(("\t=> idVendor %x\n", desc.idVendor));
|
||||
+ DBG(("\t=> idProduct %x\n", desc.idProduct));
|
||||
|
||||
- if (dev->descriptor.idVendor == 0x5345 && dev->descriptor.idProduct == 0x1234) {
|
||||
+ if (desc.idVendor == 0x5345 && desc.idProduct == 0x1234) {
|
||||
ep_out = 3;
|
||||
return 1;
|
||||
}
|
||||
- else if(dev->descriptor.idVendor == 0x4e8 && dev->descriptor.idProduct == 0x1234){
|
||||
+ else if(desc.idVendor == 0x4e8 && desc.idProduct == 0x1234){
|
||||
printf("S3C64XX Detected!\n");
|
||||
ep_out = 2;
|
||||
return 1;
|
||||
@@ -173,6 +190,12 @@ struct option long_opts[] = {
|
||||
.val = 'x',
|
||||
},
|
||||
{
|
||||
+ .name = "help",
|
||||
+ .has_arg = 0,
|
||||
+ .flag = NULL,
|
||||
+ .val = 'h',
|
||||
+ },
|
||||
+ {
|
||||
.name = NULL
|
||||
}
|
||||
};
|
||||
@@ -181,12 +198,14 @@ int flg_show = 0;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
- struct usb_bus *bus, *busp;
|
||||
- struct usb_device *result = NULL;
|
||||
- struct usb_device *found = NULL;
|
||||
+ ssize_t num_devs, i;
|
||||
+ libusb_device **list;
|
||||
+ libusb_device *found;
|
||||
+ int dl_ubus = -1;
|
||||
+ int dl_udev = -1;
|
||||
+ uint8_t bus_num, dev_num;
|
||||
unsigned long fsize;
|
||||
- usb_dev_handle *devh;
|
||||
- int ret;
|
||||
+ int ret, transferred;
|
||||
|
||||
printf("SMDK42XX,S3C64XX USB Download Tool\n");
|
||||
printf("Version 0.20 (c) 2004,2005,2006"
|
||||
@@ -197,7 +216,7 @@ int main(int argc, char **argv)
|
||||
int index = 0;
|
||||
int c;
|
||||
|
||||
- c = getopt_long(argc, argv, "a:b:d:f:s", long_opts, &index);
|
||||
+ c = getopt_long(argc, argv, "a:b:d:f:shx", long_opts, &index);
|
||||
|
||||
DBG(("option index %d\n",c ));
|
||||
|
||||
@@ -218,117 +237,116 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
- dl_ubus = optarg;
|
||||
+ dl_ubus = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
- dl_udev = optarg;
|
||||
+ dl_udev = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
debug = 1;
|
||||
+ break;
|
||||
+
|
||||
+ case 'h':
|
||||
+ puts(
|
||||
+ "Usage: dltool [options]\n"
|
||||
+ "\n"
|
||||
+ "-a <download addr>\n"
|
||||
+ "-b <bus #>\n"
|
||||
+ "-d <dev #>\n"
|
||||
+ "-f <file>\n"
|
||||
+ "-s Show found devices\n"
|
||||
+ "-x Enable debug\n"
|
||||
+ );
|
||||
+ return 0;
|
||||
}
|
||||
}
|
||||
|
||||
- usb_init();
|
||||
- usb_find_busses();
|
||||
- usb_find_devices();
|
||||
-
|
||||
- bus = usb_get_busses();
|
||||
-
|
||||
- DBG(("usb_get_busses: %p\n", bus));
|
||||
-
|
||||
- for (busp = bus; busp != NULL; busp = busp->next) {
|
||||
- struct usb_device *dev;
|
||||
-
|
||||
- DBG(("bus %p: dirname %s\n", busp, busp->dirname));
|
||||
-
|
||||
- if (dl_ubus) {
|
||||
- if (strcmp(busp->dirname, dl_ubus) != 0)
|
||||
- continue;
|
||||
+ ret = libusb_init(&ctx);
|
||||
+ if (ret)
|
||||
+ errp("could not initialize usb stack");
|
||||
+
|
||||
+ bus_num = dev_num = 0;
|
||||
+ found = NULL;
|
||||
+ num_devs = libusb_get_device_list(ctx, &list);
|
||||
+ for (i = 0; i < num_devs; ++i) {
|
||||
+ libusb_device *dev = list[i];
|
||||
+ bus_num = libusb_get_bus_number(dev);
|
||||
+ dev_num = libusb_get_device_address(dev);
|
||||
+
|
||||
+ DBG(("bus %u; dev %u (%p)\n", bus_num, dev_num, dev));
|
||||
+
|
||||
+ if (dl_ubus >= 0 && bus_num != dl_ubus)
|
||||
+ continue;
|
||||
+
|
||||
+ if (!verify_device(dev))
|
||||
+ continue;
|
||||
+
|
||||
+ if (flg_show) {
|
||||
+ printf("bus %u: device %u\n", bus_num, dev_num);
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- for (dev = busp->devices; dev != NULL; dev = dev->next) {
|
||||
- DBG(("dev %p filename %s\n", dev, dev->filename));
|
||||
+ if (dl_udev >= 0 && dev_num != dl_udev)
|
||||
+ continue;
|
||||
|
||||
- if (!verify_device(dev))
|
||||
- continue;
|
||||
-
|
||||
- if (flg_show) {
|
||||
- printf("bus %s: device %s\n",
|
||||
- busp->dirname, dev->filename);
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- found = dev;
|
||||
-
|
||||
- if (dl_udev) {
|
||||
- if (strcmp(dev->filename, dl_udev) == 0) {
|
||||
- result = dev;
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (result != NULL)
|
||||
- break;
|
||||
+ found = dev;
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (flg_show)
|
||||
return 0;
|
||||
|
||||
- DBG(("device %p, found %p\n", result, found));
|
||||
+ DBG(("found %p\n", found));
|
||||
|
||||
- if (result == NULL && found != NULL)
|
||||
- result = found;
|
||||
-
|
||||
- if (result == NULL) {
|
||||
- fprintf(stderr, "failed to find device\n");
|
||||
- return 1;
|
||||
- }
|
||||
+ if (found == NULL)
|
||||
+ err("failed to find device\n");
|
||||
|
||||
- printf("=> found device: bus %s, dev %s\n",
|
||||
- result->bus->dirname, result->filename);
|
||||
+ printf("=> found device: bus %u, dev %u\n",
|
||||
+ bus_num, dev_num);
|
||||
|
||||
dl_data = load_file(dl_file, &dl_size, &fsize);
|
||||
- if (dl_data == NULL) {
|
||||
- printf("failed to load %s\n", dl_file);
|
||||
- return 1;
|
||||
- }
|
||||
+ if (dl_data == NULL)
|
||||
+ errp("failed to load %s", dl_file);
|
||||
|
||||
printf("=> loaded %ld bytes from %s\n", fsize, dl_file);
|
||||
|
||||
- devh = usb_open(result);
|
||||
- if (devh == NULL) {
|
||||
- perror("usb_open");
|
||||
- return 1;
|
||||
- }
|
||||
+ ret = libusb_open(found, &devh);
|
||||
+ if (ret == 0) {
|
||||
+ uint8_t configuration;
|
||||
+ struct libusb_config_descriptor *config;
|
||||
+ libusb_get_active_config_descriptor(found, &config);
|
||||
+ configuration = config->bConfigurationValue;
|
||||
+ libusb_free_config_descriptor(config);
|
||||
+ libusb_set_configuration(devh, configuration);
|
||||
+ } else
|
||||
+ errp("libusb_open");
|
||||
|
||||
DBG(("claim interface\n"));
|
||||
|
||||
- if (usb_claim_interface(devh, 0) < 0) {
|
||||
- perror("usb_claim_interface");
|
||||
- usb_close(devh);
|
||||
- return 1;
|
||||
- }
|
||||
+ ret = libusb_claim_interface(devh, 0);
|
||||
+ if (ret)
|
||||
+ errp("libusb_claim_interface");
|
||||
|
||||
printf("=> Downloading %ld bytes to 0x%08lx\n", dl_size, dl_addr);
|
||||
|
||||
write_header(dl_data, dl_addr, dl_size);
|
||||
calc_cksum(dl_data, dl_size);
|
||||
|
||||
- //ret = usb_bulk_write(devh, 3, (void *)dl_data, dl_size, 5*1000*1000);
|
||||
- ret = usb_bulk_write(devh, ep_out, (void *)dl_data, dl_size, 5*1000*1000);
|
||||
+ //ret = libusb_bulk_transfer(devh, 3, dl_data, dl_size, &transferred, 5*1000*1000);
|
||||
+ ret = libusb_bulk_transfer(devh, ep_out, dl_data, dl_size, &transferred, 5*1000*1000);
|
||||
printf("=> usb_bulk_write() returned %d\n", ret);
|
||||
|
||||
- if (ret != dl_size) {
|
||||
- printf("failed to write %ld bytes\n", dl_size);
|
||||
+ if (ret || transferred != dl_size) {
|
||||
+ printf("failed to write %ld bytes (wrote %d)\n", dl_size, transferred);
|
||||
}
|
||||
|
||||
free(dl_data);
|
||||
|
||||
- usb_release_interface(devh, 0);
|
||||
- usb_close(devh);
|
||||
+ libusb_release_interface(devh, 0);
|
||||
+ libusb_close(devh);
|
||||
+ libusb_exit(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
# Copyright 1999-2012 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/dev-embedded/smdk-dltool/smdk-dltool-0.20.ebuild,v 1.1 2012/01/20 22:44:17 vapier Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/dev-embedded/smdk-dltool/smdk-dltool-0.20-r1.ebuild,v 1.1 2012/01/30 23:35:37 vapier Exp $
|
||||
|
||||
EAPI="4"
|
||||
|
||||
@ -13,10 +13,10 @@ SRC_URI="http://www.fluff.org/ben/smdk/tools/downloads/smdk-tools-v${PV}.tar.gz"
|
||||
# Email sent to author on 2012-01-18 querying about license
|
||||
LICENSE="as-is"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
KEYWORDS="amd64 x86"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="dev-libs/libusb"
|
||||
RDEPEND="virtual/libusb:1"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
S=${WORKDIR}/releases/smdk-tools-v${PV}/dltool
|
||||
@ -24,7 +24,8 @@ S=${WORKDIR}/releases/smdk-tools-v${PV}/dltool
|
||||
src_prepare() {
|
||||
epatch "${FILESDIR}"/${P}-add-S3C64xx-support.patch
|
||||
epatch "${FILESDIR}"/${P}-build.patch
|
||||
tc-export CC
|
||||
epatch "${FILESDIR}"/${P}-libusb-1.0.patch
|
||||
tc-export CC PKG_CONFIG
|
||||
}
|
||||
|
||||
src_install() {
|
Loading…
x
Reference in New Issue
Block a user