Nachos(2)-lab0修改Makefile
本次目标
在上一篇博客中,已经在Ubuntu16.04LTS32位的操作系统上下载解压了Nachos3.4版本,并且通过简单的测试,确认了Nachos是可以正常运行的。
这篇博文记录了Nachos中的Makefile文件是如何控制整个系统如何编译&链接的;并且给Nachos源代码中增加一个mytest/add.c文件,然后修改Makefile文件,让整个Nachos操作系统能在修改了Makefile的情况下正常运行。
Makefile简介
略过。
理解Nachos3.4中的Makefile。
重点关注自己写过的注释
code目录下的Makefile文件,可以看到有all,print,clean三个make选项。
code目录下除了有Makefile文件之外,还有Makefile.dep文件(用来指定Nachos运行的宿主机的体系结构,默认的是HOST = -DHOST_i386,所以Nachos代码不用做任何修改就可以运行在Ubuntu16.04LTS32位下),还有一个Makefile.common文件(里面定义很多的变量,CC = g++,LD = g++,PROGRAM = nachos,THREAD_H =../threads/copyright.h\),实际上Makefile.common就是定义了要用到的变量。
# Copyright (c) 1992 The Regents of the University of California.
# All rights reserved. See copyright.h for copyright notice and limitation
# of liability and disclaimer of warranty provisions.
MAKE = make #定义变量MAKE
LPR = lpr #定义变量LPR lineprint用来输出信息的
all:
cd threads; $(MAKE) depend #重点关注线程部分
cd threads; $(MAKE) nachos
cd userprog; $(MAKE) depend
cd userprog; $(MAKE) nachos
cd vm; $(MAKE) depend
cd vm; $(MAKE) nachos
cd filesys; $(MAKE) depend
cd filesys; $(MAKE) nachos
cd network; $(MAKE) depend
cd network; $(MAKE) nachos
cd bin; make all
cd test; make all
# don't delete executables in "test" in case there is no cross-compiler
clean:
/bin/csh -c "rm -f *~ */{core,nachos,DISK,*.o,swtch.s,*~} test/{*.coff} bin/{coff2flat,coff2noff,disassemble,out}"
# make print执行前要先apt install csh
# 但是即使下载了csh执行make print也会遇到 no default destination available的错误
# 但是反正这个就是用来打印信息的,pass……
print:
/bin/csh -c "$(LPR) Makefile* */Makefile"
/bin/csh -c "$(LPR) threads/*.h threads/*.cc threads/*.s"
/bin/csh -c "$(LPR) userprog/*.h userprog/*.cc"
/bin/csh -c "$(LPR) filesys/*.h filesys/*.cc
/bin/csh -c "$(LPR) network/*.h network/*.cc
/bin/csh -c "$(LPR) machine/*.h machine/*.cc
/bin/csh -c "$(LPR) bin/noff.h bin/coff.h bin/coff2noff.c"
/bin/csh -c "$(LPR) test/*.h test/*.c test/*.s"重点关注线程部分的Makefile,code/threads下的Makefile文件如下:
# NOTE: this is a GNU Makefile. You must use "gmake" rather than "make". # # Makefile for the threads assignment. The threads assignment must # be done first! # # Copyright (c) 1992 The Regents of the University of California. # All rights reserved. See copyright.h for copyright notice and limitation # of liability and disclaimer of warranty provisions. DEFINES = -DTHREADS #gcc里面的-D选项,定义了宏THREADS INCPATH = -I../threads -I../machine #include path 头文件去哪里找,gcc里面的-I选项 HFILES = $(THREAD_H) #.h文件,THREAD_H在/code下的Makefile.common定义了 CFILES = $(THREAD_C) C_OFILES = $(THREAD_O) include ../Makefile.common include ../Makefile.dep # 下面的这些东西是每个目标文件的依赖项,不要删除下面的任何东西,依赖必须放在文件的结束 # 所以?make nachos 和 make depend在哪里呢? # 在Makefile.common中,用模式匹配很好的解决了make depend 和make nachos的问题。 #----------------------------------------------------------------- # DO NOT DELETE THIS LINE -- make depend uses it # DEPENDENCIES MUST END AT END OF FILE main.o: ../threads/main.cc ../threads/copyright.h ../threads/utility.h \ ../threads/bool.h ../machine/sysdep.h ../threads/copyright.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/system.h ../threads/thread.h \ ../threads/scheduler.h ../threads/list.h ../machine/interrupt.h \ ../threads/list.h ../machine/stats.h ../machine/timer.h \ ../threads/utility.h list.o: ../threads/list.cc ../threads/copyright.h ../threads/list.h \ ../threads/utility.h ../threads/bool.h ../machine/sysdep.h \ ../threads/copyright.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h scheduler.o: ../threads/scheduler.cc ../threads/copyright.h \ ../threads/scheduler.h ../threads/list.h ../threads/utility.h \ ../threads/bool.h ../machine/sysdep.h ../threads/copyright.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/thread.h ../threads/system.h \ ../machine/interrupt.h ../threads/list.h ../machine/stats.h \ ../machine/timer.h ../threads/utility.h synch.o: ../threads/synch.cc ../threads/copyright.h ../threads/synch.h \ ../threads/thread.h ../threads/utility.h ../threads/bool.h \ ../machine/sysdep.h ../threads/copyright.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/list.h ../threads/system.h \ ../threads/scheduler.h ../machine/interrupt.h ../threads/list.h \ ../machine/stats.h ../machine/timer.h ../threads/utility.h synchlist.o: ../threads/synchlist.cc ../threads/copyright.h \ ../threads/synchlist.h ../threads/list.h ../threads/utility.h \ ../threads/bool.h ../machine/sysdep.h ../threads/copyright.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/synch.h ../threads/thread.h system.o: ../threads/system.cc ../threads/copyright.h ../threads/system.h \ ../threads/utility.h ../threads/bool.h ../machine/sysdep.h \ ../threads/copyright.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/thread.h ../threads/scheduler.h \ ../threads/list.h ../machine/interrupt.h ../threads/list.h \ ../machine/stats.h ../machine/timer.h ../threads/utility.h thread.o: ../threads/thread.cc ../threads/copyright.h ../threads/thread.h \ ../threads/utility.h ../threads/bool.h ../machine/sysdep.h \ ../threads/copyright.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/switch.h ../threads/synch.h \ ../threads/list.h ../threads/system.h ../threads/scheduler.h \ ../machine/interrupt.h ../threads/list.h ../machine/stats.h \ ../machine/timer.h ../threads/utility.h utility.o: ../threads/utility.cc ../threads/copyright.h \ ../threads/utility.h ../threads/bool.h ../machine/sysdep.h \ ../threads/copyright.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/stdarg.h threadtest.o: ../threads/threadtest.cc ../threads/copyright.h \ ../threads/system.h ../threads/utility.h ../threads/bool.h \ ../machine/sysdep.h ../threads/copyright.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/thread.h ../threads/scheduler.h \ ../threads/list.h ../machine/interrupt.h ../threads/list.h \ ../machine/stats.h ../machine/timer.h ../threads/utility.h \ ../machine/elevatortest.h interrupt.o: ../machine/interrupt.cc ../threads/copyright.h \ ../machine/interrupt.h ../threads/list.h ../threads/copyright.h \ ../threads/utility.h ../threads/bool.h ../machine/sysdep.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/system.h ../threads/thread.h \ ../threads/scheduler.h ../threads/list.h ../machine/interrupt.h \ ../machine/stats.h ../machine/timer.h ../threads/utility.h sysdep.o: ../machine/sysdep.cc ../threads/copyright.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h /usr/include/signal.h \ /usr/include/i386-linux-gnu/bits/sigset.h \ /usr/include/i386-linux-gnu/bits/signum.h /usr/include/time.h \ /usr/include/i386-linux-gnu/bits/siginfo.h \ /usr/include/i386-linux-gnu/bits/sigaction.h \ /usr/include/i386-linux-gnu/bits/sigcontext.h \ /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ /usr/include/asm-generic/int-ll64.h \ /usr/include/i386-linux-gnu/asm/bitsperlong.h \ /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ /usr/include/linux/stddef.h \ /usr/include/i386-linux-gnu/asm/posix_types.h \ /usr/include/i386-linux-gnu/asm/posix_types_32.h \ /usr/include/i386-linux-gnu/bits/sigstack.h \ /usr/include/i386-linux-gnu/sys/ucontext.h \ /usr/include/i386-linux-gnu/bits/pthreadtypes.h \ /usr/include/i386-linux-gnu/bits/sigthread.h \ /usr/include/i386-linux-gnu/sys/types.h /usr/include/endian.h \ /usr/include/i386-linux-gnu/bits/endian.h \ /usr/include/i386-linux-gnu/bits/byteswap.h \ /usr/include/i386-linux-gnu/sys/select.h \ /usr/include/i386-linux-gnu/bits/select.h \ /usr/include/i386-linux-gnu/bits/time.h \ /usr/include/i386-linux-gnu/sys/sysmacros.h \ /usr/include/i386-linux-gnu/sys/time.h \ /usr/include/i386-linux-gnu/sys/socket.h \ /usr/include/i386-linux-gnu/sys/uio.h \ /usr/include/i386-linux-gnu/bits/uio.h \ /usr/include/i386-linux-gnu/bits/socket.h \ /usr/include/i386-linux-gnu/bits/sockaddr.h \ /usr/include/i386-linux-gnu/asm/socket.h \ /usr/include/asm-generic/socket.h \ /usr/include/i386-linux-gnu/asm/sockios.h \ /usr/include/asm-generic/sockios.h \ /usr/include/i386-linux-gnu/sys/file.h /usr/include/fcntl.h \ /usr/include/i386-linux-gnu/bits/fcntl.h \ /usr/include/i386-linux-gnu/bits/stat.h \ /usr/include/i386-linux-gnu/sys/un.h \ /usr/include/i386-linux-gnu/sys/mman.h \ /usr/include/i386-linux-gnu/bits/mman.h /usr/include/unistd.h \ /usr/include/i386-linux-gnu/bits/posix_opt.h \ /usr/include/i386-linux-gnu/bits/environments.h \ /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ /usr/include/errno.h /usr/include/i386-linux-gnu/bits/errno.h \ /usr/include/linux/errno.h /usr/include/i386-linux-gnu/asm/errno.h \ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ ../machine/interrupt.h ../threads/list.h ../threads/copyright.h \ ../threads/utility.h ../threads/bool.h ../machine/sysdep.h \ ../threads/system.h ../threads/thread.h ../threads/scheduler.h \ ../threads/list.h ../machine/interrupt.h ../machine/stats.h \ ../machine/timer.h ../threads/utility.h stats.o: ../machine/stats.cc ../threads/copyright.h ../threads/utility.h \ ../threads/copyright.h ../threads/bool.h ../machine/sysdep.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../machine/stats.h timer.o: ../machine/timer.cc ../threads/copyright.h ../machine/timer.h \ ../threads/utility.h ../threads/copyright.h ../threads/bool.h \ ../machine/sysdep.h /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/system.h ../threads/utility.h \ ../threads/thread.h ../threads/scheduler.h ../threads/list.h \ ../machine/interrupt.h ../threads/list.h ../machine/stats.h \ ../machine/timer.h elevatortest.o: ../machine/elevatortest.cc ../threads/copyright.h \ ../machine/elevatortest.h ../machine/elevator.h ../threads/utility.h \ ../threads/copyright.h ../threads/bool.h ../machine/sysdep.h \ /usr/include/stdio.h /usr/include/features.h \ /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/list.h ../threads/utility.h \ ../threads/synch.h ../threads/thread.h ../threads/list.h \ ../threads/thread.h elevator.o: ../machine/elevator.cc ../threads/copyright.h \ ../machine/elevator.h ../threads/utility.h ../threads/copyright.h \ ../threads/bool.h ../machine/sysdep.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ /usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \ /usr/include/i386-linux-gnu/bits/stdio_lim.h \ /usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ /usr/include/xlocale.h ../threads/list.h ../threads/utility.h \ ../threads/system.h ../threads/thread.h ../threads/scheduler.h \ ../threads/list.h ../machine/interrupt.h ../machine/stats.h \ ../machine/timer.h # DEPENDENCIES MUST END AT END OF FILE # IF YOU PUT STUFF HERE IT WILL GO AWAY # see make depend above
Makefile.common文件如下:
# This is part of a GNU Makefile, included by the Makefiles in
# each of the subdirectories.
#
# This file includes all of the baseline code provided by Nachos.
# Whenever you add a .h or .cc file, put it in the appropriate
# _H,_C, or _O list.
#
# The dependency graph between assignments is:
# 1. THREADS before everything else
# 2. USERPROG must come before VM
# 3. USERPROG can come before or after FILESYS, but if USERPROG comes
# before (as in this distribution), then it must define FILESYS_STUB
#
# Other than that, you have complete flexibility.
#
# Also whenever you change the include structure of your program, you should
# do a gmake depend in the subdirectory -- this will modify the Makefile
# to keep track of the new dependency.
# You might want to play with the CFLAGS, but if you use -O it may
# break the thread system. You might want to use -fno-inline if
# you need to call some inline functions from the debugger.
# Copyright (c) 1992 The Regents of the University of California.
# All rights reserved. See copyright.h for copyright notice and limitation
# of liability and disclaimer of warranty provisions.
CFLAGS = -g -Wall -Wshadow -fpermissive $(INCPATH) $(DEFINES) $(HOST) -DCHANGED
# These definitions may change as the software is updated.
# Some of them are also system dependent
CPP= gcc -E
CC = g++
LD = g++
AS = as
PROGRAM = nachos
THREAD_H =../threads/copyright.h\
../threads/list.h\
../threads/scheduler.h\
../threads/synch.h \
../threads/synchlist.h\
../threads/system.h\
../threads/thread.h\
../threads/utility.h\
../machine/interrupt.h\
../machine/sysdep.h\
../machine/stats.h\
../machine/timer.h\
../machine/elevator.h\
../machine/elevatortest.h
THREAD_C =../threads/main.cc\
../threads/list.cc\
../threads/scheduler.cc\
../threads/synch.cc \
../threads/synchlist.cc\
../threads/system.cc\
../threads/thread.cc\
../threads/utility.cc\
../threads/threadtest.cc\
../machine/interrupt.cc\
../machine/sysdep.cc\
../machine/stats.cc\
../machine/timer.cc\
../machine/elevatortest.cc\
../machine/elevator.cc
THREAD_S = ../threads/switch.s
THREAD_O =main.o list.o scheduler.o synch.o synchlist.o system.o thread.o \
utility.o threadtest.o interrupt.o stats.o sysdep.o timer.o elevator.o \
elevatortest.o
USERPROG_H = ../userprog/addrspace.h\
../userprog/bitmap.h\
../filesys/filesys.h\
../filesys/openfile.h\
../machine/console.h\
../machine/machine.h\
../machine/mipssim.h\
../machine/translate.h
USERPROG_C = ../userprog/addrspace.cc\
../userprog/bitmap.cc\
../userprog/exception.cc\
../userprog/progtest.cc\
../machine/console.cc\
../machine/machine.cc\
../machine/mipssim.cc\
../machine/translate.cc
USERPROG_O = addrspace.o bitmap.o exception.o progtest.o console.o machine.o \
mipssim.o translate.o
VM_H =
VM_C =
VM_O =
FILESYS_H =../filesys/directory.h \
../filesys/filehdr.h\
../filesys/filesys.h \
../filesys/openfile.h\
../filesys/synchdisk.h\
../machine/disk.h
FILESYS_C =../filesys/directory.cc\
../filesys/filehdr.cc\
../filesys/filesys.cc\
../filesys/fstest.cc\
../filesys/openfile.cc\
../filesys/synchdisk.cc\
../machine/disk.cc
FILESYS_O =directory.o filehdr.o filesys.o fstest.o openfile.o synchdisk.o\
disk.o
NETWORK_H = ../network/post.h ../machine/network.h
NETWORK_C = ../network/nettest.cc ../network/post.cc ../machine/network.cc
NETWORK_O = nettest.o post.o network.o
S_OFILES = switch.o
OFILES = $(C_OFILES) $(S_OFILES)
# 这里就是make nachos的模式匹配的命令
$(PROGRAM): $(OFILES)
$(LD) $(OFILES) $(LDFLAGS) -o $(PROGRAM)
$(C_OFILES): %.o:
$(CC) $(CFLAGS) -c $<
switch.o: ../threads/switch.s
$(CPP) -P $(INCPATH) $(HOST) ../threads/switch.c > swtch.s
$(AS) -o switch.o swtch.s
#这里是make depend模式匹配的命令
depend: $(CFILES) $(HFILES)
$(CC) $(INCPATH) $(DEFINES) $(HOST) -DCHANGED -M $(CFILES) > makedep
echo '/^# DO NOT DELETE THIS LINE/+2,$$d' >eddep
echo '$$r makedep' >>eddep
echo 'w' >>eddep
ed - Makefile < eddep
rm eddep makedep
echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile
echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile
echo '# see make depend above' >> Makefile
Nachos中增加一个mytest模块。
修改code下的Makefile文件,在mytest文件夹下写Makefile和add.c,code目录下make all,编译没有错误。
可以写个头文件,在threads/main里面调用add函数。
这样要修改的Makefile文件就比较多了……Makefile.common和threads里面的Makefile都需要修改
最后的运行结果如下:

查看14道真题和解析