├── README.md
├── openwrt-base-files.patch
├── openwrt-kernel-config.patch
└── systemd
├── Makefile
├── files
└── etc
│ ├── hostname
│ ├── machine-id
│ ├── os-release
│ └── systemd
│ └── system
│ ├── initrd-root-fs.target.requires
│ └── sysroot-prepare.service
│ ├── overlay.mount
│ ├── sysroot-prepare.service
│ └── sysroot.mount
├── patches
└── 010-agetty-path-baud.patch
└── systemd-common.mk
/README.md:
--------------------------------------------------------------------------------
1 | # systemd for OpenWrt
2 |
3 | An experimental, unholy union of [systemd](http://www.freedesktop.org/wiki/Software/systemd/) and [OpenWrt](https://openwrt.org/). Yes, it runs on a [VoCore](http://vocore.io/), which is about the size of an American quarter.
4 |
5 |
6 | ## Requirements
7 |
8 |
9 |
10 | - You must use eglibc as your C library, as systemd requires (e)glibc and will not work with uClibc!
11 |
12 | - I have included some supporting OpenWrt patches for things we depend on that are not available in OpenWrt yet, including:
13 | - `openwrt-kernel-config.patch` adds OpenWrt kernel config options required by systemd ([originally](https://lists.openwrt.org/pipermail/openwrt-devel/2014-March/024291.html) by openwrt-systemd creator, Adam Porter)
14 | - `openwrt-base-files.patch` avoids some conflicts between `base-files` and `systemd`
15 |
16 |
17 | ## Getting Started
18 |
19 | - Add the following to `feeds.conf.default`:
20 |
21 | ```
22 | src-git systemd https://github.com/jdub/openwrt-systemd.git
23 | ```
24 |
25 | - Run:
26 |
27 | ```
28 | ./scripts/feeds update systemd
29 | ./scripts/feeds install systemd
30 | make menuconfig
31 | ```
32 |
33 | - Enable "Advanced configuration options (for developers)" and navigate into that menu.
34 |
35 | - Enable "Toolchain options" and navigate into that menu.
36 |
37 | - Under "C Library implementation", choose "eglibc".
38 |
39 | - At the top of the menu tree, under "Base system", you'll find the "systemd" package, and lots of goodies under it!
40 |
41 |
42 | ## Contributors
43 |
44 | - Jeff [@jdub](https://github.com/jdub) Waugh, current maintainer
45 | - Gabe [@thagabe](https://github.com/thagabe) Rodriguez
46 | - Adam [@aport](https://github.com/aport) Porter, creator
47 |
--------------------------------------------------------------------------------
/openwrt-base-files.patch:
--------------------------------------------------------------------------------
1 | Terrible hacks to avoid conflicts between base-files and systemd.
2 |
3 | Requires further discussion with upstream, not a patch submission!
4 |
5 | Signed-off-by: Jeff Waugh
6 | ---
7 | Makefile | 3 +--
8 | 1 file changed, 1 insertion(+), 2 deletions(-)
9 |
10 | diff --git a/package/base-files/Makefile b/package/base-files/Makefile
11 | index e0bf915..6f42f11 100644
12 | --- a/package/base-files/Makefile
13 | +++ b/package/base-files/Makefile
14 | @@ -29,7 +29,6 @@ endif
15 | define Package/base-files
16 | SECTION:=base
17 | CATEGORY:=Base system
18 | - DEPENDS:=+netifd +libc +procd +jsonfilter
19 | TITLE:=Base filesystem for OpenWrt
20 | URL:=http://openwrt.org/
21 | VERSION:=$(PKG_RELEASE)-$(REVISION)
22 | @@ -135,7 +134,7 @@ define Package/base-files/install
23 | mkdir -p $(1)/root
24 | $(LN) /proc/mounts $(1)/etc/mtab
25 | rm -f $(1)/var
26 | - $(LN) /tmp $(1)/var
27 | + #$(LN) /tmp $(1)/var
28 | mkdir -p $(1)/etc
29 | $(LN) /tmp/resolv.conf /tmp/fstab /tmp/TZ $(1)/etc/
30 |
31 |
--------------------------------------------------------------------------------
/openwrt-kernel-config.patch:
--------------------------------------------------------------------------------
1 | Add support for various kernel options required by systemd.
2 | c.f. http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-apps/systemd/systemd-9999.ebuild?&view=markup#l118
3 |
4 | Signed-off-by: Jeff Waugh
5 | Signed-off-by: Adam Porter
6 | ---
7 | config/Config-kernel.in | 20 ++++++++++++++++++++
8 | 1 file changed, 20 insertions(+)
9 |
10 | diff --git a/config/Config-kernel.in b/config/Config-kernel.in
11 | index a0bd13e..33d1e3c 100644
12 | --- a/config/Config-kernel.in
13 | +++ b/config/Config-kernel.in
14 | @@ -26,6 +26,26 @@ config KERNEL_DEBUG_FS
15 | write to these files. Many common debugging facilities, such as
16 | ftrace, require the existence of debugfs.
17 |
18 | +config KERNEL_DEVTMPFS_MOUNT
19 | + bool
20 | + default n
21 | +
22 | +config KERNEL_DEVTMPFS
23 | + bool "Compile the kernel with devtmpfs enabled"
24 | + default n
25 | + select KERNEL_DEVTMPFS_MOUNT
26 | +
27 | +config KERNEL_BLK_DEV_BSG
28 | + bool "Compile the kernel with SG v4 support for any block device"
29 | + default n
30 | +
31 | +config KERNEL_FANOTIFY
32 | + bool "Compile the kernel with modern file notification support"
33 | +
34 | +config KERNEL_FHANDLE
35 | + bool "Compile the kernel with support for fhandle syscalls"
36 | + default n
37 | +
38 | config KERNEL_PERF_EVENTS
39 | bool
40 | default n
41 |
--------------------------------------------------------------------------------
/systemd/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 2006-2103 OpenWrt.org
3 | # Copyright (C) 2014 Adam Porter
4 | # Copyright (C) 2015 Gabe Rodriguez, Jeff Waugh
5 | #
6 | # This is free software, licensed under the GNU General Public License v2.
7 | # See /LICENSE for more information.
8 | #
9 |
10 | include $(TOPDIR)/rules.mk
11 |
12 | PKG_NAME:=systemd
13 | PKG_VERSION:=219
14 | PKG_RELEASE:=1
15 |
16 | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
17 | PKG_SOURCE_URL:=http://www.freedesktop.org/software/systemd/
18 | PKG_MD5SUM:=e0d6c9a4b4f69f66932d2230298c9a34
19 |
20 | PKG_BUILD_DEPENDS:=intltool/host gperf/host
21 | PKG_BUILD_PARALLEL:=1
22 |
23 | include systemd-common.mk
24 | include $(INCLUDE_DIR)/package.mk
25 | include $(INCLUDE_DIR)/version.mk
26 |
27 | PKG_INSTALL:=1
28 |
29 | TARGET_CFLAGS += --std=gnu99
30 |
31 | SYSTEMD_DISABLE_PKG = $(if $(CONFIG_PACKAGE_systemd-$(1)),,--disable-$(2))
32 |
33 | CONFIGURE_ARGS_FAST_BUILD = \
34 | --disable-gtk-doc \
35 | --disable-gtk-doc-html \
36 | --disable-manpages \
37 | --disable-tests \
38 | --without-python
39 |
40 | CONFIGURE_ARGS_EMBEDDED = \
41 | --disable-backlight \
42 | --disable-binfmt \
43 | --disable-efi \
44 | --disable-firstboot \
45 | --disable-hibernate \
46 | --disable-importd \
47 | --disable-ldconfig \
48 | --disable-logind \
49 | --disable-machined \
50 | --disable-microhttpd \
51 | --disable-nls \
52 | --disable-pam \
53 | --disable-qrencode \
54 | --disable-quotacheck \
55 | --disable-vconsole \
56 | --disable-xkbcommon
57 |
58 | CONFIGURE_ARGS += \
59 | --prefix=/usr \
60 | --sysconfdir=/etc \
61 | $(CONFIGURE_ARGS_FAST_BUILD) \
62 | $(CONFIGURE_ARGS_EMBEDDED) \
63 | --disable-apparmor \
64 | --disable-introspection \
65 | --disable-gudev \
66 | --disable-chkconfig \
67 | --disable-ima \
68 | --disable-selinux \
69 | --disable-seccomp \
70 | --disable-audit \
71 | --disable-smack \
72 | --disable-xz \
73 | --disable-acl \
74 | --disable-gcrypt \
75 | --disable-myhostname \
76 | --disable-libcryptsetup \
77 | --disable-polkit \
78 | --disable-elfutils \
79 | --disable-gnutls \
80 | --disable-libcurl \
81 | $(call SYSTEMD_DISABLE_PKG,bootchart,bootchart) \
82 | $(call SYSTEMD_DISABLE_PKG,coredump,coredump) \
83 | $(call SYSTEMD_DISABLE_PKG,hostnamed,hostnamed) \
84 | $(call SYSTEMD_DISABLE_PKG,localed,localed) \
85 | $(call SYSTEMD_DISABLE_PKG,modules-load,kmod) \
86 | $(call SYSTEMD_DISABLE_PKG,networkd,networkd) \
87 | $(call SYSTEMD_DISABLE_PKG,random-seed,randomseed) \
88 | $(call SYSTEMD_DISABLE_PKG,resolved,resolved) \
89 | $(call SYSTEMD_DISABLE_PKG,rfkill,rfkill) \
90 | $(call SYSTEMD_DISABLE_PKG,timedated,timedated) \
91 | $(call SYSTEMD_DISABLE_PKG,timesyncd,timesyncd) \
92 | $(call SYSTEMD_DISABLE_PKG,tmpfiles,tmpfiles) \
93 | $(call SYSTEMD_DISABLE_PKG,update-utmp,utmp)
94 |
95 |
96 | define Package/systemd/Default
97 | SECTION:=base
98 | CATEGORY:=Base system
99 | TITLE:=System and Service Manager
100 | URL:=http://www.freedesktop.org/wiki/Software/systemd/
101 | MAINTAINER:=Jeff Waugh
102 | endef
103 |
104 | define Package/systemd/description/Default
105 | systemd is a suite of basic building blocks for a Linux system
106 | endef
107 |
108 |
109 | define Package/systemd
110 | $(call Package/systemd/Default)
111 | DEPENDS:=@USE_EGLIBC +@BUSYBOX_DEFAULT_SULOGIN +libcap +libmount +libkmod +dbus +agetty \
112 | +PACKAGE_kmod-fs-autofs4 +@KERNEL_CGROUPS +@KERNEL_NET_CLS_CGROUP \
113 | +@KERNEL_LXC_MISC +@KERNEL_DEVPTS_MULTIPLE_INSTANCES +@KERNEL_POSIX_MQUEUE \
114 | +@KERNEL_NAMESPACES +@KERNEL_NET_NS \
115 | +@KERNEL_DEVTMPFS +@KERNEL_FHANDLE +@KERNEL_FANOTIFY +@KERNEL_BLK_DEV_BSG
116 | MENU:=1
117 | endef
118 |
119 | define Package/systemd/description
120 | $(call Package/systemd/description/Default)
121 | This package contains the core systemd /sbin/init daemon and supporting tools.
122 | endef
123 |
124 | define Package/systemd/conffiles
125 | /etc/hostname
126 | /etc/machine-id
127 | /etc/systemd/system.conf
128 | /etc/systemd/user.conf
129 | endef
130 |
131 | define Package/systemd/install
132 | $(INSTALL_DIR) $(1)/etc/systemd
133 | $(CP) \
134 | $(PKG_INSTALL_DIR)/etc/systemd/{journald,system,user}.conf \
135 | $(1)/etc/systemd
136 |
137 | $(INSTALL_DIR) $(1)/etc/systemd/system/multi-user.target.wants
138 | ln -sf \
139 | /usr/lib/systemd/system/remote-fs.target \
140 | $(1)/etc/systemd/system/multi-user.target.wants/.
141 |
142 | $(INSTALL_DIR) $(1)/etc/systemd/network
143 | $(INSTALL_DIR) $(1)/etc/systemd/user
144 | $(INSTALL_DIR) $(1)/etc/network
145 |
146 | $(INSTALL_DIR) $(1)/etc/dbus-1/system.d
147 | $(CP) \
148 | $(PKG_INSTALL_DIR)/etc/dbus-1/system.d/org.freedesktop.systemd1.conf \
149 | $(1)/etc/dbus-1/system.d
150 |
151 | $(INSTALL_DIR) $(1)/usr/bin
152 | $(INSTALL_BIN) \
153 | $(addprefix $(PKG_INSTALL_DIR)/usr/bin/, \
154 | $(SYSTEMD_BIN)) \
155 | $(1)/usr/bin
156 |
157 | ln -sf \
158 | /usr/lib/systemd/systemd-bus-proxyd \
159 | $(1)/usr/bin/systemd-stdio-bridge
160 |
161 | $(INSTALL_DIR) $(1)/usr/lib
162 | $(CP) \
163 | $(PKG_INSTALL_DIR)/usr/lib/libsystemd.so* \
164 | $(1)/usr/lib
165 |
166 | $(INSTALL_DIR) $(1)/etc/sysctl.d
167 | $(INSTALL_DIR) $(1)/usr/lib/sysctl.d
168 | $(INSTALL_DATA) \
169 | $(PKG_INSTALL_DIR)/usr/lib/sysctl.d/50-default.conf \
170 | $(1)/usr/lib/sysctl.d
171 |
172 | $(INSTALL_DIR) $(1)/usr/lib/sysusers.d
173 | $(INSTALL_DATA) \
174 | $(PKG_INSTALL_DIR)/usr/lib/sysusers.d/*.conf \
175 | $(1)/usr/lib/sysusers.d
176 |
177 | $(INSTALL_DIR) $(1)/usr/lib/systemd
178 | $(INSTALL_BIN) \
179 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/, \
180 | $(SYSTEMD_LIB)) \
181 | $(1)/usr/lib/systemd
182 |
183 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system
184 | $(CP) \
185 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/system/, \
186 | $(SYSTEMD_SYSTEM_TARGET_WANTS) \
187 | $(SYSTEMD_SYSTEM_TARGETS) \
188 | $(SYSTEMD_SYSTEM_SLICES) \
189 | $(SYSTEMD_SYSTEM_SOCKETS) \
190 | $(SYSTEMD_SYSTEM_PATHS) \
191 | $(SYSTEMD_SYSTEM_SERVICES) \
192 | $(SYSTEMD_SYSTEM_MOUNTS)) \
193 | $(1)/usr/lib/systemd/system
194 |
195 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system-shutdown
196 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system-sleep
197 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system-generators
198 | $(INSTALL_DIR) $(1)/usr/lib/systemd/user-generators
199 |
200 | $(INSTALL_BIN) \
201 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system-generators/systemd-* \
202 | $(1)/usr/lib/systemd/system-generators
203 |
204 | $(INSTALL_DIR) $(1)/usr/lib/systemd/catalog
205 | $(CP) \
206 | $(PKG_INSTALL_DIR)/usr/lib/systemd/catalog/systemd.catalog \
207 | $(1)/usr/lib/systemd/catalog
208 |
209 | $(INSTALL_DIR) $(1)/usr/lib/systemd/user
210 | $(CP) \
211 | $(PKG_INSTALL_DIR)/usr/lib/systemd/user/* \
212 | $(1)/usr/lib/systemd/user
213 |
214 | $(INSTALL_DIR) $(1)/usr/share/dbus-1/services
215 | $(INSTALL_DIR) $(1)/usr/share/dbus-1/system-services
216 | $(CP) \
217 | $(PKG_INSTALL_DIR)/usr/share/dbus-1/system-services/org.freedesktop.systemd1.service \
218 | $(1)/usr/share/dbus-1/system-services
219 | ln -sf \
220 | /usr/share/dbus-1/system-services/org.freedesktop.systemd1.service \
221 | $(1)/usr/share/dbus-1/services/.
222 |
223 | $(INSTALL_DIR) $(1)/var/log/journal
224 | $(INSTALL_DIR) $(1)/etc/systemd/system/getty.target.wants
225 | $(CP) \
226 | $(PKG_INSTALL_DIR)/etc/systemd/system/getty.target.wants/getty@tty1.service \
227 | $(1)/etc/systemd/system/getty.target.wants
228 |
229 | $(INSTALL_DIR) $(1)/sbin
230 | ln -sf \
231 | /usr/lib/systemd/systemd \
232 | $(1)/sbin/init
233 |
234 | $(CP) ./files/* $(1)/
235 | $(VERSION_SED) $(1)/etc/os-release
236 |
237 | $(INSTALL_DIR) $(1)/run
238 | ln -sf /run $(1)/var/run
239 |
240 | # FIXME: make DEFAULT_TARGET option
241 | ln -sf \
242 | /usr/lib/systemd/system/initrd.target \
243 | $(1)/etc/systemd/system/default.target
244 |
245 | # FIXME: ifeq ($(DEFAULT_TARGET),initrd)
246 | touch $(1)/etc/initrd-release
247 | $(INSTALL_DIR) $(1)/sysroot
248 | endef
249 |
250 |
251 | define Package/systemd-coredump
252 | $(call Package/systemd/Default)
253 | TITLE:=systemd coredump support
254 | DEPENDS+= systemd +@KERNEL_ELF_CORE
255 | endef
256 |
257 | define Package/systemd-coredump/description
258 | $(call Package/systemd/description/Default)
259 | This package contains the systemd coredump support.
260 | endef
261 |
262 | define Package/systemd-coredump/install
263 | $(INSTALL_DIR) $(1)/usr/bin
264 | $(INSTALL_BIN) \
265 | $(PKG_INSTALL_DIR)/usr/bin/coredumpctl \
266 | $(1)/usr/bin
267 |
268 | $(INSTALL_DIR) $(1)/usr/lib/systemd
269 | $(INSTALL_BIN) \
270 | $(PKG_INSTALL_DIR)/usr/lib/systemd/systemd-coredump \
271 | $(1)/usr/lib/systemd
272 |
273 | $(INSTALL_DIR) $(1)/etc/systemd
274 | $(INSTALL_DATA) \
275 | $(PKG_INSTALL_DIR)/etc/systemd/coredump.conf \
276 | $(1)/etc/systemd
277 |
278 | $(INSTALL_DIR) $(1)/usr/lib/sysctl.d
279 | $(INSTALL_DATA) \
280 | $(PKG_INSTALL_DIR)/usr/lib/sysctl.d/50-coredump.conf \
281 | $(1)/usr/lib/sysctl.d
282 | endef
283 |
284 |
285 | define Package/systemd-nspawn
286 | $(call Package/systemd/Default)
287 | TITLE:=systemd namespace container support
288 | DEPENDS+= systemd +libiptc
289 | endef
290 |
291 | define Package/systemd-nspawn/description
292 | $(call Package/systemd/description/Default)
293 | This package contains the systemd namespace container support.
294 | endef
295 |
296 | define Package/systemd-nspawn/install
297 | $(INSTALL_DIR) $(1)/usr/bin
298 | $(INSTALL_BIN) \
299 | $(PKG_INSTALL_DIR)/usr/bin/systemd-nspawn \
300 | $(1)/usr/bin
301 |
302 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system
303 | $(INSTALL_DATA) \
304 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/systemd-nspawn@.service \
305 | $(1)/usr/lib/systemd/system
306 | endef
307 |
308 |
309 | define Package/systemd-tmpfiles
310 | $(call Package/systemd/Default)
311 | TITLE:=systemd temporary file management support
312 | DEPENDS+= systemd
313 | endef
314 |
315 | define Package/systemd-tmpfiles/description
316 | $(call Package/systemd/description/Default)
317 | This package contains the systemd temporary file management support.
318 | endef
319 |
320 | define Package/systemd-tmpfiles/install
321 | $(INSTALL_DIR) $(1)/usr/bin
322 | $(INSTALL_BIN) \
323 | $(PKG_INSTALL_DIR)/usr/bin/systemd-tmpfiles \
324 | $(1)/usr/bin
325 |
326 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system
327 | $(INSTALL_DATA) \
328 | $(wildcard $(PKG_INSTALL_DIR)/usr/lib/systemd/system/systemd-tmpfiles-*) \
329 | $(1)/usr/lib/systemd/system
330 |
331 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/sysinit.target.wants
332 | $(CP) \
333 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/system/sysinit.target.wants/,
334 | systemd-tmpfiles-setup.service \
335 | systemd-tmpfiles-setup-dev.service ) \
336 | $(1)/usr/lib/systemd/system/sysinit.target.wants
337 |
338 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/timers.target.wants
339 | $(CP) \
340 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/timers.target.wants/systemd-tmpfiles-clean.timer \
341 | $(1)/usr/lib/systemd/system/timers.target.wants
342 |
343 | $(INSTALL_DIR) $(1)/etc/tmpfiles.d
344 | $(INSTALL_DIR) $(1)/usr/lib/tmpfiles.d
345 | $(CP) \
346 | $(PKG_INSTALL_DIR)/usr/lib/tmpfiles.d/*.conf \
347 | $(1)/usr/lib/tmpfiles.d
348 | endef
349 |
350 |
351 | define Package/systemd-udev-hwdb
352 | $(call Package/systemd/Default)
353 | TITLE+= (udev hwdb)
354 | DEPENDS:=+systemd-udevd
355 | endef
356 |
357 | define Package/systemd-udev-hwdb/description
358 | $(call Package/systemd/description/Default)
359 | This package contains the udev hardware database files.
360 | endef
361 |
362 | define Package/systemd-udev-hwdb/install
363 | $(INSTALL_DIR) $(1)/etc/udev/hwdb.d
364 | $(INSTALL_DIR) $(1)/usr/lib/udev/hwdb.d
365 | $(CP) \
366 | $(PKG_INSTALL_DIR)/usr/lib/udev/hwdb.d/*.hwdb \
367 | $(1)/usr/lib/udev/hwdb.d
368 | endef
369 |
370 |
371 | define Build/InstallDev
372 | $(INSTALL_DIR) $(1)/usr/lib
373 | $(CP) $(PKG_INSTALL_DIR)/usr/lib/libudev.so* $(1)/usr/lib
374 | # $(CP) $(PKG_INSTALL_DIR)/usr/lib/libgudev-1.0.so* $(1)/usr/lib
375 | $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsystemd.so* $(1)/usr/lib
376 |
377 | $(INSTALL_DIR) $(1)/usr/include
378 | $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include
379 |
380 | $(INSTALL_DIR) $(1)/usr/share/pkgconfig
381 | $(CP) $(PKG_INSTALL_DIR)/usr/share/pkgconfig/*.pc $(1)/usr/share/pkgconfig
382 | $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
383 | $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig
384 | endef
385 |
386 |
387 | define SystemdBuildLib
388 | define Package/systemd-$(1)
389 | $(call Package/systemd/Default)
390 | TITLE:=systemd $(2)
391 | DEPENDS+= systemd $(3)
392 | endef
393 |
394 | define Package/systemd-$(1)/description
395 | $(call Package/systemd/description/Default)
396 | This package contains the systemd $(2).
397 | endef
398 |
399 | define Package/systemd-$(1)/install
400 | # daemon
401 | $(INSTALL_DIR) $$(1)/usr/lib/systemd
402 | $(INSTALL_BIN) \
403 | $(PKG_INSTALL_DIR)/usr/lib/systemd/systemd-$(1)* \
404 | $$(1)/usr/lib/systemd
405 | # service (systemd)
406 | $(INSTALL_DIR) $$(1)/usr/lib/systemd/system
407 | $(INSTALL_DATA) \
408 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/systemd-$(1)*.service \
409 | $$(1)/usr/lib/systemd/system
410 | # custom
411 | $(call Plugin/$(1)/install,$$(1))
412 | endef
413 |
414 | $$(eval $$(call BuildPackage,systemd-$(1)))
415 | endef
416 |
417 | define SystemdDbusService
418 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system
419 | $(CP) \
420 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/dbus-org.freedesktop.$(2).service \
421 | $(1)/usr/lib/systemd/system
422 |
423 | $(INSTALL_DIR) $(1)/etc/dbus-1/system.d
424 | $(INSTALL_DATA) \
425 | $(PKG_INSTALL_DIR)/etc/dbus-1/system.d/org.freedesktop.$(2).conf \
426 | $(1)/etc/dbus-1/system.d
427 |
428 | $(INSTALL_DIR) $(1)/usr/share/dbus-1/system-services
429 | $(INSTALL_DATA) \
430 | $(PKG_INSTALL_DIR)/usr/share/dbus-1/system-services/org.freedesktop.$(2).service \
431 | $(1)/usr/share/dbus-1/system-services
432 | endef
433 |
434 |
435 | define Plugin/bootchart/install
436 | $(INSTALL_DIR) $(1)/etc/systemd
437 | $(INSTALL_DATA) \
438 | $(PKG_INSTALL_DIR)/etc/systemd/bootchart.conf \
439 | $(1)/etc/systemd
440 | endef
441 |
442 |
443 | define Plugin/hostnamed/install
444 | $(INSTALL_DIR) $(1)/usr/bin
445 | $(INSTALL_BIN) \
446 | $(PKG_INSTALL_DIR)/usr/bin/hostnamectl \
447 | $(1)/usr/bin
448 |
449 | $(call SystemdDbusService,$$(1),hostname1)
450 | endef
451 |
452 |
453 | define Plugin/localed/install
454 | $(INSTALL_DIR) $(1)/usr/bin
455 | $(INSTALL_BIN) \
456 | $(PKG_INSTALL_DIR)/usr/bin/localectl \
457 | $(1)/usr/bin
458 |
459 | $(call SystemdDbusService,$$(1),locale1)
460 | endef
461 |
462 |
463 | define Plugin/modules-load/install
464 | $(INSTALL_DIR) $(1)/etc/modules-load.d
465 | $(INSTALL_DIR) $(1)/usr/lib/modules-load.d
466 |
467 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/sysinit.target.wants
468 | $(CP) \
469 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/sysinit.target.wants/systemd-modules-load.service \
470 | $(1)/usr/lib/systemd/system/sysinit.target.wants
471 | endef
472 |
473 |
474 | define Plugin/networkd/install
475 | $(INSTALL_DIR) $(1)/usr/bin
476 | $(INSTALL_BIN) \
477 | $(PKG_INSTALL_DIR)/usr/bin/networkctl \
478 | $(1)/usr/bin
479 |
480 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system
481 | $(INSTALL_DATA) \
482 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/system/, \
483 | network.target \
484 | network-pre.target \
485 | network-online.target \
486 | systemd-networkd.socket ) \
487 | $(1)/usr/lib/systemd/system
488 |
489 | $(INSTALL_DIR) $(1)/usr/lib/systemd/network
490 | $(INSTALL_DATA) \
491 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/network/, \
492 | 80-container-host0.network \
493 | 80-container-ve.network \
494 | 99-default.link ) \
495 | $(1)/usr/lib/systemd/network
496 |
497 | $(INSTALL_DIR) $(1)/etc/systemd/system/multi-user.target.wants
498 | $(CP) \
499 | $(PKG_INSTALL_DIR)/etc/systemd/system/multi-user.target.wants/systemd-networkd.service \
500 | $(1)/etc/systemd/system/multi-user.target.wants
501 |
502 | $(INSTALL_DIR) $(1)/etc/systemd/system/network-online.target.wants
503 | $(CP) \
504 | $(PKG_INSTALL_DIR)/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service \
505 | $(1)/etc/systemd/system/network-online.target.wants
506 |
507 | $(INSTALL_DIR) $(1)/etc/systemd/system/sockets.target.wants
508 | $(CP) \
509 | $(PKG_INSTALL_DIR)/etc/systemd/system/sockets.target.wants/systemd-networkd.socket \
510 | $(1)/etc/systemd/system/sockets.target.wants
511 |
512 | $(call SystemdDbusService,$$(1),network1)
513 | endef
514 |
515 |
516 | define Plugin/random-seed/install
517 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/sysinit.target.wants
518 | $(CP) \
519 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/sysinit.target.wants/systemd-random-seed.service \
520 | $(1)/usr/lib/systemd/system/sysinit.target.wants
521 | endef
522 |
523 |
524 | define Plugin/resolved/install
525 | $(INSTALL_DIR) $(1)/etc/systemd
526 | $(INSTALL_DATA) \
527 | $(PKG_INSTALL_DIR)/etc/systemd/resolved.conf \
528 | $(1)/etc/systemd
529 |
530 | $(INSTALL_DIR) $(1)/etc/systemd/system/multi-user.target.wants
531 | $(CP) \
532 | $(PKG_INSTALL_DIR)/etc/systemd/system/multi-user.target.wants/systemd-resolved.service \
533 | $(1)/etc/systemd/system/multi-user.target.wants
534 |
535 | $(INSTALL_DIR) $(1)/lib
536 | $(INSTALL_BIN) \
537 | $(PKG_INSTALL_DIR)/usr/lib/libnss_resolve.so* \
538 | $(1)/lib
539 |
540 | $(INSTALL_DIR) $(1)/usr/lib/systemd
541 | $(INSTALL_BIN) \
542 | $(PKG_INSTALL_DIR)/usr/lib/systemd/systemd-resolve-host \
543 | $(1)/usr/lib/systemd
544 |
545 | $(call SystemdDbusService,$$(1),resolve1)
546 | endef
547 |
548 | define Package/systemd-resolved/conffiles
549 | /etc/systemd/resolved.conf
550 | endef
551 |
552 |
553 | define Plugin/timedated/install
554 | $(INSTALL_DIR) $(1)/usr/bin
555 | $(INSTALL_BIN) \
556 | $(PKG_INSTALL_DIR)/usr/bin/timedatectl \
557 | $(1)/usr/bin
558 |
559 | $(call SystemdDbusService,$$(1),timedate1)
560 | endef
561 |
562 |
563 | define Plugin/timesyncd/install
564 | $(INSTALL_DIR) $(1)/etc/systemd
565 | $(INSTALL_DATA) \
566 | $(PKG_INSTALL_DIR)/etc/systemd/timesyncd.conf \
567 | $(1)/etc/systemd
568 |
569 | $(INSTALL_DIR) $(1)/etc/systemd/system/sysinit.target.wants
570 | $(CP) \
571 | $(PKG_INSTALL_DIR)/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service \
572 | $(1)/etc/systemd/system/sysinit.target.wants
573 | endef
574 |
575 | define Package/systemd-timesyncd/conffiles
576 | /etc/systemd/timesyncd.conf
577 | endef
578 |
579 |
580 | define Plugin/udevd/install
581 | $(INSTALL_DIR) $(1)/etc/udev/rules.d
582 | $(INSTALL_DATA) \
583 | $(PKG_INSTALL_DIR)/etc/udev/udev.conf \
584 | $(1)/etc/udev
585 |
586 | $(INSTALL_DIR) $(1)/usr/bin
587 | $(INSTALL_BIN) \
588 | $(PKG_INSTALL_DIR)/usr/bin/udevadm \
589 | $(1)/usr/bin
590 |
591 | $(INSTALL_DIR) $(1)/usr/bin
592 | $(INSTALL_BIN) \
593 | $(PKG_INSTALL_DIR)/usr/bin/systemd-hwdb \
594 | $(1)/usr/bin
595 |
596 | $(INSTALL_DIR) $(1)/usr/lib
597 | $(CP) \
598 | $(PKG_INSTALL_DIR)/usr/lib/libudev.so* \
599 | $(1)/usr/lib
600 |
601 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system
602 | $(INSTALL_DATA) \
603 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/system/, \
604 | $(SYSTEMD_UDEVD_SYSTEM_SERVICES) \
605 | $(SYSTEMD_UDEVD_SYSTEM_SOCKETS)) \
606 | $(1)/usr/lib/systemd/system
607 |
608 | $(INSTALL_DIR) $(1)/usr/lib/udev
609 | $(INSTALL_BIN) \
610 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/udev/, \
611 | $(SYSTEMD_UDEVD_LIBS)) \
612 | $(1)/usr/lib/udev
613 |
614 | $(INSTALL_DIR) $(1)/usr/lib/udev/rules.d
615 | $(CP) \
616 | $(PKG_INSTALL_DIR)/usr/lib/udev/rules.d/* \
617 | $(1)/usr/lib/udev/rules.d
618 |
619 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/sysinit.target.wants
620 | $(CP) \
621 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/system/sysinit.target.wants/, \
622 | systemd-udevd.service \
623 | systemd-udev-trigger.service ) \
624 | $(1)/usr/lib/systemd/system/sysinit.target.wants
625 |
626 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/sockets.target.wants
627 | $(CP) \
628 | $(addprefix $(PKG_INSTALL_DIR)/usr/lib/systemd/system/sockets.target.wants/, \
629 | systemd-udevd-control.socket \
630 | systemd-udevd-kernel.socket ) \
631 | $(1)/usr/lib/systemd/system/sockets.target.wants
632 | endef
633 |
634 | define Package/systemd-udevd/conffiles
635 | /etc/udev/udev.conf
636 | endef
637 |
638 |
639 | define Plugin/update-utmp/install
640 | $(INSTALL_DIR) $(1)/usr/lib/systemd/system/sysinit.target.wants
641 | $(CP) \
642 | $(PKG_INSTALL_DIR)/usr/lib/systemd/system/sysinit.target.wants/systemd-update-utmp.service \
643 | $(1)/usr/lib/systemd/system/sysinit.target.wants
644 |
645 | # FIXME: /usr/lib/systemd/system/runlevel$(seq 1 5).target.wants/systemd-update-utmp-runlevel.service
646 | # directories and symlinks
647 | # $(INSTALL_DIR) \
648 | # $(foreach D, $(shell seq 1 5), $(1)/usr/lib/systemd/system/runlevel$(D).target.wants)
649 | endef
650 |
651 |
652 | $(eval $(call BuildPackage,systemd))
653 | $(eval $(call BuildPackage,systemd-coredump))
654 | $(eval $(call BuildPackage,systemd-nspawn))
655 | #$(eval $(call BuildPackage,systemd-tmpfiles))
656 | $(eval $(call BuildPackage,systemd-udev-hwdb))
657 |
658 | $(eval $(call SystemdBuildLib,bootchart,bootchart tool,))
659 | $(eval $(call SystemdBuildLib,hostnamed,hostname daemon,))
660 | $(eval $(call SystemdBuildLib,localed,locale daemon,))
661 | $(eval $(call SystemdBuildLib,modules-load,module loader,+libkmod))
662 | $(eval $(call SystemdBuildLib,networkd,network daemon,+libiptc))
663 | $(eval $(call SystemdBuildLib,random-seed,randomseed tools,))
664 | $(eval $(call SystemdBuildLib,resolved,name resolver,+@EGLIBC_OPTION_EGLIBC_NSSWITCH))
665 | $(eval $(call SystemdBuildLib,rfkill,rfkill tools,+@USE_RFKILL))
666 | $(eval $(call SystemdBuildLib,timedated,timedate daemon,))
667 | $(eval $(call SystemdBuildLib,timesyncd,network time synchronization,))
668 | $(eval $(call SystemdBuildLib,udevd,device manager,))
669 | $(eval $(call SystemdBuildLib,update-utmp,utmp/wtmp log handling,))
--------------------------------------------------------------------------------
/systemd/files/etc/hostname:
--------------------------------------------------------------------------------
1 | openwrt
2 |
--------------------------------------------------------------------------------
/systemd/files/etc/machine-id:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jdub/openwrt-systemd/14e9b556c7dc85ec019fc9cce85c788871ddfaa0/systemd/files/etc/machine-id
--------------------------------------------------------------------------------
/systemd/files/etc/os-release:
--------------------------------------------------------------------------------
1 | NAME="%D"
2 | ID="openwrt"
3 | VERSION="%V (%N)"
4 | VERSION_ID="%V"
5 | PRETTY_NAME="%D %V (%N)"
6 | ANSI_COLOR="1;34"
7 | HOME_URL="https://openwrt.org/"
8 |
--------------------------------------------------------------------------------
/systemd/files/etc/systemd/system/initrd-root-fs.target.requires/sysroot-prepare.service:
--------------------------------------------------------------------------------
1 | ../sysroot-prepare.service
--------------------------------------------------------------------------------
/systemd/files/etc/systemd/system/overlay.mount:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Before=sysroot.mount
3 | ConditionPathExists=/etc/initrd-release
4 | ConditionPathIsDirectory=/overlay
5 | DefaultDependencies=false
6 |
7 | [Mount]
8 | What=tmpfs
9 | Where=/overlay
10 | Type=tmpfs
11 | Options=noatime,mode=0755
12 |
--------------------------------------------------------------------------------
/systemd/files/etc/systemd/system/sysroot-prepare.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Requires=sysroot.mount
3 | Before=initrd-cleanup.service
4 | After=sysroot.mount
5 | ConditionPathExists=/etc/initrd-release
6 | DefaultDependencies=false
7 |
8 | [Service]
9 | Type=oneshot
10 | ExecStart=/bin/rm -f /sysroot/etc/initrd-release
11 | ExecStart=/bin/ln -sf /usr/lib/systemd/system/multi-user.target /sysroot/etc/systemd/system/default.target
12 |
--------------------------------------------------------------------------------
/systemd/files/etc/systemd/system/sysroot.mount:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Requires=overlay.mount
3 | Before=initrd-root-fs.target
4 | After=overlay.mount
5 | ConditionPathExists=/etc/initrd-release
6 | DefaultDependencies=false
7 |
8 | [Mount]
9 | What=overlayfs:/sysroot
10 | Where=/sysroot
11 | Type=overlayfs
12 | Options=noatime,lowerdir=/,upperdir=/overlay
13 |
--------------------------------------------------------------------------------
/systemd/patches/010-agetty-path-baud.patch:
--------------------------------------------------------------------------------
1 | diff -Nrup systemd-218.orig/units/console-getty.service.m4.in systemd-218/units/console-getty.service.m4.in
2 | --- systemd-218.orig/units/console-getty.service.m4.in 2013-12-18 09:21:28.159729831 -0800
3 | +++ systemd-218/units/console-getty.service.m4.in 2015-02-15 21:48:20.437058659 -0800
4 | @@ -15,7 +15,7 @@ After=rc-local.service
5 | Before=getty.target
6 |
7 | [Service]
8 | -ExecStart=-/sbin/agetty --noclear --keep-baud console 115200,38400,9600 $TERM
9 | +ExecStart=-/usr/sbin/agetty --noclear --keep-baud console 115200,57600,38400,9600 $TERM
10 | Type=idle
11 | Restart=always
12 | RestartSec=0
13 | diff -Nrup systemd-218.orig/units/container-getty@.service.m4.in systemd-218/units/container-getty@.service.m4.in
14 | --- systemd-218.orig/units/container-getty@.service.m4.in 2014-12-08 17:11:59.720865793 -0800
15 | +++ systemd-218/units/container-getty@.service.m4.in 2015-02-15 21:48:32.153059031 -0800
16 | @@ -17,7 +17,7 @@ IgnoreOnIsolate=yes
17 | ConditionPathExists=/dev/pts/%I
18 |
19 | [Service]
20 | -ExecStart=-/sbin/agetty --noclear --keep-baud pts/%I 115200,38400,9600 $TERM
21 | +ExecStart=-/usr/sbin/agetty --noclear --keep-baud pts/%I 115200,57600,38400,9600 $TERM
22 | Type=idle
23 | Restart=always
24 | RestartSec=0
25 | diff -Nrup systemd-218.orig/units/getty@.service.m4 systemd-218/units/getty@.service.m4
26 | --- systemd-218.orig/units/getty@.service.m4 2014-06-16 17:43:43.878882549 -0700
27 | +++ systemd-218/units/getty@.service.m4 2015-02-15 21:43:36.501049638 -0800
28 | @@ -27,7 +27,7 @@ ConditionPathExists=/dev/tty0
29 |
30 | [Service]
31 | # the VT is cleared by TTYVTDisallocate
32 | -ExecStart=-/sbin/agetty --noclear %I $TERM
33 | +ExecStart=-/usr/sbin/agetty --noclear %I $TERM
34 | Type=idle
35 | Restart=always
36 | RestartSec=0
37 | diff -Nrup systemd-218.orig/units/serial-getty@.service.m4 systemd-218/units/serial-getty@.service.m4
38 | --- systemd-218.orig/units/serial-getty@.service.m4 2014-12-04 16:26:51.853977211 -0800
39 | +++ systemd-218/units/serial-getty@.service.m4 2015-02-15 21:48:08.673058285 -0800
40 | @@ -22,7 +22,7 @@ Before=getty.target
41 | IgnoreOnIsolate=yes
42 |
43 | [Service]
44 | -ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
45 | +ExecStart=-/usr/sbin/agetty --login-program /bin/ash --login-options "--login" --skip-login --keep-baud 115200,57600,38400,9600 %I $TERM
46 | Type=idle
47 | Restart=always
48 | UtmpIdentifier=%I
49 |
--------------------------------------------------------------------------------
/systemd/systemd-common.mk:
--------------------------------------------------------------------------------
1 | SYSTEMD_BIN = \
2 | busctl \
3 | journalctl \
4 | systemctl \
5 | systemd-analyze \
6 | systemd-ask-password \
7 | systemd-cat \
8 | systemd-cgls \
9 | systemd-cgtop \
10 | systemd-delta \
11 | systemd-detect-virt \
12 | systemd-escape \
13 | systemd-machine-id-setup \
14 | systemd-notify \
15 | systemd-path \
16 | systemd-run \
17 | systemd-sysusers \
18 | systemd-tty-ask-password-agent
19 |
20 | SYSTEMD_LIB = \
21 | systemd \
22 | systemd-ac-power \
23 | systemd-activate \
24 | systemd-bus-proxyd \
25 | systemd-cgroups-agent \
26 | systemd-fsck \
27 | systemd-initctl \
28 | systemd-journald \
29 | systemd-machine-id-commit \
30 | systemd-remount-fs \
31 | systemd-reply-password \
32 | systemd-shutdown \
33 | systemd-shutdownd \
34 | systemd-sleep \
35 | systemd-socket-proxyd \
36 | systemd-sysctl \
37 | systemd-update-done
38 |
39 | SYSTEMD_SYSTEM_TARGET_WANTS = \
40 | sockets.target.wants \
41 | runlevel1.target.wants \
42 | runlevel2.target.wants \
43 | runlevel3.target.wants \
44 | runlevel4.target.wants \
45 | runlevel5.target.wants \
46 | multi-user.target.wants \
47 | local-fs.target.wants \
48 | sysinit.target.wants
49 |
50 | SYSTEMD_SYSTEM_TARGETS = \
51 | basic.target \
52 | bluetooth.target \
53 | ctrl-alt-del.target \
54 | default.target \
55 | emergency.target \
56 | final.target \
57 | getty.target \
58 | graphical.target \
59 | halt.target \
60 | initrd-fs.target \
61 | initrd-root-fs.target \
62 | initrd-switch-root.target \
63 | initrd.target \
64 | kexec.target \
65 | local-fs-pre.target \
66 | local-fs.target \
67 | machines.target \
68 | multi-user.target \
69 | network-online.target \
70 | nss-lookup.target \
71 | nss-user-lookup.target \
72 | paths.target \
73 | poweroff.target \
74 | printer.target \
75 | reboot.target \
76 | remote-fs-pre.target \
77 | remote-fs.target \
78 | rescue.target \
79 | rpcbind.target \
80 | runlevel0.target \
81 | runlevel1.target \
82 | runlevel2.target \
83 | runlevel3.target \
84 | runlevel4.target \
85 | runlevel5.target \
86 | runlevel6.target \
87 | shutdown.target \
88 | sigpwr.target \
89 | sleep.target \
90 | slices.target \
91 | smartcard.target \
92 | sockets.target \
93 | sound.target \
94 | suspend.target \
95 | swap.target \
96 | sysinit.target \
97 | system-update.target \
98 | timers.target \
99 | time-sync.target \
100 | umount.target
101 |
102 | SYSTEMD_SYSTEM_SLICES = \
103 | -.slice \
104 | system.slice
105 |
106 | SYSTEMD_SYSTEM_SOCKETS = \
107 | syslog.socket \
108 | systemd-initctl.socket \
109 | systemd-journald.socket \
110 | systemd-journald-audit.socket \
111 | systemd-journald-dev-log.socket \
112 | systemd-shutdownd.socket
113 |
114 | SYSTEMD_SYSTEM_PATHS = \
115 | systemd-ask-password-console.path \
116 | systemd-ask-password-wall.path
117 |
118 | SYSTEMD_SYSTEM_SERVICES = \
119 | autovt@.service \
120 | console-getty.service \
121 | console-shell.service \
122 | container-getty@.service \
123 | debug-shell.service \
124 | emergency.service \
125 | getty@.service \
126 | halt-local.service \
127 | initrd-cleanup.service \
128 | initrd-parse-etc.service \
129 | initrd-switch-root.service \
130 | quotaon.service \
131 | rc-local.service \
132 | rescue.service \
133 | serial-getty@.service \
134 | systemd-ask-password-console.service \
135 | systemd-ask-password-wall.service \
136 | systemd-fsck-root.service \
137 | systemd-fsck@.service \
138 | systemd-halt.service \
139 | systemd-initctl.service \
140 | systemd-journald.service \
141 | systemd-journal-catalog-update.service \
142 | systemd-journal-flush.service \
143 | systemd-kexec.service \
144 | systemd-machine-id-commit.service \
145 | systemd-poweroff.service \
146 | systemd-reboot.service \
147 | systemd-remount-fs.service \
148 | systemd-shutdownd.service \
149 | systemd-suspend.service \
150 | systemd-sysctl.service \
151 | systemd-sysusers.service \
152 | systemd-update-done.service \
153 | user@.service
154 |
155 | SYSTEMD_SYSTEM_MOUNTS = \
156 | dev-hugepages.mount \
157 | dev-mqueue.mount \
158 | sys-fs-fuse-connections.mount \
159 | sys-kernel-config.mount \
160 | sys-kernel-debug.mount \
161 | tmp.mount
162 |
163 | SYSTEMD_UDEVD_SYSTEM_SERVICES = \
164 | initrd-udevadm-cleanup-db.service \
165 | systemd-hwdb-update.service \
166 | systemd-udev-settle.service \
167 | systemd-udev-trigger.service
168 |
169 | SYSTEMD_UDEVD_SYSTEM_SOCKETS = \
170 | systemd-udevd-control.socket \
171 | systemd-udevd-kernel.socket
172 |
173 | SYSTEMD_UDEVD_LIBS = \
174 | accelerometer \
175 | ata_id \
176 | cdrom_id \
177 | collect \
178 | mtd_probe \
179 | scsi_id \
180 | v4l_id
--------------------------------------------------------------------------------