diff options
author | Bjørn Mork <bjorn@mork.no> | 2017-02-27 16:59:01 +0100 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2017-02-27 16:59:01 +0100 |
commit | f4a106c91540d2e07236c86b8324588bad76a019 (patch) | |
tree | 68bf337e8e921c33db0be80b63be5782e00f2d2f | |
parent | db820e8f8baedc01c5be8c3a1affa94b92ce2562 (diff) |
mtdforcew
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r-- | mtdforcew/Makefile | 36 | ||||
-rw-r--r-- | mtdforcew/src/mtdforcew.c | 42 |
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"); |