On 2022-09-14 03:20, Yu, Mingli wrote:
From: Mingli Yu<[email protected]>
Add devmem 128-bit support [1].
We should merge to master as well but I don't think we need to enable
devmem, especially in kirkstone.
If a user wants to do that, that's fine.
My notes:
I think that back-porting this commit is low risk since it only adds a
new, non-default ability in a compatible manner and
more importantly 'devmem' is NOT built by default. Therefore, other
users are not affected by including this patch.
devmem is a small program that reads and writes from physical memory
using /dev/mem.
Usage is:
$ busybox devmem --help
...
Usage: devmem ADDRESS [WIDTH [VALUE]]
Read/write from physical address
ADDRESS Address to act upon
WIDTH Width (8/16/...)
VALUE Data to be written
This commit adds 128 bit as a supported WIDTH.
The patch cherry-picks back to 1.35.0 *cleanly* and doesn't require
pulling in any other commits.
It *does add new functionality* but the patch is written such that if
_/SIZEOF_INT128/_ isn't define, the code is practically unchanged.
There hasn't been a release of busybox since Dec 2021 so we should
backport this patch to oe-core/master and oe-core/kirkstone.
[1]https://git.busybox.net/busybox/commit/?id=d432049f288c9acdc4a7caa729c68ceba3c5dca1
Signed-off-by: Mingli Yu<[email protected]>
---
.../0001-devmem-add-128-bit-width.patch | 128 ++++++++++++++++++
meta/recipes-core/busybox/busybox/defconfig | 2 +-
meta/recipes-core/busybox/busybox_1.35.0.bb | 1 +
3 files changed, 130 insertions(+), 1 deletion(-)
create mode 100644
meta/recipes-core/busybox/busybox/0001-devmem-add-128-bit-width.patch
diff --git
a/meta/recipes-core/busybox/busybox/0001-devmem-add-128-bit-width.patch
b/meta/recipes-core/busybox/busybox/0001-devmem-add-128-bit-width.patch
new file mode 100644
index 0000000000..985e2bf1d9
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/0001-devmem-add-128-bit-width.patch
@@ -0,0 +1,128 @@
+From d432049f288c9acdc4a7caa729c68ceba3c5dca1 Mon Sep 17 00:00:00 2001
+From: Aaro Koskinen<[email protected]>
+Date: Thu, 25 Aug 2022 18:47:02 +0300
+Subject: [PATCH] devmem: add 128-bit width
+
+Add 128-bit width if the compiler provides the needed type.
+
+function old new delta
+devmem_main 405 464 +59
+.rodata 109025 109043 +18
+------------------------------------------------------------------------------
+(add/remove: 0/0 grow/shrink: 2/0 up/down: 77/0) Total: 77 bytes
+
+Upstream-Status: Backport
[https://git.busybox.net/busybox/commit/?id=d432049f288c9acdc4a7caa729c68ceba3c5dca1]
+
+Signed-off-by: Aaro Koskinen<[email protected]>
+Signed-off-by: Aaro Koskinen<[email protected]>
+Signed-off-by: Denys Vlasenko<[email protected]>
+Signed-off-by: Mingli Yu<[email protected]>
+---
+ miscutils/devmem.c | 68 ++++++++++++++++++++++++++++++----------------
+ 1 file changed, 44 insertions(+), 24 deletions(-)
+
+diff --git a/miscutils/devmem.c b/miscutils/devmem.c
+index f9f0276bc..f21621bd6 100644
+--- a/miscutils/devmem.c
++++ b/miscutils/devmem.c
+@@ -29,7 +29,6 @@ int devmem_main(int argc UNUSED_PARAM, char **argv)
+ {
+ void *map_base, *virt_addr;
+ uint64_t read_result;
+- uint64_t writeval = writeval; /* for compiler */
+ off_t target;
+ unsigned page_size, mapped_size, offset_in_page;
+ int fd;
+@@ -64,9 +63,6 @@ int devmem_main(int argc UNUSED_PARAM, char **argv)
+ width = strchrnul(bhwl, (argv[2][0] | 0x20)) - bhwl;
+ width = sizes[width];
+ }
+- /* VALUE */
+- if (argv[3])
+- writeval = bb_strtoull(argv[3], NULL, 0);
+ } else { /* argv[2] == NULL */
+ /* make argv[3] to be a valid thing to fetch */
+ argv--;
+@@ -96,28 +92,46 @@ int devmem_main(int argc UNUSED_PARAM, char **argv)
+ virt_addr = (char*)map_base + offset_in_page;
+
+ if (!argv[3]) {
+- switch (width) {
+- case 8:
+- read_result = *(volatile uint8_t*)virt_addr;
+- break;
+- case 16:
+- read_result = *(volatile uint16_t*)virt_addr;
+- break;
+- case 32:
+- read_result = *(volatile uint32_t*)virt_addr;
+- break;
+- case 64:
+- read_result = *(volatile uint64_t*)virt_addr;
+- break;
+- default:
+- bb_simple_error_msg_and_die("bad width");
++#ifdef __SIZEOF_INT128__
++ if (width == 128) {
++ unsigned __int128 rd =
++ *(volatile unsigned __int128 *)virt_addr;
++ printf("0x%016llX%016llX\n",
++ (unsigned long long)(uint64_t)(rd >> 64),
++ (unsigned long long)(uint64_t)rd
++ );
++ } else
++#endif
++ {
++ switch (width) {
++ case 8:
++ read_result = *(volatile uint8_t*)virt_addr;
++ break;
++ case 16:
++ read_result = *(volatile uint16_t*)virt_addr;
++ break;
++ case 32:
++ read_result = *(volatile uint32_t*)virt_addr;
++ break;
++ case 64:
++ read_result = *(volatile uint64_t*)virt_addr;
++ break;
++ default:
++ bb_simple_error_msg_and_die("bad width");
++ }
++// printf("Value at address 0x%"OFF_FMT"X (%p): 0x%llX\n",
++// target, virt_addr,
++// (unsigned long long)read_result);
++ /* Zero-padded output shows the width of access just
done */
++ printf("0x%0*llX\n", (width >> 2), (unsigned long
long)read_result);
+ }
+-// printf("Value at address 0x%"OFF_FMT"X (%p): 0x%llX\n",
+-// target, virt_addr,
+-// (unsigned long long)read_result);
+- /* Zero-padded output shows the width of access just done */
+- printf("0x%0*llX\n", (width >> 2), (unsigned long
long)read_result);
+ } else {
++ /* parse VALUE */
++#ifdef __SIZEOF_INT128__
++ unsigned __int128 writeval = strtoumax(argv[3], NULL, 0);
++#else
++ uint64_t writeval = bb_strtoull(argv[3], NULL, 0);
++#endif
+ switch (width) {
+ case 8:
+ *(volatile uint8_t*)virt_addr = writeval;
+@@ -135,6 +149,12 @@ int devmem_main(int argc UNUSED_PARAM, char **argv)
+ *(volatile uint64_t*)virt_addr = writeval;
+ // read_result = *(volatile uint64_t*)virt_addr;
+ break;
++#ifdef __SIZEOF_INT128__
++ case 128:
++ *(volatile unsigned __int128 *)virt_addr = writeval;
++// read_result = *(volatile uint64_t*)virt_addr;
++ break;
++#endif
+ default:
+ bb_simple_error_msg_and_die("bad width");
+ }
+--
+2.25.1
+
diff --git a/meta/recipes-core/busybox/busybox/defconfig
b/meta/recipes-core/busybox/busybox/defconfig
index 5e1e1f5638..58d393ad87 100644
--- a/meta/recipes-core/busybox/busybox/defconfig
+++ b/meta/recipes-core/busybox/busybox/defconfig
@@ -782,7 +782,7 @@ CONFIG_FEATURE_CROND_DIR=""
# CONFIG_DEVFSD_FG_NP is not set
# CONFIG_DEVFSD_VERBOSE is not set
# CONFIG_FEATURE_DEVFS is not set
-# CONFIG_DEVMEM is not set
+CONFIG_DEVMEM=y
As mentioned above, I don't think we need to enable DEVMEM but only
carry this small patch.
Thanks,
../Randy
# CONFIG_FBSPLASH is not set
# CONFIG_FLASH_ERASEALL is not set
# CONFIG_FLASH_LOCK is not set
diff --git a/meta/recipes-core/busybox/busybox_1.35.0.bb
b/meta/recipes-core/busybox/busybox_1.35.0.bb
index edf896485e..e9ca6fdb1a 100644
--- a/meta/recipes-core/busybox/busybox_1.35.0.bb
+++ b/meta/recipes-core/busybox/busybox_1.35.0.bb
@@ -50,6 +50,7 @@ SRC_URI ="https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://0001-libbb-sockaddr2str-ensure-only-printable-characters-.patch
\
file://0002-nslookup-sanitize-all-printed-strings-with-printable.patch
\ file://CVE-2022-30065.patch \ +
file://0001-devmem-add-128-bit-width.patch \ "
SRC_URI:append:libc-musl =" file://musl.cfg "
--
# Randy MacLeod
# Wind River Linux
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#170658):
https://lists.openembedded.org/g/openembedded-core/message/170658
Mute This Topic: https://lists.openembedded.org/mt/93673250/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-