summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Williams <mike.williams@codethink.co.uk>2015-05-28 08:40:46 +0000
committerBaserock Gerrit <gerrit@baserock.org>2015-06-01 10:53:14 +0000
commit33c81a9cf0ddcc83cd173943d46290152d45416c (patch)
treebdfbcb5e9ac01f0efea9a87aa5072a66b8df8ae3
parent64406608de0dfe2975e5fd1696a9dcc2535e02e2 (diff)
downloaddefinitions-33c81a9cf0ddcc83cd173943d46290152d45416c.tar.gz
Adds jffs2 write extension
This adds a write extension that allows for a jffs2 root filesystem image to be created. Change-Id: If888375a87ffad62c8e79aba20ab2f112ac4214b
-rw-r--r--jffs2.write64
-rw-r--r--jffs2.write.help28
2 files changed, 92 insertions, 0 deletions
diff --git a/jffs2.write b/jffs2.write
new file mode 100644
index 00000000..46b69a53
--- /dev/null
+++ b/jffs2.write
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#-*- coding: utf-8 -*-
+# Copyright © 2015 Codethink Limited
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+'''A Morph deployment write extension for creating images with jffs2
+ as the root filesystem.'''
+
+
+import cliapp
+import os
+
+import morphlib.writeexts
+
+
+class Jffs2WriteExtension(morphlib.writeexts.WriteExtension):
+
+ '''See jffs2.write.help for documentation.'''
+
+ def process_args(self, args):
+ if len(args) != 2:
+ raise cliapp.AppException('Wrong number of command line args')
+
+ temp_root, location = args
+
+ try:
+ self.create_jffs2_system(temp_root, location)
+ self.status(msg='Disk image has been created at %(location)s',
+ location = location)
+ except Exception:
+ self.status(msg='Failure to deploy system to %(location)s',
+ location = location)
+ raise
+
+ def create_jffs2_system(self, temp_root, location):
+ erase_block = self.get_erase_block_size()
+ cliapp.runcmd(
+ ['mkfs.jffs2', '--pad', '--no-cleanmarkers',
+ '--eraseblock='+erase_block, '-d', temp_root, '-o', location])
+
+ def get_erase_block_size(self):
+ erase_block = os.environ.get('ERASE_BLOCK', '')
+
+ if erase_block == '':
+ raise cliapp.AppException('ERASE_BLOCK was not given')
+
+ if not erase_block.isdigit():
+ raise cliapp.AppException('ERASE_BLOCK must be a whole number')
+
+ return erase_block
+
+Jffs2WriteExtension().run()
diff --git a/jffs2.write.help b/jffs2.write.help
new file mode 100644
index 00000000..059a354b
--- /dev/null
+++ b/jffs2.write.help
@@ -0,0 +1,28 @@
+#-*- coding: utf-8 -*-
+# Copyright © 2015 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see <http://www.gnu.org/licenses/>.
+
+help: |
+
+ Creates a system produced by Morph build with a jffs2 filesystem and then
+ writes to an image. To use this extension, the host system must have access
+ to mkfs.jffs2 which is provided in the mtd-utilities.morph stratum.
+
+ Parameters:
+
+ * location: the pathname of the disk image to be created/upgraded, or the
+ path to the physical device.
+
+ * ERASE_BLOCK: the erase block size of the target system, which can be
+ found in '/sys/class/mtd/mtdx/erasesize'