diff mbox

fs/common: Create initial console device

Message ID 1351677232-14959-1-git-send-email-markos.chandras@gmail.com
State Changes Requested
Headers show

Commit Message

Markos Chandras Oct. 31, 2012, 9:53 a.m. UTC
From: Markos Chandras <markos.chandras@imgtec.com>

A /dev/console node must be present in rootfs when the Linux kernel
boots otherwise the kernel will print the following warning:
"Warning: unable to open an initial console"

This is because when we use an initramfs along with devtmpfs, the /dev
directory is not populated at this point. This can cause problems when a
program (e.g ldso with early debugging enabled) opens a standard file
descriptor for read/write before these descriptors are actually created by
the init process later on.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
---
 fs/common.mk |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

Comments

Arnout Vandecappelle Oct. 31, 2012, 10:46 p.m. UTC | #1
On 10/31/12 10:53, Markos Chandras wrote:
> From: Markos Chandras<markos.chandras@imgtec.com>
>
> A /dev/console node must be present in rootfs when the Linux kernel
> boots otherwise the kernel will print the following warning:
> "Warning: unable to open an initial console"
>
> This is because when we use an initramfs along with devtmpfs, the /dev
> directory is not populated at this point. This can cause problems when a
> program (e.g ldso with early debugging enabled) opens a standard file
> descriptor for read/write before these descriptors are actually created by
> the init process later on.
>
> Signed-off-by: Markos Chandras<markos.chandras@imgtec.com>

  Good point.  However:

- this is also true for mdev/udev;
- it is only relevant in a cpio/initramfs rootfs;
- it's cleaner to use the device table.

So I'd add a device table line to PACKAGES_PERMISSIONS_TABLE in
fs/cpio/cpio.mk, where the init script is also installed.

  Regards,
  Arnout

> ---
>   fs/common.mk |    6 ++++++
>   1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/fs/common.mk b/fs/common.mk
> index debf7db..d7383d1 100644
> --- a/fs/common.mk
> +++ b/fs/common.mk
> @@ -55,6 +55,12 @@ endif
>   	echo "$(HOST_DIR)/usr/bin/makedevs -d $(FULL_DEVICE_TABLE) $(TARGET_DIR)">>  $(FAKEROOT_SCRIPT)
>   endif
>   	echo "$(ROOTFS_$(2)_CMD)">>  $(FAKEROOT_SCRIPT)
> +	# create initial console if devtmpfs is used
> +ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS),y)
> +	echo -e 'pushd $(TARGET_DIR)/dev/>  /dev/null 2>&1'>>  $(FAKEROOT_SCRIPT)
> +	echo -e '/bin/mknod -m 622 console c 5 1'>>  $(FAKEROOT_SCRIPT)
> +	echo -e 'popd>  /dev/null 2>&1'>>  $(FAKEROOT_SCRIPT)
> +endif
>   	chmod a+x $(FAKEROOT_SCRIPT)
>   	$(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
>   	-@rm -f $(FAKEROOT_SCRIPT) $(FULL_DEVICE_TABLE)
Markos Chandras Nov. 1, 2012, 9:22 a.m. UTC | #2
On Wed, Oct 31, 2012 at 10:46 PM, Arnout Vandecappelle <arnout@mind.be> wrote:
> On 10/31/12 10:53, Markos Chandras wrote:
>>
>> From: Markos Chandras<markos.chandras@imgtec.com>
>>
>> A /dev/console node must be present in rootfs when the Linux kernel
>> boots otherwise the kernel will print the following warning:
>> "Warning: unable to open an initial console"
>>
>> This is because when we use an initramfs along with devtmpfs, the /dev
>> directory is not populated at this point. This can cause problems when a
>> program (e.g ldso with early debugging enabled) opens a standard file
>> descriptor for read/write before these descriptors are actually created by
>> the init process later on.
>>
>> Signed-off-by: Markos Chandras<markos.chandras@imgtec.com>
>
>
>  Good point.  However:
>
> - this is also true for mdev/udev;
> - it is only relevant in a cpio/initramfs rootfs;
> - it's cleaner to use the device table.
>
> So I'd add a device table line to PACKAGES_PERMISSIONS_TABLE in
> fs/cpio/cpio.mk, where the init script is also installed.
>
>  Regards,
>  Arnout
>
>

Hi Arnout,

Hmm I didn't know that the same problem exists in udev/mdev
configurations. I will prepare a new patch
like you suggested.
diff mbox

Patch

diff --git a/fs/common.mk b/fs/common.mk
index debf7db..d7383d1 100644
--- a/fs/common.mk
+++ b/fs/common.mk
@@ -55,6 +55,12 @@  endif
 	echo "$(HOST_DIR)/usr/bin/makedevs -d $(FULL_DEVICE_TABLE) $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
 endif
 	echo "$(ROOTFS_$(2)_CMD)" >> $(FAKEROOT_SCRIPT)
+	# create initial console if devtmpfs is used
+ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS),y)
+	echo -e 'pushd $(TARGET_DIR)/dev/ > /dev/null 2>&1' >> $(FAKEROOT_SCRIPT)
+	echo -e '/bin/mknod -m 622 console c 5 1' >> $(FAKEROOT_SCRIPT)
+	echo -e 'popd > /dev/null 2>&1' >> $(FAKEROOT_SCRIPT)
+endif
 	chmod a+x $(FAKEROOT_SCRIPT)
 	$(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
 	-@rm -f $(FAKEROOT_SCRIPT) $(FULL_DEVICE_TABLE)