File tree Expand file tree Collapse file tree 5 files changed +71
-14
lines changed
Expand file tree Collapse file tree 5 files changed +71
-14
lines changed Original file line number Diff line number Diff line change 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+ You can disable this feature by adding to the ` /etc/initrd.mk ` :
8+ ```
9+ DISABLE_GUESS += device-tree
10+ ```
11+
12+ [ 1] https://www.devicetree.org/specifications/
13+ [ 2] https://github.com/devicetree-org/devicetree-specification
Original file line number Diff line number Diff line change 1+ #! /bin/bash -eu
2+ # SPDX-License-Identifier: GPL-3.0-or-later
3+
4+ . guess-functions
5+
6+ $TRACE_SOURCE " Processing ..."
7+
8+ # Check Device Tree and Open Firmware support.
9+ [ -d " $SYSFS_PATH " /firmware/devicetree ] ||
10+ exit 0
11+
12+ # Do the search in reverse order. Searching for modalias files will show us
13+ # nodes that have kernel modules (uevents are much more than a node with
14+ # modalias), among them we look for those that have OF_NAME in uevent (mandatory
15+ # for open firemware) and for these nodes we look for real kernel modules.
16+ #
17+ # shellcheck disable=SC2016
18+ find " $SYSFS_PATH " /devices/ -type f -name modalias -printf ' %h/uevent\0' |
19+ xargs -r0 grep -l ' ^OF_NAME=' 2> /dev/null |
20+ sed -e ' s,/uevent$,/modalias,' |
21+ xargs -r sed -e ' ${ s/$/\n/ }' |
22+ depinfo ${KERNEL: +-k " $KERNEL " } --no-prefix --input=- 2> /dev/null |
23+ sort -u |
24+ sed -r -n -e ' s,^.*/lib/modules/[^/]+/,,p' |
25+ filter_device_tree_modules |
26+ while read -r mod; do
27+ mod=" ${mod##*/ } "
28+ guess_optional_module " ${mod% .ko} "
29+ done
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff 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 |
5441while read -r mod; do
5542 mod=" ${mod##*/ } "
5643 guess_optional_module " ${mod% .ko} "
Original file line number Diff line number Diff 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+
192211fi # __included_make_initrd_guess_functions
You can’t perform that action at this time.
0 commit comments