[Buildroot] [PATCH] eudev: generate /etc/udev/hwdb.bin at system startup
Carlos Santos
casantos at datacom.ind.br
Mon Jan 29 10:37:23 UTC 2018
> From: "Baruch Siach" <baruch at tkos.co.il>
> To: "Carlos Santos" <casantos at datacom.ind.br>
> Cc: "buildroot" <buildroot at buildroot.org>, "Bernd Kuhls" <bernd.kuhls at t-online.de>, "Eric Le Bihan"
> <eric.le.bihan.dev at free.fr>
> Sent: Monday, January 29, 2018 3:36:03 AM
> Subject: Re: [Buildroot] [PATCH] eudev: generate /etc/udev/hwdb.bin at system startup
> Hi Carlos,
>
> On Mon, Jan 29, 2018 at 02:19:31AM -0200, Carlos Santos wrote:
>> Programs that use libudev (e.g. lsusb, from usbutils) need the hwdb.bin
>> file to work properly.
>>
>> If BR2_PACKAGE_EUDEV_ENABLE_HWDB is selected then the eudev installation
>> populates /etc/udev/hwdb.d/ but does not genarete /etc/udev/hwdb.bin. It
>> must be created running "udevadm hwdb --update" on the target device.
>>
>> Signed-off-by: Carlos Santos <casantos at datacom.ind.br>
>> ---
>> package/eudev/S10udev | 12 ++++++++++--
>> 1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/package/eudev/S10udev b/package/eudev/S10udev
>> index 8382bec2bb..5c25e51317 100755
>> --- a/package/eudev/S10udev
>> +++ b/package/eudev/S10udev
>> @@ -25,14 +25,22 @@ UDEV_CONFIG=/etc/udev/udev.conf
>> test -r $UDEV_CONFIG || exit 6
>> . $UDEV_CONFIG
>>
>> +UDEV_HWDB_BIN=/etc/udev/hwdb.bin
>> +UDEV_HWDB_D=/etc/udev/hwdb.d
>> +
>> case "$1" in
>> start)
>> printf "Populating ${udev_root:-/dev} using udev: "
>> printf '\000\000\000\000' > /proc/sys/kernel/hotplug
>> - $UDEV_BIN -d || (echo "FAIL" && exit 1)
>> + $UDEV_BIN -d || { echo "FAIL" && exit 1; }
>
> How is this change related to hwdb.bin generation?
It fixes the logic. ( ... ) runs in a subshell, so the exit does not
interrupt the of the parent script. Example:
$ cat /tmp/foo
#!/bin/sh
echo 1
(echo 2 && exit 1)
echo 3
$ /tmp/foo
1
2
3
$ cat /tmp/bar
#!/bin/sh
echo 1
{ echo 2 && exit 1; }
echo 3
$ /tmp/bar
1
2
$
>> udevadm trigger --type=subsystems --action=add
>> udevadm trigger --type=devices --action=add
>> - udevadm settle --timeout=30 || echo "udevadm settle failed"
>> + udevadm settle --timeout=30 || { echo "udevadm settle failed" && exit
>> 1; }
>> + [ -d "$UDEV_HWDB_D" ] && {
>> + echo "done"
>> + printf "Compiling hardware database information $UDEV_HWDB_BIN: "
>> + udevadm hwdb --update || { echo "FAIL" && exit 1; }
>
> Wouldn't that break read-only /etc?
The script may require some customization, as already explained in its
opening comments, which is beyond the scope of this change.
Notice that a read-only /etc does not break the init script. It breaks
the "udevadm hwdb --update" command, as well as any command that assume
a rw filesystem (and there is a lot of them).
---8<---
--
Carlos Santos (Casantos) - DATACOM, P&D
“The greatest triumph that modern PR can offer is the transcendent
success of having your words and actions judged by your reputation,
rather than the other way about.” — Christopher Hitchens
More information about the buildroot
mailing list