From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Petazzoni Date: Sat, 3 Dec 2011 09:25:53 +0100 Subject: [Buildroot] Device files and Buildroot In-Reply-To: References: <003b01cca958$91486a00$0400a8c0@dspcgrnzks9p98> <001c01ccb07c$85e85190$0400a8c0@dspcgrnzks9p98> <201112020734.00122.minimod@morethan.org> <001201ccb10b$22c23010$0400a8c0@dspcgrnzks9p98> <001601ccb112$a16043b0$0400a8c0@dspcgrnzks9p98> <1322847199.55324.YahooMailNeo@web161204.mail.bf1.yahoo.com> <002f01ccb11c$9a835280$0400a8c0@dspcgrnzks9p98> <003e01ccb120$6f8f16a0$0400a8c0@dspcgrnzks9p98> Message-ID: <20111203092553.0acf80a5@skate> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Le Sat, 3 Dec 2011 01:25:41 +0100, Aleksander Dutkowski 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///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