binman: Support an entry that holds text
It is useful to able to write an identifying string to the image within an entry. Add a 'text' entry type to handle this. The actual text is typically passed to binman on the command line. The text is not itself nul-terminated but this can be achieved if required by setting the size of the entry to something larger than the text. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
53af22a995
commit
bb74837c9a
50
tools/binman/etype/text.py
Normal file
50
tools/binman/etype/text.py
Normal file
@ -0,0 +1,50 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
# Copyright (c) 2018 Google, Inc
|
||||
# Written by Simon Glass <sjg@chromium.org>
|
||||
#
|
||||
|
||||
from collections import OrderedDict
|
||||
|
||||
from entry import Entry, EntryArg
|
||||
import fdt_util
|
||||
|
||||
|
||||
class Entry_text(Entry):
|
||||
"""An entry which contains text
|
||||
|
||||
The text can be provided either in the node itself or by a command-line
|
||||
argument.
|
||||
|
||||
Example node:
|
||||
|
||||
text {
|
||||
size = <50>;
|
||||
text-label = "message";
|
||||
};
|
||||
|
||||
You can then use:
|
||||
|
||||
binman -amessage="this is my message"
|
||||
|
||||
and binman will insert that string into the entry.
|
||||
|
||||
It is also possible to put the string directly in the node:
|
||||
|
||||
text {
|
||||
size = <8>;
|
||||
text-label = "message";
|
||||
message = "a message directly in the node"
|
||||
};
|
||||
|
||||
The text is not itself nul-terminated. This can be achieved, if required,
|
||||
by setting the size of the entry to something larger than the text.
|
||||
"""
|
||||
def __init__(self, section, etype, node):
|
||||
Entry.__init__(self, section, etype, node)
|
||||
self.text_label, = self.GetEntryArgsOrProps(
|
||||
[EntryArg('text-label', str)])
|
||||
self.value, = self.GetEntryArgsOrProps([EntryArg(self.text_label, str)])
|
||||
|
||||
def ObtainContents(self):
|
||||
self.SetContents(self.value)
|
||||
return True
|
@ -41,6 +41,9 @@ FSP_DATA = 'fsp'
|
||||
CMC_DATA = 'cmc'
|
||||
VBT_DATA = 'vbt'
|
||||
MRC_DATA = 'mrc'
|
||||
TEXT_DATA = 'text'
|
||||
TEXT_DATA2 = 'text2'
|
||||
TEXT_DATA3 = 'text3'
|
||||
|
||||
class TestFunctional(unittest.TestCase):
|
||||
"""Functional tests for binman
|
||||
@ -1161,6 +1164,19 @@ class TestFunctional(unittest.TestCase):
|
||||
self.assertIn('GetArg() internal error: Unknown data type ',
|
||||
str(e.exception))
|
||||
|
||||
def testText(self):
|
||||
"""Test for a text entry type"""
|
||||
entry_args = {
|
||||
'test-id': TEXT_DATA,
|
||||
'test-id2': TEXT_DATA2,
|
||||
'test-id3': TEXT_DATA3,
|
||||
}
|
||||
data, _, _, _ = self._DoReadFileDtb('66_text.dts',
|
||||
entry_args=entry_args)
|
||||
expected = (TEXT_DATA + chr(0) * (8 - len(TEXT_DATA)) + TEXT_DATA2 +
|
||||
TEXT_DATA3 + 'some text')
|
||||
self.assertEqual(expected, data)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
28
tools/binman/test/66_text.dts
Normal file
28
tools/binman/test/66_text.dts
Normal file
@ -0,0 +1,28 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
binman {
|
||||
text {
|
||||
size = <8>;
|
||||
text-label = "test-id";
|
||||
};
|
||||
text2 {
|
||||
type = "text";
|
||||
text-label = "test-id2";
|
||||
};
|
||||
text3 {
|
||||
type = "text";
|
||||
text-label = "test-id3";
|
||||
};
|
||||
/* This one does not use command-line args */
|
||||
text4 {
|
||||
type = "text";
|
||||
text-label = "test-id4";
|
||||
test-id4 = "some text";
|
||||
};
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue
Block a user