blob: a4ffd8cb32077ea7a160ab7abaa80c4051d89992 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
#------------------------------------------------------------------------------
# Makefile - builds the entire project with all subprojects
#------------------------------------------------------------------------------
# author: Manuel Bentele
# date : 10.07.2019
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Global configuration (file paths and config)
#------------------------------------------------------------------------------
KERNEL_SRC_DIR := $(shell pwd)/implementation/loop
KERNEL_MOD_PATH := drivers/block/loop/
KERNEL_HDR_DIR := /lib/modules/$(shell uname -r)/build
LOSETUP_SRC_DIR := $(shell pwd)/implementation/losetup
KERNEL_MOD_CONFIG := $(shell pwd)/config/kernel-qcow2_x86-64_module.config
LOCAL_MOD_CONFIG += CONFIG_BLK_DEV_LOOP=m
LOCAL_MOD_CONFIG += CONFIG_BLK_DEV_LOOP_FILE_FMT_RAW=m
LOCAL_MOD_CONFIG += CONFIG_BLK_DEV_LOOP_FILE_FMT_QCOW=m
LOCAL_MOD_CONFIG += CONFIG_ZLIB_INFLATE=y
LOCAL_MOD_CONFIG += CONFIG_ZLIB_DEFLATE=y
LOCAL_MOD_CONFIG += CONFIG_DEBUG_FS=y
BUILD ?= vanilla
KERNEL_DIR ?= $(KERNEL_SRC_DIR)
CONFIG ?= KCONFIG_CONFIG=$(KERNEL_MOD_CONFIG)
TARGET_PATH_PREFX ?= $(KERNEL_MOD_PATH)
ifeq ($(BUILD),out-of-tree)
PATCH = patch
KERNEL_DIR = $(KERNEL_HDR_DIR)
CONFIG = $(LOCAL_MOD_CONFIG) M=$(KERNEL_SRC_DIR)/drivers/block/loop
TARGET_PATH_PREFX =
endif
#------------------------------------------------------------------------------
# Target definitions
#------------------------------------------------------------------------------
all: modules losetup
clean: clean_modules clean_losetup
modules: loop.ko loop_file_fmt_raw.ko loop_file_fmt_qcow.ko
clean_modules:
$(call print_heading,"Clean all kernel modules")
@$(MAKE) --no-print-directory -C $(KERNEL_DIR) $(CONFIG) clean
patch:
$(call print_heading, "Patch kernel headers")
@sudo cp -f $(KERNEL_SRC_DIR)/include/uapi/linux/loop.h \
$(KERNEL_HDR_DIR)/include/uapi/linux/loop.h
@sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/Kconfig \
$(KERNEL_HDR_DIR)/drivers/block/Kconfig
@sudo mkdir -p $(KERNEL_HDR_DIR)/drivers/block/loop
@sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/loop/loop_main.h \
$(KERNEL_HDR_DIR)/drivers/block/loop/loop_main.h
@sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/loop/loop_file_fmt.h \
$(KERNEL_HDR_DIR)/drivers/block/loop/loop_file_fmt.h
@sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/loop/Kconfig \
$(KERNEL_HDR_DIR)/drivers/block/loop/Kconfig
loop.ko:
loop_file_fmt_raw.ko:
loop_file_fmt_qcow.ko:
%.ko: $(PATCH)
$(call print_heading,"Build $@ kernel module")
@$(MAKE) --no-print-directory -C $(KERNEL_DIR) $(CONFIG) \
$(TARGET_PATH_PREFX)$@
losetup:
$(call print_heading,"Build $@ utility")
@cd $(LOSETUP_SRC_DIR) && \
./tools/config-gen all && \
$(MAKE) --no-print-directory losetup
clean_losetup:
$(call print_heading,"Clean $@ utility")
@cd $(LOSETUP_SRC_DIR) && \
$(MAKE) --no-print-directory clean
ifeq ($(BUILD),out-of-tree)
loop.load: loop.ko
loop_file_fmt_raw.load: loop_file_fmt_raw.ko loop.load
loop_file_fmt_qcow.load: loop_file_fmt_qcow.ko loop.load
loop.unload: loop_file_fmt_raw.unload loop_file_fmt_qcow.unload
loop_file_fmt_raw.unload:
loop_file_fmt_qcow.unload:
load_modules: loop.load loop_file_fmt_raw.load loop_file_fmt_qcow.load
unload_modules: loop_file_fmt_qcow.unload loop_file_fmt_raw.unload loop.unload
%.load:
$(call print_heading,"Load kernel module $(basename $@)")
sudo insmod $(KERNEL_SRC_DIR)/$(KERNEL_MOD_PATH)$(basename $@).ko
%.unload:
$(call print_heading,"Unload kernel module $(basename $@)")
sudo rmmod $(basename $@)
endif
#------------------------------------------------------------------------------
# Function definitions
#------------------------------------------------------------------------------
define print_heading
@echo "#--------------------------------------------------------------"
@echo "# [BUILD: $(BUILD)] $(1)"
@echo "#--------------------------------------------------------------"
endef
|