| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- # rt-loader make file
- # (c) 2025 Markus Stockhausen
- #
- # This is the make file for the rt-loader (aka runtime or realtek loader). It tries to
- # avoid copying files around where possible. Therefore it is controlled by the following
- # input parameters
- #
- # KERNEL_IMG_IN: The filename of an LZMA compressed kernel image. This is required
- # KERNEL_IMG_OUT: The filename of the kernel image with the rt-loader prepended.
- # If not given it will be created as image.bin into the BUILD_DIR.
- # BUILD_DIR: The temporary build dir. If not given it will be set to "build".
- #
- # To add it into the OpenWrt toolchain just create two new build commands
- #
- # define Build/rt-loader
- # $(MAKE) all clean -C rt-loader CROSS_COMPILE="$(TARGET_CROSS)" \
- # KERNEL_IMG_IN="$@" KERNEL_IMG_OUT="[email protected]" BUILD_DIR="[email protected]"
- # mv "[email protected]" "$@"
- # endef
- #
- # define Build/rt-compress
- # $(STAGING_DIR_HOST)/bin/xz --format=lzma -9 --stdout "$@" > "[email protected]"
- # mv "[email protected]" "$@"
- # endef
- #
- # Use them in a new kernel build recipe
- #
- # define Device/uimage-rt-loader
- # KERNEL/rt-loader := kernel-bin | append-dtb | rt-compress | rt-loader
- # KERNEL := $$(KERNEL/rt-loader) | uImage none
- # KERNEL_INITRAMFS := $$(KERNEL/rt-loader) | uImage none
- # endef
- #
- # And finally add it to the target device. E.g.
- #
- # define Device/linksys_lgs310c
- # $(Device/uimage-rt-loader)
- # ...
- # endef
- CC := $(CROSS_COMPILE)gcc
- LD := $(CROSS_COMPILE)ld
- OBJCOPY := $(CROSS_COMPILE)objcopy
- OBJDUMP := $(CROSS_COMPILE)objdump
- CFLAGS = -fpic -mabicalls -O2 -fno-builtin-printf -Iinclude
- ASFLAGS = -fpic -msoft-float -Iinclude
- LDFLAGS = -static -nostdlib -T linker/linker.ld --no-warn-mismatch
- O_FORMAT = $(shell $(OBJDUMP) -i | head -2 | grep elf32)
- SOURCES = src/startup.S src/main.c src/board.c src/memory.c src/unlzma.c
- BUILD_DIR ?= build
- IMAGE_OBJ := $(BUILD_DIR)/image.o
- IMAGE_ELF := $(BUILD_DIR)/image.elf
- KERNEL_IMG_OUT ?= $(BUILD_DIR)/image.bin
- OBJECTS_C = $(filter %.c,$(SOURCES))
- OBJECTS_S = $(filter %.S,$(SOURCES))
- OBJECTS := $(OBJECTS_S:.S=.o) $(OBJECTS_C:.c=.o)
- OBJECTS := $(patsubst %.o, $(BUILD_DIR)/%.o, $(OBJECTS)) $(IMAGE_OBJ)
- ifneq ($(MAKECMDGOALS),clean)
- ifndef KERNEL_IMG_IN
- $(error Compressed kernel image not given via KERNEL_IMG_IN)
- endif
- endif
- all: $(KERNEL_IMG_OUT)
- install:
- $(BUILD_DIR)/%.o : %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS) -c -o $@ $<
- $(BUILD_DIR)/%.o : %.S
- @mkdir -p $(dir $@)
- $(CC) $(ASFLAGS) -c -o $@ $<
- $(IMAGE_OBJ): $(KERNEL_IMG_IN)
- $(OBJCOPY) -I binary -O $(O_FORMAT) --rename-section .data=.kernel $< $@
- $(IMAGE_ELF): $(OBJECTS)
- $(LD) $(LDFLAGS) -o $@ $(OBJECTS)
- $(KERNEL_IMG_OUT): $(IMAGE_ELF)
- $(OBJCOPY) -O binary $< $@
- clean:
- rm -rf $(BUILD_DIR)/
|