xref: /plan9/sys/src/9/boot/mkboot (revision 97bff0f0e1d5ce249207d5d49a5123df8571cc39)
13e12c5d1SDavid du Colombier#!/bin/rc
23e12c5d1SDavid du Colombier#
33e12c5d1SDavid du Colombier#  this file configures a boot program (/boot) for a kernel.
43e12c5d1SDavid du Colombier#
53e12c5d1SDavid du Colombierif(! ~ $#* 1){
63e12c5d1SDavid du Colombier	echo usage: mkboot file >[1=2]
73e12c5d1SDavid du Colombier	exit 1
83e12c5d1SDavid du Colombier}
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombiercat <<'---'
113e12c5d1SDavid du Colombier#include <u.h>
123e12c5d1SDavid du Colombier#include <libc.h>
133e12c5d1SDavid du Colombier#include "../boot/boot.h"
143e12c5d1SDavid du Colombier
153e12c5d1SDavid du ColombierMethod	method[]={
163e12c5d1SDavid du Colombier---
173e12c5d1SDavid du Colombier
183e12c5d1SDavid du Colombier#
193e12c5d1SDavid du Colombier#  configure all remote methods, i.e. all methods in the 'boot' section
203e12c5d1SDavid du Colombier#
213e12c5d1SDavid du Colombier#  EXAMPLE
223e12c5d1SDavid du Colombier#	boot
233e12c5d1SDavid du Colombier#		incon
243e12c5d1SDavid du Colombier#		9600
253e12c5d1SDavid du Colombier#		19200
263e12c5d1SDavid du Colombier#
273e12c5d1SDavid du Colombier../port/mkextract boot 0 $* | awk '{
283e12c5d1SDavid du Colombier	printf "	{ \""  "" $1 "\", "\
293e12c5d1SDavid du Colombier	"config" $1 ", "\
303e12c5d1SDavid du Colombier	"connect" $1 ", "
313e12c5d1SDavid du Colombier	print fieldn(2) " },"
323e12c5d1SDavid du Colombier	}
333e12c5d1SDavid du Colombier
343e12c5d1SDavid du Colombier	func fieldn(n,	s,i)
353e12c5d1SDavid du Colombier	{
363e12c5d1SDavid du Colombier		s = $0
373e12c5d1SDavid du Colombier		while (n > 1) {
383e12c5d1SDavid du Colombier			sub(/^[ \t]*/, "", s)
393e12c5d1SDavid du Colombier			if (substr(s, 1, 1) == "\"") {
403e12c5d1SDavid du Colombier				sub(/^"[^\"]*"/, "", s)
413e12c5d1SDavid du Colombier			} else {
423e12c5d1SDavid du Colombier				sub(/^[^ \t]*/, "", s)
433e12c5d1SDavid du Colombier			}
443e12c5d1SDavid du Colombier			n--
453e12c5d1SDavid du Colombier		}
463e12c5d1SDavid du Colombier		sub(/^[ \t]*/, "", s)
473e12c5d1SDavid du Colombier		if (substr(s, 1, 1) == "\"") {
483e12c5d1SDavid du Colombier			i = index(substr(s, 2), "\"")
493e12c5d1SDavid du Colombier			if (i > 0)
503e12c5d1SDavid du Colombier				return substr(s, 1, i+1)
513e12c5d1SDavid du Colombier			else
523e12c5d1SDavid du Colombier				return s
533e12c5d1SDavid du Colombier		} else {
543e12c5d1SDavid du Colombier			sub(/[ \t].*/, "", s)
553e12c5d1SDavid du Colombier			return s
563e12c5d1SDavid du Colombier		}
573e12c5d1SDavid du Colombier	}'
583e12c5d1SDavid du Colombier
593e12c5d1SDavid du Colombiercat <<'---'
603e12c5d1SDavid du Colombier	{ 0 },
613e12c5d1SDavid du Colombier};
623e12c5d1SDavid du Colombier---
633e12c5d1SDavid du Colombier
643e12c5d1SDavid du Colombierawk '
657dd7cddfSDavid du Colombier	BEGIN	{ cpuflag = 0; bootprog = "boot"; bootdisk = "#S/sdC0/"; rootdir = "/root"; }
669a747e4fSDavid du Colombier	$0 ~ "^boot" && $2=="cpu"\
677dd7cddfSDavid du Colombier		{ cpuflag = 1
687dd7cddfSDavid du Colombier		  if(NF == 4 && $3 == "boot")
697dd7cddfSDavid du Colombier			bootdisk = $4
707dd7cddfSDavid du Colombier		}
717dd7cddfSDavid du Colombier	$0 ~ "^boot" && $2=="rootdir" && NF==3\
727dd7cddfSDavid du Colombier		{ rootdir = $3 }
73bd389b36SDavid du Colombier	$0 ~ "^boot" && ($2=="bboot" || $2=="romboot" || $2=="dosboot")\
743e12c5d1SDavid du Colombier		{ cpuflag = 1;  bootprog = $2; }
757dd7cddfSDavid du Colombier	$0 ~ "^boot" && $2=="boot" && NF==3\
763e12c5d1SDavid du Colombier		{ bootdisk = $3 }
773e12c5d1SDavid du Colombier	END 	{ print "int cpuflag = " cpuflag ";"
787dd7cddfSDavid du Colombier		  print "char* rootdir = \"" rootdir "\";"
793e12c5d1SDavid du Colombier		  print "char* bootdisk = \"" bootdisk "\";"
803e12c5d1SDavid du Colombier		  print "extern void " bootprog "(int, char**);"
813e12c5d1SDavid du Colombier		  print "void"
823e12c5d1SDavid du Colombier		  print "main(int argc, char **argv)"
833e12c5d1SDavid du Colombier		  print "{"
843e12c5d1SDavid du Colombier		  print "\t" bootprog "(argc, argv);"
853e12c5d1SDavid du Colombier		  print "}"
863e12c5d1SDavid du Colombier		}
873e12c5d1SDavid du Colombier' $1
883e12c5d1SDavid du Colombier
893e12c5d1SDavid du Colombier#
906b6b9ac8SDavid du Colombier#  configure in a cache file system if a
91*97bff0f0SDavid du Colombier# /386/bin/root appears in the bootdir section.
923e12c5d1SDavid du Colombier#
936b6b9ac8SDavid du Colombier../port/mkextract bootdir 0 $* | awk '
943e12c5d1SDavid du Colombier	BEGIN			{ cfs = 0 }
956b6b9ac8SDavid du Colombier	$1 ~ "bin/cfs$"	{ cfs = 1 }
963e12c5d1SDavid du Colombier	END			{ if(cfs)
973e12c5d1SDavid du Colombier					print "int (*cfs)(int) = cache;"
983e12c5d1SDavid du Colombier				  else
993e12c5d1SDavid du Colombier					print "int (*cfs)(int) = 0;"
1003e12c5d1SDavid du Colombier				}
1013e12c5d1SDavid du Colombier	'
102