How are device nodes created in Embedded Linux without udev? - linux

I have a linux built with a buildroot for a Beaglebone wireless board. In the root file system, when it is still on the host and has not been copied to the target, in the /dev folder, there are device files fd, log, stderr, stdin, stdout only. When I load this root file system on the target and launch the target, there are many more devices - many tty, zero, urandom etc. They are created during the Linux boot process. Buildroot built the system using simple busybox init program. In init scripts i do not see the process of creating device nodes, who creates this device nodes?

Your system is probably using devtmpfs. It is a pseudo filesystem that is mounted on /dev where the kernel will populate device nodes for devices it knows about.
udev relies on devtmpfs since commit 220893b3cbdb ("remove mknod() logic and rely on 'devtmpfs'") which is 9 years old now.

If your target is running busybox, you may have the mdev applet. Look at the installed applets with busybox --help.
mdev uses a configuration file: /etc/mdev.conf

Related

Why mdev or udev does not create disk nodes when used kernel is from any distribution

I created a minimal linux init with just busybox to do experiments or use it to recover my work linux. But i got stuck and was fustruted alot that i could not find any disks in /dev. I tried both mounting udev as devtmpfs and tmpfs with mdev -s. Both none seemed to work. Lickily i tried compiling a kernel and booting it i realised kernel was the issue. I also noticed my pluged mouse light was off as if the pc was turned off
I tried kernel from both debian and ubuntu. But same result.
Now im happy with what i got. But using custom kernel means i cant make use of the already existing drivers on a target linux when i do chroot.
So i wanna know why the kernels that come with distros does not generate disk blocks
Edit 1:
My question is,why i cant find ant /dev/sdX or my external keyboard does not work when i boot with kernel from distro isos

Create EFI-stub boot entry from Windows

I use Linux kerne EFI stub to boot. Now I have run into an emergency, because I have lost my UEFI boot entry and I am stuck with Windows.
Is there any possibility to create UEFI NVRAM boot entry for Linux kernel?
I have managed to create it, but without kernel args (like: root=PARTUUID=....) and Linux is not booting without them.
Is there a way how to create boot menu entry from Windows 10 with CLI args?
One solution could be:
Mount the ESP partition under windows.
Create a startup.nsh script to pass kernel parameters
Create boot menu entry which points to the startup.nsh
One way you can resolve this:
You can run any live linux OS, chroot to your still existing installed Linux Distribution, and reinstall grub, which will re-add Linux to the boot menu alongside Windows.

module_platform_driver order and mounting rootf

I am working on some embedded Linux system and I'm trying to run Linux from USB pendrive. I put "root=/dev/sda3 rootwait" to commandline parameters of the Linux but it doesn't recognize the USB at all when it should mount /dev/sda3.
When I try to run from /dev/mmcblk0p2 everything is ok - Linux kernel recognizes this device BEFORE mounting the rootfs. The problem is only when I try to mount USB as a rootfs.
The USB is recognized only when I run the system from initramfs, but it recognized AFTER the rootfs is mounted.
My question is: how can I move initiation of USB subsystem before mounting rootfs?

use GPIO sysfs in Ubuntu 14.04 with kernel 3.14.1

I am trying to get a viperboard USB GPIO board running on ubuntu.
I already got a newer kernel, because I understood that the 3.13 kernel doesn't support the viperboard so well.
What I want to do is to use the /sys/class/gpio sysfs interface for GPIO so I can develop raspberry pi projects on my PC and then use them
on my RPi.
My Problem - the /sys/class/gpio directory is missing.
The config of the kernel shows:
CONFIG_GPIO_SYSFS is not set
Does this mean I have to compile a new kernel?
I just had to recompile the kernel with CONFIG_GPIO_SYSFS set; now I see the /sys/class/gpio directory. Ubuntu does not enable gpio sysfs by default.
I solved my Ubuntu-GPIO problems with the pigpio library.
It runs a daemon started with sudo, which is controlling the GPIO pins. A client program (started without sudo) communicates with the deamon and thus indirectly controls the pins.
You can even run the client on a remote machine. This way a ROS node can control the GPIO pins of a remote raspberry, which itself isn't even running ROS.
See this and this post for reference.

Not booting RAM file system embedded in Linux Kernel

We have a Linux embedded system that we would like to boot from Flash file system, but have a RAMFS embedded into the kernel that can be seen by the kernel after boot.
Is it possible to embed a RAM File system inside the Linux Kernel (v3.3), that can be used after kernel boot, that the kernel does not use for booting?
Thanks.
Absolutely! Just make a script which mounts a tmpfs on your preferred mount point and that extracts in it a tarball that has been bundled in you rootfs.

Resources