Hi,

I've attached a Makefile for bootdisk creation. Works very nice, except re_creating 
the filesystem image if files have changed - see the commented line.

Works as follows:
You've got a directory with Makefile.include and a subdirectory for each (type of) 
bootdisk you create.
In each subdir is 
- another subdir fs/ with all the files on it
- a kernel (default name zImage)
- a Makefile (see example).

A subdir obj will be created for intermediary files.


The Makefile can specify type=INITRD, in which case a initrd-style-bootdisk will be 
created (with lilo on it).


Completely automated bootdisks - seems like your birthday, doesn't it?


>>Makefile.include start
ifneq "$(TYPE)" "initrd"

TYPE    := normal

else

ifndef BOOTB
BOOTB   := /boot/boot.b 
endif
ifndef LILOCONF
LILOCONF:= /tmp/make.lilo.conf
MKLILO  := 1
endif
ifndef DISKLC
DISKLC  := /etc/lilo.conf
endif

endif


ifndef DESTDIR 
DESTDIR := obj
endif

ifndef FS
FS := $(DESTDIR)/fs.image
endif

ifndef SIZE
SIZE := 4096
endif


ifndef SRC
SRC := fs
endif

ifndef KERNEL
KERNEL := zImage
endif

ifndef DISKIMAGE
DISKIMAGE := $(DESTDIR)/disk.image
endif

ifndef DEVICE
DEVICE := /dev/fd0
endif



ifndef FSZ
FSZ := $(FS).gz
endif

ifndef DIR
DIR := /tmp/bootdisk.tmpdir
endif


.PHONY: clean all initrd_fs

override KS := $(shell perl -e "print int((1023 + -s shift)/1024); " $(KERNEL))


clean:
        @rm $(DISKIMAGE) $(FSZ) $(FS) 2>/dev/null || true
        @echo ""

$(FS):  
#$(shell find $(SRC) -type f -print) # funkt nicht ...
        @echo "Creating new $(FS) ($(SIZE) kB) ..."
        @dd if=/dev/zero of=$(FS) bs=1024 count=$(SIZE)
        @mke2fs -q -i 8192 -m 0 -F $(FS)
        @mkdir $(DIR) || true
        @mount -o loop $(FS) $(DIR)
        @cp -a $(SRC)/* $(DIR)/
        @umount $(FS)
        @rmdir $(DIR)
        @echo ""

$(FSZ): $(FS)
        @ls -la $(FSZ) 2>/dev/null || true
        @echo zipping $(FS) to $(FSZ) ...
        @gzip -9 -v < $(FS) > $(FSZ)
        @ls -la $(FSZ)
        @echo ""


override FSS = $(shell perl -e "print int((1023 + -s shift)/1024); " "$(FSZ)")


ifeq "$(TYPE)" "initrd"


initrd_fs:
        @echo 'Making initrd-"root" fs ...'
        @mkfs.minix -n14 -i 16 $(DEVICE) # -v
        @echo ""
        

# initrd bootdisk
disk: $(FSZ) initrd_fs
        @echo 'Making bootable ...'
        @mkdir $(DIR) || true
        @mount $(DEVICE) $(DIR)
        @mkdir $(DIR)/dev $(DIR)/boot $(DIR)/bin $(DIR)/etc
        @cp $(KERNEL) $(DIR)/bin/zImage
        @cp $(FSZ) $(DIR)/bin/fs.gz
        @cp $(BOOTB) $(DIR)/boot/boot.b
        @cp -a $(DEVICE) $(DIR)/dev/boot
        
        @mknod $(DIR)/dev/initrd b 1 250
        @chmod 400 $(DIR)/dev/initrd

ifdef MKLILO
        @echo "boot=/dev/boot" > $(LILOCONF)
        @echo "read-only" >> $(LILOCONF)
        @echo "prompt" >> $(LILOCONF)
        @echo "timeout=100" >> $(LILOCONF)
        @echo "#vga = 4" >> $(LILOCONF)
        @echo "image = /bin/zImage" >> $(LILOCONF)
        @echo "#map = /etc/lilo.map" >> $(LILOCONF)
        @echo "initrd = /bin/fs.gz" >> $(LILOCONF)
        @echo "label = linux" >> $(LILOCONF)
        @mv $(LILOCONF) $(DIR)/$(DISKLC)
else
        @cp $(LILOCONF) $(DIR)/$(DISKLC)
endif
        @lilo -v -v -C $(DISKLC) -r $(DIR)
        
        @df $(DEVICE)
         
        @umount $(DEVICE)
        @rmdir $(DIR)
        @echo ""

else

# "Normal" bootdisk
$(DISKIMAGE): $(FSZ)
        @printf "Kernel: %5d kB\n" $(KS)
        @printf "FS    : %5d kB\n" $(FSS)
        @printf "------:---------\n"
        @printf "Summe : %5d kB\n" $(shell echo $(FSS) + $(KS) | bc)

        @dd if=$(KERNEL) of=$(DISKIMAGE) bs=1024 count=$(KS)            2> /dev/null
        @dd if=$(FSZ) of=$(DISKIMAGE) bs=1024 count=$(FSS) seek=$(KS)   2> /dev/null

        @rdev $(DISKIMAGE) $(DEVICE)
        @rdev -R $(DISKIMAGE) 0
        @rdev -r $(DISKIMAGE) $(shell perl -e 'print 0x4000 | shift' $(KS))
        @echo Image $(DISKIMAGE) created
        @echo ""
        
disk: $(DISKIMAGE) 
        @echo Writing image to $(DEVICE) ...
        @dd if=$(DISKIMAGE) of=$(DEVICE) bs=1024
        @echo ""
endif
>>Makefile.include ends


>>Makefile start
include ../Makefile.include

all:    
        @rm $(FS) || true 
        $(MAKE) $(DISKIMAGE) 
>>Makefile ends



Ph.




-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]

Reply via email to