[Buildroot] Device files and Buildroot

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Sat Dec 3 08:25:53 UTC 2011


Le Sat, 3 Dec 2011 01:25:41 +0100,
Aleksander Dutkowski <adutkowski at gmail.com> a écrit :

> "System configuration --> Custom script to run before creating
> filesystem image" input is for specify a PATH to bash script.
> You you must simply create script, fill with mknod commands (remember
> - mknod can be ran only by root! so do 'sudo mknod')

No, no, no and no ! I'm sorry but this is totally horrible and is
definitely not the way of doing things with Buildroot.

With Buildroot, you have four ways of managing the device files
in /dev. The mechanism used to manage device files is configured from
System configuration -> /dev management. The four ways are :

 * Static using device table. In this case the "System configuration ->
   Path to the device tables" option gives a space-separated list of
   files, each of which containing a list of devices to create at build
   time in the root filesystem. By default, this list is defined to
   just the target/generic/device_table_dev.txt, which creates some
   basic device files. Those device files are created at *build* time
   and are statically present in the root filesystem image generated by
   Buildroot. All basic devices such as /dev/console, /dev/null and al.
   are already present in the default device table. If you are in this
   mode and want to add more device files, then you should add them to
   target/generic/device_table_dev.txt, or better, create your own
   additional device table in
   board/<yourcompany>/<yourproject>/device_table.txt, and add it to
   the space-separated list in "System configuration -> Path to the
   device tables".

 * Dynamic using devtmpfs only. Devtmpfs is a virtual filesystem
   implemented in the Linux kernel that can be mounted in /dev. The
   kernel will automatically create/remove device files from this
   filesystem as devices appear/disappear from the system. devtmpfs
   exists in the Linux kernel since 2.6.32. When this option is
   selected *and* Buildroot is responsible for building the kernel,
   then Buildroot ensures that the kernel is built with the appropriate
   options to make devtmpfs work. When Buildroot is *not* responsible
   for building the kernel (the user does it on its own), then the user
   is responsible for making sure that CONFIG_DEVTMPFS and
   CONFIG_DEVTMPFS_MOUNT are both enabled in the kernel configuration.
   When this mode is used, no static device files are created in the
   root filesystem: the device files are automatically created at boot
   time by the kernel.

 * Dynamic using mdev. This is exactly like with 'devtmpfs' (i.e,
   devtmpfs is required for this mode to work), but Buildroot adds the
   mdev utility into the mix. mdev is an utility bundled with Busybox
   which gets executed when the kernel notifies that a device has been
   added or removed from the system. Compared to a pure 'devtmpfs'
   solution, it allows to execute arbitrary applications or shell
   scripts when devices appear/disappear. mdev behaviour can be
   configured from /etc/mdev.conf, refer to the Busybox documentation
   for more details. Since this case relies on devtmpfs, there are no
   static device files created in the root filesystem, and no device
   table is used.

 * Dynamic using udev. This is also exactly like with 'devtmpfs' (i.e,
   devtmpfs is required for this mode to work), but Buildroot adds the
   udev daemon into the mix. udev is the "device event manager" used in
   all Linux desktop and server systems and can be seen as a
   "full-featured" mdev. It is more configurable, provides a library
   called libudev to allow applications to query for which devices are
   available, etc.

So, no, do *NOT* ever use the post-build script to create device files.
Just understand how those device files work and the different mode
Buildroot provides to handle them.

If you need precisions or have questions on this topic, don't hesitate
to ask. We have many people on the list ready to answer your questions.

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com



More information about the buildroot mailing list