Module Name: src
Committed By: nat
Date: Thu Apr 30 13:46:47 UTC 2015
Modified Files:
src/sys/arch/amd64/conf: Makefile.amd64
src/sys/arch/arm/conf: Makefile.arm
src/sys/kern: init_main.c
Added Files:
src/sys/dev/splash: splash.mk
Log Message:
Added a new option for embedding a splash screen into kernel.
Add: options SPLASHSCREEN
makeoptions SPLASHSCREEN_IMAGE="path/to/image"
to your config file. So far it will work on amd64 and RPI/RPI2.
This commit was with ideas, help, and OK from jmcneill@.
To generate a diff of this commit:
cvs rdiff -u -r1.46 -r1.47 src/sys/arch/amd64/conf/Makefile.amd64
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/arm/conf/Makefile.arm
cvs rdiff -u -r0 -r1.1 src/sys/dev/splash/splash.mk
cvs rdiff -u -r1.464 -r1.465 src/sys/kern/init_main.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/conf/Makefile.amd64
diff -u src/sys/arch/amd64/conf/Makefile.amd64:1.46 src/sys/arch/amd64/conf/Makefile.amd64:1.47
--- src/sys/arch/amd64/conf/Makefile.amd64:1.46 Sat Nov 15 12:42:56 2014
+++ src/sys/arch/amd64/conf/Makefile.amd64 Thu Apr 30 13:46:47 2015
@@ -1,4 +1,5 @@
-# $NetBSD: Makefile.amd64,v 1.46 2014/11/15 12:42:56 uebayasi Exp $
+# $NetBSD: Makefile.amd64,v 1.47 2015/04/30 13:46:47 nat Exp $
+
# Makefile for NetBSD
#
@@ -73,6 +74,10 @@ copy.o: ${AMD64}/amd64/copy.S assym.h
spl.o: ${AMD64}/amd64/spl.S assym.h
${NORMAL_S}
+.if defined(SPLASHSCREEN_IMAGE)
+.include "$S/dev/splash/splash.mk"
+.endif
+
##
## (5) link settings
##
Index: src/sys/arch/arm/conf/Makefile.arm
diff -u src/sys/arch/arm/conf/Makefile.arm:1.45 src/sys/arch/arm/conf/Makefile.arm:1.46
--- src/sys/arch/arm/conf/Makefile.arm:1.45 Sun Aug 17 21:17:43 2014
+++ src/sys/arch/arm/conf/Makefile.arm Thu Apr 30 13:46:47 2015
@@ -1,4 +1,5 @@
-# $NetBSD: Makefile.arm,v 1.45 2014/08/17 21:17:43 joerg Exp $
+# $NetBSD: Makefile.arm,v 1.46 2015/04/30 13:46:47 nat Exp $
+
# Makefile for NetBSD
#
@@ -74,6 +75,10 @@ ${SYSTEM_FIRST_OBJ}: ${SYSTEM_FIRST_SFIL
locore.o: ${ARM}/arm32/locore.S assym.h
${NORMAL_S}
+.if defined(SPLASHSCREEN_IMAGE)
+.include "$S/dev/splash/splash.mk"
+.endif
+
##
## (5) link settings
##
Index: src/sys/kern/init_main.c
diff -u src/sys/kern/init_main.c:1.464 src/sys/kern/init_main.c:1.465
--- src/sys/kern/init_main.c:1.464 Mon Apr 27 07:51:28 2015
+++ src/sys/kern/init_main.c Thu Apr 30 13:46:47 2015
@@ -1,4 +1,5 @@
-/* $NetBSD: init_main.c,v 1.464 2015/04/27 07:51:28 pgoyette Exp $ */
+/* $NetBSD: init_main.c,v 1.465 2015/04/30 13:46:47 nat Exp $ */
+
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +98,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.464 2015/04/27 07:51:28 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.465 2015/04/30 13:46:47 nat Exp $");
#include "opt_ddb.h"
#include "opt_ipsec.h"
@@ -113,6 +114,12 @@ __KERNEL_RCSID(0, "$NetBSD: init_main.c,
#include "opt_wapbl.h"
#include "opt_ptrace.h"
#include "opt_rnd_printf.h"
+#include "opt_splash.h"
+
+#if defined(SPLASHSCREEN) && defined(SPLASHSCREEN_IMAGE)
+extern void *_binary_splash_image_start;
+extern void *_binary_splash_image_end;
+#endif
#include "drvctl.h"
#include "ksyms.h"
@@ -218,6 +225,7 @@ __KERNEL_RCSID(0, "$NetBSD: init_main.c,
#include <uvm/uvm.h> /* extern struct uvm uvm */
#include <dev/cons.h>
+#include <dev/splash/splash.h>
#include <net/bpf.h>
#include <net/if.h>
@@ -356,6 +364,13 @@ main(void)
/* Initialize the buffer cache */
bufinit();
+
+#if defined(SPLASHSCREEN) && defined(SPLASHSCREEN_IMAGE)
+ size_t splash_size = (&_binary_splash_image_end -
+ &_binary_splash_image_start) * sizeof(void *);
+ splash_setimage(&_binary_splash_image_start, splash_size);
+#endif
+
/* Initialize sockets. */
soinit();
Added files:
Index: src/sys/dev/splash/splash.mk
diff -u /dev/null src/sys/dev/splash/splash.mk:1.1
--- /dev/null Thu Apr 30 13:46:47 2015
+++ src/sys/dev/splash/splash.mk Thu Apr 30 13:46:47 2015
@@ -0,0 +1,26 @@
+# Makefile for embedding splash image into kernel.
+.include <bsd.endian.mk>
+
+MD_OBJS+= splash_image.o
+CFLAGS+= -DSPLASHSCREEN_IMAGE
+
+.if (${OBJECT_FMTS:Melf64})
+BFD_ELFTARGET=elf64
+.else
+BFD_ELFTARGET=elf32
+.endif
+
+BFD_ENDIANNESS=${TARGET_ENDIANNESS:S/1234/little/C/4321/big/}
+BFD_CPU=${MACHINE_CPU:S/_/-/}
+
+.if (${BFD_CPU:Maarch64} || ${BFD_CPU:Marm} || ${BFD_CPU:Mmips} || ${BFD_CPU:Mscore})
+BFD_TARGET=${BFD_ELFTARGET}-${BFD_ENDIANNESS}${BFD_CPU}
+.else
+BFD_TARGET=${BFD_ELFTARGET}-${BFD_CPU}
+.endif
+
+splash_image.o: ${SPLASHSCREEN_IMAGE}
+ cp ${SPLASHSCREEN_IMAGE} splash.image
+ ${OBJCOPY} -I binary -B ${MACHINE_CPU:C/x86_64/i386/} \
+ -O ${BFD_TARGET} splash.image splash_image.o
+ rm splash.image