rev |
line source |
pascal@14759
|
1 Allow to boot on any directories in a filesystem
|
pascal@14759
|
2 --- linux-3.2.40/Documentation/kernel-parameters.txt
|
pascal@14759
|
3 +++ linux-3.2.40/Documentation/kernel-parameters.txt
|
pascal@14759
|
4 @@ -2304,8 +2304,9 @@
|
pascal@14759
|
5
|
pascal@14759
|
6 ro [KNL] Mount root device read-only on boot
|
pascal@14759
|
7
|
pascal@14759
|
8 - root= [KNL] Root filesystem
|
pascal@14759
|
9 + root= [KNL] Root filesystem and root directory
|
pascal@14759
|
10 See name_to_dev_t comment in init/do_mounts.c.
|
pascal@14759
|
11 + Format: <root_filesystem>[:root_directory]
|
pascal@14759
|
12
|
pascal@14759
|
13 rootdelay= [KNL] Delay (in seconds) to pause before attempting to
|
pascal@14759
|
14 mount the root filesystem
|
pascal@14759
|
15 --- linux-3.2.40/init/do_mounts.c
|
pascal@14759
|
16 +++ linux-3.2.40/init/do_mounts.c
|
pascal@14759
|
17 @@ -28,6 +28,7 @@
|
pascal@14759
|
18 int root_mountflags = MS_RDONLY | MS_SILENT;
|
pascal@14759
|
19 static char * __initdata root_device_name;
|
pascal@14759
|
20 static char __initdata saved_root_name[64];
|
pascal@14759
|
21 +static char __initdata saved_root_directory[256];
|
pascal@14759
|
22 static int root_wait;
|
pascal@14759
|
23
|
pascal@14759
|
24 dev_t ROOT_DEV;
|
pascal@14759
|
25 @@ -255,7 +256,20 @@
|
pascal@14759
|
26
|
pascal@14759
|
27 static int __init root_dev_setup(char *line)
|
pascal@14759
|
28 {
|
pascal@14759
|
29 + char *s;
|
pascal@14759
|
30 +
|
pascal@14759
|
31 + strcpy(saved_root_directory, ".");
|
pascal@14759
|
32 strlcpy(saved_root_name, line, sizeof(saved_root_name));
|
pascal@14759
|
33 + s = strchr(saved_root_name, ':');
|
pascal@14759
|
34 + if (s) {
|
pascal@14759
|
35 + *s = '\0';
|
pascal@14759
|
36 + s = strchr(line, ':');
|
pascal@14759
|
37 + for (s++; *s == '/'; s++);
|
pascal@14759
|
38 + if (*s) {
|
pascal@14759
|
39 + strlcpy(saved_root_directory, s,
|
pascal@14759
|
40 + sizeof(saved_root_directory));
|
pascal@14759
|
41 + }
|
pascal@14759
|
42 + }
|
pascal@14759
|
43 return 1;
|
pascal@14759
|
44 }
|
pascal@14759
|
45
|
pascal@14759
|
46 @@ -554,5 +568,5 @@
|
pascal@14759
|
47 out:
|
pascal@14759
|
48 devtmpfs_mount("dev");
|
pascal@14759
|
49 sys_mount(".", "/", NULL, MS_MOVE, NULL);
|
pascal@14759
|
50 - sys_chroot((const char __user __force *)".");
|
pascal@14759
|
51 + sys_chroot((const char __user __force *)saved_root_directory);
|
pascal@14759
|
52 }
|