diff --git a/package/utils/fitblk/Makefile b/package/utils/fitblk/Makefile new file mode 100644 index 00000000000..cb9e7ebb400 --- /dev/null +++ b/package/utils/fitblk/Makefile @@ -0,0 +1,41 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fitblk +PKG_RELEASE:=1 +PKG_LICENSE:=GPL-2.0-only +PKG_MAINTAINER:=Daniel Golle + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +PKG_FLAGS:=nonshared + +include $(INCLUDE_DIR)/package.mk + +define Package/fitblk + HIDDEN:=1 + SECTION:=base + CATEGORY:=Base system + TITLE:=fitblk firmware release tool + DEPENDS:=@LINUX_6_1 +endef + +define Package/fitblk/description +Release uImage.FIT block devices using ioctl. +endef + +define Build/Configure +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS) -Wall -Werror" \ + LDFLAGS="$(TARGET_LDFLAGS)" +endef + +define Package/fitblk/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/fitblk $(1)/usr/sbin/ +endef + +$(eval $(call BuildPackage,fitblk)) diff --git a/package/utils/fitblk/src/Makefile b/package/utils/fitblk/src/Makefile new file mode 100644 index 00000000000..064764c17d2 --- /dev/null +++ b/package/utils/fitblk/src/Makefile @@ -0,0 +1,7 @@ +all: fitblk + +fitblk: + $(CC) $(CFLAGS) -o $@ fitblk.c $(LDFLAGS) + +clean: + rm -f fitblk diff --git a/package/utils/fitblk/src/fitblk.c b/package/utils/fitblk/src/fitblk.c new file mode 100644 index 00000000000..059ba6098ce --- /dev/null +++ b/package/utils/fitblk/src/fitblk.c @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include +#include +#include +#include +#include +#include + +static int fitblk_release(char *device) +{ + int fd, ret; + + fd = open(device, O_RDONLY); + if (fd == -1) + return errno; + + ret = ioctl(fd, FITBLK_RELEASE, NULL); + close(fd); + + if (ret == -1) + return errno; + + return 0; +} + +int main(int argc, char *argp[]) +{ + int ret; + + if (argc != 2) { + fprintf(stderr, "Release uImage.FIT sub-image block device\n"); + fprintf(stderr, "Syntax: %s /dev/fitXXX\n", argp[0]); + return -EINVAL; + } + + ret = fitblk_release(argp[1]); + if (ret) + fprintf(stderr, "fitblk: error releasing %s: %s\n", argp[1], + strerror(ret)); + else + fprintf(stderr, "fitblk: %s released\n", argp[1]); + + return ret; +}