mirror of
https://github.com/troglobit/finit.git
synced 2026-10-02 22:13:01 +07:00
Assume kernel has devtmpfs enabled --> cleanup device creation & mount
Cleanup device creation and initial mount by assuming that the kernel has devtmpfs enabled. This is the default for most modern GNU/Linux distributions. See http://lwn.net/Articles/331818/ for more info. Also, since finit is targeted at deeply embedded systems hooks for the BusyBox udev replacement, mdev has been added. If MDEV is defined in the build it will take care of both hotplugging of devices and initial setup of /dev Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
@@ -31,13 +31,14 @@ EXEC = finit
|
||||
OBJS = finit.o helpers.o initctl.o signal.o
|
||||
SRCS = $(OBJS:.o=.c)
|
||||
DEPS = $(addprefix .,$(SRCS:.c=.d))
|
||||
CPPFLAGS += -DVERSION=\"$(VERSION)\" -DWHOAMI=\"`whoami`@`hostname`\"
|
||||
CPPFLAGS += -DLISTEN_INITCTL -DBUILTIN_RUNPARTS
|
||||
CPPFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_GNU_SOURCE
|
||||
CFLAGS += -W -Wall -Werror -Os
|
||||
# Disable annoying gcc warning for "warn_unused_result", see GIT 37af997
|
||||
CPPFLAGS += -U_FORTIFY_SOURCE
|
||||
CPPFLAGS += -I$(ROOTDIR)/$(CONFIG_LINUXDIR)/include/
|
||||
CFLAGS += -W -Wall -Werror -Os
|
||||
# Build for embedded systems, not notebook by default, see finit.h
|
||||
CPPFLAGS += -DEMBEDDED_SYSTEM -DBUILTIN_RUNPARTS
|
||||
CPPFLAGS += -DVERSION=\"$(VERSION)\" -DWHOAMI=\"`whoami`@`hostname`\"
|
||||
CPPFLAGS += -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_GNU_SOURCE
|
||||
|
||||
prefix ?= /usr/local
|
||||
sysconfdir ?= /etc
|
||||
@@ -52,21 +53,22 @@ $(OBJS): Makefile
|
||||
|
||||
finit: $(OBJS)
|
||||
|
||||
# @ln -sf /sbin/finit /sbin/init
|
||||
install: all
|
||||
@install -d $(DESTDIR)$(prefix)/sbin
|
||||
@install -d $(DESTDIR)$(sysconfdir)
|
||||
@install -d $(DESTDIR)$(datadir)
|
||||
@install -d $(DESTDIR)$(mandir)
|
||||
@for file in $(EXEC); do \
|
||||
@for file in $(EXEC); do \
|
||||
printf " INSTALL $(DESTDIR)$(prefix)/sbin/$$file\n"; \
|
||||
install -m 0755 $$file $(DESTDIR)$(prefix)/sbin/$$file; \
|
||||
done
|
||||
@ln -sf /sbin/finit /sbin/init
|
||||
|
||||
uninstall:
|
||||
-@for file in $(EXEC); do \
|
||||
printf " REMOVE $(DESTDIR)$(prefix)/sbin/$$file\n"; \
|
||||
$(RM) $(DESTDIR)$(prefix)/sbin/$$file; \
|
||||
done
|
||||
-@$(RM) /sbin/finit /sbin/init
|
||||
|
||||
clean:
|
||||
-@$(RM) $(OBJS) $(DEPS) $(EXEC)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Some junk files we always want to be removed when doing a make clean.
|
||||
JUNK = *~ *.bak *.aux *.dvi *.idx *.ind *.log *.ps *.map .*.d DEADJOE semantic.cache *.gdb *.elf core core.*
|
||||
RM := -@$(RM)
|
||||
MAKE := @$(MAKE)
|
||||
MAKEFLAGS = --no-print-directory
|
||||
|
||||
|
||||
@@ -79,8 +79,24 @@ int main(void)
|
||||
chdir("/");
|
||||
umask(022);
|
||||
|
||||
/*
|
||||
* Mount base file system, kernel is assumed to run devtmpfs for /dev
|
||||
*/
|
||||
mount("none", "/proc", "proc", 0, NULL);
|
||||
mount("none", "/proc/bus/usb", "usbfs", 0, NULL);
|
||||
mount("none", "/sys", "sysfs", 0, NULL);
|
||||
mkdir("/dev/pts", 0755);
|
||||
mkdir("/dev/shm", 0755);
|
||||
mount("none", "/dev/pts", "devpts", 0, "gid=5,mode=620");
|
||||
mount("none", "/dev/shm", "tmpfs", 0, NULL);
|
||||
|
||||
/*
|
||||
* Populate /dev and prepare for runtime events from kernel.
|
||||
*/
|
||||
#ifdef MDEV
|
||||
system("sysctl -w kernel.hotplug=" MDEV);
|
||||
system(MDEV " -s");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Parse kernel parameters
|
||||
@@ -153,44 +169,12 @@ int main(void)
|
||||
system(cmd);
|
||||
continue;
|
||||
}
|
||||
#ifdef MAKE_DEVICES
|
||||
/* This is used if the system uses udev and doesn't
|
||||
* mount /dev as tmpfs in the initrd, or if it doesn't
|
||||
* use an initrd. Mount /dev as tmpfs and create basic
|
||||
* device nodes.
|
||||
*/
|
||||
if (MATCH_CMD(line, "mountdev", x)) {
|
||||
mount("none", "/dev", "tmpfs", 0, "mode=0755");
|
||||
chardev("/dev/null", 0666, 1, 3);
|
||||
blkdev("/dev/sda1", 0660, 8, 1);
|
||||
blkdev("/dev/sda2", 0660, 8, 2);
|
||||
blkdev("/dev/sda3", 0660, 8, 3);
|
||||
blkdev("/dev/sda4", 0660, 8, 4);
|
||||
blkdev("/dev/sda5", 0660, 8, 5);
|
||||
blkdev("/dev/sda6", 0660, 8, 6);
|
||||
#ifdef MAKE_DEV_VCS
|
||||
/* Caio reports that newer X.org needs these */
|
||||
blkdev("/dev/vcs1", 0660, 7, 1);
|
||||
blkdev("/dev/vcs2", 0660, 7, 2);
|
||||
blkdev("/dev/vcs3", 0660, 7, 3);
|
||||
blkdev("/dev/vcs4", 0660, 7, 4);
|
||||
blkdev("/dev/vcsa1", 0660, 7, 129);
|
||||
blkdev("/dev/vcsa2", 0660, 7, 130);
|
||||
blkdev("/dev/vcsa3", 0660, 7, 131);
|
||||
blkdev("/dev/vcsa4", 0660, 7, 132);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
/* This works only if /dev is tmpfs! If not, create
|
||||
* devices statically on the filesystem
|
||||
*/
|
||||
if (MATCH_CMD(line, "mknod ", x)) {
|
||||
strcpy(cmd, "/bin/mknod ");
|
||||
build_cmd(cmd, x, CMD_SIZE);
|
||||
system(cmd);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
@@ -203,42 +187,12 @@ int main(void)
|
||||
#ifdef REMOUNT_ROOTFS_RW
|
||||
system("/bin/mount -n -o remount,rw /");
|
||||
#endif
|
||||
umask(0);
|
||||
|
||||
#ifdef MAKE_DEVICES
|
||||
mkdir("/dev/shm", 0755);
|
||||
mkdir("/dev/pts", 0755);
|
||||
#endif
|
||||
|
||||
mount("none", "/dev/pts", "devpts", 0, "gid=5,mode=620");
|
||||
mount("none", "/dev/shm", "tmpfs", 0, NULL);
|
||||
mount("none", "/tmp", "tmpfs", 0, "mode=1777,size=128m");
|
||||
mount("none", "/var/run", "tmpfs", 0, "mode=0755");
|
||||
mount("none", "/var/lock", "tmpfs", 0, "mode=1777");
|
||||
mount("none", "/proc/bus/usb", "usbfs", 0, NULL);
|
||||
#ifdef SYSROOT
|
||||
mount(SYSROOT, "/", NULL, MS_MOVE, NULL);
|
||||
|
||||
_d("make devices");
|
||||
#ifdef MAKE_DEVICES
|
||||
mkdir("/dev/input", 0755);
|
||||
chardev("/dev/urandom", 0666, 1, 9);
|
||||
chardev("/dev/ptmx", 0666, 5, 2);
|
||||
chardev("/dev/null", 0666, 1, 3);
|
||||
chmod("/dev/null", 0666);
|
||||
chardev("/dev/mem", 0640, 1, 1);
|
||||
chardev("/dev/tty0", 0660, 4, 0);
|
||||
chardev("/dev/tty1", 0660, 4, 1);
|
||||
chardev("/dev/tty2", 0660, 4, 2);
|
||||
chardev("/dev/tty3", 0660, 4, 3);
|
||||
chardev("/dev/input/mice", 0660, 13, 63);
|
||||
chardev("/dev/input/event0", 0660, 13, 64);
|
||||
chardev("/dev/agpgart", 0660, 10, 175);
|
||||
blkdev("/dev/loop0", 0600, 7, 0);
|
||||
#endif
|
||||
|
||||
umask(0);
|
||||
unlink("/etc/mtab");
|
||||
system("mount -a");
|
||||
|
||||
umask(0022);
|
||||
|
||||
/*
|
||||
@@ -296,9 +250,9 @@ int main(void)
|
||||
run_parts("/etc/resolvconf/update.d", "-i", NULL);
|
||||
#else
|
||||
system(RUNPARTS " --arg=i /etc/resolvconf/update.d");
|
||||
#endif
|
||||
#endif /* BUILTIN_RUNPARTS */
|
||||
chdir("/");
|
||||
#endif
|
||||
#endif /* USE_ETC_RESOLVCONF_RUN */
|
||||
|
||||
#ifdef TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||
touch("/etc/network/run/ifstate");
|
||||
|
||||
@@ -47,47 +47,57 @@
|
||||
|
||||
/* Distribution configuration */
|
||||
|
||||
#if defined DIST_MDV /* Mandriva */
|
||||
#define RANDOMSEED "/var/lib/random-seed"
|
||||
#define SYSROOT "/sysroot"
|
||||
#define CONSOLE "/dev/console"
|
||||
#define GETTY "/usr/bin/openvt /sbin/mingetty tty2"
|
||||
#define RUNPARTS "/usr/bin/run-parts"
|
||||
#define REMOUNT_ROOTFS_RW
|
||||
#define MAKE_DEVICES
|
||||
#define MAKE_DEV_VCS
|
||||
#define PAM_CONSOLE
|
||||
#define LISTEN_INITCTL
|
||||
#define RUNLEVEL 5
|
||||
#define USE_MESSAGE_BUS
|
||||
#if defined EMBEDDED_SYSTEM
|
||||
# define CONSOLE "/dev/console"
|
||||
# define MDEV "/sbin/mdev"
|
||||
# define GETTY "/sbin/getty -L 115200 ttyS0 vt100"
|
||||
# define LISTEN_INITCTL
|
||||
#elif defined DIST_MDV /* Mandriva */
|
||||
# define RANDOMSEED "/var/lib/random-seed"
|
||||
# define SYSROOT "/sysroot"
|
||||
# define CONSOLE "/dev/console"
|
||||
# define GETTY "/usr/bin/openvt /sbin/mingetty tty2"
|
||||
# define RUNPARTS "/usr/bin/run-parts"
|
||||
# define REMOUNT_ROOTFS_RW
|
||||
# define PAM_CONSOLE
|
||||
# define LISTEN_INITCTL
|
||||
# define RUNLEVEL 5
|
||||
# define USE_MESSAGE_BUS
|
||||
#elif defined DIST_EEEXUBUNTU /* eeeXubuntu */
|
||||
#define RANDOMSEED "/var/lib/urandom/random-seed"
|
||||
#define SYSROOT "/sysroot"
|
||||
#define CONSOLE "/dev/console"
|
||||
#define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
|
||||
#define RUNPARTS "/bin/run-parts"
|
||||
#define REMOUNT_ROOTFS_RW
|
||||
#define MAKE_DEVICES
|
||||
#define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||
#define LISTEN_INITCTL
|
||||
#else /* original Eeepc distribution */
|
||||
#define RANDOMSEED "/var/lib/urandom/random-seed"
|
||||
#define SYSROOT "/mnt"
|
||||
#define CONSOLE "/dev/console"
|
||||
#define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
|
||||
#define RUNPARTS "/bin/run-parts"
|
||||
#define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||
#define USE_ETC_RESOLVCONF_RUN
|
||||
# define RANDOMSEED "/var/lib/urandom/random-seed"
|
||||
# define SYSROOT "/sysroot"
|
||||
# define CONSOLE "/dev/console"
|
||||
# define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
|
||||
# define RUNPARTS "/bin/run-parts"
|
||||
# define REMOUNT_ROOTFS_RW
|
||||
# define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||
# define LISTEN_INITCTL
|
||||
#elif defined DIST_ORIGEEE /* original EeePC distribution */
|
||||
# define RANDOMSEED "/var/lib/urandom/random-seed"
|
||||
# define SYSROOT "/mnt"
|
||||
# define CONSOLE "/dev/console"
|
||||
# define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
|
||||
# define RUNPARTS "/bin/run-parts"
|
||||
# define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||
# define USE_ETC_RESOLVCONF_RUN
|
||||
#else /* Ubuntu */
|
||||
# define RANDOMSEED "/var/lib/urandom/random-seed"
|
||||
# define CONSOLE "/dev/console"
|
||||
# define MDEV "\"/bin/busybox mdev\""
|
||||
# define GETTY "/usr/bin/openvt /sbin/getty 38400 tty2"
|
||||
# define REMOUNT_ROOTFS_RW
|
||||
# define TOUCH_ETC_NETWORK_RUN_IFSTATE
|
||||
# define LISTEN_INITCTL
|
||||
#endif
|
||||
|
||||
#define SYNC_SHUTDOWN "/var/lock/finit.shutdown"
|
||||
#define SYNC_STOPPED "/var/lock/finit.stopped"
|
||||
|
||||
#ifndef DEFUSER
|
||||
#define DEFUSER "user"
|
||||
# define DEFUSER "user"
|
||||
#endif
|
||||
#ifndef DEFHOST
|
||||
#define DEFHOST "noname"
|
||||
# define DEFHOST "noname"
|
||||
#endif
|
||||
|
||||
#define LINE_SIZE 1024
|
||||
@@ -96,16 +106,16 @@
|
||||
#define HOSTNAME_SIZE 32
|
||||
|
||||
#ifndef touch
|
||||
#define touch(x) mknod((x), S_IFREG|0644, 0)
|
||||
# define touch(x) mknod((x), S_IFREG|0644, 0)
|
||||
#endif
|
||||
#ifndef chardev
|
||||
#define chardev(x,m,maj,min) mknod((x), S_IFCHR|(m), makedev((maj),(min)))
|
||||
# define chardev(x,m,maj,min) mknod((x), S_IFCHR|(m), makedev((maj),(min)))
|
||||
#endif
|
||||
#ifndef blkdev
|
||||
#define blkdev(x,m,maj,min) mknod((x), S_IFBLK|(m), makedev((maj),(min)))
|
||||
# define blkdev(x,m,maj,min) mknod((x), S_IFBLK|(m), makedev((maj),(min)))
|
||||
#endif
|
||||
#ifndef fexist
|
||||
#define fexist(x) (access(x, F_OK) != -1)
|
||||
# define fexist(x) (access(x, F_OK) != -1)
|
||||
#endif
|
||||
|
||||
/* Match one command. */
|
||||
|
||||
@@ -22,7 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifdef LISTEN_INITCTL
|
||||
#include <features.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
@@ -45,6 +44,7 @@ struct init_request {
|
||||
char data[368];
|
||||
};
|
||||
|
||||
#ifdef LISTEN_INITCTL
|
||||
/* Standard reboot/shutdown utilities talk to init using /dev/initctl.
|
||||
* We should check if the fifo was recreated and reopen it.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user