diff options
Diffstat (limited to 'chapter08/udev.xml')
-rw-r--r-- | chapter08/udev.xml | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/chapter08/udev.xml b/chapter08/udev.xml new file mode 100644 index 000000000..c1e2af312 --- /dev/null +++ b/chapter08/udev.xml @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-udev" role="wrap" revision="sysv"> + <?dbhtml filename="udev.html"?> + + <sect1info condition="script"> + <productname>udev</productname> + <productnumber>&systemd-version;</productnumber> + <address>&systemd-url;</address> + </sect1info> + + <title>Udev from Systemd-&systemd-version;</title> + + <indexterm zone="ch-system-udev"> + <primary sortas="a-Udev">Udev</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Udev package contains programs for dynamic creation of device + nodes.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&udev-fin-sbu;</seg> + <seg>&udev-fin-du;</seg> + </seglistitem> + </segmentedlist> + </sect2> + + <sect2 role="installation"> + <title>Installation of Udev</title> + + <para>Udev is part of the systemd-&systemd-version; package. Use + the systemd-&systemd-version;.tar.xz file as the source tarball.</para> + + <para>Remove two unneeded groups, + <systemitem class="groupname">render</systemitem> and + <systemitem class="groupname">sgx</systemitem>, from the default udev + rules:</para> + + <screen><userinput remap="pre">sed -i -e 's/GROUP="render"/GROUP="video"/' \ + -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in</userinput></screen> + + <para>Prepare Udev for compilation:</para> + +<screen><userinput remap="configure">mkdir -p build +cd build + +meson setup \ + --prefix=/usr \ + --buildtype=release \ + -Dmode=release \ + -Ddev-kvm-mode=0660 \ + -Dlink-udev-shared=false \ + ..</userinput></screen> + + <variablelist> + <title>The meaning of the meson options:</title> + + <varlistentry> + <term><parameter>--buildtype=release</parameter></term> + <listitem> + <para>This switch overrides the default buildtype + (<quote>debug</quote>), which produces unoptimized + binaries.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dmode=release</parameter></term> + <listitem> + <para>Disable some features considered experimental by upstream. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Ddev-kvm-mode=0660</parameter></term> + <listitem> + <para>The default udev rule would allow all users to access + <filename class='devicefile'>/dev/kvm</filename>. The editors + consider it dangerous. This option overrides it.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dlink-udev-shared=false</parameter></term> + <listitem> + <para>This option prevents udev from linking to the internal + systemd shared library, + <systemitem class='library'>libsystemd-shared</systemitem>. + This library is designed to be shared by many Systemd components + and it's too overkill for a udev-only installation.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Only build the components needed for udev:</para> + + <screen><userinput remap="make">ninja udevadm systemd-hwdb \ + $(grep -o -E "^build (src/libudev|src/udev|rules.d|hwdb.d)[^:]*" \ + build.ninja | awk '{ print $2 }') \ + $(realpath libudev.so --relative-to .)</userinput></screen> + + <para>Install the package:</para> + + <screen><userinput remap="install">install -vm755 -d {/usr/lib,/etc}/udev/{hwdb,rules}.d +install -vm755 udevadm /usr/bin/ +install -vm755 systemd-hwdb /usr/bin/udev-hwdb +ln -sv ../bin/udevadm /usr/sbin/udevd +cp -av libudev.so{,*[0-9]} /usr/lib/ +install -vm644 ../src/libudev/libudev.h /usr/include/ +install -vm644 src/libudev/*.pc /usr/lib/pkgconfig/ +install -vm644 src/udev/*.pc /usr/share/pkgconfig/ +install -vm644 ../src/udev/udev.conf /etc/udev/ +install -vm644 rules.d/* ../rules.d/{*.rules,README} /usr/lib/udev/rules.d/ +install -vm644 hwdb.d/* ../hwdb.d/{*.hwdb,README} /usr/lib/udev/hwdb.d/ +install -vm755 $(find src/udev -type f | grep -F -v ".") /usr/lib/udev</userinput></screen> + + <para>Install some custom rules and support files useful in an LFS + environment:</para> + +<screen><userinput remap="install">tar -xvf ../../&udev-lfs-version;.tar.xz +make -f &udev-lfs-version;/Makefile.lfs install</userinput></screen> + + </sect2> + + <sect2 id="conf-udev" role="configuration"> + <title>Configuring Udev</title> + + <indexterm zone="conf-udev"> + <primary sortas="a-Udev">Udev</primary> + <secondary>configuring</secondary> + </indexterm> + + <indexterm zone="conf-udev"> + <primary sortas="e-/etc/udev/hwdb.bin">/etc/udev/hwdb.bin</primary> + </indexterm> + + <para>Information about hardware devices is maintained in the + <filename class="directory">/etc/udev/hwdb.d</filename> and + <filename class="directory">/usr/lib/udev/hwdb.d</filename> directories. + <application>Udev</application> needs that information to be compiled + into a binary database <filename>/etc/udev/hwdb.bin</filename>. Create the + initial database:</para> + +<screen><userinput>udev-hwdb update</userinput></screen> + + <para>This command needs to be run each time the hardware information is + updated.</para> + + </sect2> + + <sect2 id="contents-udev" role="content"> + <title>Contents of Udev</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>udevadm, udevd (symlink to udevadm), and udev-hwdb</seg> + + <seg>libudev.so</seg> + + <seg>/etc/udev and /usr/lib/udev</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + <varlistentry id="udevadm" revision="sysv"> + <term><command>udevadm</command></term> + <listitem> + <para>Generic udev administration tool: controls the udevd daemon, + provides info from the Udev database, monitors uevents, waits for + uevents to finish, tests Udev configuration, and triggers uevents + for a given device</para> + <indexterm zone="ch-system-udev udevadm"> + <primary sortas="b-udevadm">udevadm</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="udevd"> + <term><command>udevd</command></term> + <listitem> + <para>A daemon that listens for uevents on the netlink socket, + creates devices and runs the configured external programs in + response to these uevents</para> + <indexterm zone="ch-system-udev udevd"> + <primary sortas="b-udevd">udevd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="udev-hwdb"> + <term><command>udev-hwdb</command></term> + <listitem> + <para>Updates or query the hardware database.</para> + <indexterm zone="ch-system-udev udev-hwdb"> + <primary sortas="b-udev-hwdb">udev-hwdb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libudev"> + <term><filename class="libraryfile">libudev</filename></term> + <listitem> + <para>A library interface to udev device information</para> + <indexterm zone="ch-system-udev libudev"> + <primary sortas="c-libudev">libudev</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="etc-udev"> + <term><filename class="directory">/etc/udev</filename></term> + <listitem> + <para>Contains Udev configuration files, + device permissions, and rules for device naming</para> + <indexterm zone="ch-system-udev etc-udev"> + <primary sortas="e-/etc/udev">/etc/udev</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> |