From: Rob Landley <[email protected]>
The kernel has had CONFIG_DEVTMPFS_MOUNT for years, but it only applied to
fallback ROOT= not initramfs/initmpfs. As long as the config option exists, it
might as well work.
I use this for board bringup: populating a chdir and calling cpio as a normal
user often leaves /dev empty (because mknod requires root access), meaning no
/dev/console for init/main.c to open, meaning init runs without
stdin/stdout/stderr and has to mount devtmpfs and redirect the filehandles blind
with no error output if something goes wrong.
Signed-off-by: Rob Landley <[email protected]>
---
Previously: https://lkml.org/lkml/2017/9/13/651
init/main.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/init/main.c b/init/main.c
index bb984ed79de0..288c73db57f4 100644
--- a/init/main.c
+++ b/init/main.c
@@ -1612,7 +1612,6 @@ static noinline void __init kernel_init_freeable(void)
kunit_run_all_tests();
wait_for_initramfs();
- console_on_rootfs();
/*
* check if there is an early userspace init. If yes, let it do all
@@ -1621,7 +1620,11 @@ static noinline void __init kernel_init_freeable(void)
if (init_eaccess(ramdisk_execute_command) != 0) {
ramdisk_execute_command = NULL;
prepare_namespace();
+ } else if (IS_ENABLED(CONFIG_DEVTMPFS_MOUNT)) {
+ sys_mkdir("/dev", 0755);
+ devtmpfs_mount();
}
+ console_on_rootfs();
/*
* Ok, we have completed the initial bootup, and
Hi Rob,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linux/master]
[also build test ERROR on linus/master v5.16 next-20220116]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Rob-Landley/Wire-up-CONFIG_DEVTMPFS_MOUNT-to-initramfs/20220117-023610
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git daadb3bd0e8d3e317e36bc2c1542e86c528665e5
config: i386-randconfig-a001-20220117 (https://download.01.org/0day-ci/archive/20220117/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project c63a3175c2947e8c1a2d3bbe16a8586600705c54)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/c6b7e8ccdf2b0a9620c9dc0b5e5b2a719b223817
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Rob-Landley/Wire-up-CONFIG_DEVTMPFS_MOUNT-to-initramfs/20220117-023610
git checkout c6b7e8ccdf2b0a9620c9dc0b5e5b2a719b223817
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All errors (new ones prefixed by >>):
init/main.c:780:20: warning: no previous prototype for function 'mem_encrypt_init' [-Wmissing-prototypes]
void __init __weak mem_encrypt_init(void) { }
^
init/main.c:780:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void __init __weak mem_encrypt_init(void) { }
^
static
>> init/main.c:1624:3: error: implicit declaration of function 'sys_mkdir' [-Werror,-Wimplicit-function-declaration]
sys_mkdir("/dev", 0755);
^
init/main.c:1624:3: note: did you mean 'vfs_mkdir'?
include/linux/fs.h:1867:5: note: 'vfs_mkdir' declared here
int vfs_mkdir(struct user_namespace *, struct inode *,
^
1 warning and 1 error generated.
vim +/sys_mkdir +1624 init/main.c
1579
1580 static noinline void __init kernel_init_freeable(void)
1581 {
1582 /* Now the scheduler is fully set up and can do blocking allocations */
1583 gfp_allowed_mask = __GFP_BITS_MASK;
1584
1585 /*
1586 * init can allocate pages on any node
1587 */
1588 set_mems_allowed(node_states[N_MEMORY]);
1589
1590 cad_pid = get_pid(task_pid(current));
1591
1592 smp_prepare_cpus(setup_max_cpus);
1593
1594 workqueue_init();
1595
1596 init_mm_internals();
1597
1598 rcu_init_tasks_generic();
1599 do_pre_smp_initcalls();
1600 lockup_detector_init();
1601
1602 smp_init();
1603 sched_init_smp();
1604
1605 padata_init();
1606 page_alloc_init_late();
1607 /* Initialize page ext after all struct pages are initialized. */
1608 page_ext_init();
1609
1610 do_basic_setup();
1611
1612 kunit_run_all_tests();
1613
1614 wait_for_initramfs();
1615
1616 /*
1617 * check if there is an early userspace init. If yes, let it do all
1618 * the work
1619 */
1620 if (init_eaccess(ramdisk_execute_command) != 0) {
1621 ramdisk_execute_command = NULL;
1622 prepare_namespace();
1623 } else if (IS_ENABLED(CONFIG_DEVTMPFS_MOUNT)) {
> 1624 sys_mkdir("/dev", 0755);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
Hi Rob,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linux/master]
[also build test WARNING on linus/master v5.16 next-20220117]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Rob-Landley/Wire-up-CONFIG_DEVTMPFS_MOUNT-to-initramfs/20220117-023610
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git daadb3bd0e8d3e317e36bc2c1542e86c528665e5
config: h8300-randconfig-s032-20220116 (https://download.01.org/0day-ci/archive/20220117/[email protected]/config)
compiler: h8300-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://github.com/0day-ci/linux/commit/c6b7e8ccdf2b0a9620c9dc0b5e5b2a719b223817
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Rob-Landley/Wire-up-CONFIG_DEVTMPFS_MOUNT-to-initramfs/20220117-023610
git checkout c6b7e8ccdf2b0a9620c9dc0b5e5b2a719b223817
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
sparse warnings: (new ones prefixed by >>)
>> init/main.c:1624:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected char const [noderef] __user *pathname @@ got char * @@
init/main.c:1624:27: sparse: expected char const [noderef] __user *pathname
init/main.c:1624:27: sparse: got char *
vim +1624 init/main.c
1579
1580 static noinline void __init kernel_init_freeable(void)
1581 {
1582 /* Now the scheduler is fully set up and can do blocking allocations */
1583 gfp_allowed_mask = __GFP_BITS_MASK;
1584
1585 /*
1586 * init can allocate pages on any node
1587 */
1588 set_mems_allowed(node_states[N_MEMORY]);
1589
1590 cad_pid = get_pid(task_pid(current));
1591
1592 smp_prepare_cpus(setup_max_cpus);
1593
1594 workqueue_init();
1595
1596 init_mm_internals();
1597
1598 rcu_init_tasks_generic();
1599 do_pre_smp_initcalls();
1600 lockup_detector_init();
1601
1602 smp_init();
1603 sched_init_smp();
1604
1605 padata_init();
1606 page_alloc_init_late();
1607 /* Initialize page ext after all struct pages are initialized. */
1608 page_ext_init();
1609
1610 do_basic_setup();
1611
1612 kunit_run_all_tests();
1613
1614 wait_for_initramfs();
1615
1616 /*
1617 * check if there is an early userspace init. If yes, let it do all
1618 * the work
1619 */
1620 if (init_eaccess(ramdisk_execute_command) != 0) {
1621 ramdisk_execute_command = NULL;
1622 prepare_namespace();
1623 } else if (IS_ENABLED(CONFIG_DEVTMPFS_MOUNT)) {
> 1624 sys_mkdir("/dev", 0755);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]