Skip to content

Commit 0842264

Browse files
committed
guess: Add device-tree feature
This feature scans the device tree [1] for compatible nodes and determines which kernel modules are required for the current hardware. It is intended to be used in embedded linux environments where device trees are used to describe hardware. [1] https://www.devicetree.org/specifications/ Signed-off-by: Alexey Gladkov <[email protected]>
1 parent 2d2dcc7 commit 0842264

File tree

5 files changed

+71
-14
lines changed

5 files changed

+71
-14
lines changed

guess/device-tree/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Guess module: device tree
2+
3+
This feature scans the device tree [1] for compatible nodes and determines which
4+
kernel modules are required for the current hardware. It is intended to be used
5+
in embedded linux environments where device trees are used to describe hardware.
6+
7+
[1] https://www.devicetree.org/specifications/
8+
[2] https://github.com/devicetree-org/devicetree-specification

guess/device-tree/action

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash -eu
2+
# SPDX-License-Identifier: GPL-3.0-or-later
3+
4+
. guess-functions
5+
6+
$TRACE_SOURCE "Processing ..."
7+
8+
dt_dir=
9+
10+
for dir in ${DEVICETREE_PATH-} "$PROCFS_PATH"/device-tree "$SYSFS_PATH"/firmware/devicetree/base; do
11+
if [ -e "$dir" ] && [ -f "$dir"/compatible ]; then
12+
dt_dir="$dir"
13+
break
14+
fi
15+
done
16+
17+
[ -n "$dt_dir" ] ||
18+
exit 0
19+
20+
find "$dt_dir/" -name compatible |
21+
while read -r dt_compatible; do
22+
tr '\0' '\n' < "$dt_compatible" |
23+
while read -r compat; do
24+
printf 'of:N*T*C%sC*\n' "${compat//[ ]/_}"
25+
done
26+
done |
27+
sort -u |
28+
depinfo ${KERNEL:+-k "$KERNEL"} --no-prefix --input=- 2>/dev/null |
29+
sed -r -n -e 's,^.*/lib/modules/[^/]+/,,p' |
30+
filter_device_tree_modules |
31+
while read -r mod; do
32+
mod="${mod##*/}"
33+
guess_optional_module "${mod%.ko}"
34+
done

guess/device-tree/rules.mk

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# SPDX-License-Identifier: GPL-3.0-or-later
2+
PHONY += guess-device-tree
3+
4+
guess-device-tree:
5+
$V echo "Processing $@ ..."
6+
@ GUESS_SUFFIX=add:$@ \
7+
$(DETECTDIR)/device-tree/action
8+
9+
guess: guess-device-tree

guess/loaded-modules/action

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,7 @@ list_builtin_modules()
3737
list_loaded_modules
3838
list_builtin_modules
3939
} |
40-
grep -E \
41-
-e '^kernel/drivers/bus/' \
42-
-e '^kernel/drivers/clk/' \
43-
-e '^kernel/drivers/dma/' \
44-
-e '^kernel/drivers/i2c/' \
45-
-e '^kernel/drivers/mfd/' \
46-
-e '^kernel/drivers/mmc/' \
47-
-e '^kernel/drivers/nvmem/' \
48-
-e '^kernel/drivers/phy/' \
49-
-e '^kernel/drivers/power/supply/' \
50-
-e '^kernel/drivers/regulator/' \
51-
-e '^kernel/drivers/reset/' \
52-
-e '^kernel/drivers/soc/' \
53-
-e '^kernel/drivers/usb/phy/' |
40+
filter_device_tree_modules |
5441
while read -r mod; do
5542
mod="${mod##*/}"
5643
guess_optional_module "${mod%.ko}"

tools/guess-functions

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,23 @@ is_active_feature()
189189
return 1
190190
}
191191

192+
filter_device_tree_modules()
193+
{
194+
grep -E \
195+
-e '^kernel/drivers/bus/' \
196+
-e '^kernel/drivers/clk/' \
197+
-e '^kernel/drivers/dma/' \
198+
-e '^kernel/drivers/i2c/' \
199+
-e '^kernel/drivers/mfd/' \
200+
-e '^kernel/drivers/mmc/' \
201+
-e '^kernel/drivers/nvmem/' \
202+
-e '^kernel/drivers/phy/' \
203+
-e '^kernel/drivers/power/supply/' \
204+
-e '^kernel/drivers/regulator/' \
205+
-e '^kernel/drivers/reset/' \
206+
-e '^kernel/drivers/soc/' \
207+
-e '^kernel/drivers/usb/phy/' \
208+
#
209+
}
210+
192211
fi #__included_make_initrd_guess_functions

0 commit comments

Comments
 (0)