diff --git a/Makefile b/Makefile index 39813475..e8c92ff1 100644 --- a/Makefile +++ b/Makefile @@ -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) diff --git a/common.mk b/common.mk index f2a810ab..678e1123 100644 --- a/common.mk +++ b/common.mk @@ -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 diff --git a/finit.c b/finit.c index a6d28ca2..dd661dd3 100644 --- a/finit.c +++ b/finit.c @@ -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"); diff --git a/finit.h b/finit.h index 6595a07d..7729492b 100644 --- a/finit.h +++ b/finit.h @@ -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. */ diff --git a/initctl.c b/initctl.c index 0f004326..6d4005f9 100644 --- a/initctl.c +++ b/initctl.c @@ -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 #include #include @@ -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. */