forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 290
Expand file tree
/
Copy pathMakefile
More file actions
106 lines (82 loc) · 2.55 KB
/
Makefile
File metadata and controls
106 lines (82 loc) · 2.55 KB
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
QEMU_DISPLAY ?= none
ARCH ?= x86
IMG_ARCH := $(ARCH)
ifeq ($(ARCH),x86)
b = b
else ifeq ($(ARCH),x86_64)
b = b
IMG_ARCH = x86
endif
ZIMAGE = $(KDIR)/arch/$(ARCH)/boot/$(b)zImage
KCONFIG = $(KDIR)/.config
NTTCP = $(KDIR)/tools/labs/templates/assignments/6-e100/nttcp
YOCTO_URL = http://downloads.yoctoproject.org/releases/yocto/yocto-2.3/machines/qemu/qemu$(IMG_ARCH)/
YOCTO_IMAGE = core-image-minimal-qemu$(IMG_ARCH).ext4
#YOCTO_IMAGE = core-image-minimal-dev-qemu$(IMG_ARCH).ext4
#YOCTO_IMAGE = core-image-sato-dev-qemu$(IMG_ARCH).ext4
#YOCTO_IMAGE = core-image-sato-qemu$(IMG_ARCH).ext4
#YOCTO_IMAGE = core-image-sato-sdk-qemu$(IMG_ARCH).ext4
QEMU_OPTS = -kernel $(ZIMAGE) \
-device virtio-serial \
-chardev pty,id=virtiocon0 -device virtconsole,chardev=virtiocon0 \
-serial pipe:pipe1 -serial pipe:pipe2 \
-netdev tap,id=tap0,ifname=tap0,script=no,downscript=no -net nic,netdev=tap0,model=virtio \
-netdev tap,id=tap1,ifname=tap1,script=no,downscript=no -net nic,netdev=tap1,model=i82559er \
-drive file=$(YOCTO_IMAGE),if=virtio,format=raw \
-drive file=disk1.img,if=virtio,format=raw \
-drive file=disk2.img,if=virtio,format=raw \
--append "root=/dev/vda loglevel=15 console=hvc0" \
--display $(QEMU_DISPLAY) -s -m 512
ifdef ENABLE_KVM
QEMU_OPTS += -enable-kvm -cpu host
ENABLE_KVM_SUDO = sudo
endif
boot: .modinst tap0 tap1 pipe1.in pipe1.out pipe2.in pipe2.out disk1.img disk2.img nttcp-run
$(ENABLE_KVM_SUDO) ARCH=$(ARCH) qemu/qemu.sh $(QEMU_OPTS)
TEMPDIR := $(shell mktemp -u)
$(KCONFIG): qemu/kernel_config.x86
ifeq ($(ARCH),x86_64)
echo "CONFIG_64BIT=y" >> $^
echo "CONFIG_IA32_EMULATION=y" >> $^
endif
cp $^ $@
$(MAKE) -C $(KDIR) olddefconfig
zImage: $(ZIMAGE)
$(ZIMAGE): $(KCONFIG)
$(MAKE) -C $(KDIR)
$(MAKE) -C $(KDIR) modules
.modinst: $(ZIMAGE) $(YOCTO_IMAGE)
mkdir $(TEMPDIR)
sudo mount -t ext4 -o loop $(YOCTO_IMAGE) $(TEMPDIR)
sudo $(MAKE) -C $(KDIR) modules_install INSTALL_MOD_PATH=$(TEMPDIR)
sudo umount $(TEMPDIR)
rmdir $(TEMPDIR)
sleep 1 && touch .modinst
gdb: $(ZIMAGE)
gdb -ex "target remote localhost:1234" $(KDIR)/vmlinux
$(YOCTO_IMAGE):
wget $(YOCTO_URL)/$(YOCTO_IMAGE)
sudo qemu/prepare-image.sh $(YOCTO_IMAGE)
tap0:
qemu/create_net.sh $@
tap1:
qemu/create_net.sh $@
nttcp-run: $(NTTCP) tap1
$(NTTCP) -v -i &
pipe1.in:
mkfifo $@
pipe1.out:
mkfifo $@
pipe2.in: pipe1.out
ln $< $@
pipe2.out: pipe1.in
ln $< $@
disk1.img:
qemu-img create -f raw $@ 100M
disk2.img:
qemu-img create -f raw $@ 100M
clean::
-rm -f .modinst
-rm -f disk1.img disk2.img
-rm -f pipe1.in pipe1.out pipe2.in pipe2.out
.PHONY: boot gdb clean tap0 tap1