summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2017-02-27 16:59:01 +0100
committerBjørn Mork <bjorn@mork.no>2017-02-27 16:59:01 +0100
commitf4a106c91540d2e07236c86b8324588bad76a019 (patch)
tree68bf337e8e921c33db0be80b63be5782e00f2d2f
parentdb820e8f8baedc01c5be8c3a1affa94b92ce2562 (diff)
mtdforcew
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r--mtdforcew/Makefile36
-rw-r--r--mtdforcew/src/mtdforcew.c42
2 files changed, 78 insertions, 0 deletions
diff --git a/mtdforcew/Makefile b/mtdforcew/Makefile
new file mode 100644
index 0000000..09fe7f3
--- /dev/null
+++ b/mtdforcew/Makefile
@@ -0,0 +1,36 @@
+#
+# Copyright (C) 2017 Bjørn Mork <bjorn@mork.no>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mtdforcew
+PKG_VERSION:=0.01
+PKG_RELEASE:=1
+PKG_LICENSE:=GPL-2.0
+
+PKG_MAINTAINER:=Bjørn Mork <bjorn@mork.no>
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/kernel.mk
+include $(INCLUDE_DIR)/package.mk
+
+define KernelPackage/mtdforcew
+ TITLE:=MTD read-only fix
+ FILES:=$(PKG_BUILD_DIR)/mtdforcew.ko
+ AUTOLOAD:=$(call AutoLoad,50,mtdforcew)
+endef
+
+define Build/Compile
+ +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
+ ARCH="$(LINUX_KARCH)" \
+ CROSS_COMPILE="$(TARGET_CROSS)" \
+ SUBDIRS="$(PKG_BUILD_DIR)" \
+ NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
+ mtdforcew.ko
+endef
+
+$(eval $(call KernelPackage,mtdforcew))
diff --git a/mtdforcew/src/mtdforcew.c b/mtdforcew/src/mtdforcew.c
new file mode 100644
index 0000000..774a440
--- /dev/null
+++ b/mtdforcew/src/mtdforcew.c
@@ -0,0 +1,42 @@
+#include <linux/module.h>
+#include <linux/mtd/mtd.h>
+
+static char *part;
+module_param(part, charp, 0400);
+MODULE_PARM_DESC(part, "MTD partition to change");
+
+
+/*
+ * Copyright 2017 Bjørn Mork <bjorn@mork.no>
+ *
+ * stole the idea from
+ * http://electronics.stackexchange.com/questions/67955/arm-linux-and-uboot-can-i-make-a-read-only-mtd-writable
+ */
+
+static int __init mtd_force_rw_init(void)
+{
+ struct mtd_info *mtd;
+
+ printk(KERN_ALERT "Hello World!\n");
+ if (!part)
+ return -ENODEV;
+
+ mtd = get_mtd_device_nm(part);
+ if (IS_ERR(mtd))
+ return -ENODEV;
+
+ printk(KERN_ALERT "mtd part '%s' flags: %#x\n", part, mtd->flags);
+ put_mtd_device(mtd);
+ return 0;
+}
+
+static void __exit mtd_force_rw_exit(void)
+{
+ printk(KERN_ALERT "Goodbye cruel world!\n");
+}
+
+module_init(mtd_force_rw_init);
+module_exit(mtd_force_rw_exit);
+
+MODULE_DESCRIPTION("MTD read-only fix");
+MODULE_LICENSE("GPL");