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都需要修改
最后的运行结果如下: