[PATCH 06/24] dtoc: Support adding a string list to a device tree
Alper Nebi Yasak
alpernebiyasak at gmail.com
Tue Feb 15 12:43:19 CET 2022
On 08/02/2022 21:49, Simon Glass wrote:
> Add a new function to add a string list.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> tools/dtoc/fdt.py | 18 ++++++++++++++++++
> tools/dtoc/test_fdt.py | 8 ++++++++
> 2 files changed, 26 insertions(+)
>
> diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
> index 32a7aa9829..e7197f8f12 100644
> --- a/tools/dtoc/fdt.py
> +++ b/tools/dtoc/fdt.py
> @@ -501,6 +501,24 @@ class Node:
> val = bytes(val, 'utf-8')
> return self.AddData(prop_name, val + b'\0')
>
> + def AddStringList(self, prop_name, val):
> + """Add a new string-list property to a node
> +
> + The device tree is marked dirty so that the value will be written to
> + the blob on the next sync.
> +
> + Args:
> + prop_name: Name of property to add
> + val (list of str): List of strings to add
> +
> + Returns:
> + Prop added
> + """
> + out = b''
> + for string in val:
> + out += bytes(string, 'utf-8') + b'\0'
> + return self.AddData(prop_name, out)
If val is an empty list this would try to set a zero-byte data, but then
the Prop class considers that a boolean True.
Perhaps use "s" as the variable name as there's a "string" module
(though not imported here).
Also, b'\0'.join() works just like in strings if you prefer that to a loop.
> +
> def AddInt(self, prop_name, val):
> """Add a new integer property to a node
>
> diff --git a/tools/dtoc/test_fdt.py b/tools/dtoc/test_fdt.py
> index 55b70e9876..1a7e73ffce 100755
> --- a/tools/dtoc/test_fdt.py
> +++ b/tools/dtoc/test_fdt.py
> @@ -531,6 +531,14 @@ class TestProp(unittest.TestCase):
> self.node.AddData('data', tools.GetBytes(65, 20000))
> self.dtb.Sync(auto_resize=True)
>
> + def test_string_list(self):
> + """Test adding string-list property to a node"""
> + val = ['123', '456']
> + self.node.AddStringList('stringlist', val)
> + self.dtb.Sync(auto_resize=True)
> + data = self.fdt.getprop(self.node.Offset(), 'stringlist')
> + self.assertEqual(b'123\x00456\0', data)
> +
> def testFromData(self):
> dtb2 = fdt.Fdt.FromData(self.dtb.GetContents())
> self.assertEqual(dtb2.GetContents(), self.dtb.GetContents())
More information about the U-Boot
mailing list