From f568ac24106e8000799c7d48b5945f91b9767d21 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 9 May 2022 14:36:09 +0800 Subject: [PATCH 01/25] [Lab6] init --- Lab6/.vscode/c_cpp_properties.json | 17 ++ Lab6/.vscode/settings.json | 16 ++ Lab6/Makefile | 58 ++++++ Lab6/archive/initramfs.cpio | Bin 0 -> 27648 bytes Lab6/archive/rootfs/mbox_test.img | Bin 0 -> 26856 bytes Lab6/archive/ta_initramfs.cpio | Bin 0 -> 247296 bytes Lab6/bootloader/boot.S | 40 +++++ Lab6/bootloader/linker.ld | 28 +++ Lab6/bootloader/main.c | 36 ++++ Lab6/include/allocator.h | 40 +++++ Lab6/include/cpio.h | 40 +++++ Lab6/include/exception.h | 34 ++++ Lab6/include/mail_box.h | 45 +++++ Lab6/include/memory.h | 41 +++++ Lab6/include/mini_uart.h | 28 +++ Lab6/include/mm.h | 19 ++ Lab6/include/peripherals/base.h | 9 + Lab6/include/peripherals/gpio.h | 12 ++ Lab6/include/peripherals/mail_box.h | 25 +++ Lab6/include/peripherals/mini_uart.h | 25 +++ Lab6/include/printf.h | 31 ++++ Lab6/include/reboot.h | 8 + Lab6/include/shell.h | 9 + Lab6/include/switch.h | 9 + Lab6/include/sysreg.h | 23 +++ Lab6/include/system_call.h | 20 +++ Lab6/include/task.h | 75 ++++++++ Lab6/include/timer.h | 29 +++ Lab6/include/utils.h | 13 ++ Lab6/kernel/boot.S | 175 ++++++++++++++++++ Lab6/kernel/exception.c | 246 ++++++++++++++++++++++++++ Lab6/kernel/kernel.c | 18 ++ Lab6/kernel/linker.ld | 14 ++ Lab6/lib/allocator.c | 178 +++++++++++++++++++ Lab6/lib/cpio.c | 95 ++++++++++ Lab6/lib/mail_box.c | 106 +++++++++++ Lab6/lib/memory.c | 254 +++++++++++++++++++++++++++ Lab6/lib/mini_uart.c | 196 +++++++++++++++++++++ Lab6/lib/mm.S | 6 + Lab6/lib/printf.c | 152 ++++++++++++++++ Lab6/lib/reboot.c | 18 ++ Lab6/lib/shell.c | 154 ++++++++++++++++ Lab6/lib/switch.S | 28 +++ Lab6/lib/system_call.c | 74 ++++++++ Lab6/lib/task.c | 153 ++++++++++++++++ Lab6/lib/timer.c | 108 ++++++++++++ Lab6/lib/utils.c | 96 ++++++++++ Lab6/load_kernel.py | 45 +++++ Lab6/user/exec_test.c | 6 + Lab6/user/fork_test.c | 31 ++++ Lab6/user/linker.ld | 12 ++ Lab6/user/mbox_test.c | 59 +++++++ Lab6/user/timer_test.c | 14 ++ 53 files changed, 2968 insertions(+) create mode 100644 Lab6/.vscode/c_cpp_properties.json create mode 100644 Lab6/.vscode/settings.json create mode 100644 Lab6/Makefile create mode 100644 Lab6/archive/initramfs.cpio create mode 100755 Lab6/archive/rootfs/mbox_test.img create mode 100644 Lab6/archive/ta_initramfs.cpio create mode 100644 Lab6/bootloader/boot.S create mode 100644 Lab6/bootloader/linker.ld create mode 100644 Lab6/bootloader/main.c create mode 100644 Lab6/include/allocator.h create mode 100644 Lab6/include/cpio.h create mode 100644 Lab6/include/exception.h create mode 100644 Lab6/include/mail_box.h create mode 100644 Lab6/include/memory.h create mode 100644 Lab6/include/mini_uart.h create mode 100644 Lab6/include/mm.h create mode 100644 Lab6/include/peripherals/base.h create mode 100644 Lab6/include/peripherals/gpio.h create mode 100644 Lab6/include/peripherals/mail_box.h create mode 100644 Lab6/include/peripherals/mini_uart.h create mode 100644 Lab6/include/printf.h create mode 100644 Lab6/include/reboot.h create mode 100644 Lab6/include/shell.h create mode 100644 Lab6/include/switch.h create mode 100644 Lab6/include/sysreg.h create mode 100644 Lab6/include/system_call.h create mode 100644 Lab6/include/task.h create mode 100644 Lab6/include/timer.h create mode 100644 Lab6/include/utils.h create mode 100644 Lab6/kernel/boot.S create mode 100644 Lab6/kernel/exception.c create mode 100644 Lab6/kernel/kernel.c create mode 100644 Lab6/kernel/linker.ld create mode 100644 Lab6/lib/allocator.c create mode 100644 Lab6/lib/cpio.c create mode 100644 Lab6/lib/mail_box.c create mode 100644 Lab6/lib/memory.c create mode 100644 Lab6/lib/mini_uart.c create mode 100644 Lab6/lib/mm.S create mode 100644 Lab6/lib/printf.c create mode 100644 Lab6/lib/reboot.c create mode 100644 Lab6/lib/shell.c create mode 100644 Lab6/lib/switch.S create mode 100644 Lab6/lib/system_call.c create mode 100644 Lab6/lib/task.c create mode 100644 Lab6/lib/timer.c create mode 100644 Lab6/lib/utils.c create mode 100755 Lab6/load_kernel.py create mode 100644 Lab6/user/exec_test.c create mode 100644 Lab6/user/fork_test.c create mode 100644 Lab6/user/linker.ld create mode 100644 Lab6/user/mbox_test.c create mode 100644 Lab6/user/timer_test.c diff --git a/Lab6/.vscode/c_cpp_properties.json b/Lab6/.vscode/c_cpp_properties.json new file mode 100644 index 000000000..96a36df82 --- /dev/null +++ b/Lab6/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/include" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "cStandard": "c11", + "cppStandard": "c++14", + "intelliSenseMode": "linux-clang-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Lab6/.vscode/settings.json b/Lab6/.vscode/settings.json new file mode 100644 index 000000000..73281d200 --- /dev/null +++ b/Lab6/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "files.associations": { + "stdint.h": "c", + "memory.h": "c", + "array": "c", + "hash_map": "c", + "string_view": "c", + "initializer_list": "c", + "utility": "c", + "task.h": "c", + "allocator.h": "c", + "mini_uart.h": "c", + "exception.h": "c", + "mail_box.h": "c" + } +} \ No newline at end of file diff --git a/Lab6/Makefile b/Lab6/Makefile new file mode 100644 index 000000000..4fc21e821 --- /dev/null +++ b/Lab6/Makefile @@ -0,0 +1,58 @@ +.PHONY: all clean qemu-kernel qemu-bootloader test-bootloader on-board load-kernel qemu + +ARMGNU ?= aarch64-linux-gnu + +FLAGS = -O0 -Wall -nostartfiles -ffreestanding -Iinclude -mgeneral-regs-only -g -fPIC +INC = include +LIB = lib +CPIO = archive/initramfs.cpio +USER_PROG = mbox_test + +all: kernel8.img bootloader.img $(CPIO) $(USER_PROG).img + +kernel8.img: kernel/*.S kernel/*.c $(LIB)/*.S $(LIB)/*.c rd.o + $(ARMGNU)-gcc $(FLAGS) -Tkernel/linker.ld $^ -o kernel8.elf -I$(INC) + $(ARMGNU)-objcopy -O binary kernel8.elf kernel8.img + +bootloader.img: bootloader/*.S bootloader/*.c $(LIB)/*.S $(LIB)/mini_uart.c $(LIB)/utils.c + $(ARMGNU)-gcc $(FLAGS) -Tbootloader/linker.ld $^ -o bootloader.elf -I$(INC) + $(ARMGNU)-objcopy -O binary bootloader.elf bootloader.img + +$(USER_PROG).img: user/$(USER_PROG).c $(LIB)/*.c $(LIB)/*.S + $(ARMGNU)-gcc $(FLAGS) -Tuser/linker.ld $^ -o $(USER_PROG).elf + $(ARMGNU)-objcopy -O binary $(USER_PROG).elf $(USER_PROG).img + +$(CPIO): $(USER_PROG).img + cd archive/rootfs && find . | cpio -o -H newc > ../initramfs.cpio + +rd.o:$(CPIO) + aarch64-linux-gnu-ld -r -b binary -o rd.o $(CPIO) + +qemu-kernel: + qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio -initrd archive/ta_initramfs.cpio + +qemu-debug: + aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S + qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd archive/initramfs.cpio -d in_asm + +# qemu-kernel: +# qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd $(CPIO) + +# qemu-debug: +# aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S +# qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd $(CPIO) -d in_asm + +qemu-bootloader: $(CPIO) + qemu-system-aarch64 -M raspi3 -kernel bootloader.img -display none -serial null -serial pty -initrd $(CPIO) + +load-kernel: + sudo ./load_kernel.py + +qemu: + sudo screen /dev/pts/2 115200 + +on-board: + sudo screen /dev/ttyUSB0 115200 + +clean: + rm -f *.elf *.img *.cpio *.o *.S *.s \ No newline at end of file diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio new file mode 100644 index 0000000000000000000000000000000000000000..0623a4777638ab6e66d0398c2aeacbee1dbd7da2 GIT binary patch literal 27648 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 Q@OJ5BQvHAU|BDv*Uxq&QQ~&?~ literal 0 HcmV?d00001 diff --git a/Lab6/archive/rootfs/mbox_test.img b/Lab6/archive/rootfs/mbox_test.img new file mode 100755 index 0000000000000000000000000000000000000000..faf7eb29ccc3f099d6aa6165e12df99af40e7e47 GIT binary patch literal 26856 zcmchf4S1E+m8kbQi4q`UL>y4id;zS8QK`@hNQV=Nf0b5@SnU8!LUJ&vAt67sQJC>i zeV#hv-12E|we_c=`b-VlmZx=QNNdMfZ3nM(MDVxO_8fF7b9JsL^vbE=x$jzg?{mH! zg7wbr-18Xs{?=N1?e(|UUVDG%aCqJ01BXjY7#Oq3B&LMZjyHYucbf9r?1qw5UCfw4 z|6EyG=+~H3U6twYij@^$8-T^i3(v6_&lQE|$_bJFB-@WMkAd#MIMY{YOlJ@?OZ|Li zLSiseVrHsrsVU(hXiANlpwH&i@F357WL!}4!r^sKJTz2N|Kk4RPdS)A-efalO?H1t zd`tTHL^fS%veLr;-IOs)(_?MFk-kCZ=9rm~JJ)2tNGmvF67wqiOlQ@Zme!P-Fb%&b zE;Yj}&0S*#E08C1O=2)z5}RpyPP@vO*jUqBc~u&mr#D09N})mSv3Yng&&N#XfRjz< zf5UWMb~vZ9>hsoE=LU~29(#MNv!>K6Z9FA0*bq--7h=bUp^a6Wuxj65-_aO1+2fFN zYG6)Sd5Rfa30*xj-!GyO+pat|kqy=-?o1f7k$DFV{WP`_`^A_yBep#^k*%6y#uFR! zR7WSz=&1cR#X2+N{%d8*U4@O2MdIdvif!npOUyGW?^VcNYEDQ)Bk~S?{?R+k54XS9 zP@R4c`@AK(M`1E15l_{nuYl(jslm+6CS2GO%$2d}H%oq$-f{bT*yW!1p$qQ}4&8L; zg@$>EFLU5;b{iAlXb#@Adn&L5cFA0k7_2JA=kUV!C&Ynyo>So|a%SL}foE)e%{^7{ zH1H%otnA>?$;K+YM86#$5DVxeeZv|_14q9rqw;?Dm{gteC)R}Sb8+aTUu!zwW=t9W z9cf&=)Q+nW{cW6HE;=kU=K9+|%qJA{v4C+S#c)tC|dyx?QRUW8_Z z*vpDf%m_Xa`x$I%%CYP3h{4~nUZdFEoSY*b&%HGodz{S(q9$y^Y%>|7Ip?PJb&d>wckI z_s~mU*7=w5h4;bH#{0Px-+Uzhpls;d*lw@{S@xX4z6cSa0J&eLlD-yN74fyK-Aqz`PnO=C)#7 zFn#FT%oEyJ_^Gui_R1jVo@r+A^-6L(vZk@mtGV1=>icQrUX$7t2w#cgN^7Gku^sW7 zE(x{>oN>AqnDaIncZ|e;0k%bX!PomrVlc1E8AZDAEV@MI%*I52H(!;^L2R>zG{yy& z*VT>1=Gg=?L%YS(D$NvZr!$9HC2}@9Ye{ z$|G@VV`W^(?$Nncs{dIt z89A%9mBWK7@gp;AkpVJyX5l-aU?j3%AEaU;1Q`d{=!klk0CvtW+NbNep zJikKEBKdb3{Ig(mAx>m(jS+86Wv0*DzOZf!bITb~c!|G8N&Z*Ars^J$btnDOM5w;h z`Xvzxej&boGGgljUwe*@nXm0)?e6+L@g1w^-(_O`yI!aNF!JT?ZO#a1v#(m4*mLXQ z=sA4ojPS=LrmqAV5<%Ywx!lCV>ukQx5gYB`(jCM?2X*fpY$ZOWUng+lfg0?D40NoE zomJJf*))5>9`I6=?g5|C+?1-TKUC5gY)YLX@us|HaORaWCwOYVEAi*nn2wLnl(P`> zOc0sV$YW*q`@j$FUP4~TbWo>tQ>T5EI&B?w+D+7HH&ds5UDwi9Q>%GW>z0Jby{OdI zY|={2wx}f3^V_kh@#!Yk!F8^7n|5UFmZ5e_KM{Ws@!Hn=C=Dme;u+laZXy-ZFjHgY_26A#pDde78A+y9ao zRM`@r3cve$oSNNi$=B><)JSC}`}o6V@bMqYz61S_9eqFai;hCS-wd9Jef#&P2IaiI z`GI&iwWVR3KJWYM-J6*wXlXbo>ytD6%mlpVip5X4S{~eD~V?h zk!NBH5_bT9CRf7VNWaolyt_zfz^7UN)T8iOv|D)glY1WjzzqI{_~HX(RU5~|w^}FM zPJWQuw!b5h-3&h7TXoR)IcpvK;BfA)+3Y{w@2z7051jqsyP1CfJJ#=G#qT+L|ED~1 z%mi~@T3^%>(4o!jNeS(^Lz%LQJ>xvH({suYpUSaPdL9mfgRZA*l)-^ zLo-9}W%`ny-kg<>gHuMLPn;DtLH|WhpDNIg8;O4CtneD>Kj-O9b)J9R(KnJ;ME+QX z(*p3m5`{n+5_{QP^|*hcO^ z?Yw7)uT!sU-<%VseShej@HO9WI5+&Y@0(fSOTIreD}3JfQ=bf<^Znqw@LzpDeO~yC z@26&m+kHPVC;SC{seN?r^qlYso@K9mT-M)JHS9STvga&fh4k$QBe+n0{4OQw=% z)fW3Whf#yXI6vz1wYAxq*utbQc){12=FmmE$(1wX#Dmbp=E}ZbGIKS1#tQy=ptpOr zufc3R@pF79b+2h5juMkzFys5{0$Q!H=28RI&@cJUi^KPOJ62_xQ7g5R@{lp9os+Z% zEu0YxddWU4dxw`fc4#5>6?)B}ZqPc6ezmQg^SD{a#<*>a%fsecnkwM2Ha&lAHHqmV zHLcVwCsd(-70={aId5cx7HR^i=US+Ju#u72?EiGQi?ykE*@sMR_B_!8x}u;xsS#gf|NhX`WcIGa%B|-aSL2H8$onp9!OB}s{V#JTkO5g^JgY1V ztW1>-t~BK)JC2wZI{%y>BV*Zu|Y$oRz)t6TM9z$2~6a1K($e6VF zRmO`wL~j|3o>E76`b302BlI%2x0~?CZgQ@W@!Ufc?CfmjZ6R@sZLajsA8ng?;q<(1 z{8}#9M&{Bu6}yPs>~}`u-OLaFfmj*qv4PZU@Nsvd_D*NNta1F6TWAJP68#sZH1Bc7+$d*HxwC7C3qK1N zA27$fUxI_LJufoW-!*%@=-qGU9<1c7DDNY^A7mVUyHf70qkOT$JkfDKzV>%5(R&Dg z-cO&4EZE%7^?=AS?7Tl5FZOL5@!b9K&YpkHbLMpi3+K$IMQ+ZSh4ZCbi^P74_viAy zKz)L48Dc${K6Hw{w>k^Eoy8t9(t9i5*kvr|VWkoOE%WxNz~=B2TZv6Ri%-PfHqLB5 z_^3EbL}D}=XFjH6ENev1&BBwlq`4^rOntz3Kc64t*Go!jQMV@SdL~BJoG?D$Hz%H# z@2?pbfmbNpj~6@1+DVPK{FrxeXnd;f6>MNmw6K`DThELF-yMMqZOYg+sPzHQrrbU& z&aF?6OO3X;MyVx))~#!yHOE=p6IBl9_~dEb*eBdre74Cfsg;~1{?k6W&h}^3O8sX0 z(<3zW^E3w*DUJ1|y<0ICesh;efA77Rc~IpOob2(bMMr@<{e)*KuWRLbJ{RfOk!X5P z8y}_dK9zectk4l9zRSE=<|9wo2nk{CsF!gax+HcCa3?2 z{iaZ7NFJXrJ}AoLvS-xbf1S(OKksjz^RhV`f0zAiDtC(?m;ORWKPfUd@v|{HzJz*$ zc{W|he2dU)Dtn#An47bBzG1dtjM{?ys&$Fx+9UU(nuEEer{{g=>#!f_-J%g6CoTvt z#K#q~ey;j@-4^<}Zry05+98F*LajBK@!A5eowlc5K$DtQ{#L^dpa>w;P zcWcH*yc?ByWu7HuG9^&K$%VjX_zWT-(0!=86| zoqwnLll(hXsX=$(8}{%l`@F=|yM{a^ea}~9-6%4M?4l#Ge%;F|vZJ$?b*q#02hvL2 z4j+{fJ>~liTKCp#jiGRI!o1IOPDlgOIEIG&rSJ3?@($wxThpr#?}pCZS?n~yg0L@t zzWAk!r{Q{iQ}n_&BD3g~7QN_4eQ>qN8S%lDDmP=i4LOESYxgHy{`WL1sRx8c#+g#yi!!c~ zyGE&{R5th`%V0Y9jXGqzel#^)Zmb#9bvoA4$X*!RyKcAgSSokqHpj*3r^luS4Y&lb zSSdO)Msl9Ok2ayl!P-UKw9`aAD_}_D*?|VGh%f2rCaP6d&kwC1Y}Y*F)DE z=PI-2)T?6l-RdTlX;efedr!3~CbBv>d^R$6Q&kzdG?-A%#%cJJz(;7Ja+AAlKF4;A z%pv!*LaVm3-#6hrvas`MU4LJz<8FKK1c{FlOY@PoD~ZS{wsT{IM~428^T~j{i?y~$ zFDlpq`H6XJ7wN-8Z6tkcO#eTmG)ncL=We8QRC>qEP7CwG~|>jargeDRv(0h{LsYlwNi|8h!(I~?$$^H^xE zBu@-x&Pa)@0^4W~)$Aru=(GCse4D#u9$i1@N7mT+cAhje8T#ZHt>wPYS|+#Km`4`b zPyKj_b6ub47?odQO2){X5+BGZ?|QcEL8mCM4Necahs$t(YSfN@8U71rzT9kkpOKke z&`14DZussPmltL`nV}UsRe8Gr$9C7BC9(q_Hjm^)nJ2L@{Jxwmc`lrt-JXcQGjh&n z>__-~pGlbT0_XG1;w#SK`rQ%drUJS`?P-dNo=QiO7J;z2Ui0a`+d-zQy{=Jo>8?I&?% z_XHbP=VFg@@q>lgxH=1)3vbDVmlVa-C6Tzg#Q6xC4E;2a3KU({<0-E4p(Q z*W8LMA3M$%QygcPiX9@nhWX#d8NQ2$XJd~^&K}YEyq+1}Pm(+49nIe7e5AeO;Yl{W zjuL;d@Hp_~B)zxGEW*BS-7@FCs%V@qayEok{9EPy1YB&XagHwvwNc^h5dHqq86q#W zfZVULAMTQPD&t;N;zRR+t1G3RseCBjnIgY|+i4m~LTX69yA)YVQa9K;WO83=`0MvA zUhG)R&)YFTZn;m9drFNbH=oxxzuyxh8duQDoOyj+?5MsIZO)OoB+mx22H^L!y;s%o znje8tZwP7u5_ws6YskihT z(0H&?@|WDv!^7K6_5`K#{(<&v@sErVec>hJy$r3?0qK$aiX2xJ`xV>&H*%NM(z3V5 zU3++)ucHfVK<}t!uXXqIvhT*^yJPUcCfW*2Y6_9%?~aI<0x#JY^172h{oWphY5ght zyS(>d4q0a@zn1!s34icMT`T$b6f(D*iG;33Y{;08l2PyZg+DsTxGL`B^}Ue5=qn6d zOlmG*U;GpLT%fi!!}Qw2IIRU~MF*`RrH{^PGx};TwIR0TS?6=IOFZM=S}S5>S(DJYnkm2j&Eg4H{dX zRL?$)lkZ%}dq1JoTwLO6IG2k>F5#!^26}2~+h<&czR%~}5h$Inb^W^=9ZPK+(bd+( zoC~AxF`0j-NtA`hpgU)>;WA;PfIN%M=4s8wv(l%^!YpSz^|h>Pxz7-LPBHIF4pW+; zvTz?XvR1v#{Jp2*(`Dga@bVt(WS?Im^|SaU<@Ty*T`m4Y7Wq!vpz=wK4qt?ie#hLy zQlrD?L_T?zdWAWpFFF5LoWs0)+mDdX#U$^hWZg^bTiVg#&xD_>g|;c<<-L`>X9$d$ zDf^q~XimIK?~;*EYsl;6UBCnj%dn3T2S?EH+a`TKRU@<&mR9bT({A6BcY|7ER&b^R z&Z~4i(-yw_?eE6y`)Xv}XDSN6E%eXw+d|*3VNb4dzb*7I*<)Dmd72pafb!cykC)#T z=KK7%Q2P2k6zG0TPR3XI+d@xc+;0nc-f7I3upQgw??6&x!Y}9TKK%QceteAIOo_ex zb5#D#Bgn7v{$I*3b|PMf>5_7~82yg8wdF8fg0bNR$nNDblMkHkbACs=- zqv(+9)+oM6u7?~>^q1VN^YhL@<9oQZu*5uW^{ zx!3M{?kqsw&Tux8-{2YIW%+x^GmV;FzW2p>Ue2kKhpX8Cq<)P_ZAI(9tD=4OJgt*} zGl$+48_B^9)47+o^+n9@VZfyJMb7-WVYc7*9KF`4&`6!PklJt{GM4g)4J9p?0vJQ0;obo9^4Q|znXJpoQ_9himqcDQ{TneP_XxjzGW-9>iw zCHuJSp#i^rEXd@)TW|0CQt{NTSKr0|_+9$1NT2hb^k0-d=LqJdPC70W8twPfherEm zoW4uY?+nV_yE`lE@7DRfdI`UcmHJv}V?k|JzB~9OWLA2&W=o*kBWJn@&DEa9=^)=h z+(TSOX%<7XfIn;NBj5F?4e+`6R^nUdwD(oKlOfKDH~FrR{jGIOe``%%*&=7ZKz_Gq zb>C_l#)a!ScS^mTelz}~{%?JY-)s-vQ^NOyMK=#i0E+=D=2?UN?f1}1wjlpjGc+!2 zfuHu_opfhfu|u4Er8-WswmLDdpMMurI6Fkn4cX7Y!`i{uMb^J+gNV**134Rt+;TsH zuEp}I4dlK;Y=Dn4#G=#^7rr;g@Ua9KqzE}DZ@BOy@!Rumu8r^eb z&mtd%?6<@M?`o)5(tZnJ%POmU1G!jO$_37rXPolWAVk6*@DsM3ds{->b@79+}t#slNGjP(iv4M#V@qv?DN(LscDIGYq z_n3iyFEQb0zB@j9Nn+qr*VYW2-*Dl;yp}}+7p$or_)PCb182^neuoG+1(SYUfI#hZp~+9M`KrW(3Sj3Yj6W0W5nxA8a9y$| z7?HNh@|n@Twyo_3#9{3z@8xy!bc~N@5c#! z1%E;>pM?C$3*_EHb z>odYQ1&Jyuzg5U-QIHGaJDM7Ml4`v9N1toiRboeL+!eu$HI3ILtySj-r?)kq8Q=~5 zoZcH~>n9pMPKPzNp+@r!!K$ugve_HT>(ScYDn9H^c6}weg88)59n88G#&a$Ygh99P z{!2TJ&L#hANumhtrP2o1bab^@)?LY!9UVQ!*tWI(y5O91&VfN|`zj$fZQb&JW3Yj? z7q_-0+Z$IW=Lc4U#_k*1o9fp#c3HF`D0=F9T308#>f0Ju&bH4Ym5$~H#DCL;IjyU&1E%!J-ei-*OZN!8&T9#*2n7Z@UY5HXe|CVu&K_d~bOfL7 z8=Th0&}||HoD^!uHNpaWt_g;J<_BxKTHAYqo|e{bVi5f5WcymDu-boQ`eK);gw`L! z2F%CZ;w&ae2F+xursNp)(=e(a@N!rZqHtBm82ng7RiImiOS>Tpx?sLaqeuN+Jizl6 z`k<+!y(ih;ei;ft>lg_m09JGAS(=T^lMpCc(UWVu15GC*VM6k zbz{3tFRLV}RUIb`Vgdi-Q!&f7rqQ(;`WrzKQ?$u+Uq{*qURD@ZC)<$>z0fP;`H_wTIlds;gr)0V0F*sZHed}GLw)OW5;u4SmeB4dbQ5_)%_ST$C3e8(C)Tqeph=vWgOuObwW_s{bKnDHU) zYMbYOQCC+-*9wi3`W6h{Cfo1PQ~R2yZ&mu?l-mw9?`pSBLH?!3PukS8AtIDoa0--nWzhg2t_DS5c?G~@K< zGuiCe^sZ}c3)sKbk_LK;^LTWGjJMi!;mr2tMv}(5B?994{RO`m6-OG`~ z?bE~g_}%KGhBq@hzrQVWJ4jv+-B0xCNDHZ&%%-qt>zk!9kC`9Lbf$Lfx+h(xTCw$|<* zVu}9;jm^ziyjvr1bt4Pb@9=&c_2p&a@)c5PYOkP$8%zkeqBY`2s8#*?_Ks$3Fzj(Y z(*=Z+1b%a}TSIXb*)3V$*wxi|gD%M#Xi^PhU#WO~ES(ru)#&!?m*{}JP}%77=dWJ8 z*fChvoLsr~x)p(!b;O$aKT%(=ltn*+A?$kbOQc|*Xx;8;WJC1J(GY#DEK^(W2d(IL zx|aOWal>fb$T3T0m*+pbZGF-+91cFugUxXG>^%JJ5k6x3rIb*?MQx31x|5pv&pEwW zcV-`t?Hyed*0$1Gp+W@7BdP7#Kr&zK#yV5lds=LAd8O__+;y0@AI{}=3bJNg#eMPn zV_m;}jjIOx5j?-&Hg`Xg%kAKWCNvFqmX~zKc8}BX*8;lqN4Z>z7Tl)TedF&x;Y$Su zQvk2$??GthTAEq+9ee*ViyevJ@8$0?@NZar;=Z!`M}5`dW~0KdbISGhYQ_@&_Yg5PTKD)*No_#W`R|Cq~F&@#W`;}=>2(W?)5%Rl99H|tAs z!2|pe;5&ggTfVcdar!<5e9E?5?rsMcJ2pq=djotQ`1KL|iU_`x!ebwJ@fq@{K1(C` z>ELG!=5h&(*I4+x!;4(C;4cLqMDSwg<-nH!zt_Um&dCVh_274af5hT9#qXPXe^sj` zSODx^@YntXy|^$#u2lTK;Qq>*<4(Q!&eQr%{qIx0Ir*+r?mqcjlfFIip1&x$FZSEl ze)Gz&UwZk47k58T49onlGJfk&K0Z{hzlzL%2)ubBmy@}C9DFW1-{(DuLdq3;kf|ZtKeMRsDFLj2+!rb9bfOpi);tM zr@=3<_=?Xlv%o9JWu^a;%gu4{%YlnLGk^!cms|U)u5l-j`0P^f%eUupVl(*&Y&o!o zBG?*W&A_HBm8H7{SWg6|`UATKSZ{Q`Ka9{cTV|ya_9`KL;DwjJD!LM_8(X9{st^dlpmGy~k@o$e)xgG(Y-kHnI zu;bLHmqz&R0KXUfKC8RUt2bH#k^61%+jix0+bv(aFKjK~%lVOh!wVzZPR3UYo_}OP z@+oquUU9b}34Ss7=`ZJUi|K<``L2w}*9LwG_?;2F-&1A$?cmKTxm;fa-xL}D2>2fG zEfM^+5&RDDkAXkhdVCxF0q}F}_=?3Y=1a@)IbT3%aPTiU_!QvFfjfH#m%1361H27* zkEPeOuq+~n`~$;7;QJ$Z7B{19eD#1&{3ah?YNu#?^?`pG{E!{5c`+JakAm;zANt%I z!S_b^KQH|GQG$y<9q;2$;_CqTgW!E$zs%`X&X1?c`C`VUmapoyB*M2E{2cIeBJ*DE z@WOX7_)EbD4u7$;V>9q2z-L&v+EM7&18*1s-Uocm2=GUMr;7MXo_PxRt-z%(AL0En zuvHI?qJr*A z^Vw~!?Q46_ZfxvoYWeh>bGkdu`J{a>Ao8;1n@c`_wMmV>_onj}RP6q7*^8aao1gsb zD>v2o*9oG@5g)z-08Arc7_Nj@buFuogbR_3@PESw34C(N1$Xby8|}RVx!movY1&6>2WXcMGVXo$EZSjNfOZXS@8hgd+DB<0qTNe7L|aRpnWkM% zdw{lwwk%8SOgn}4FbF~Id#SY^p`G?&~Dw`sRi^OXOQ z@zf&KwAIuFeD^rFl(w0+mVNvd+H&^Y2L=CJF835|#cp(^T~1s20r2Okd1!}dYiVb^ zz^CTRJ$?sJdQzD>LICFVH9-^=i#-9fvU_R&{}58B&*%^&SH z+6QUPZ;*p_4(%JXOKA_$uBV-F7#iAY+8wmDv~SZcr#(cwhIaa^*o8Jh+fTcb_9?;B zzDhggHEcvXm$vjnV*0m?p{@NLf3#D`Q_Zx8Xm6pNo?%YfeY8)}Hj`&wrQJc^I6%9E zJW-ybB`-{;E&n~WDQ)^XyWaTik$%cr?epFu_|`95_`V|e%a>UA!6Nvr4sKe8^Y`n! ztO&ln&C*pI0q;|}CKbU0CudLu-}m-|Nf$cM*J_d+slS4_$BdeW(b&&&j{F2!3#)rQcQr-|qMf6~XtlS^sV?g7-Ro zyVkbbKt9UdD$Jx;g_ted%d@}clzbt z5cc+6pPsV&-rgJ2LnUEv@5=)(_YY1F=i|de```868~ICxdZN&ZPX2Xgj9Q*v@ATj> zu|wtQU3c_uO!f^W{2WeiGEc7e-JgB;)mPqpv-^#&d?}O3JbW(m`3Ls<%hiAITl+6& zo@Vy5fAnvj&wQuN!oRd||HbjAkN>00ub=y?$?xue@VEZy-hcRefAQ`2zWW!C|N5W& zMcX&u|MkpYO?~&>=Q6)Ydh-44=RWu6zwyyWYcIAv|401(a`k`sJMTZg`@e?re>n5O zvrpUa`RBg#xlHEs`#(JX!E>L;Jo%o*e=ajVy#ML^y`}lQ-GA%3&wu&bnatX==Reo6 z|NQ4W+A^8k3zqL&&t=|z#o{xW$19(toafJd=iDbUfAC@^^MAkc;YT4}bU*s}%pdIk zVCI95tZpBDA@lSzmj0R5$?|k$-un+$GnsRr&iu@atKWM*)3N`B$4{UA;P?kd=NB_Z ze>{`D(Hz5V;=GHd%ifzG{sOUpH7|GC9yGMV4aJpSa9 z|LwWVulO{dB7cwZZ8YHfnU#IcXhEZ+nD#T2_kW$UyuXt?d+}=K?ce{mAFYj_d%V&X z(iO{qSKi%+-}r~&-3h~I&s$v#AHyMFy8nFsx)}citn=|t_Ve-Qc(B>Sl<~~!a|JCrE1; z8SlwEfsS22Gk)QV{O3$=NmG1>e=oel$Dc8J7fgPxWS;J2ere@#=G*V=cUoI9?7%gI zH!OT?_k$MhS(wc{eXO*%@@XdX;cPx_E}wQe^R(?;zTDM(nvHz;(CF^k@72uHZ>zj7 zQMS?eaz1>^(tg73-_1OIUunLcfA)=h_${MBo}W*`P>25{PvaN!;eTdf=5Ma-|FY5h z)g&&Y`}KSoe>)%khCTmH`~6*ehbHeP7vBMczUMQ)0*>$7yWD@*WcRVP3$A}Tk>gDM zI`dxUv(VTd9Dln1uPn@3_~#b>riFiM;m=$6#}-;XlcA3Nx03f4+Q7Fz`Q#T&jz9V* znWz6L@AR$l5B6U*o$^n{jdyD!ZJ&E$@AK(P-^^IkvisiTzKwfp@5XCKh~N9%lQwHF z`@6jVV!CI4K5jT=a_7EzZgu}pT{-!3zxS`kpN`vebcUt-H2gh#HEDbB@zHlPPahdy zAN{k;(>eItP2@iFA7}1C|J;vfJ{RIl_K>>}|IJT)E@SalUI(H5K5JzSA4vD+j~DZQ z%IAOXVE!-V^ZRsP{IO#GA9DGP-U0ew&gcITYcGb;{vRjr@UgW;<1JtubkD1%Z$^G( zb^l9Nm+ij}CLPbdY}c7{!sY3{;gg{p!)O1W*?U5d8a~gscJJ(#>4u;Gf6(8>_ZZ%p zy$35d7h}Eu-F#Vw`7^HFd!(#C{>zWn9{BHx~^V=3j8~HDTPP2OMed@^{T6sThvQkLf_QN6V zf0a*r&h-CPbo7hoo<4i=c2dvrAAYiFbYA!Q9w+&JC7%M zl6stboaFr%`MfVFZ*S(w50JO>+|!rP%bmBMwp;!-&)@qAe~Wqkz{l$HOXtRa{7IYT z`S&gT=Y9IjXF`3(^XYFJt?`MWKicmx{(20DZ$9_Af<9^c%#(j(?~#5c;IsFcCp!f> z`EFiL{y~tF{}%ap(d5wVg^>3B&pi3(miDV3ee|mz1sP1zfyqmT+20HDWPRwjtWAE) z`l`On+k3`4*UuTfapV2NZzOishu`?UKx6+$O($N-JjJ%!|54MCFIspm^Gg|{WqRiW z>;;qiKmWGrWb2DR_;KoO^i4l~mh|VaAuL2kVJl?N-MTmWkHI~E|0BkGxTbG4y8Bng zpIYB~5BkXZZL^Kw(QLJl&fkXy zNvEB}j?am}zaJVM=rd|I7I^FQ;> z?Ar8Lj`#oVA9%d-`<6b~qh{;1ed_%m+c(U>kMtSC_#>mi^Y2+4cHg-5V{Pa{UqZKa{U}qgVGn`(*!f;AhwG+qJ#tfWa-Jl`r3(eKzx7KYoCXoH0DHfv$pu_3x&8 zL;puz+Adl>2Q8oV|ImM*dRjT5-CEi<`d9jDOZ!sW`#*L*l$GyyEk5Ko{`POVdgbwM zLoUDY_-W=}|BdfH`+1X(*Z2P4{lUkS8EpF3sCS+p_~RNL{>A@S9J3VV^1n;klF7}p zp3Dc|yOH_ej|Vd!{7E+R!9Ty1`QZPU%zW^tv)1R&nk_VGWlcU8FbW~Q2T%mG|&s18!doIXt>a+cGp{>7Y;XnTOGHWmX<8yECy^w^9-0z)x z``gc3_)C`VlbN-zSpA+Eru&}@`sMAvYqZaG*?aicf8#%YX7cmb?D_e&%xAu5czn;& z?HcyK9i^eJ-!t9P_RaBM9#7ue)9+21PBHs+)86012GV%RXxuUy6OE!Vo7CgatWRlA zqcKtiRxV8nR;GXRdhbeJ@7X=F@ZZosT3nC|!=3TYr;G>5&fl`<1v#_y{{`vOWYh9K z`#+O$_J`m2N68p*GV=$YG97&`lleo_Z{G>yKpSIOy9nc9jm50L{NSojmzQ~sxqQ00 zD$~7QDV_243;wx{_x3$s_T1Xt)4!8XgI!m`^R3JuA){diAw;-+h6HH`@;UyZg=? zUwyCbJ#vtu?JJh{l`p;4{laTM^V+K^>8CBa%}qmfzwlFUd@&_m+v@9YeZ9?|wY~L| zZLfaqop)X{GI?IQU--$l-uZG$rWuQFd!_Bw*WY;ai%M*~y<$1veC21~ZF}YG2HIC% zYy0UpzWCZ(-7f@i9vY2DC1vHnEKjQKCw>+tx?gzrjW2!ml{a_eEGcQ*zW&C0ueT-X zuipORPrvfjS6};Ld-n_Py!NFx-hJ=2cS>lrwXKBceEPQ6U-{}6-+b*IpYOGwdE>n( z4{zb#*WP%qJ9%%$V7RzzXua|7&9+Nlw3#yd$15OoaC4ghJ;KQZC-4thphP^CBy@G= zHlrGZ8~fj@ufO&x1x+Ter$Bh=t@rFL{PZilg;(GD%2%vTLGqSW^8d#}9nURQXz zp54p~)`uYb3hlXGIiC4e)+D|62KK}N^nTkJvl=cZR?j z0^b)1v`-%I@8by4@ervk_i4p1u4U)sd~W3G`Fqm~+2MuG+~S?C?AFrA^3HPC_DlNR zz1Dk4KjL`KFW0%dve0>Jc50!sk20=bI{#8!zV1&8UgDRqf4#eJc47B6b>Hmio!Q#G zyHu~=M)%&t%C*I7U^qHAu--8_JS*C*j+OX?XYi>vHkB}59O=0)`h=~Dm3Zvy-|6E$ zSE^H^o*}n`mnR0rORHfezJ@NZjNae5JK885swo#4rX7l>R>4aA^sL?4UfUTNKCCX( z13kX-X#0Alw5vN^{pj*aY05qGZSbUV5t#v2ofKB0uW>qkrrw`H&aYFAnL;NJHBAS-E@UQ}#mN{q^pdo4Ju& zb1OUIvDsLO?&#pk{7n05sPph__te+}7N?NcI4us$t%9t7mA#Kh-#}*ZhX33Q3-Rl~>yZ-3zCF;;~@%Gl- z&5bdhAv59;8A;Qtq$7{o?n1}%;GOKPiMu16cla%3muGShJ4b2Pq`5ZLzAUji8E>I??7*X`Y_H<86^f5G(erT(6UHB*j z6P}?9Btz&*bkj-Lo8r4;rsrY-AIa17(i+d{uaE`$G^Hoxz8d*Lr`_IM*&4q(wmv!B zu?s%PCVe91+??OMB779eHbuwNkCf|Y)82g};#BXB>5i!qoMu;T{%1Hx|NLloXcW0o zyFreqD{ZM7c`BD?vORkl`q_oW17jZ9n#hu{qmQ9aVXQz~ByS@yDOV=+jBc)T?#gZf ztC`&_@wAU}^^D`ekv55qguRL!#%cWhjr&W%j=Ysy+Y}ZG)yI|_kINn|SEokAg9m?| zrjLXZ?T|R+#@DUfHL~T$WaOnT<A5QmZ!%;o1m}qY5XDqYjg;QdBld+5h1$rE~=wCJXZ?eSn|(#D9B?m=dR zOB^!xJ~^C>$9%unF*Df%AM{U^u<_66`&57OVsrWDx@Mdc>NwTDgKnC=b2Z?Bo>tun z<8hzI%BL;YP8t<29y@0*-0Gyivw9E*R@K_#JG*nYkt;CLxKDN_Wnc?nk5R7L+`^ry zP3Dhp&d!86r)yLFK^`m3k;)FGoJQeMu3X{NZu1$T@0-mowCCr5LcInq_tO6{ew95< z-O=Iv7>A(GXsg%`*q39QmzP!VLituV{zh+ZPmE>za*P9pHqPHBj&)DwGHH8h;~6hg z%0s?#b!t?6QUlswwlnGbE!|s8&KQrhdvrc?FS12celx?8I!rC~q1&a`!9;T}@MI&tFa{(Kw!3Tt`gF<8 z`q=o8_~%;XcTBBkkt^;i>7p1X=_cflITw{D8qEwvyIjba<3Uf~G;1@YVJ!h!;pgWX z8MBJ-o!-9tvU`$olG*>(Ul{f|@b~KlF*g2Qb1u9W+4P=I(Q8I1x{R;*$^LCO`SQA5 zI-2=2;iU0AHY4*|;6pp*UgdU_*tF}xwr0MhoL$MB7@9}jV1H*H>4@I7Piv8xQgA*k8Acl zkUr*D_st4bFU=!rEFn8I(eGDwy?%*tQW=EU_not|%Y}X+KX()E!`wuYTJ(H7Lw=Y? zq<_RNMXs3JQ~AxpB#n-E5Z|<$P+zmteO*0H=u~WIKUajVLXTl1`Fy3<7ec$Ee00CZ zh--~!cn(&`)KEun7%vc)#(%TopwAz21h4el+?Uu2VI0^I*6@@*4%t_rx%YBd^<3H5 z^!eydJyzJA{yDP5xKQgHJZly%F&*(Gp0)Pq=U#$LFi({q-zX0uc8%-;@>2dz@3@V# zlezbju+Z+3^__TqU3P#kKkYiMLo@EhhxDr2QmT&0+n}Ehbdf7BPn09x;!rf26?*zwTa#?iMh?_9-(Sf_04L@(8S8m_xm2F8ow5rF zHuI~{#OBvpnEF|8(i|{pnuWn(bUa2}qle*D^(~njmOL2p zlBfLsiZCyeqOWbPG-WP=9kFH6tKRU|hikYu6%$Ng6OUFEKC2Wu*a2#D< zy^-{T)z{hcsq1>;P)%8)>&N(MI8+k{2D6thKk`5DJJ637Y|rX!0rBX=YU)IY!trZ-F2QWuQS>MuGA<+usq%yWx8g_m^ z=}~y8S03?SE@ZsQxS6>s*1VYmrvA(sv(~BgQQ}yiiE*Lao3rP~HSXp9z`S6Zel#p& zIjUEkk6Ml}V*eQDm~>ySPY@ zvRkFzweXQv55?6|PFh-(_TwLa9MJTR^?rlHQW#%ra`&_PPn*Cf$+uIk|-@+a^_T}8)SsX2QPG#lJ zc>DPLl?#-oy?847v|%N_32k0(mHAq*@cRP&p3|dT3(vLg-u|)8g-4!dtK;Q)WeqKt z-Cfz(t*T@$ERI;9ZtFA;RkQxvzb_lrk!;j*tmB066>(U(Jxoq=BQ^iI3a74eS7}K z0Y6V*;M+NN2Yy|&H-&x#I<#HwU7@UIVI`d87liY?iesHS?OmtErQw83VqakwA!llL z*rmt|xG01sd-!FKsU5Som}d*wY{A!Iz$)*rQ@l1BFVR`*%uRC+#h)eQ8e6hl8>HVt zMyS91pfDz(e?niY>}o@Fk#O?5oBXlfgLa&zkyxn?w0r!{agWR=a-Te9EFu|#---EL zm-=euPYe6|*Sl!PtQp&x^LEa<-0kXIM0Qzkr=1hh=E)D%dMD6OnT%;fUm@whiZ-lt zgpI<=)8LwS^k}blZDZ$d;rupo4u3k2pgco%mT-2Vvzs$f_AC)UQ$nT@Q@oo5=U0j=B{}ucB#6NliorBK8cS<$& zKQv9x=JcNZz#Te^i#Gy&c%V%YN8d)f=Nj7BojmvBWYwk7Aw19r%a>7MkJ{{ou+oja<7p&y9yY%MIun=Q3!Xo-%X8{O+d+nCEA;im$wn>6l<6G#H=^HX4`Jb1 zN}Hq{%155ocl*|aiF8!(kCC6#k*^Tad;Xhso#13=4O0A!$|k1HmFlZ!;HdHl(f^g? zO*r8PYHj!8J!~UniGGd!u#};33mD3#Z5B43PN81rH>E^JnVyn=0JRh0Q7%MpQC{Eb z{OZW$eDDcIJ1duda{gAZ0mibu^WYS>E%7G%L}Mi4eI1&0Eq-hdvhy{1C5-p*Q(LZ{ zaXgp^r(2g2-+r zCy@qQo%V}f6Fz!Bw7b=%%@xh5l$-Noe4sqdlA)N6=!f%|`MvD2H+ipqoJQZpc!eJ_ z(GpQ(JqxK^Iw#=&Gr1K zAy{Jca=jZzSo!im`_uv$FP!9LYzf`A_WN9EP382yK+QYi`Bk;;*I8TS=yZ-!JDsx`3hK zKp%umff1Nde?ND|SciFtnFrYcje7{?hd!}4nA=UxuS1LSHBRx^=$d&$(qKbjQx(fP z8M*R!Fh?!9D#V+t=^C41sq4ml&C7rb&zOe+Cw`ifQJxO-qas|m4mMlf_NP4xmpDWo zRYqFqWxN^J;-R2ttbJgsC-L*EiJ#UU^P7^$fYKu`YE$%O!bvuCIByvAp80As|0Cop z=)wHB+mBOXoVaIxUG#j|3|wLwqK^%O|5V+FFz79J7I=1Y37OEmp3-7x3#a~p%i-H2 zot8HEG0I~^T5p4(uZW9n0>;N0BYRsS=DXSVs;lM@!K=_ep?mYTRcV;_<&?(&T?JPB z=*K9t#J-@Ms87}NxX+vFT6}~*x;xi4SHX}zS3EWw8&3}&;Klbn8o!tI*Hf@dlkZNb z9&t#yqgQ*nrSnR#&g&?~aK6pW-s!@};RaZN+0Eg#lD6l0Z^pH+6TH#~OQtklD78Ud z`;&~BUk2$d^qaQ}urs%Id#9LVrmiIzkw1?U_O{0%lB-%!so<3RA@+Vk5Cd_=?3 z_1Bu`ATDh_??8R?IvLpk8($V{me6BvAkHWMlB7p|g_R$t__F-9>d=hP)AiTLl*Z|$ zK1NgI3Ar$RO@45)U+4$0({+tJQJ*4C*8klOG5wlv*0=5v#4i61dxgB>7zNpl#_ zC-Gc3VG}V=&3)WQ9l*%x8TvWtC+1f|{`|NHds=n?@yzS3^-Xl~6Wz4%BygyPrg)Xj z>Fu3Vj0`7@*RUCtk2wLART7$gFn6)zCGR^6%t%uWf31|p*Q=bLFpru1EfjTl@~sne z5d9_nA=i_a2QRMmF$eQz^IdzBw2`!WR}%*|>`S98)t|B%D~p~Fm4?vAbM2p<^fml2 z@20f__`$y%`xH~>Nt_Hbn*KkuMqUe|1O&Cv)KrPsYe#kWEz zp7=%>^@{7tJ-P)Q9QK|V9^A+2R2SmeOX$Bj294snJ9F`-1H<0FWGo{d;!tI_O6d7x zT*4S`dZDL}wnF~|eys1IhnW{h<_3D#kU_4ACrvUAPUZ>n2P7GRj$P&bv5maCjH+2TKR5fdXEu% zlAD2##}|5j&Agd)ua=fDqF+MSdj5}djc!MmRa*w@dU4-aZ5qT zCw5jtxC7RXF8-ePPhQTr`uO;I=4LMV-lAMR!w$v9m|E!UlMRMm z3cRqF&c3D2HF=ds`~5>2dnW#y6^br$F1fE(wq#RRYE!fwXwc_lhhwLTCZS}8GJHJv z%kL9dfoq(%*%%f1!?%O^gyQUg>0tOHq^`Qx`z6$#E-!z`2X-TN7i~`17ilEl162Qy z4697ike)I;_Q<-=uj@wRBs$o@$iCjWt>Z80?2`ID`KiF3;+;}2+6|#_q73w{x2Z(~ znY%r=vWc&(^+$Iv%3lj{q>=v=u#%rZt-`zbqs^qr#ZlsrvB~-DMQCL^ z<_c$BX@kV^-q3OO4dHMu2)jV^E4YL(WdX_o6<>}OZKdd zW&0NNj+v(Iat({9mAU{+2~dki_#IXb((Ff=eRh;AdV^ba zQ{%m6;3FEsW_sa9|NW(*L4IJwZ)mt@gXf$D<6O7w7wJ~|G3EDRn*Tcb{=@K-KRa+* zUh2CqoP62X8Ip6=p;;k(nBS8}qPMlXwgIo~hveD7(BQ)D#lBtX3*mHkr1Q@9^2K3v z4DE>fSf0@JYRjrGc2XK<9;e*3#Z7dP@+hS375q#XZ{oQbAw1CUjy>!fyfHk~o}3>j zo>9UN+U%pQ2j~gL4bm6rCf}CQu615|U~+4f-?h9BMu*4gJx-A^sfBAW7|_3-sQ^!H&>9Y-u|7?$FQy>TbO#qb&c<}SNG1PnWeq0)t;&Ko8b&~ z8cygac!3`Bt2qI5f@GOc^9Uz}6WAb2MSna(uo&vy5`*47%#H*P_2Xb9d7`}vQ~5hY zuT$=D``|-ln7MfF!Nud`=lb-nn-LaJ$otHc4;aN`V@kg0YyA5}_h@{kddDGp-H+>$ zL-0j+(N78w(L;vis}ozzW2EboT3-;4$(cI*?U?V(@XMb?luss`1Cfnf$YXW^cp+cZ z8yx(P_C!2B?dc;)>&K2<)3)eKR3;(zws48Vlh#okQxn$qO3&vedfnQiJ%fMjV%3Mb z#PXnLhlTVVl*L(>Vwv-+*dgSljmP-tp0?N5zf-W`o6+t>L-h(+AxrKoSfaNk!#sib zLk>2_Hpj?MUAe~o^7D+ynEE`w=&wP}g6LL;2=8L+^X7*{pM}EbKr;bI8h_SO{ z`S+u~1Z-vB3Lor+U>Dn%Cd_G??dj>n{50y`(>!>6@a!AD)W8M%554iAr_X%T?(Knr z{H#%qFe2o>sH4JnYy$or(>vzNk8|w!txMW@EK}f3e%d=@npm$j3YWNCVZ;0hdV}!; z^OODzA!{JPUeC7=~V`!KFcBkx5w zevj}-9M4OAWSQRQj6VLu!dNFcW2kZn(b=;d*#WSk%@m(8&i3cSwzg^8K{w|6SmrT3 zPH}&$vKom=TG^tD9`O8et$rzKALY*CV^`qM@WL&P5h;`P6563}i^PNB=+(|^u}=}O zl0K(@W4=Ojg<1n7e_9=y5eIE_N8ru)limR**)6i&!+VeV#nL$XuHuOxXs=Gqjo8EY)R2E*p(aTz-*q=@or3ycT_~9kfGz z9ZRmwCZaTCNjNcfVNRZS=G{tgGX0Ib+LN%xf{g@iwfR!clDoJbCvmSjvc{{qX+H;3 zf=Mh(+nhH;{{?*bJuSv+ax+>`H_*ot&Uq%t9q#Wkp*ZbB7<#+8g`|ktOP*)qP)P~dQ zec!$k|H;Lsp`tE4yHZd=V!8XcDxl<*!xJ9a)|t8L9?X&B;TvRq9_YAIaOze;45h zb*~1WLYlk}<;IJSRl zt*crL4ok;-U_X&)Rx9(Zk`BJv^T+&@_fIGO@KeXw9_;42HYdPOYx2~c{Y}I(?)5m! zM;rSacn6e6`KK8t@lMEhl9+d4+|S+v#`S6V3CC(f=A|f8w5rY5O6kPA#xc70A#>#H zH)H*XH7otGcD4HG?ltC+nF9b@LiQ6dH_W;KbDzE}u3M@8)$*b`u$M>sbQM?6khvG_ z0;kFAtW zylWjUjW?x9#&l`^rJ37J=HrxKc?j8)_;JBW^-?|KP|uU~rsDWlc0rm%w)6kH1&iWbcBl!MktiCF=}{OetNZ(3jil*X8O_iEp1Lv_qShD#%pfTXDrylvTVd zUR9#eiqDFi7q1TEvzRh}Wpi0!ADYcU_-87|$LU(nPD?1h71qMH@{|izR{UJ?-_M~i z`F_UWtnOzBoFQ%&d!m6C=7dkC|$D|gtl#GW_y zZY*S%?{F4vK6hi<_MhD58EGu-fjtB&v-N6QJ4dRELiR6#0cXzm)+l?Gs`-)DzOg&N zx0`M2c(;A8<$}s2tevyg$l>e2HQ(I4_o(zNQ#JUMO9O7x4{n5S$9r0>QTyt+@O<0+ z^$v32eS?&%`%&VNOTO(an$>Z5@~Olx^0PE@t7I?tQE;d>PuiYd@pAI06gd!2gzRg( z-#vb_+B()F9qlmfoQ(J?a(Z%C;)QT>Yquu-Tn~&?20o?aiw0i6O=tAEKRJX-=Md@7 z#dAGFbP)BoJ*tlmE0_LI?~OBg{=OA(qOU)!4r$NPVTbjD*iqCS+bXRLA16Nm!iv5B z;HCSMz)G}PYqIs)%gFsyv`tyuXw)P&QcjxJSQzS zJ=gp-8!OR`L-3+Laed?ap|hrN{0@ z@De@tc_Y`zgyIORl_~9wS9s55<^YhF#m=6w zjnU1^JG*nYJudO}_U_f2&;w6&6Etb7yhDD9Lx*|(8jTUg?6VtZGCj^ z0(u#lkX+%5rGg zZ$(#PKMAw(&dp8V?$pUe_iB5zH_;T&3RRazhN6Y+ z>zel^c_$7X9{e5N8ZWF5pvQQ2CpS3-9>|s24%m4ciGC29L**0lZDwInE~M@09Ux1L z>3kWwZX`Y`8(OqE>ZQ7PUtK&$Hz7~FPxXiBd7f2MU(%3v^!`jou7AmVg;mZ6uHd6K zOdp3`Cz|BfpX$-*5PIyX<(-!Ehly@Nrbw?umB50;Y$#iQ$0FUE3Q$3AcA2e82= zhZ7&aN>4bQ>%5Om;O7U3Z!|V4U%c?{sFQ49;x*61JMFnNFs!t~iT;N;`fu8-*G0m| zhv1^V0=+Mvo6yD|o60W@hjZDRUDxIxjc=*nkljl<)uYj&ctW30C+Py>{TV^-H3vW_ zTSm46&uJU@D?~@rzoV=4qumi-9*@LF4Yr2*jljcH`_@>t*L;Lb23?5Gq}}t3zeeMu z@I>l$)BFm;TMf-#w_rQoy`4ucVGYR_|)dM0lKkscZ7RvRn>=f zhRmuQ+Ai2+uS|sV9@L+F!W#b>9d_p0Mt4D%F-NEV1G*YpQeLAmqI~g9{~}#7do$a| zyiWJv!!3L{(Ef@(>X5MnE9@ER4CXhm1LLz~)Ezm1j>aaOgQA|C7n5Dhz1pz%1Jp4+ z7W|G%j=+c?eTd#?Gq6g-N$=-&ZY|v(kNK|9dydEKv`^~1a%ZX?Uq#3m*P=s+41$rz zNzds!!u)sekC410p7B0}5g|5$#tF(xDBkNGiiX-9GDY2>lN&AdF{EH3c&?}*xhVumn&#cf!h0}rhayG%vZxqhHSb0!jd?0yB=2i}V z*Hd+BM5tOaJ}=_L99#0QY}+%;I7dhR1Ru_+96Se=$OQiV=o4mw{L$|tV_uffVa(g4 zl>rTOk#Hhx_8O;f!p`wHsqJm|_CDyjx_I#HeZgiJUQY7^k|u}p4JMjCM2A5On=;O; zbd15VH&>SC?3-o9b#%ScMuy^nvAxGBxlSlEmlE?Xdx0~V@w0OG@_UG`kJ}qM3u<6c zn*U1p_6K>EyL<0577srgYpUO+4voY}WeY2B8zeX-dWv*QkMiz9P`bGe1s?-+R-`A>YNkNb;Q zA@?^nX6-v0iTxD({l>bz!oBnvdvZ*kg05mdN@DTVVCvB-O*77psWlc7t-@AkiGiIVp>@N5Ta*N(~e*CcQwI(HA#d|YD(I%wt zVeO5%5as}=3u6v%Q>OJx9+R|d&LUEN+8QqL_-Lgcl)Q>3#y*UbWY;$nmvXek+hJkB zzNyg8Vyp@{nO#8nvb)o1rQ58eEyw#w#HaIKj6IS(<@e)AE)si^Hj5v>#KvMw$xm~h zMT)J3&tdOGd?#b%>hzN2D#(w?1AmDxgM)S{{n&E<*gSsM`fkhzU4Ix)t@!*nILYUB zu(?c63qOUEmj|!Nhacg@jbhttMJy`uB%G?X!G%FJq2x$d<<pzuvYQ<+ooDRxE zHCR+iLtDOeIoFF^=_h)vh(#ry#5e07vd=5k{dmuU-<2@OSBa-qd?uVU2gg_fKViqi zqkMm$aU^tG5sz{_2`AR$P9o-wP+k{C+NCkN6q){&}s}zPwuVwtD)H zbKP1U`!oK|5I95N41qHQnuCDv>#DhK4p%2jr5YS+O>?p}sxS4p?##~(&P)vQ{RsA9 z@(l^*IGLy8$2I$@_2c=>&Drejts9rq=Ar7#?a7oTjKGF-df}TI%Oi*S%kcXw<7@kl z`2tvKU%6)oXhNzZkw=jku;Ainb3MRo|nO>-n-h+mD)wkH=iT5XWLq6dRY@a_K_zXa4!t$bBRSx)o!`3SKX^EC*iDp5`Mr$=cKjn2LIx@Qb;{0 z3wcaShdh80&qXs1)xYtcBvaB$@IhN;Ea~%AThHUBgC=7U@um02Sr%Kt4t^fIAFVVD zh@*{C7JGfTCl9#OXK}7UxfLUc5x2e z$Oj+dNwVt8RbN@`` zfF0kVTeJA~(Yzon>w!TMACptdFuL3y8hl-vJ zUg?>-W3K*%q55WIg)>#WfA7yImXAvJ;7L0}Z;Rfe-J#Ky?bVt zkBULH`8+MInQsIOjn%bxr*Ck!*W;xAN`6Nw;ZW%rI;zv?#((H`ug~E}y3ePrwx0D$ zC))A_CwbAFS&WlxWcjhFghi!i$W3;3qA;_J&bIG~Ga)nnKZl#d<8PqgZZK{aKG zE}`sjbSm#pdT6+P@S*STD&aJ?d3kwz`Qk9xAXn&U^?>w$=d{6!TxYhjH z^`f6?lh_4dBON3<=t|}bq#tcRbr)E5nm;zBsW%4IlqcH4NxGbPZ`U!dBaQSaeh=v9 z_@TRLd*~zCo}BH+2IU^Tgq$Qk>vET4yIMRDdK;X%7ypdwYUFq&f|AF@Zk$Xpw8Mjs$~EMQ>im}>!Z+4$27HwHK(Bwr%ho3H)&;Ntm_T?fr- z>ePrd&}RNgd?8Ef>%v}e^EJ?OWn-(|-Z^P$3wjPNF;CJf=pxdCjeKMYLomD1KNHGB zjtcwojh5!T;x!-HDJOvyH2H&Xa6-mu6U22+FKv|gz`)N}-fx5QQP=xReFOMB6ka>M zQ`>$H#N)(RR(T17zpco>hI}DOAL{*Kt9Tg|y=H{snRf+W$^CH7`yVX6Ydh0BJGrDh zafqG)6^(-U~DmziX7IF{iLX*7Y7$PP1@=Zt?va zzvjoX1RM9hr9beemiW8Gf28?V3vyOGqoFz|JctwT0^d-H{|nN2e?anw#9k?3#QFqw zo!Y$0ZZuA!BVEe(T9B7=7=erOq+@wyH}RQbWmwt-(*!$Y3|W$X(zjs(KEXd( z=DUpa=yQz$xNjsbaoL_&%8x-*24P$dI%&3l=h1rK`hZWT>sG>|953S4eDEExseJpYc#Un2 zfBf*9?1|GZUrK!V;d@Q=6qe(w)#Al(@WWSaTdOhM+NJZO@=vF=hE~JjFn)?SIo}O6 z;tA84LANQ7y<>LAu<^Ht#5))44$H#TX%FRi%lDt&n zrGSym^O6pmnf3G8?ahgS;mtDh3dhBbdEex(5^t^cOgyv3!uZ1T2X3s>f?GZ1jlLDS zo>r@03nxNsYWCcvVMaZ`k@1elk9h!m`sp{{wKvI+c<^Pu1gw!${j|UQG-D;)7_Tw5 z05iXaQ0cwz^!DBNzqGVGXTAbD&`3+us&T?bq2GU^IK~=`W%;r1h52^Y;J9bJpEh1( z92e$;^Ly-z;~JHETH9W-mz=fl(tQI(AJ4@a9_@;6<+1-oYk!o|it^)YC;k+dtRvVu ziOsXIhevx+!rD@P&HE_zQu&0)DtlnGkM$_!iSI^+o@enG;%t16-KcpxFw%Tg5?5T4 zIx2sn&HfeSRrg0NuaWu0TO2Yknb_CZH%U9w_auGV1Uh4aF%uE{%HS7e78s z{L$zAVmiNkK25#p)4qNAx~>vB9+if;tZF}+66IBJS-n^2;d)VXk;Ko3_U%6U5 z4okP#)fs$hh+gw*csxqtmykW-^^%`Tc$GV^1rNuoO=EIE2y4U&)xoY)! z6;KyOe4B?e0JYY$9_jCn_HzC#oNZ)n0{;r)t1*&MTdCrOJ?`{N^{8`P27O{R{UYsL z`wyp0FN(L?YE=K!;^T(-5^0pK=3Fi1^W!?kFus?*0wHvC*~t*LbN?y z$&mbS@l5HOjS=H7WJo+EYfs6VW-WS3IDvyONeh(@9VPit-4)W`kyqzzNvHc}ej`u( zpc~cqz#H*=J6h)^YH5GcC6pQCLmR^`V$VUmmwa?~eSx#;oYm*N0z5Eo6kj^4%ovg~ zc(3B0u#s{lI(l!^3%%tIZQ3O?B!A-BhmFLDvY~}-Lfw3QdGE#Zokd=iM*S6gRAgU~hc=7uh;^Lm z#NL60g^gi+`oz9@Vx08NM%tHTO1@cDUZe35M$nUPgcsyl{SWdjeun1D)@pn?=zlL5Y0wlrm_i{JENbG z-wWOun4w>lu7BuCiGMoy)iZ_23j2M~E%?Ex)dv(9A!A@mnfTTKU#^i`$vh#pgXk)3 z1WsO_M28T&4|&4IOev-gAzK$`(G@x&gC**jei)b0q$2TrQ%aYDZ* zjB<64eA55Xw!=F#yBvM!^`Gj|j8Irf4|7lZL$1R)e>uTF8IAFZK152M%C@&ca^j-uLyS zL4RR;OLllq{5(It4$Zh0?Rfk|Jbkgodb0JvNjjeT&kS#LP+#;2{S~qT2FM0DqPM_8 zbjpXek2vpBLbOCX&eIHBVjAKBd1C#EHU*#9PuL35Q+}=lT`#?({I!Pk1t&!y;jnB%+FcM1Il&WgugN2ai= zRd>c}UiTE_WooHUzRU2#Mtbl=o*5^=lh+5$!p74PPMRyAzLFu@LE>W|;hlMH%}0@5 z=~fIUmC5-j$q4OHI5EGCzbxzxU*~|Ko#XW9WaV!Jdq8|aSGTA6Y z_4FEjEnewcROj}oiSBgYMaDaABCl(eS0U%eXm`AKWNOpAt*Rd*6h?$`@yqi=pxk#neaH7ALw~#BQx^N8F&fpeD!{TcHZ|C?NqvxK1Ag<8z<;NoAZ?5 zw{dG|sb_QTQh{IjEYNvyWKMA*#5bM!BLYKki)4=XfV{C*Nt=^i3)mnPmOk;{68Uq> z`yD~wF;9TqM%z=HhSz5NEAVN&^1hiP&^cD-dSfiq4yy7=V|COyG*2hKp0jzu)OP~@ z75q?APBSoqM$9w!^xN1?Jiq;LEi0_RCZur&0N`gi&~*$B)hK}Yi?4|@8h?OcB0ofO;a z@N)L%T;J%;?J&;(uj0GeA++INb4H9?i7Vg~bm@FpBTBayD*3?R{O533vs9nTTnXc4 z=wP!$3!Lc3!neQjwg5aaS8*%1wu!$(>Bf`73cCDhy-j0#?D7Xao12Wgc#d3DBR@V3 z{U3Rm8isiPqPc1=4(8R zi|{ENY_Ft0WekN)sWFuJYt>NrgfQ3wrLuB3Rz=@CDyw*Iy|k>JD-SpCOwZ)5<>xV( zmyrCmDn8;%bwht@&f{=wO6#B4=j#u_C(JJ)Ly_Gua(Q>ieE1FGdu`-K;&a2>58|g) zL*YbSc}X!PAD5Fk=j+ITzXh_NN~s9|@C4 zpHl|?o@lmeTZ1q081}J-`MB_{hcISgEXMkX$BS_?cvYI$s})1pT&;qWFi}{7la28U z^~=vGDjnl~=8TvF_n7VUj&Jir)|e-`b7%A3bXVUf^8mHrs5J!WwE|YEx56S$_T3F{ z=eW5t_Ae{FLUb7G2*?`PX`U~xWAO23@`sMYmmhK{|9)J9De?5LDmyOYB<{sa947W) zWG{v}aNGN9YrCv@$9dv=#vb&QVQ;L>kuo2EtW{gjR$`PWVLv#R+K(zAA1jXfBb zUCTZ5QtT;Ho|D7~+TtS#(M!>Khv}(c`?>WK_ELhC@*bxSDkBb=e`XJq+F#7;acI_( zH|DEw4<5{ggr8lT{G|QyuKhj%rKyF7a%oi-G_)^MaXu`Uzh3d4RxQ_}uRQTt9^#ee zxS?pIy$d}%E{$sPiEAtG2GX%~MI78qJf$uj2;y(K*_a9fxDq+E#6MONQ7txRV_?&;aGEOsQ zz?wvj25&TQKx#BDUA9D2EsX@ zddkjWn9`0#--q?C<8jLqZ>*u9PY$bBBc9v*dEs2E_)&P=`qe8x{GcZq)yCGl?~dKQ zmiQ|whcUW7;9}oG5k6{<+}EqFM=eJ@>5O2xdK@Qy{OWG-qos4m<;tQj4L+#y-xOwD z)z)VU>tRQ&V?FW-r^D)yRySmzxBvW0^o4296(?U{=2N2NoWGtcMCQbg&X%DEPI`}> zcp@A&7jf+Mtwn#UUf2z)Yg$OT(BQm-e~xY7=@ooT*xqQbCr@(ErpL%%U!U%{P_1lH zN8UAhL}%qZ4!TbE58E1`$rE|_K?AzTn$oF_%|9G0@dK-P($}L6)lvpDS=Z3nZr07^ za}B*9-VY0vA6XzRJ`lLRcZbb#J@>(Ze$>AUuC@M)P7)2B(}>>_{3w4dbv$lb(VV*3 z*{AOq+S;#uPrGM|XLf8boXr*gX(93h7PMFLAcrcqT!`!q&fFXrzPz55KRWDLwLR=} z^3qN{P4u72JZ{}<$uFAdVcJ5tx3$iW>6viW0{p}$wgUI`?ZmNnnfn80>8yUNcqitIqj1(m{MS+ zdgj}mWS%ymHl}pc^X^E`9dOv*y?Qgo;jsI)(azxS7!1Gyxf1@oAMm5?qSL`JUjMAM z?zN;>9pgS4*-{%CdpI;G4B=II2x&LS$x(3exN-i7a#XftN;X8APE%TiwbZ+sv?^C2 z=j?sI3nskF#QvRM&W(-~WKDfF_B!XnbiT^hxt43%A2JBu;)jsA7I>f^kbhhM++SBy z=cAKl=v#m>$#%0>6kA0of#qIfRv zD0Mz=9&qygvD#M0)I`^Kr@3d2{2a=57#f%uR9{Aa#&2#Rd;Pe&3LL=;zObugNBMVq z+&Uj6zv$DKATR3E`Zhc7a)xqsX|3R2l;;|EC|?}XZ+V%a|3hxr%QSLjW}a`}%0Hh^ z=dWqg(pk)biN;atSFb$c0UgB{L3-29<4%Cn#`4Ir+9RRt8on_~eZfV)wED;WH}sI- zG#koerSIZmf2eKNtIkI)M_4KBxzsT*mhD{_+PbkBkN?rDqyr~kuX5Meo1|a5GO@7J zo^2nPYG3F6;nHS*xje*!d7xu+cE0T$wT|`32S5Dj-FHrIg}M;OT#1(_^gT8MdbXNA z4}X!A!}&w?WwgI?HU;tcLeiSTT<7eT`n!76^*CiDD3$)7cBnZ-jk$!E&NribD#--T zs5g2UT%mAlZfrf)_25leq@(W@CxcffXVH_oKTaL%kym_R2cyTe?xb;i-1am^rH`Y1 z(1s3^EwG`_2M_ca_9guzvLy_~heGoqSeHG;^}vWS;EOirZ75_%;}qoH%T!_h+Vc57 z{D;z?Av65I0Q*5Y%BL-VUHtyHPgAeD9;Y1m@nd1NFL0AgVP9&V0L-K_n0I09tUk%t zExx9oW1Ne>Bc7py9`;PlgDLm;z({;RCF`kv-Q_s-t4Chdg?U2Z<3q_*sE6s8*fwSi zCO#hR^{y>%FNbkIZ3%shpI_`J^52?U+0oey>1n06{pua;@i$)*;oAt%^>Qm3Clv}O z*_j?A#(B~mde2Hvhdh_l)Mt+Wmvn@K`Lfhb+kombN_)A5%(LOm_1`d1?3E5HEnn&_D9hhsg zwK_Xn)5CeT_NnB|Idi@zIUg>J2&oJ8@H!k@Qgussw=-t>d0_DI=NFTC^mN@ToD_nk z;G{EWoE@5- zwDV}@3&ilGp2@s%;^RkjXluwBczM0g`T_Q2vE1O}C&(-MPyCz|R^s1>(%Z}zl$@Qa zh*RmA#$tWJFS~&5@igLV+9~pZpC{$jdJl8(=md=w$lFX=f>z8g_nPlTpNi)Yn!ND* zD1Ne%ek@s+P`^M~%n4vy5l3HXz2UNG%1;*SILNr(pXa$*czK$o*TbfRE8oIT% zd(qZ~);4n6j)IQL)Orv2pr_RDc|Mzklc(e9)8=kJ z+|2TvJ|DZ1wh?fe$(o&0uAP;SFW_XhCFL+CX1t?wq2RDG8=RmXC*BybEjHo=e}8397f0U zeSfTPKy$#pZ>rVTp=3|`ruh94Y>CqT(9>rPgSkSDn_3Aca1^if;mmJx&)8n`NJrLB z)8<{y$|_(k`vRLa_^>Pby=9*8<$;BgwZg;R@ku-vRtg!PF(<R6RdGPY;#fek9k6d*s zgtQfFC%*nwUk86hMSWBWr)uA2tECG#Sszq2CS~Of|Avfh@O4<~CxJO$y^mI_f3^I; ze=?3KZyy~WLv&cj1!z^vS1YB{J4V0M1B*&!NQbpj{j24rfYTA}@JhJE&tzkrHklGe zgxJd2_PryGSziPHZsV#xM6sOJ~4Sa)yn%xr}MJJHS>6W9-Q$XzQ4ds zzwV*Ai{)gcnt0afHScoL^{bW+JaZDv-H=}8Xg#M|K2JJb0Vn3`tUZ)`JH+Hmf6RR_mkV~_mc}<2fFD2M;nNYf zv2%CCuNhFjPt&T`1st3|KVijsx%c&@w1li-GJX#7W_4%YfjxxGOA?2kV=aNTQPvW) zE~PSx^9ikmllUXlJ5yXd=9OQ2*5lYOpmg;N!GB`w{3Deqo=!RxKMLVT*YwjR`ZqsE zjt*fTipKtN9hARP80YbH+0UpwK$M}hDo^*#3`P5382Qj-%%A_h2x-~x#y$(K>&dV9 z&^yq*59>*<*0MYwTqoms#;S~6S(EFzX!DPu-{U!JB|2-teXaD$rH}bYyDyiwS@CH+ zRf?0X6Q?;Yzj1l~{N(nL80Q$!ZQTU5I95N41qHQzF!bfALzsHm%5j$r^lk&>vCm%oZ>5C z!Mq*&DQzptHTHWhbmkWAEXb72!Clv0=s5rP12%kf^Y;7=`Kh~Z`-XFVe|3D#UgG(O z*;&2?_;JB2u7~bzPtpeGI@uo;<50`}z0vWGTSE^E{w-AgX^}7StFY7dnSxF5vtZvE ztp$r}(t`Kc=0af(6S}RAm9XLL9eRa#&K~Y+>U-QY{_JrpbN|o$t(9;hec?RIlY&gx?mrKJG_WJu?V z)pw$|`Ed^qIs;gcCyV3H&L@|idGF~foG0aZGumLnN%H^0+D#e;iZh?k;Vdh4FiWT6lmfwg~B_7K(nlM2nELzMMv4<>_z@Z`d*D5#-zR#eF%u5_$4xztYOh z&JIjYZr!@L(6Kz2vv0%Q9qGKokF&AE>pP?5kvu_H{<^T;Js-N>G?|KR`bJ>|Z_wg9 zYlXVy_edfWF;B<^{3+hfd|pzUQGU+(Ob&PKvgcf9_RINnkne-_JBzk9XnXK&3?v)Tfsf{x;y>0L14VZaZBO>=g8iTzV+`4d*Jc+N_h0bpD%2DtUhVgek!HBaV=rQOBD|8n3$Sk_5nf8wP=$ z{=iJ*hU~&(AKz>RE8Z)4&=u&NdSozd+eQ}olcIr>BVs31$!jrWhP=6+>y+0OW0oU6yrW5wJS z^yB%LX5s`M$P|3Aw+$Q^BM?6@_^^NWQCDG{Cm%f_fv}3uUW+ldT|n&BTg6MfwMWL7&SHze*DIIgWo#(8}f`_9a~SU zQ(7GQo;;Hm+qZM~lkYQEixW1Lon;I8#j6ihk7k6TEBguEgx>bLTx}11s7CO9K zU41<5PO?dP*g~-m!;V6B7|%!_i67|mo}?RzPpd~W;=~hS7?&6(j7NO@@@Q`lI7xS5 z>(D28Ov+s&d-R9s8gQeJ#5M&NY$%O)MGre)z9y`f$qio3hM%4{1CulwqK|IUm`?K~ zdIs;ZALyrvr%jc^1{smffb5}@(Dy3uun;|f4v;Obc_{Lw)u9=2;@OYYSvOF;bc1X@ zY)-W$`Z9ieV_QExQ~qkh#E1U+!|;s_!-Fv~eQY!B?@D;99v&z4f7q7DnA!nzC*VZ8 zESY1ldig(%*N6i@bTdEhX=h;0da=qaJp*aq2{#{8Do=Jrr8+d@nfTEh8G4904c537 z=f|GN3%0221o}XH$n5lvZ!3gv(n$Bve_?ATxUG!J2bAo_z3Qbt zewu+rB^tu1+`PD(tIqlNtbAYrp0rhP;wO6864}{_Fjl)hbwAhz$f0o3yovdoS>;EW z=7;5aXZ{?v`5NgI9hG@fq4=Oq$ddmNr#2+ND%3-HDuuKcFp|*_~=@CsziSj{I8uK4|TG(lIURbS7-BA$(ix;e%Kfr6>y5? z+>js1l0wNDe2V90hkC~vuLvK78q?uJM|=lAd&aY!;aKN9N6(dwg3qR68qV*dZzh+K z!;YED=I`-*unUkg`h9+WpAYW}d$xaTtpqFbiqB@_BYL8b++Z_tc8!;0q7r_?h8KpOt&&8 zr98~9F;}8{rSWwvxyJVu?b0MMoD=e4g~R_@<3XkE>0MJ?tCAj`aOhg3-bL zT-f+f?GBtYZVY`XwnkoeF(%55E^e}pfj&gG#S`I4<0JZ>r{Z<-4D9^&-WXUF$7art zZHi7R!6`p(11ITn*&MW6=z-J9(p=%(Xpx8HN_@6T81olw&ET8X&cIHsXL(Mj@tDV> z+;!qJqO@e$mXbAWHrjk?s^qR!uu0=1jbGww#R%+*KBl*}k)K4TnLTPYfacGUQ$Oxb z!EgjF&7iuLge)_qrZn zlOHMVy;efMeDSL;v3z;dX)I4Ueu2<-|dHMHyPtIZ;KwI{@l|} z!C~P}-!$0j$6NsISY;_B?%LE+*c$^~#h-?-h*NUKK0wx?j>|hZGcUK^JuTVM4wk4vXn`NeahV~cAk%%?L~1#X-dJM70?jeRpH>;aAEW<-Nfd(kxaqI&u? zTr0j+Lh*;Ksq1)*q4;`)>}6q(hvt;amDwuzh!61@)|vAD`>BKW4Cr~ap~_7QRR&nG zcgWBE>Y2i{{LPMo7ts`7VXZFM%zQH>`EHw@DeZAXl}8xXbnHxwkJI&W>C_{?cqs|P z_vy?Au=QWr%vw_?T|MafGD>J$`TFx|TH#uJDP%4(Z9Y=Z%#~7*Z{<*I8?E5V&htc;N4rlc}L*NX7GXy@) z2&k{CCj2<#kXE;9FsUX@TG^*PF0J0(ef{fvw`At#tZl`)G0pw}ev2cW_xb6XXY6qt zp6xEo&-n6AJ2vp|>%%qk9n%l8!}qR@w{Px_ENJg*wIO>z*~6o~_A39hVkQ0wksIbN z!KPX~4oe5d$eW+vJWW`6e7I&`Qrek?!*HnfIe6WkA1pbe-RgLGjBNgUjP_A&eUFYK^hpPrV6ILZ<)gto7E+55dA?j*4iZ|oB9mk&(PU4GiYL(-^T)fu0**{+{4e|2(W9J+SK5o*|)Bgp2raFRNpB!H8Ryy*E z*OS0Xw2>v+#r>VThx&OG?}X~tE44l0iGAVovbOB?VBGG!-#_*^X#EqOn}wC|i9^11 z=XEZ13Eyuk(;v9WcvtpLJRMy(5+lln4)0j+QT>tV6H0#6 zr}<}mUy3?%&I~N5x5uNLABZ^K{DxehT;#;-McJIltCwlgHX0k1ulk}N;6Xp$owrql z6VLU2@%I5P_`QhheAIjStN|PGBKtsnuw=SfI0+*{`YGx!nL-zM9qDn>*dDn#Djq)H z_VUGH%EJE&Klnlah!^?};-sU{-{M{GyHTO&_>eIQJnotdt&$GD(3#TXqA7lT9hz}1x(cz8CGX%x z{K&#w|I)R+HR&kkdWomK#klx;+K}3?$_F=}CheMbiTy<$`Vi&yVKcDtG(2rE5*CEq z^L%t+Z_?wWcYIhoTkPx!_VQF;`_5?pOxWif`&>)Ii8$GvvY$Mkp8sZEiwD}7$4TSz zv0UH6?C8~pdWOD0POvd6*-z#tGK}j7`r6m|LFX`eLY9<|@(c3@mbaOhq|p*ibGe>r zVL>Q;g*;7Uw+pr(&lvZSkG54#CaAOIg0z!c*^6mukuk8DTgblLcYnRm&KN_f&n15v z@6C)8PTpn#3w`tU+En5bmG&ka!IXT5=_s%QOK{lQ8R-evrl%S6fnmA5)z>d~FQFI3 zTPxv&Z6q9I2YWt|FWJe`QS^1_A?zpX*JijzZs^;w8_UlP6ib$_=e?+p<=uc)F;(lx z6E>7^lK)4~C)fC=!-fz}@$+i$=>s10^i6M@6F26Ul#jU*#s<2_Ht=K3X124KmU!}W zatThH<|B{dwPv%0o!Mn9FS}aX!V)WDF2TdqVHfF1g1}#GX(;&lnCqbRYH-=Y1kD zS4khjSduvkwQ4?9*vdJ zKjWI|5$(G~cKCA#>m)`2i>CrS_S@g8wkC$rI1@$VTB=GiAurf;KurcBSTe zz)CW2ejTov-?_q?Ho6+W;u_xz55l-VCrJ5JJoVL;ge}MUO!tK*z zVNHs80?9RFsgu;_;?sv7C$%3tC$)r3F<(GGMf>q-Z?&}TGppG!$Bqn6O@y(U zr=e@wBIQkWb&V>&d>Ck69vz8ZlWnWK&5|Y2fiBmgPhYI}DEmisV2*`nq(^7VUasgP z3*3wbvL{*ev?z=D2+?St*|pTgd3kR)D4#;|p2R=VM{dA_{+l@8E~pQ9O?LL=u`T+B zQe8{JpmP$R-NFgGT<-wA?{QKar*D7n?W&+}6J1nMmO|P@ zp1=s51`XzqCV0&rgKYV zC$EcrTzjyKlJzfdYePr2SJJP}7v?PcHgeZ*<<>SPMn-lm9(hrzEAXB6}H zLE`7A)Q^+LN7skpq_zk>%Jg)5E)5L&abBy)lKAkvrd{I~tRP=0G9-+W@It|txO7tD zw@vb6V46pQ>p%~MNVo-i=NlJIZarJ=cGSxY`Y712A>-V)zgR* z^WgZg$}R2<_gr1PSc{BQn>LK=^821Z>NMiSJPPwE@cy7@bCdPYYU`ht?)ug3il2SXHFAN@T#`Q+6ikb_m_qSnG-?2sOR+J$ms2b?aTU&JscY1#~ci6mc)Yz zvIr)c#}W=<-r&)=?S)$H);#HHlP8ap@FL`$GuEe$s&BO+7$Y|;hK*k*@a3OIoK%0+ zgFSJY`z2%_5Ot>Rta0&UEr5IdSZ_iWS+h`Hm8X!k9QM}fUUW}eDE?W)WDm6F+Z2D? zkiAcoJH54hRb`zvjNn(ivlo>$Jk=+x@tNHdd_;xsCk+(l*ObSHX?53g_9w(LrDtjR zS~X5Qv)532cY>cW<}UTKH5a9;r5?%y{;U(~-iNi6camwvbJ&}b-^(1mhudNGX%~MI78qJfzyRR+~-w$ zf4XXUG;R;Wf;~K(n=3cZ6z4x07p<8qt{eB9Ugg`6?8#++{$@|_fp1&${bc6s?st#h zT)B3)dvT=a{=|Igw|G@{Yu3Cvu2ctwU^AZ^obhKEnD4Ij2c~zrvRm3OtMaSks&!I{ zZ-so*o$t5Qibpl+!Q9q!!g)2(YaJxYb0S^|IsZd@siwZiO_S_FEK)De;mJP{m&}=P zE)V^3-1^s&pYOnk2Opk1GNl~A8+!z6(LbEmNz>smKBPgP$MNxfc6Pnw{9UWzC4S=b z!f`$PJ?FoWJ@ku@PrD`!-!!T84yG59^J(zHx+*$RXBfp_>6>ldo#-oM-!^@b_S~n{ zS#k2^qjOh^PYboC>CcY&bg_Q&=W+eHYWQp(Ite9VLl}Rz+~j1n8Xc~^;fJ+7`9;m{yoqQ;L;@cBC3%LOk z>WDmy&CP^;(%`{8_9-%kJw|!t_clEFi055-eEfAYuo6A&W6w`m7noV?<2h}CXY$_> z_kUn}dn@q^0S;iP^#zrGSSb3?k$$2~?)gDe^y9LciIen2;jF8DC#jvE;iNXA??o?k z<`%&Y`6_o#hqSDzPtM=E#GZkr-0JMzuFggLr{H6YANTlXfrexjOpqbs;(h_T&Bn;n z8@YP^p3YAamX0Hab9cMD7UAEw2cQ4?)cx(-o9hqwh8gwe4E65v-KjLc4so2mdBzyA zAUm$@({>f_{RK5chM?i=scZEu$hh9=jg6kG%VWLf>#=u6>H7QEyTHWu0Ca5cUcDLD zy_S2*pxn`+Z2Q{o#o&hyTy$0o84^x}^r@t87EWncseQqZaOxkrkXzsFTSm^{4;^t7 zUw!4U182(Z?O!*gHn%BEq_^33kDfx`)6Zxhelv0MSWV7vl#JhK2k@V5-|GM;$rFAq z%GLR(@rlkK&domRdLWz#nU{cvw7-+W3Hb&K>>J*h&MlAL+@1g@_=aC})KT$B%ZDD* z9;&fyZ^`!q()2bwG#eu?PrN&w2baF?oNC`1U+mfwPU@Fwchrwi*J&7}#cf<$yM%u+ z^cx{|tmGwobFP1Vxo=f6MO&9GcT)KHcOpIsv45Cv-BUy=RFbIT`w*W!F(zsE z$RW1C|KHx3ueFggd-yC@l05+umbJtJPA~uS=y;Nh-9Va{Q-8OghF4#@40{m#``SjRGIrlotFx$h@}W-ygmo@r~^V z+T8RRf7pujrD!h^XAHUdxp6juok`g`%*@j^Kz;+`C&oDDSKgD( z9zSi4LE1Fr6Z;AM0!H#{`t@}cFErNE&6XhcCS^Gbyn23e&UaC!ka6eOqrfJ%DL>c- z=mhUcm`(-TawYvQ4cub7E~@`l9xfHUoVH8R0$pp!}Mmrx^!%R?3@YOu;bPQ1&@&73djt zydJR;Q;@hI@2O)19~;QK)z{%&Yw9^?Ex?W6y4@oV|~^4I#s+Qd>G zpM1A2otwLysbZ~dEhC4P!RA-@k(Xi{d`jofQ@paJEW6|(gXNlx`ikeHz)JcV=d`z# zD|LDm|6=ON?#^8qY4+KaRJoOxwV6W@*VS@Y?iV%6>=wM0tOnIZ9_ z5AwwI9mYBOX|{h;Oe(*NZ~MIlo!VZR(l@|LJ!}k=h}XpGZjR-Y*BcuAmGyuP@`DW) z?J3G3tIhgT3>xa5NGm-&(}!ulwqEBl-jfa*qq_QSU;9bjiSCFP5nHD!dwQN?qa5)p zr%BgW_|?brv;KpNUsJS?zeZWg^*8E`>nw4uBw`pV-x3jVEU&{%YV(8_QAHqhd?{%Eoe#c&F8HLndBKZ)VJ-~D|~k2GG{4q z6Dz(W@`QfArlZrkp8ZW8>r!+y^{JbfzvvqPJKA2In)=v$w<&`gd-#Cy9YkBJq;-_{ z;$(_FgWc(zeWC|Bl5b?Nfm8PFGKW)lqvPQd|5jO^ckls&m2`{}lWuKGA1OW{=cXz4 z$(elJlsYC}lgCsix_p0keXpwH*%|o9Ht~DCU48nudEICo!Lc$ z9OvzKRUDo$7Us2i`etR{zI(s8wzKk~dCuInM~TBtZ9}7Fq?eSwREJ4zUSn+3cK}Z4 zwF31}HG!H)hqD(y$d?KB- zymqh&lrLHXmHF}hZ2HeBdwS7Dti!bC zI1fuFMV`18rDp&XJxaNt8>+0TL zhjtzL@VXNZKCeqVz4MsglCwuFx+9=mbuab!^bvta1RfC>ECT8x)4{ejp0&$+zv*~# zbw5_k^L{8CZ7uR*${v<R5$-)_HU|1$f(k=jN5NnAT0x z-|4LWv8Lmh8{Ug&6f9#p46JM`rkqKTr%ow6@D6qZW!RTb9&(24AV>5Ybq@WGe9lEF z50r`Zd%m6Ll#8;BJQ>p<(mD!^(wb7%5!f=3{&`p5xon;%TzQk_9-Af7&v!=8de+l-W6GIM&Q-In%in(^_KNXT_RkNF zwkIb)@0_izaJ{;?miG3ha~c!RCy%EWn%@LW$Y;%2IV|d$n?e`YJOd}_SC*F6KK2yHup35KSHGKeM4X6eBu1ou7rq>_{Z(LV-Le8I@^3xVu*-Ex0LuQjC){=-Y1@x_0hlA zcG}||^6h8?edITc@+1$#NaaPQ3|D!@$Qj#DK8{8`(MNr?ve}ctQrii*mijphH&ZQ`U_f zmiTy&Y*B9R)s)sc4v>b{^l$`{XWv+HET9m#u{^O@`s5}*_L$GrPvO=j%~&%u%1rxM17P2Ct^_2 zzqkh%^f&#Cam83m%!jSBq^ z4VlAcwLNiCPj~WDAXC0GOkC>Pf)4B@`oQ_j)Ia;5S9WI>PSU>AAJd)%m91HR19?klblcdX0Ak{#l?#d4kcn;4Ozw|u9heVF&sKp%TIe|GAgW>RF#=d7h2eg4{v#rDti zZ1#~LQ=Dr7Kfb+lp39lpL-ic8(~MJ=uu6OIv(JXPZ^We2wR0M1874NdEpZ@){)kg6 zUQrdpf->O2c*Ku;@H37WX|jiMY&z#5;9vFW)*k#S?phW5A3`hov>rKdfup zu2Oh9n1hduS0knl@ldKhSj8@)tU4OMXvE3bbnW$Wx0v^p`yJd{?i{KPBYZ6Mcb>U^ zLrufNCblC#?f#zA^SoEycx#QgJ@m_rS0jcI@8aW+I605D-kdhZwKvJXTz&)WamLy@ zoSawD20Ag;8F?7=we2DU(2340>7h(*{E!s$f@kQXAB#&bzzY4Ozl~?CH*KD8PggRO z;*O>B_sSEgF{7BD)Zx_r?WDF!2aS#O$5#1nQBPneM>((h;`Nw4u1ivv{m^=m0rU#( z{n&n88&|{elr@|>oW^Z_2XE*}=L^sbZse!4Jxfsr+OCnQ##)W|m{K41G&o_uw!PP| z&$JWRuMly>VWO0WJP^tpW1rSckWZss=H=x0~Iwrk}n*qpIl z+DDeYZ2dk4E9N-TSJFM~d+CVs-!o2)7;4CnItt&Faqh84nKMR=U4ORS=&uJS_4i*t zKOWHUEjMgj>e_=A`i?rv{T4UMQ=TtZ?`n(77bzGpKWW5wU`m1lkNnH%DO`MW_73ILXP4VdwM~s+aOFyc(YjOQRe~aZufk(GC zr7Nb`&9Tp1yI%W|=M#)?>6iV!`P_LP)2djljQ{vL*MCnu5g+5Okw<&T5aS3oxVoGC zZuE}&SsP9bTl^Y6&9VL9kn-pzaVmW@=wfjx)BWe)oBjamG1lU^W8^myt7~&(@oA*Y zWh`ro{6t*ADaP+RIQqV`J@<2uUy4unN`Ia2n@Y<#r_!3vLr+GYuV25q#5O=5H2);)@2%V#fOB?NN`GhINA%+ z@DS3LJl)jq?m?c=b!vI;o~gy_^ta`m-nmng{tL}o^icz;dFD1_Pb#9 zWpZJGc@1;raaynI^}C4E*Vk81I{A-oi_hEjug}<8d`$enk{@~C;o2zk>S}#qvAMQH-K_nw#?C&B+*Vkh0E^f@*W-py zq^G3yuJ_nU*!a`~_UuWp-=)7DlW=UUeU)uRy2kNZdfn^f{Y_~#kC}dv=X=RMitEih zhylMeCsaDm_LqbNvrpFq18I- z(!10<%6A9JOIi0Q`Mj^TBTx5T=Y7@pSkEH@j|e;>@QA=80;516j*(uEf{tOgDX;gP z4x5ibwRc-w*rWM*ee+^vb8?nFh5R^oK%RSl>gpU6{e!HxovF#0#r~9s3nn{z-@g+QYUOw`C zU)R(h+bpl|o4>o(7wN-)&G#N8J`rcuD`NX~*LUUbKHiUX@%L8fLy?a`UgJlPdMoXJ zJ+@!c*T-eAj~H==6Z!^;NnPDwk!fh0TPSHj|Hbv0`;d!%>JTS%bR8dM-qE{XpV7rP z>1_Ts5@TNZetFMYDm3`Fnm5kg=hz{!T-^8H507_!M~smBoA{P)#&_O}dn$cqie95k zFK5S^@|4Q+&p18SMG9^4OvqjNzU})JW%aa0I=zPP#h8a&=dEf0XCC)KTa< z^2>j>;kVziw&|Kk z|8qab4k>ZxS-<@D`(A|;XIiT>sMt-?Mf&U0%uDui(+|Y-wkhw<9bUeR=hEqCu^rE5 zF^3`Fzm*r|TYWcdoa*?6KKlgYzBbFd*}0={>-(p~FGy!s4msy@ymRu3xEK70U&D{s zMRjovjQha5w3`l{x5>I=$|P-+te*O;TiueMm8nYhtF{HufW!(Fc*y z)ziJ#r1oEBWa0GL!O_)hGwv_gr~}1`6uDx2R9`_;zx?+5o|wpk_c5jddI;MO9Spz3 zI_f2U7Jb$FV*1z0VUB0I_-5(6j0-6i>PPWHe(ENselGFB-zdfW%@Im}LSQ(|XdnmyRqdza6RRD=agX!S=y7xrx<}tK z@6!KDzXkJzOlx{x@-U2h+iu3vN&6$U&AauVh!wh>diLf%Z-5oobvU7~c*faiaKe7l zz9c{DYWxEBIa2)zlp6*vWgE21zr2UCu~(jWG33?p8u9TOU2Q$2=zpKZ6#d5Y`By)d zznw2!!M}5nh>>+geeRr^XC)8Ay07R;@tGR2PmFnjJ%w(Lymq=qzoVD19nkr)9Ch&A z{)z3hdVZ2)j52?u{cLlm`ER;>jm~C19Oa4rDSpGkrEJIcn`c!+`~{vdhlPLm#O{P= zu%I6?-p3z04Y{El{Sn!+ep76Mt+(qr2C{z4I^7*{;yT91DR~&iz4W7(lqvL8p$JydSlW;#k^Vq^}yCVw@~_r!0Jc6S^nXAFr_o%6W?NQPF6elptdFdJRAmuC9na?F09P%BoZ5=Q0U)Et#mxo=2|5SQRhlv?&(ubUn zN(1Qx=k9Y1qU-vK{wGd9lOBrimDil}(WcE)>7?a|6 z)V?eAd**emT1x}Vh?71(_`%;DZT%)j*`|G#e4C4T4GOzFwp(6H$2edlUy(-FK5B7V zf0bg1SL+X~x6uELBSu~5FTV4})Sn;i_;`*VoT~Th)_)@%qwNP>+MFr6(iymRB?WIhp{2z!Zq_h>~?IeI1emoAJ%=z8~6J2 z)e9~C6!@g?tP!iHk_q(^V;r`)zDsNa&R$1+^L2<7f_+f>2=KcwU*-o^`pSoeOW95x zPSC_Rb&aE2EE;1&iW6&B%c zN`eSm62@bYqp*kVV|kLH=T zfwOZM#u4Qc-Xl)K#G+eU(!^M2Ok?zQXL+j5jkoNk)AP6M&n_rG{p#!_%Odia>L7n@ z?((9Hz4qz-Y4#h?Ci3L>85h~9!%LhXNyZr(N8>kyRti0~RSUvyxl{j0jd$LAThm#nY)|DAWp7h{rW!>$* z~^hx-z54gC1;6=CZWUdJA(}c>Hlb^{E%^kQesDATzuh zamn?iH7op7%$4N7Oe62{S3DFE;k=RdepN-oTo4iqBU0soLk$WgYQ;nE1rDqyfDV{om%_I?cX> zi52};{9QfvC{%iB&%%A?=G`t$>nqG{(%1gloYk*0v8e>IH8yL2* zLXM_aE1lKe_hQ}Savgc}x*ytnw^Irp%%}4&$3v{w=l!%j=yy8tbeDEJ)!8loF6|BD z-A=UMrR`32mic#SW7zMOw0nOSI; + +/* + Partition of a 4K page: (size, amount) + (32, 32) (64, 15) (128, 8) (256, 4) + + First 64 byte is used to record usage of each slot, shown below: + uint32_t usage32; + uint16_t usage64; // upper 1 bit is not used + uint8_t usage128; + uint8_t usage258; // upper 4 bits reserve for future use + + [Future use] 4 bits of record of 256-bytes slot can be used to represent fused mode to get larger slot +*/ + +void *kmalloc(size_t size); +void kfree(void *addr); +uint64_t get_slot_record(frame_free_node *page, int size); +void set_slot_record(frame_free_node *page, int size, int which_slot, int value); +int is_full(frame_free_node *page, int size); +int is_empty(frame_free_node *page, int size); +int round_to_smallest(size_t size); +frame_free_node *get_page_with_slot(int size); +void *allocate_slot(frame_free_node *page, int size); +frame_free_node *find_page(void *addr); +void clear_page(frame_free_node *page); +void print_slot_record(frame_free_node *page); +void free_page_if_empty(frame_free_node *page); + +/* + memory reservation +*/ +void memory_reserve(uint64_t start, uint64_t end); +void init_reserve(); + +#endif \ No newline at end of file diff --git a/Lab6/include/cpio.h b/Lab6/include/cpio.h new file mode 100644 index 000000000..5dbd580a7 --- /dev/null +++ b/Lab6/include/cpio.h @@ -0,0 +1,40 @@ +#ifndef __CPIO__ +#define __CPIO__ + +#define __USE_QEMU__ + +#ifdef __USE_QEMU__ +#define CPIO_ADDR ((char *)0x8000000) // qemu +#else +#define CPIO_ADDR ((char *)0x20000000) // raspi3 +#endif +#define MAX_INITRAMFS_SIZE 0x100000 // 1M + +#define USER_PROGRAM_ADDR 0x900000 +#define MAX_USER_PROGRAM_SIZE 0x100000 // 1M + +typedef struct +{ + // uses 8-byte hexadecimal fields for all numbers + char magic[6]; //determine whether this archive is written with little-endian or big-endian integers. + char ino[8]; //determine when two entries refer to the same file. + char mode[8]; //specifies both the regular permissions and the file type. + char uid[8]; // numeric user id + char gid[8]; // numeric group id + char nlink[8]; // number of links to this file. + char mtime[8]; // Modification time of the file + char filesize[8]; // size of the file + char devmajor[8]; + char devminor[8]; + char rdevmajor[8]; + char rdevminor[8]; + char namesize[8]; // number of bytes in the pathname + char check[8]; // always set to zero by writers and ignored by readers. +} __attribute__((packed)) cpio_header; + +void cpio_list(); +void cpio_cat(char *filename); +char * findFile(char *name); +void load_program(char *name); + +#endif \ No newline at end of file diff --git a/Lab6/include/exception.h b/Lab6/include/exception.h new file mode 100644 index 000000000..31b87d1d7 --- /dev/null +++ b/Lab6/include/exception.h @@ -0,0 +1,34 @@ +#ifndef _EXCEPTION_H +#define _EXCEPTION_H + +#include "task.h" +#include + +void enable_interrupt(); +void disable_interrupt(); +void dumpState(); +void lower_sync_handler(); +void lower_iqr_handler(); +void curr_sync_handler(); +void curr_iqr_handler(); +void error_handler(); +void child_return_from_fork(); + +/* Implement system calls */ +int sys_getpid(); +size_t sys_uartread(char buf[], size_t size); +size_t sys_uartwrite(const char buf[], size_t size); +int sys_exec(trap_frame *tf, const char *name, char *const argv[]); +void sys_fork(trap_frame *tf); +void sys_exit(); +int sys_mbox_call(unsigned char ch, volatile unsigned int *mbox); +void sys_kill(int pid); +void sys_signal(int SIGNAL, void (*handler)()); +void sys_signal_kill(int pid, int SIGNAL); + +/* helper functions */ +extern void (*_handler)(); +extern int _pid; +void signal_handler_wrapper(); + +#endif diff --git a/Lab6/include/mail_box.h b/Lab6/include/mail_box.h new file mode 100644 index 000000000..63a80ae8f --- /dev/null +++ b/Lab6/include/mail_box.h @@ -0,0 +1,45 @@ +#ifndef _MAIL_BOX_H +#define _MAIL_BOX_H + +/* a properly aligned buffer */ +extern volatile unsigned int mailbox[36]; + +#define MBOX_REQUEST 0 + +/* channels */ +#define MBOX_CH_POWER 0 +#define MBOX_CH_FB 1 +#define MBOX_CH_VUART 2 +#define MBOX_CH_VCHIQ 3 +#define MBOX_CH_LEDS 4 +#define MBOX_CH_BTNS 5 +#define MBOX_CH_TOUCH 6 +#define MBOX_CH_COUNT 7 +#define MBOX_CH_PROP 8 + +/* tags */ +#define MBOX_TAG_GETSERIAL 0x10004 +#define MBOX_TAG_LAST 0 +#define GET_BOARD_REVISION 0x00010002 +#define GET_ARM_EMEORY 0x00010005 + +int mailbox_call(unsigned char ch, volatile unsigned int *mailbox); + + +/* old macros from lab1 */ +// #define GET_BOARD_REVISION 0x00010002 +// #define GET_ARM_EMEORY 0x00010005 +// #define REQUEST_CODE 0x00000000 +// #define REQUEST_SUCCEED 0x80000000 +// #define REQUEST_FAILED 0x80000001 +// #define TAG_REQUEST_CODE 0x00000000 +// #define END_TAG 0x00000000 + +// extern volatile unsigned int mailbox[8]; + +// int mailbox_call(unsigned char ch, volatile unsigned int *mbox); +void get_board_revision(); +void get_arm_memory(); +void get_serial_number(); + +#endif \ No newline at end of file diff --git a/Lab6/include/memory.h b/Lab6/include/memory.h new file mode 100644 index 000000000..002eb07d1 --- /dev/null +++ b/Lab6/include/memory.h @@ -0,0 +1,41 @@ +#ifndef _MEMORY_H +#define _MEMORY_H + +#include +#include + +#define MEMORY_BASE_ADDR 0x00 +#define MEMORY_END_ADDR 0x8000000 +#define PAGE_SIZE_4K ((uint64_t)1 << 12) +#define FRAME_ARRAY_SIZE ((MEMORY_END_ADDR - MEMORY_BASE_ADDR) / PAGE_SIZE_4K) +#define MAX_32K_NUM (FRAME_ARRAY_SIZE / 8) +#define GET_PAGE_ADDR(index) (MEMORY_BASE_ADDR + (index << 12)) +#define GET_PAGE_INDEX(addr) ((addr - MEMORY_BASE_ADDR) >> 12) + + +typedef struct frame_free_node { + uint64_t index; + struct frame_free_node *next; + struct frame_free_node *prev; // double linked list to enable O(1) removal + struct frame_free_node **list_addr; // find out which list it belongs to in Q(1) +} frame_free_node; + +void memory_init(); +uint64_t page_malloc(int sz); +uint64_t request_page(int size); +uint64_t reserve_page(int size, uint64_t addr); +void page_free(uint64_t addr, int size); +void merge_page(uint64_t index, int size); +void pop_front(frame_free_node **list); +void remove_from_list(frame_free_node **list, uint64_t index); +void add_to_list(frame_free_node **list, uint64_t index); +uint64_t getIndex(uint64_t addr, int size); +frame_free_node *get_free_node(); +void return_free_node(frame_free_node *node); +uint64_t get_allocated_num(); +void clear_4K_page(uint64_t index); + +void print_frame_array(); +void print_frame_free_lists(); + +#endif diff --git a/Lab6/include/mini_uart.h b/Lab6/include/mini_uart.h new file mode 100644 index 000000000..319eb2dd6 --- /dev/null +++ b/Lab6/include/mini_uart.h @@ -0,0 +1,28 @@ +#ifndef _MINI_UART_H +#define _MINI_UART_H + +void delay(unsigned int clock); +void uart_init( void ); +char uart_recv( void ); +void uart_send ( char c ); +void uart_send_string(char* str); +unsigned int uart_printf(char* fmt,...); +void uart_recv_string(char *buffer); +unsigned char uart_getb(); +void uart_hex(unsigned int d); + +extern char read_buf[]; +extern char write_buf[]; +extern int read_buf_start, read_buf_end; +extern int write_buf_start, write_buf_end; + +void enable_uart_interrupt(); +void disable_uart_interrupt(); +void set_transmit_interrupt(); +void clear_transmit_interrupt(); +void uart_handler(); +void test_uart_async(); +char uart_async_recv(); +void uart_async_send_string(char *str); + +#endif /*_MINI_UART_H */ \ No newline at end of file diff --git a/Lab6/include/mm.h b/Lab6/include/mm.h new file mode 100644 index 000000000..63d247edd --- /dev/null +++ b/Lab6/include/mm.h @@ -0,0 +1,19 @@ +#ifndef _MM_H +#define _MM_H + +#define PAGE_SHIFT 12 +#define TABLE_SHIFT 9 +#define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) + +#define PAGE_SIZE (1 << PAGE_SHIFT) +#define SECTION_SIZE (1 << SECTION_SHIFT) + +#define LOW_MEMORY (2 * SECTION_SIZE) + +#ifndef __ASSEMBLER__ + +void memzero(unsigned long src, unsigned long n); + +#endif + +#endif /*_MM_H */ \ No newline at end of file diff --git a/Lab6/include/peripherals/base.h b/Lab6/include/peripherals/base.h new file mode 100644 index 000000000..9e3099335 --- /dev/null +++ b/Lab6/include/peripherals/base.h @@ -0,0 +1,9 @@ +#ifndef _P_BASE_H +#define _P_BASE_H + +// There is a VideoCore/ARM MMU translating physical addresses to bus addresses. +// The MMU maps physical address 0x3f000000 to bus address 0x7e000000. + +#define MMIO_BASE 0x3F000000 + +#endif /*_P_BASE_H */ \ No newline at end of file diff --git a/Lab6/include/peripherals/gpio.h b/Lab6/include/peripherals/gpio.h new file mode 100644 index 000000000..eaf7c4955 --- /dev/null +++ b/Lab6/include/peripherals/gpio.h @@ -0,0 +1,12 @@ +#ifndef _P_GPIO_H +#define _P_GPIO_H + +#include "peripherals/base.h" + +#define GPFSEL1 ((volatile unsigned int *)(MMIO_BASE + 0x00200004)) +#define GPSET0 ((volatile unsigned int *)(MMIO_BASE + 0x0020001C)) +#define GPCLR0 ((volatile unsigned int *)(MMIO_BASE + 0x00200028)) +#define GPPUD ((volatile unsigned int *)(MMIO_BASE + 0x00200094)) +#define GPPUDCLK0 ((volatile unsigned int *)(MMIO_BASE + 0x00200098)) + +#endif /*_P_GPIO_H */ \ No newline at end of file diff --git a/Lab6/include/peripherals/mail_box.h b/Lab6/include/peripherals/mail_box.h new file mode 100644 index 000000000..49ce6a868 --- /dev/null +++ b/Lab6/include/peripherals/mail_box.h @@ -0,0 +1,25 @@ +#ifndef _P_MAIL_BOX_H +#define _P_MAIL_BOX_H + +#include "base.h" + +#define VIDEOCORE_MBOX (MMIO_BASE + 0x0000B880) +#define MBOX_READ ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x0)) +#define MBOX_POLL ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x10)) +#define MBOX_SENDER ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x14)) +#define MBOX_STATUS ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x18)) +#define MBOX_CONFIG ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x1C)) +#define MBOX_WRITE ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x20)) +#define MBOX_RESPONSE 0x80000000 +#define MBOX_FULL 0x80000000 +#define MBOX_EMPTY 0x40000000 + +// #define MAILBOX_BASE MMIO_BASE + 0xb880 +// #define MAILBOX_READ ((volatile unsigned int *)(MAILBOX_BASE)) +// #define MAILBOX_STATUS ((volatile unsigned int *)(MAILBOX_BASE + 0x18)) +// #define MAILBOX_WRITE ((volatile unsigned int *)(MAILBOX_BASE + 0x20)) + +// #define MAILBOX_EMPTY 0x40000000 +// #define MAILBOX_FULL 0x80000000 + +#endif \ No newline at end of file diff --git a/Lab6/include/peripherals/mini_uart.h b/Lab6/include/peripherals/mini_uart.h new file mode 100644 index 000000000..05b992d82 --- /dev/null +++ b/Lab6/include/peripherals/mini_uart.h @@ -0,0 +1,25 @@ +#ifndef _P_MINI_UART_H +#define _P_MINI_UART_H + +#include "peripherals/base.h" + +#define AUX_ENABLES ((volatile unsigned int *)(MMIO_BASE + 0x00215004)) +#define AUX_MU_IO_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215040)) +#define AUX_MU_IER_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215044)) +#define AUX_MU_IIR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215048)) +#define AUX_MU_LCR_REG ((volatile unsigned int *)(MMIO_BASE + 0x0021504C)) +#define AUX_MU_MCR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215050)) +#define AUX_MU_LSR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215054)) +#define AUX_MU_MSR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215058)) +#define AUX_MU_SCRATCH ((volatile unsigned int *)(MMIO_BASE + 0x0021505C)) +#define AUX_MU_CNTL_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215060)) +#define AUX_MU_STAT_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215064)) +#define AUX_MU_BAUD_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215068)) + +#define ARM_IRQ_REG_BASE ((volatile unsigned int*)(MMIO_BASE + 0x0000b000)) +#define IRQ_PENDING_1 ((volatile unsigned int*)(MMIO_BASE + 0x0000b204)) +#define ENB_IRQS1 ((volatile unsigned int*)(MMIO_BASE + 0x0000b210)) +#define DISABLE_IRQS1 ((volatile unsigned int*)(MMIO_BASE + 0x0000b21c)) +#define AUX_IRQ (1 << 29) + +#endif /*_P_MINI_UART_H */ \ No newline at end of file diff --git a/Lab6/include/printf.h b/Lab6/include/printf.h new file mode 100644 index 000000000..4286af5cf --- /dev/null +++ b/Lab6/include/printf.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 bzt (bztsrc@github) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ +#ifndef __PRINT_H +#define __PRINT_H + +unsigned int sprintf(char *dst, char* fmt, ...); +unsigned int vsprintf(char *dst,char* fmt, __builtin_va_list args); + +#endif \ No newline at end of file diff --git a/Lab6/include/reboot.h b/Lab6/include/reboot.h new file mode 100644 index 000000000..8b0a5896d --- /dev/null +++ b/Lab6/include/reboot.h @@ -0,0 +1,8 @@ +#ifndef _REBOOT_H +#define _REBOOT_H + +void set(long addr, unsigned int value); +void reboot(int tick); +void cancel_reboot(); + +#endif \ No newline at end of file diff --git a/Lab6/include/shell.h b/Lab6/include/shell.h new file mode 100644 index 000000000..a553069bf --- /dev/null +++ b/Lab6/include/shell.h @@ -0,0 +1,9 @@ +#ifndef _SHELL_H +#define _SHELL_H + +void shell(void); +unsigned int debug_printf(char* fmt,...); + +extern int debug_mode; + +#endif \ No newline at end of file diff --git a/Lab6/include/switch.h b/Lab6/include/switch.h new file mode 100644 index 000000000..8bc69578b --- /dev/null +++ b/Lab6/include/switch.h @@ -0,0 +1,9 @@ +#ifndef _SWITCH_H +#define _SWITCH_H + +#include "task.h" + +void switch_to(task_struct* prev, task_struct *next); +task_struct* get_current(); + +#endif diff --git a/Lab6/include/sysreg.h b/Lab6/include/sysreg.h new file mode 100644 index 000000000..d3669ee2d --- /dev/null +++ b/Lab6/include/sysreg.h @@ -0,0 +1,23 @@ +#ifndef __SYSREG_H_ +#define __SYSREG_H_ + +#define read_sysreg(r) ({ \ + unsigned long __val; \ + asm volatile("mrs %0, " #r : "=r" (__val)); \ + __val; \ +}) + +#define write_sysreg(r, __val) ({ \ + asm volatile("msr " #r ", %0" :: "r" (__val)); \ +}) + +#define ESR_ELx_EC(esr) ((esr & 0xFC000000) >> 26) +#define ESR_ELx_ISS(esr) (esr & 0x03FFFFFF) + +#define ESR_ELx_EC_SVC64 0b010101 +#define ESR_ELx_EC_DABT_LOW 0b100100 +#define ESR_ELx_EC_IABT_LOW 0b100000 +#define ESR_ELx_EC_BRK_LOW 0b110000 + + +#endif \ No newline at end of file diff --git a/Lab6/include/system_call.h b/Lab6/include/system_call.h new file mode 100644 index 000000000..35f7cd198 --- /dev/null +++ b/Lab6/include/system_call.h @@ -0,0 +1,20 @@ +#ifndef _SYSTEM_CALL_H +#define _SYSTEM_CALL_H + +#include + +/* helper functions for user programs, not the real system calls */ +int get_pid(); +size_t uart_read(char buf[], size_t size); +size_t uart_write(const char buf[], size_t size); +int exec(const char *name, char *const argv[]); +int fork(); +void exit(); +int mbox_call(unsigned char ch, unsigned int *mbox); +void kill(int pid); +unsigned int printf(char* fmt,...); + +/* some useful util functions */ +void delay(unsigned int clock); + +#endif \ No newline at end of file diff --git a/Lab6/include/task.h b/Lab6/include/task.h new file mode 100644 index 000000000..94c96f7c4 --- /dev/null +++ b/Lab6/include/task.h @@ -0,0 +1,75 @@ +#ifndef _TASK_H +#define _TASK_H + +#include + +#define TERMINATED 0 +#define RUNNING 1 +#define WAITING 2 + + +typedef struct trap_frame { + unsigned long regs[32]; + unsigned long sp_el0; + unsigned long elr_el1; + unsigned long spsr_el1; +} trap_frame; + +typedef struct cpu_context { + unsigned long x19; + unsigned long x20; + unsigned long x21; + unsigned long x22; + unsigned long x23; + unsigned long x24; + unsigned long x25; + unsigned long x26; + unsigned long x27; + unsigned long x28; + unsigned long fp; //x29: kernel frame pointer + unsigned long lr; //x30: link register for function calls + unsigned long sp; // kernel stack pointer +} cpu_context; + +typedef struct task_struct { + cpu_context context; + int id; + int state; + unsigned long user_fp; + void (*handler)(); + struct task_struct *prev; + struct task_struct *next; +} task_struct; + +typedef struct task_queue { + char name[10]; + task_struct *begin; + task_struct *end; +} task_queue; + +extern task_queue run_queue; +extern task_queue wait_queue; +extern task_queue terminated_queue; +extern int run_queue_sz; +extern char **_argv; + +extern unsigned long user_addr; +extern unsigned long user_sp; + +task_struct* thread_create(void* func); +void thread_schedule(); +void kill_zombies(); +void idle(); +void create_root_thread(); +void run_user_program(const char* name, char *const argv[]); +void switch_to_user_space(); + +void dump_queue(task_queue *queue); +void push_task_to_queue(task_queue *queue, task_struct *task); +void pop_task_from_queue(task_queue *queue, task_struct *task); + +/* Helper functions */ +void put_args(char *const argv[]); +task_struct *find_task_by_id(task_queue *queue, int pid); + +#endif \ No newline at end of file diff --git a/Lab6/include/timer.h b/Lab6/include/timer.h new file mode 100644 index 000000000..e831252af --- /dev/null +++ b/Lab6/include/timer.h @@ -0,0 +1,29 @@ +#ifndef __TIMER_H +#define __TIMER_H + +#include + +#define CORE0_TIMER_IRQ_CTRL ((volatile unsigned int *)(0x40000040)) +#define MAX_TIMER_QUEUE_SIZE 10 + +typedef void (*timer_call_back)(void *); +struct Timer { + struct Timer *next; + uint64_t expire_time; + timer_call_back call_back; + void *args; +}; + +void init_timer(); +void core_timer_enable(); +void core_timer_handler(); +void add_timer(unsigned int time, timer_call_back, void *); +void pop_timer(); +void test_timer(); + +/* callbacks */ +void show_time_elapsed(void *); +void print_timer(void *); +void normal_timer(); + +#endif diff --git a/Lab6/include/utils.h b/Lab6/include/utils.h new file mode 100644 index 000000000..613a92528 --- /dev/null +++ b/Lab6/include/utils.h @@ -0,0 +1,13 @@ +#ifndef _UtilS_H +#define _UtilS_H + +#define MAX_BUFFER_SIZE 256u + +int compare_string(const char *s1, const char *s2); +void uintoa(char *out, unsigned int i); +unsigned int getIntegerFromString(const char *str); +unsigned long getHexFromString(const char *str); +unsigned long hexToDec(char *s); +void align_4(void* size); + +#endif \ No newline at end of file diff --git a/Lab6/kernel/boot.S b/Lab6/kernel/boot.S new file mode 100644 index 000000000..a08951733 --- /dev/null +++ b/Lab6/kernel/boot.S @@ -0,0 +1,175 @@ +#include "mm.h" + +.section ".text.boot" + +.globl _start +_start: + mrs x0, mpidr_el1 // Load value from a system register to one of the general purpose registers (x0–x30) + and x0, x0,#0xFF // Check processor id + cbz x0, master // Hang for all non-primary CPU + b proc_hang + +proc_hang: + b proc_hang + +master: + bl from_el2_to_el1 + ldr x0, =exception_table // setup interrupt vector base + msr vbar_el1, x0 + + mov sp, #0x800000 + + ldr x1, =__bss_start + ldr w2, =__bss_size +memzero: + cbz w2, main + str xzr, [x1], #8 + sub w2, w2, #1 + b memzero + +main: + bl kernel_main // Perform an unconditional branch and store the return address in x30 + b proc_hang // Should never come here + +from_el2_to_el1: + mov x0, (1 << 31) // EL1 uses aarch64 + msr hcr_el2, x0 + mov x0, 0x3c5 // EL1h (SPSel = 1) with interrupt disabled + msr spsr_el2, x0 + msr elr_el2, lr + eret // return to EL1 + + + +// save registers to stack +.macro save_regs + sub sp, sp, 36 * 8 + stp x0, x1, [sp, 16 * 0] + stp x2, x3, [sp, 16 * 1] + stp x4, x5, [sp, 16 * 2] + stp x6, x7, [sp, 16 * 3] + stp x8, x9, [sp, 16 * 4] + stp x10, x11, [sp, 16 * 5] + stp x12, x13, [sp, 16 * 6] + stp x14, x15, [sp, 16 * 7] + stp x16, x17, [sp, 16 * 8] + stp x18, x19, [sp, 16 * 9] + stp x20, x21, [sp, 16 * 10] + stp x22, x23, [sp, 16 * 11] + stp x24, x25, [sp, 16 * 12] + stp x26, x27, [sp, 16 * 13] + stp x28, x29, [sp, 16 * 14] + str x30, [sp, 16 * 15] + + mrs x19, sp_el0 + mrs x20, elr_el1 + mrs x21, spsr_el1 + stp x19,x20, [sp, 16 * 16] + str x21, [sp, 16 * 17] +.endm + +// load registers from stack +.macro load_regs + ldp x21, x20, [sp, 16 * 17] + ldp x19, x20, [sp, 16 * 16] + msr spsr_el1, x21 + msr elr_el1, x20 + msr sp_el0, x19 + + ldp x0, x1, [sp, 16 * 0] + ldp x2, x3, [sp, 16 * 1] + ldp x4, x5, [sp, 16 * 2] + ldp x6, x7, [sp, 16 * 3] + ldp x8, x9, [sp, 16 * 4] + ldp x10, x11, [sp, 16 * 5] + ldp x12, x13, [sp, 16 * 6] + ldp x14, x15, [sp, 16 * 7] + ldp x16, x17, [sp, 16 * 8] + ldp x18, x19, [sp, 16 * 9] + ldp x20, x21, [sp, 16 * 10] + ldp x22, x23, [sp, 16 * 11] + ldp x24, x25, [sp, 16 * 12] + ldp x26, x27, [sp, 16 * 13] + ldp x28, x29, [sp, 16 * 14] + ldr x30, [sp, 16 * 15] + add sp, sp, 36 * 8 +.endm + + +//exception table +.align 11 +exception_table: + b TODO + .align 7 + b TODO + .align 7 + b TODO + .align 7 + b TODO + + .align 7 + b curr_sync + .align 7 + b curr_iqr + .align 7 + b TODO + .align 7 + b TODO + + .align 7 + b lower_sync + .align 7 + b lower_iqr + .align 7 + b TODO + .align 7 + b TODO + + .align 7 + b TODO + .align 7 + b TODO + .align 7 + b TODO + .align 7 + b TODO + +//Synchronous from lower level +lower_sync: + save_regs + mov x0, sp // points to the kernel stack of the running user thread + bl lower_sync_handler + load_regs + eret + +//IRQ from lower level (sp points to the kernel stack of the running user thread) +lower_iqr: + save_regs + bl lower_iqr_handler + load_regs + eret + +//Synchronous from current level +curr_sync: + save_regs + bl curr_sync_handler + load_regs + eret + +//IRQ from current level +curr_iqr: + save_regs + bl curr_iqr_handler + load_regs + eret + +.globl child_return_from_fork +child_return_from_fork: + load_regs + eret + +TODO: + save_regs + bl error_handler + load_regs + eret \ No newline at end of file diff --git a/Lab6/kernel/exception.c b/Lab6/kernel/exception.c new file mode 100644 index 000000000..7203a07a1 --- /dev/null +++ b/Lab6/kernel/exception.c @@ -0,0 +1,246 @@ +#include "utils.h" +#include "mini_uart.h" +#include "peripherals/mini_uart.h" +#include "exception.h" +#include "sysreg.h" +#include "timer.h" +#include "system_call.h" +#include "switch.h" +#include "memory.h" +#include "cpio.h" +#include "shell.h" +#include "mail_box.h" + + +void enable_interrupt() { asm volatile("msr DAIFClr, 0xf"); } +void disable_interrupt() { asm volatile("msr DAIFSet, 0xf"); } + +/* system call */ +void lower_sync_handler(trap_frame *tf) { + unsigned long esr, svc; + asm volatile("mrs %0, esr_el1 \n":"=r"(esr):); + unsigned long *regs = tf->regs; + if (((esr >> 26) & 0x3f) == 0x15) { + svc = esr & 0x1ffffff; + if (svc == 0) { + switch(regs[8]) { + case 0: + regs[0] = sys_getpid(); + thread_schedule(); + break; + case 1: + enable_interrupt(); + regs[0] = sys_uartread((char*)regs[0], (size_t)regs[1]); + disable_interrupt(); + break; + case 2: + enable_interrupt(); + regs[0] = sys_uartwrite((const char*)regs[0], (size_t)regs[1]); + disable_interrupt(); + break; + case 3: + sys_exec(tf, (const char*)regs[0], (char * const*)regs[1]); + thread_schedule(); + break; + case 4: + sys_fork(tf); + thread_schedule(); + break; + case 5: + sys_exit(regs[0]); + thread_schedule(); + break; + case 6: + regs[0] = sys_mbox_call((unsigned char)regs[0], (volatile unsigned int*)regs[1]); + thread_schedule(); + break; + case 7: + sys_kill(regs[0]); + thread_schedule(); + break; + case 8: + sys_signal((int)regs[0], (void (*)())regs[1]); + thread_schedule(); + break; + case 9: + sys_signal_kill((int)regs[0], (int)regs[1]); + thread_schedule(); + break; + default: + uart_printf("[ERROR][lower_sync_handler] unknown svc!\n"); + break; + } + } + else + uart_printf("[ERROR][lower_sync_handler] unknown exception!\n"); + } +} + +void lower_iqr_handler() { + pop_timer(); +} + +void curr_sync_handler() { + uart_printf("[ERROR][curr_sync_handler]\n"); + error_handler(); +} + +void curr_iqr_handler() { + if (*IRQ_PENDING_1 & AUX_IRQ) + uart_handler(); + else + pop_timer(); +} + +void error_handler() { + uart_send_string("[ERROR] unknown exception...\n"); + while(1){} +} + +void dumpState() { + unsigned long esr = read_sysreg(esr_el1); + unsigned long elr = read_sysreg(elr_el1); + unsigned long spsr = read_sysreg(spsr_el1); + uart_printf("--------------------\n"); + uart_printf("SPSR: 0x%x\n", spsr); + uart_printf("ELR: 0x%x\n", elr); + uart_printf("ESR: 0x%x\n", esr); + uart_printf("--------------------\n"); +} + +/* Implement system calls */ +int sys_getpid() { + debug_printf("[DEBUG][sys_getpid] id: %d\n", get_current()->id); + return get_current()->id; +} + +size_t sys_uartread(char buf[], size_t size) { + char recv; + for (int i = 0; i < size; ++i) { + recv = uart_recv(); + buf[i] = recv; + } + debug_printf("[DEBUG][sys_uartread]\n"); + return size; +} + +size_t sys_uartwrite(const char buf[], size_t size) { + for (int i = 0; i < size; ++i) + uart_send((char)buf[i]); + debug_printf("[DEBUG][sys_uartwrite]\n"); + return size; +} + +int sys_exec(trap_frame *tf, const char *name, char *const argv[]) { + load_program((char*)name); + _argv = (char**)argv; + task_struct *cur_task = get_current(); + tf->elr_el1 = (unsigned long)USER_PROGRAM_ADDR; + tf->sp_el0 = cur_task->user_fp; + return 0; +} + +void sys_fork(trap_frame *tf) { + task_struct *parent = get_current(); + task_struct *child = thread_create(NULL); + int child_id = child->id; + unsigned long user_fp = child->user_fp; + task_struct *prev = child->prev; + task_struct *next = child->next; + + /* copy the task context & kernel stack (including trap frame) of parent to child */ + char* src = (char*)parent; + char* dst = (char*)child; + int size = PAGE_SIZE_4K; + while(size--) { + *dst = *src; + src++; + dst++; + } + + /* set up the correct value for registers */ + parent->context.sp = (unsigned long)tf; + if ((unsigned long)child > (unsigned long)parent) + child->context.sp = parent->context.sp + ((unsigned long)child - (unsigned long)parent); + else + child->context.sp = parent->context.sp - ((unsigned long)parent - (unsigned long)child); + int parent_ustack_size = (parent->user_fp) - (tf->sp_el0) + 1; + child->context.fp = (unsigned long)child + PAGE_SIZE_4K - 1; + child->context.lr = (unsigned long)child_return_from_fork; + child->id = child_id; + child->user_fp = user_fp; + child->prev = prev; + child->next = next; + trap_frame *child_tf = (trap_frame*)(child->context.sp); + child_tf->sp_el0 = (child->user_fp) - parent_ustack_size + 1; + child_tf->regs[0] = 0; + child_tf->regs[29] = child->context.fp; + tf->regs[0] = child->id; + + child->handler = parent->handler; + + /* copy the user stack of parent to child */ + char *src_stack = (char*)(tf->sp_el0); + char *dst_stack = (char*)(child_tf->sp_el0); + + while(parent_ustack_size--) { + *dst_stack = *src_stack; + src_stack++; + dst_stack++; + } + + debug_printf("[DEBUG][sys_fork] parent: %d, child: %d\n", parent->id, child->id); +} + +void sys_exit() { + task_struct *cur_task = get_current(); + cur_task->state = TERMINATED; + pop_task_from_queue(&run_queue, cur_task); + push_task_to_queue(&terminated_queue, cur_task); + debug_printf("[DEBUG][sys_exit] thread: %d\n", cur_task->id); +} + +int sys_mbox_call(unsigned char ch, volatile unsigned int *mbox) { + debug_printf("[DEBUG][sys_mbox_call]"); + return mailbox_call(ch, mbox); +} + +void sys_kill(int pid) { + task_struct *task = NULL; + if ((task = find_task_by_id(&run_queue, pid))) + pop_task_from_queue(&run_queue, task); + else if ((task = find_task_by_id(&wait_queue, pid))) + pop_task_from_queue(&wait_queue, task); + if (task) { + task->state = TERMINATED; + push_task_to_queue(&terminated_queue, task); + } + debug_printf("[DEBUG][sys_kill]"); +} + +void sys_signal(int SIGNAL, void (*handler)()) { + get_current()->handler = handler; +} + +void sys_signal_kill(int pid, int SIGNAL) { + task_struct *task = NULL; + if (!(task = find_task_by_id(&run_queue, pid))) + task = find_task_by_id(&wait_queue, pid); + if (!task) + return; + _handler = task->handler; + _pid = pid; + task_struct *handler_task = thread_create(switch_to_user_space); + user_addr = (unsigned long)signal_handler_wrapper; + user_sp = handler_task->user_fp; +} + +/* helper functions */ +void (*_handler)() = NULL; +int _pid = 0; +void signal_handler_wrapper() { + if (_handler) + _handler(); + kill(_pid); + exit(); +} \ No newline at end of file diff --git a/Lab6/kernel/kernel.c b/Lab6/kernel/kernel.c new file mode 100644 index 000000000..a767fd276 --- /dev/null +++ b/Lab6/kernel/kernel.c @@ -0,0 +1,18 @@ +#include "mini_uart.h" +#include "shell.h" +#include "exception.h" +#include "timer.h" +#include "memory.h" +#include "allocator.h" +#include "task.h" + + +void kernel_main(void) { + uart_init(); + memory_init(); + init_reserve(); + init_timer(); + enable_interrupt(); + create_root_thread(); + shell(); +} diff --git a/Lab6/kernel/linker.ld b/Lab6/kernel/linker.ld new file mode 100644 index 000000000..fe2566016 --- /dev/null +++ b/Lab6/kernel/linker.ld @@ -0,0 +1,14 @@ +SECTIONS +{ + . = 0x80000; + .text.boot : { *(.text.boot) } + .text : { *(.text) } + .rodata : { *(.rodata) } + .data : { *(.data) } + . = ALIGN(0x8); + __bss_start = .; + .bss : { *(.bss*) } + __bss_end = .; +} + +__bss_size = (__bss_end - __bss_start) >> 3; \ No newline at end of file diff --git a/Lab6/lib/allocator.c b/Lab6/lib/allocator.c new file mode 100644 index 000000000..086f67557 --- /dev/null +++ b/Lab6/lib/allocator.c @@ -0,0 +1,178 @@ +#include "allocator.h" +#include "utils.h" +#include "mini_uart.h" +#include "shell.h" +#include "cpio.h" + + +/* record the usage of each slot */ +const int slot_size = 4; +const int slot[] = {32, 64, 128, 256}; +const uint64_t slot_max[] = {UINT32_MAX, UINT16_MAX - 1, UINT8_MAX, 15}; +const int slot_record_bits[] = {32, 15, 8, 4}; +const uint64_t slot_masks[] = {UINT32_MAX, UINT16_MAX, UINT8_MAX, UINT8_MAX}; +const int slot_shift_amout[] = {32, 16, 8, 0}; +const int slot_offset[] = {64, 64 + 32 * 32, 64 + 32 * 32 + 64 * 15, 64 + 32 * 32 + 64 * 15 + 128 * 8}; + +/* mantain pages */ +frame_free_node *allocated_pages = NULL; + +void *kmalloc(size_t size) { + int sz = round_to_smallest(size); + frame_free_node * page = get_page_with_slot(sz); + return allocate_slot(page, sz); +} + +void kfree(void *addr) { + frame_free_node *page = find_page(addr); + uint64_t _addr = (uint64_t)addr - GET_PAGE_ADDR(page->index); + int size; + for (size = 3; size >= 0; --size) { + if (_addr >= slot_offset[size]) + break; + } + _addr -= slot_offset[size]; + int which_slot = _addr / slot[size]; + set_slot_record(page, size, which_slot, 0); + free_page_if_empty(page); +} + +/* get usage record of the slot size in the page */ +uint64_t get_slot_record(frame_free_node *page, int size) { + uint64_t page_addr = GET_PAGE_ADDR(page->index); + uint64_t record = *(uint64_t *)page_addr; + return (record & (slot_masks[size] << slot_shift_amout[size])) >> slot_shift_amout[size]; +} + +/* set/unset the bit in the record for a slot of a size of a page */ +void set_slot_record(frame_free_node *page, int size, int which_slot, int value) { + uint64_t record = get_slot_record(page, size); + uint64_t mask = (uint64_t)1 << which_slot; + if (value == 0) { + mask = ~mask; + record &= mask; + } + else + record |= mask; + uint64_t *full_record_ptr = (uint64_t *)GET_PAGE_ADDR(page->index); + mask = slot_masks[size] << slot_shift_amout[size]; + *full_record_ptr &= ~mask; + *full_record_ptr |= (record << slot_shift_amout[size]); + if (which_slot >= slot_record_bits[size]) + uart_printf("[ERROR] set_slot_record: invlaid slot index!\n"); + debug_printf("[DEBUG][set_slot_record] set %d'th of %d bytes slot to %d\n", which_slot, slot[size], value); +} + +/* check if there is any empty 2^size bytes slot is spedified page */ +int is_full(frame_free_node *page, int size) { + return get_slot_record(page, size) == slot_max[size]; +} + +int is_empty(frame_free_node *page, int size) { + return get_slot_record(page, size) == 0; +} + +int round_to_smallest(size_t size) { + if (size <= 0) + uart_printf("[ERROR] round_to_smallest: invalid size!\n"); + if (size > 256) + uart_printf("[ERROR] round_to_smallest: too large!\n"); + int i; + for (i = 0; i < 4; ++i) { + if (slot[i] >= size) + break; + } + if (i == 4) + uart_printf("[ERROR][round_to_smallest] should not reach here!\n"); + debug_printf("[DEBUG][round_to_smallest] round %d to %d bytes\n", size, slot[i]); + return i; +} + +frame_free_node *get_page_with_slot(int size) { + frame_free_node *page = allocated_pages; + while (page) { + if (!is_full(page, size)) + break; + page = page->next; + } + if (!page) { + uint64_t addr = page_malloc(0); + uint64_t index = GET_PAGE_INDEX(addr); + add_to_list(&allocated_pages, index); + page = allocated_pages; + clear_4K_page(page->index); + } + return page; +} + +void *allocate_slot(frame_free_node *page, int size) { + uint64_t record = get_slot_record(page, size); + uint64_t mask = 1; + int i; + for (i = 0; i < slot_record_bits[size]; ++i) { + if ((record & mask) == 0) + break; + mask <<= 1; + } + set_slot_record(page, size, i, 1); + if (i == slot_record_bits[size]) + uart_printf("[ERROR] allocate_slot: should not reach here!\n"); + uint64_t addr = GET_PAGE_ADDR(page->index) + slot_offset[size] + slot[size] * i; + return (void*)addr; +} + +frame_free_node *find_page(void *addr) { + uint64_t _addr = (uint64_t)addr; + uint64_t mask = (~(uint64_t)0) << 12; + _addr &= mask; + frame_free_node *iter = allocated_pages; + while (iter) { + if (GET_PAGE_ADDR(iter->index) == _addr) + break; + iter = iter->next; + } + return iter; +} + +void clear_page(frame_free_node *page) { + char *addr = (char*)GET_PAGE_ADDR(page->index); + int sz = 1 << 12; + for (int i = 0; i < sz; ++i) + addr[i] = 0; +} + +void print_slot_record(frame_free_node *page) { + if (page) { + uart_printf("[Slot record] (page index: %ld) ", page->index); + for (int i = 0; i < 4; ++i) { + uint64_t record = get_slot_record(page, i); + uart_printf("%x ", record); + } + uart_printf("\n"); + } + else + uart_printf("[Slot record] page already freed!\n"); +} + +void free_page_if_empty(frame_free_node *page) { + for (int i = 0; i < 4; ++i) { + if (!is_empty(page, i)) + return; + } + remove_from_list(&allocated_pages, page->index); + page_free(GET_PAGE_ADDR(page->index), 0); +} + + +void memory_reserve(uint64_t start, uint64_t end) { + for (uint64_t i = start; i < end + PAGE_SIZE_4K; i += PAGE_SIZE_4K) + reserve_page(0, i); +} + +void init_reserve() { + memory_reserve(0x0000, 0x1000); // spin tables for multicore boot + memory_reserve(0x80000, 0x800000); // kernel and heap/stack space + // memory_reserve((uint64_t)CPIO_ADDR, (uint64_t)CPIO_ADDR + MAX_INITRAMFS_SIZE); // initramfs + // memory_reserve((uint64_t)USER_PROGRAM_ADDR, (uint64_t)USER_PROGRAM_ADDR + MAX_USER_PROGRAM_SIZE); + debug_printf("[DEBUG][init_reserve] reserves 0X%x 4K pages\n", get_allocated_num()); +} \ No newline at end of file diff --git a/Lab6/lib/cpio.c b/Lab6/lib/cpio.c new file mode 100644 index 000000000..26f65ea7e --- /dev/null +++ b/Lab6/lib/cpio.c @@ -0,0 +1,95 @@ +#include "peripherals/gpio.h" +#include "mini_uart.h" +#include "utils.h" +#include "shell.h" +#include "cpio.h" +#include "timer.h" +#include "sysreg.h" +#include + + +void cpio_list() { + /* + cpio archive comprises a header record with basic numeric metadata followed by + the full pathname of the entry and the file data. + */ + char *addr = CPIO_ADDR; + + while (compare_string((char *)(addr + sizeof(cpio_header)), "TRAILER!!!") != 0) { + cpio_header *header = (cpio_header*)addr; + + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); // The pathname is followed by NUL bytes so that the total size of the fixed header plus pathname is a multiple of four. + align_4(&file_size); // Likewise, the file data is padded to a multiple of four bytes. + uart_send_string(addr + sizeof(cpio_header)); // print the fine name + uart_send_string("\r\n"); + addr += (headerPathname_size + file_size); + } +} + +char *findFile(char *name) { + char *addr = CPIO_ADDR; + while (compare_string((char *)(addr + sizeof(cpio_header)), "TRAILER!!!") != 0) { + if ((compare_string((char *)(addr + sizeof(cpio_header)), name) == 0)) { + return addr; + } + cpio_header *header = (cpio_header *)addr; + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); + align_4(&file_size); + addr += (headerPathname_size + file_size); + } + return 0; +} + +void cpio_cat(char *filename) { + char *target = findFile(filename); + if (target) { + cpio_header *header = (cpio_header *)target; + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); + align_4(&file_size); + + char *file_content = target + headerPathname_size; + for (unsigned int i = 0; i < file_size; i++) { + uart_send(file_content[i]); // print the file content + } + uart_send_string("\r\n"); + } + else { + uart_send_string("File not found!\n"); + } +} + +void load_program(char *name) { + char *target = findFile(name); + if (target) { + cpio_header *header = (cpio_header *)target; + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); + align_4(&file_size); + + unsigned char *addr = (unsigned char *)USER_PROGRAM_ADDR; + char *file_content = target + headerPathname_size; + for (unsigned int i = 0; i < file_size; i++) { + *addr = file_content[i]; + addr++; + } + debug_printf("[DEBUG][load_program] load program: %s\n", name); + } + else { + uart_send_string("File not found!\n"); + } +} \ No newline at end of file diff --git a/Lab6/lib/mail_box.c b/Lab6/lib/mail_box.c new file mode 100644 index 000000000..560c91eaf --- /dev/null +++ b/Lab6/lib/mail_box.c @@ -0,0 +1,106 @@ +#include "peripherals/mail_box.h" +#include "mail_box.h" +#include "mini_uart.h" +#include "utils.h" + +/* mailbox message buffer */ +volatile unsigned int __attribute__((aligned(16))) mailbox[36]; + +/** + * Make a mailbox call. Returns 0 on failure, non-zero on success + */ +int mailbox_call(unsigned char ch, volatile unsigned int *mailbox) +{ + volatile unsigned int r = (((volatile unsigned int)((volatile unsigned long)mailbox)&~0xF) | (ch&0xF)); + /* wait until we can write to the mailbox */ + do{asm volatile("nop");}while(*MBOX_STATUS & MBOX_FULL); + /* write the address of our message to the mailbox with channel identifier */ + *MBOX_WRITE = r; + /* now wait for the response */ + while(1) { + /* is there a response? */ + do{asm volatile("nop");}while(*MBOX_STATUS & MBOX_EMPTY); + /* is it a response to our message? */ + if(r == *MBOX_READ) + /* is it a valid successful response? */ + return mailbox[1]==MBOX_RESPONSE; + } + return 0; +} + +// volatile unsigned int __attribute__((aligned(16))) mailbox[8]; + +// int mailbox_call(unsigned char ch, volatile unsigned int *mbox) { +// uart_printf("==========\n"); +// for (int i = 0; i < 8; ++i) +// uart_printf("%x\n", mbox[i]); +// uart_printf("==========\n"); +// /* +// 1. Combine the message address (upper 28 bits) with channel number (lower 4 bits) +// 2. Check if Mailbox 0 status register’s full flag is set. +// 3. If not, then you can write to Mailbox 1 Read/Write register. +// 4. Check if Mailbox 0 status register’s empty flag is set. +// 5. If not, then you can read from Mailbox 0 Read/Write register. +// 6. Check if the value is the same as you wrote in step 1. +// */ +// unsigned int msg = (((unsigned int)((unsigned long)mailbox) & ~0xF) | (ch & 0xF)); +// while (*MAILBOX_STATUS & MAILBOX_FULL) {} +// *MAILBOX_WRITE = msg; +// while (1) { +// while (*MAILBOX_STATUS & MAILBOX_EMPTY) {} +// if(msg == *MAILBOX_READ){ +// return mbox[1] == REQUEST_SUCCEED; +// } +// } +// return 0; +// } + +void get_board_revision() { + mailbox[0] = 7 * 4; // buffer size in bytes + mailbox[1] = MBOX_REQUEST; + // tags begin + mailbox[2] = GET_BOARD_REVISION; // tag identifier + mailbox[3] = 4; // maximum of request and response value buffer's length. + mailbox[4] = 8; + mailbox[5] = 0; // value buffer + // tags end + mailbox[6] = MBOX_TAG_LAST; + if (mailbox_call(MBOX_CH_PROP, mailbox)) + uart_printf("board revision number: 0x%x\n", mailbox[5]); + else + uart_printf("can not get board revision number!\n"); +} + +void get_arm_memory() { + mailbox[0] = 8 * 4; // buffer size in bytes + mailbox[1] = MBOX_REQUEST; + // tags begin + mailbox[2] = GET_ARM_EMEORY; // tag identifier + mailbox[3] = 8; // maximum of request and response value buffer's length. + mailbox[4] = 8; + mailbox[5] = 0; // value buffer + mailbox[6] = 0; // value buffer + // tags end + mailbox[7] = MBOX_TAG_LAST; + if (mailbox_call(MBOX_CH_PROP, mailbox)) { + uart_printf("base address: %x\n", mailbox[5]); + uart_printf("memory size: %x\n", mailbox[6]); + } + else + uart_printf("can not get memory info!\n"); +} + +void get_serial_number() { + mailbox[0] = 8*4; // length of the message + mailbox[1] = MBOX_REQUEST; // this is a request message + mailbox[2] = MBOX_TAG_GETSERIAL; // get serial number command + mailbox[3] = 8; // buffer size + mailbox[4] = 8; + mailbox[5] = 0; // clear output buffer + mailbox[6] = 0; + mailbox[7] = MBOX_TAG_LAST; + if(mailbox_call(MBOX_CH_PROP, mailbox)) + uart_printf("serial number is: %x%x\n", mailbox[5], mailbox[6]); + else + uart_printf("can not get serial number!\n"); +} \ No newline at end of file diff --git a/Lab6/lib/memory.c b/Lab6/lib/memory.c new file mode 100644 index 000000000..0c069aff0 --- /dev/null +++ b/Lab6/lib/memory.c @@ -0,0 +1,254 @@ +#include "memory.h" +#include "mini_uart.h" +#include "shell.h" + + +frame_free_node *frame_free_lists[4]; // 4K, 8K, 16K, 32K +char frame_array[FRAME_ARRAY_SIZE]; // 0xBB: buddy, 0xAA: allocated +frame_free_node *node_pool_head; // only mantain the "next" pointer, should not use "prev" +frame_free_node node_pool[FRAME_ARRAY_SIZE]; +frame_free_node *free_node_table[FRAME_ARRAY_SIZE]; // map index to node to enable O(1) search and removal + + +void memory_init() { + for (int i = 0; i < FRAME_ARRAY_SIZE; ++i) { + frame_array[i] = 0xBB; + if (i % 8 == 0) + frame_array[i] = 3; + free_node_table[i] = NULL; + } + + for (int i = 0; i < MAX_32K_NUM - 1; ++i) { + node_pool[i].next = &node_pool[i + 1]; + node_pool[i + 1].prev = &node_pool[i]; + } + node_pool[MAX_32K_NUM - 1].next = NULL; + node_pool[0].prev = NULL; + for (int i = 0; i < MAX_32K_NUM; ++i) { + node_pool[i].index = i << 3; + node_pool[i].list_addr = &frame_free_lists[3]; + free_node_table[i << 3] = &node_pool[i]; + } + + for (int i = MAX_32K_NUM; i < FRAME_ARRAY_SIZE - 1; ++i) + node_pool[i].next = &node_pool[i + 1]; + node_pool[FRAME_ARRAY_SIZE - 1].next = NULL; + + frame_free_lists[0] = NULL; + frame_free_lists[1] = NULL; + frame_free_lists[2] = NULL; + frame_free_lists[3] = &node_pool[0]; + node_pool_head = &node_pool[MAX_32K_NUM]; +} + +uint64_t page_malloc(int sz) { + uint64_t index = request_page(sz); + return GET_PAGE_ADDR(index); +} + +/* currently support 4K page request only, the value of frame array may be wrong otherwise */ +uint64_t request_page(int size) { + if (size < 0 || size > 3) { + uart_printf("[ERROR][request_page] request_page(%d): illegal argument!\n", size); + return 0; + } + + frame_free_node *free_node = frame_free_lists[size]; + uint64_t index; + if (free_node) { + index = free_node->index; + pop_front(&frame_free_lists[size]); + } + else { + index = request_page(size + 1); + int end = index + (2 << size) - 1; + int mid = (index + end) / 2; + for (int i = index + 1; i <= end; ++i) + frame_array[i] = 0xBB; + frame_array[mid + 1] = size; + add_to_list(&frame_free_lists[size], mid + 1); + debug_printf("[DEBUG][request_page] release redundant memory, index: %ld, size: %ldK\n", mid + 1, 4 * (1 << size)); + } + for (int i = 0; i < (1 << size); ++i) + frame_array[index + i] = 0xAA; + debug_printf("[DEBUG][request_page] allocate memory, index: %ld, size: %dK\n", index, 4 << size); + + return index; +} + +/* same as request_page but guarantees to cover specified address */ +uint64_t reserve_page(int size, uint64_t addr) { + if (size < 0 || size > 3) { + uart_printf("[ERROR][reserve_page] reserve_page(%d): illegal argument!\n", size); + return 0; + } + + uint64_t index = GET_PAGE_INDEX(addr); + uint64_t aligned_index = index & (~(uint64_t)0 << size); + frame_free_node *free_node = free_node_table[aligned_index]; + if (free_node && free_node->list_addr == &frame_free_lists[size]) { + remove_from_list(&frame_free_lists[size], aligned_index); + debug_printf("[DEBUG][reserve_page] allocate memory, index: %ld, size: %dK\n", aligned_index, 4 << size); + } + else { + aligned_index = reserve_page(size + 1, addr); + int end = aligned_index + (2 << size) - 1; + int mid = (aligned_index + end) / 2; + for (int i = aligned_index + 1; i <= end; ++i) + frame_array[i] = 0xBB; + if (index <= mid) { + frame_array[mid + 1] = size; + add_to_list(&frame_free_lists[size], mid + 1); + debug_printf("[DEBUG][reserve_page] release redundant memory, index: %ld, size: %ldK\n", mid + 1, 4 * (1 << size)); + } + else { + frame_array[aligned_index] = size; + add_to_list(&frame_free_lists[size], aligned_index); + debug_printf("[DEBUG][reserve_page] release redundant memory, index: %ld, size: %ldK\n", aligned_index, 4 * (1 << size)); + } + debug_printf("[DEBUG][reserve_page] allocate memory, index: %ld, size: %dK\n", index, 4 << size); + } + for (int i = 0; i < (1 << size); ++i) + frame_array[index + i] = 0xAA; + + return aligned_index; +} + +void page_free(uint64_t addr, int size) { + uint64_t index = getIndex(addr, size); + if (index >= FRAME_ARRAY_SIZE || frame_array[index] != 0xAA) + uart_printf("[ERROR][page_free] page_free: illegal index!\n"); + + debug_printf("[DEBUG][page_free] free %ldK page, index: %ld\n", 4 << size, index); + frame_array[index] = size; + for (int i = 1; i < (1 << size); ++i) + frame_array[index + i] = 0xBB; + add_to_list(&frame_free_lists[size], index); + merge_page(index, size + 1); +} + +void merge_page(uint64_t index, int size) { + if (size > 3) + return; + + uint64_t mask = (1 << size) - 1; + uint64_t start = index & ~mask; + uint64_t end = index | mask; + int mergable = 1; + for (uint64_t i = start; i <= end; ++i) { + if (frame_array[i] == 0xAA) { + mergable = 0; + break; + } + } + + if (!mergable) + return; + + debug_printf("[DEBUG][merge_page] merge into %ldK page\n", 4 << size); + for (uint64_t i = start + 1; i <= end; ++i) + frame_array[i] = 0xBB; + frame_array[start] = size; + for (uint64_t i = start; i <= end; ++i) { + if (free_node_table[i]) + remove_from_list(&frame_free_lists[size - 1], i); + } + add_to_list(&frame_free_lists[size], start); + + merge_page(index, size + 1); +} + +/* remove the first free node from a list */ +void pop_front(frame_free_node **list) { + frame_free_node *free_node = *list; + *list = (*list)->next; + (*list)->prev = NULL; + return_free_node(free_node); +} + +/* remove the free node holding specify index from a list, if exits */ +void remove_from_list(frame_free_node **list, uint64_t index) { + frame_free_node *target = free_node_table[index]; + free_node_table[index] = NULL; + if (target->list_addr != list) + uart_printf("[ERROR][remove_from_list] list address not matched!\n"); + target->list_addr = NULL; + if (target == *list) { + *list = (*list)->next; + (*list)->prev = NULL; + } + else { + target->next->prev = target->prev; + target->prev->next = target->next; + } + return_free_node(target); +} + +/* add a free node holding specify index to a list */ +void add_to_list(frame_free_node **list, uint64_t index) { + frame_free_node *new_node = get_free_node(); + free_node_table[index] = new_node; + new_node->list_addr = list; + new_node->index = index; + new_node->prev = NULL; + new_node->next = *list; + if (*list) + (*list)->prev = new_node; + (*list) = new_node; +} + +uint64_t getIndex(uint64_t addr, int size) { + uint64_t _addr = addr - MEMORY_BASE_ADDR; + int page_size = (1 << size) << 12; + if (_addr % page_size != 0) + uart_printf("[ERROR][getIndex] getIndex: illegal address: %x\n", _addr); + return _addr / PAGE_SIZE_4K; +} + +frame_free_node *get_free_node() { + frame_free_node *node = node_pool_head; + if (!node) + uart_printf("[ERROR][get_free_node] get_free_node: no more nodes!\n"); + node_pool_head = node_pool_head->next; + return node; +} + +void return_free_node(frame_free_node *node) { + node->next = node_pool_head; + node_pool_head = node; +} + +uint64_t get_allocated_num() { + uint64_t cnt = 0; + for (uint64_t i = 0; i < FRAME_ARRAY_SIZE; ++i) { + if (frame_array[i] == 0xAA) + ++cnt; + } + return cnt; +} + +/* clear first 64 bytes */ +void clear_4K_page(uint64_t index) { + uint64_t *addr = (uint64_t*)GET_PAGE_ADDR(index); + addr[0] = 0; +} + + +void print_frame_array() { + uart_printf("frame_array: "); + for (uint64_t i = 0; i < 8; ++i) { + uart_printf("(%ld, %x) ", i, frame_array[i]); + } + uart_printf("\n"); +} + +void print_frame_free_lists() { + uart_printf("frame_free_lists: "); + for (int i = 0; i < 4; ++i) { + if (frame_free_lists[i]) + uart_printf("(%d, %ld) ", i, frame_free_lists[i]->index); + else + uart_printf("(%d, NULL) ", i); + } + uart_printf("\n"); +} \ No newline at end of file diff --git a/Lab6/lib/mini_uart.c b/Lab6/lib/mini_uart.c new file mode 100644 index 000000000..9f4503ef4 --- /dev/null +++ b/Lab6/lib/mini_uart.c @@ -0,0 +1,196 @@ +#include "peripherals/mini_uart.h" +#include "peripherals/gpio.h" +#include "utils.h" +#include "mini_uart.h" +#include "printf.h" +#include + + +// The AUX_MU_LSR_REG register (8 bits) shows the data status. +// The AUX_MU_IO_REG register (8 bits) is primary used to write data to and read data from the UART FIFOs. +void uart_send ( char c ) { + if (c == '\n') + uart_send('\r'); + while(!(*AUX_MU_LSR_REG & 0x20)) {} // Bit 5, if set to 1, tells us that the transmitter is empty. + *AUX_MU_IO_REG = c; +} + +char uart_recv ( void ) { + while(!(*AUX_MU_LSR_REG & 0x01)) {} // Bit 0, if set to 1, indicates that the data is ready. + char recv = *AUX_MU_IO_REG & 0xFF; + return recv != '\r' ? recv : '\n'; +} + +void uart_recv_string(char *buffer) { + int size = 0; + while(size < MAX_BUFFER_SIZE){ + buffer[size] = uart_recv(); + uart_send(buffer[size]); + if(buffer[size++] == '\n'){ + break; + } + } + buffer[--size] = '\0'; +} + +void uart_send_string(char* str) { + for (int i = 0; str[i] != '\0'; i ++) { + uart_send((char)str[i]); + } +} + +unsigned int uart_printf(char* fmt,...) { + char dst[100]; + //__builtin_va_start(args, fmt): "..." is pointed by args + //__builtin_va_arg(args,int): ret=(int)*args;args++;return ret; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret=vsprintf(dst,fmt,args); + uart_send_string(dst); + return ret; +} + +void uart_hex(unsigned int d) { + unsigned int n; + int c; + for(c=28;c>=0;c-=4) { + // get highest tetrad + n=(d>>c)&0xF; + // 0-9 => '0'-'9', 10-15 => 'A'-'F' + n+=n>9?0x37:0x30; + uart_send(n); + } +} + +unsigned char uart_getb(){ //for data transfer + unsigned char r; + do{ asm volatile("nop"); } while (!(*AUX_MU_LSR_REG & 0x01)); + r = (unsigned char)(*AUX_MU_IO_REG); + return r; +} + +void delay(unsigned int clock) { + while (clock--) { + asm volatile("nop"); + } +} + +// An alternative function is a number from 0 to 5 that can be set for each pin and configures which device is connected to the pin. +// GPFSEL1 register is used to control alternative functions for pins 10-19. +// pin 14 -> TXD1: set bits 14-12 to 5 +// pin 15 -> RXD1: set bits 17-15 to 5 +void uart_init ( void ) { + // connect Mini UART to the GPIO pins + unsigned int selector; + selector = *GPFSEL1; + selector &= ~(7u << 12); // Clean gpio14 + selector |= 2u << 12; // Set alt5 for gpio14 + selector &= ~(7u << 15); // Clean gpio15 + selector |= 2u << 15; // Set alt5 for gpio15 + *GPFSEL1 = selector; + + // Remove both the pull-up and pull-down states from a pin + *GPPUD = 0; + delay(150u); + *GPPUDCLK0 = (1u << 14) | (1u << 15); + delay(150u); + *GPPUDCLK0 = 0; + + // Initializing the Mini UART + *AUX_ENABLES = 1u; // Enable mini uart (this also enables access to its registers) + *AUX_MU_CNTL_REG = 0u; // Disable auto flow control and disable receiver and transmitter (for now) + *AUX_MU_IER_REG = 1u; // Disable receive and transmit interrupts + *AUX_MU_LCR_REG = 3u; // Enable 8 bit mode + *AUX_MU_MCR_REG = 0u; // Set RTS line to be always high + *AUX_MU_BAUD_REG = 270u; // Set baud rate to 115200 + *AUX_MU_CNTL_REG = 3u; // Finally, enable transmitter and receiver + + *AUX_MU_IIR_REG = 6u; + + read_buf_start = read_buf_end = 0; + write_buf_start = write_buf_end = 0; +} + + + +/* async mini uart */ +char read_buf[MAX_BUFFER_SIZE]; +char write_buf[MAX_BUFFER_SIZE]; +int read_buf_start, read_buf_end; +int write_buf_start, write_buf_end; + +void enable_uart_interrupt() { *ENB_IRQS1 = AUX_IRQ; } +void disable_uart_interrupt() { *DISABLE_IRQS1 = AUX_IRQ; } +void set_transmit_interrupt() { *AUX_MU_IER_REG |= 0x2; } +void clear_transmit_interrupt() { *AUX_MU_IER_REG &= ~(0x2); } + +void uart_handler() { + disable_uart_interrupt(); + int RX = (*AUX_MU_IIR_REG & 0x4); + int TX = (*AUX_MU_IIR_REG & 0x2); + if (RX) { + char c = (char)(*AUX_MU_IO_REG); + read_buf[read_buf_end++] = c; + if (read_buf_end == MAX_BUFFER_SIZE) + read_buf_end = 0; + } + else if (TX) { + while (*AUX_MU_LSR_REG & 0x20) { + if (write_buf_start == write_buf_end) { + clear_transmit_interrupt(); + break; + } + char c = write_buf[write_buf_start++]; + *AUX_MU_IO_REG = c; + if (write_buf_start == MAX_BUFFER_SIZE) + write_buf_start = 0; + } + } + else { + uart_send_string("[Error] uart_handler: should not reach here!\n"); + while (1) { } + } + enable_uart_interrupt(); +} + +char uart_async_recv() { + // wait until there are new data + while (read_buf_start == read_buf_end) + asm volatile("nop"); + char c = read_buf[read_buf_start++]; + if (read_buf_start == MAX_BUFFER_SIZE) + read_buf_start = 0; + return c == '\r' ? '\n' : c; +} + +void uart_async_send_string(char *str) { + + for (int i = 0; str[i]; i++) { + if (str[i] == '\n') { + write_buf[write_buf_end++] = '\r'; + write_buf[write_buf_end++] = '\n'; + continue; + } + write_buf[write_buf_end++] = str[i]; + if (write_buf_end == MAX_BUFFER_SIZE) + write_buf_end = 0; + } + set_transmit_interrupt(); +} + +void test_uart_async() { + uart_send_string("[Please type something]\n"); + enable_uart_interrupt(); + delay(15000); + char buffer[MAX_BUFFER_SIZE]; + size_t index = 0; + while (1) { + buffer[index] = uart_async_recv(); + if (buffer[index] == '\n') + break; + index++; + } + buffer[index + 1] = '\0'; + uart_async_send_string(buffer); + disable_uart_interrupt(); +} diff --git a/Lab6/lib/mm.S b/Lab6/lib/mm.S new file mode 100644 index 000000000..2e2d88c28 --- /dev/null +++ b/Lab6/lib/mm.S @@ -0,0 +1,6 @@ +.globl memzero +memzero: + str xzr, [x0], #8 // Post-index: store 0 to the unmodified address in x0 first, then update x0 (to x0 + #8) + subs x1, x1, #8 + b.gt memzero + ret \ No newline at end of file diff --git a/Lab6/lib/printf.c b/Lab6/lib/printf.c new file mode 100644 index 000000000..f54f6736f --- /dev/null +++ b/Lab6/lib/printf.c @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2018 bzt (bztsrc@github) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +/** + * minimal sprintf implementation + */ +#include "../include/printf.h" + +unsigned int vsprintf(char *dst, char* fmt, __builtin_va_list args) +{ + long int arg; + int len, sign, i; + char *p, *orig=dst, tmpstr[19]; + + // failsafes + if(dst==(void*)0 || fmt==(void*)0) { + return 0; + } + + // main loop + arg = 0; + while(*fmt) { + // argument access + if(*fmt=='%') { + fmt++; + // literal % + if(*fmt=='%') { + goto put; + } + len=0; + // size modifier + while(*fmt>='0' && *fmt<='9') { + len *= 10; + len += *fmt-'0'; + fmt++; + } + // skip long modifier + if(*fmt=='l') { + fmt++; + } + // character + if(*fmt=='c') { + arg = __builtin_va_arg(args, int); + *dst++ = (char)arg; + fmt++; + continue; + } else + // decimal number + if(*fmt=='d') { + arg = __builtin_va_arg(args, int); + // check input + sign=0; + if((int)arg<0) { + arg*=-1; + sign++; + } + if(arg>99999999999999999L) { + arg=99999999999999999L; + } + // convert to string + i=18; + tmpstr[i]=0; + do { + tmpstr[--i]='0'+(arg%10); + arg/=10; + } while(arg!=0 && i>0); + if(sign) { + tmpstr[--i]='-'; + } + // padding, only space + if(len>0 && len<18) { + while(i>18-len) { + tmpstr[--i]=' '; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // hex number + if(*fmt=='x') { + arg = __builtin_va_arg(args, long int); + // convert to string + i=16; + tmpstr[i]=0; + do { + char n=arg & 0xf; + // 0-9 => '0'-'9', 10-15 => 'A'-'F' + tmpstr[--i]=n+(n>9?0x37:0x30); + arg>>=4; + } while(arg!=0 && i>0); + // padding, only leading zeros + if(len>0 && len<=16) { + while(i>16-len) { + tmpstr[--i]='0'; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // string + if(*fmt=='s') { + p = __builtin_va_arg(args, char*); +copystring: if(p==(void*)0) { + p="(null)"; + } + while(*p) { + *dst++ = *p++; + } + } + } else { +put: *dst++ = *fmt; + } + fmt++; + } + *dst=0; + // number of bytes written + return dst-orig; +} + +/** + * Variable length arguments + */ +unsigned int sprintf(char *dst, char* fmt, ...) +{ + //__builtin_va_start(args, fmt): "..." is pointed by args + //__builtin_va_arg(args,int): ret=(int)*args;args++;return ret; + __builtin_va_list args; + __builtin_va_start(args, fmt); + return vsprintf(dst,fmt,args); +} \ No newline at end of file diff --git a/Lab6/lib/reboot.c b/Lab6/lib/reboot.c new file mode 100644 index 000000000..bceb3922f --- /dev/null +++ b/Lab6/lib/reboot.c @@ -0,0 +1,18 @@ +#define PM_PASSWORD 0x5a000000 +#define PM_RSTC 0x3F10001c +#define PM_WDOG 0x3F100024 + +void set(long addr, unsigned int value) { + volatile unsigned int* point = (unsigned int*)addr; + *point = value; +} + +void reboot(int tick) { // reboot after watchdog timer expire + set(PM_RSTC, PM_PASSWORD | 0x20); // full reset + set(PM_WDOG, PM_PASSWORD | tick); // number of watchdog tick +} + +void cancel_reboot() { + set(PM_RSTC, PM_PASSWORD | 0); // full reset + set(PM_WDOG, PM_PASSWORD | 0); // number of watchdog tick +} \ No newline at end of file diff --git a/Lab6/lib/shell.c b/Lab6/lib/shell.c new file mode 100644 index 000000000..40afdde5b --- /dev/null +++ b/Lab6/lib/shell.c @@ -0,0 +1,154 @@ +#include "mini_uart.h" +#include "shell.h" +#include "utils.h" +#include "reboot.h" +#include "peripherals/mail_box.h" +#include "mail_box.h" +#include "cpio.h" +#include "timer.h" +#include "memory.h" +#include "allocator.h" +#include "printf.h" +#include "task.h" +#include "exception.h" + + +int debug_mode = 0; +char buffer[MAX_BUFFER_SIZE]; + +void get_command(); +void parse_command(); + +void get_board_revision(); + +void shell(void) { + while (1) { + uart_send_string("> "); + get_command(); + parse_command(); + } +} + +void get_command() { + unsigned int index = 0; + char recv; + while (1) { + recv = uart_recv(); + if (recv == '\r') + continue; + uart_send(recv); + buffer[index++] = recv; + index = index < MAX_BUFFER_SIZE ? index : MAX_BUFFER_SIZE - 1; + if (recv == '\n') { + buffer[index - 1] = '\0'; + break; + } + } +} + +unsigned int debug_printf(char* fmt,...) { + if (debug_mode) { + char dst[100]; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret=vsprintf(dst,fmt,args); + uart_send_string(dst); + return ret; + } + return 0; +} + +void parse_command() { + if (compare_string(buffer, "\0") == 0) {} + else if (compare_string(buffer, "hello") == 0) + uart_send_string("Hello World!\n"); + else if (compare_string(buffer, "reboot") == 0) { + uart_send_string("rebooting ...\n"); + reboot(100); + while (1) {} + } + else if (compare_string(buffer, "info") == 0) { + get_board_revision(); + get_arm_memory(); + get_serial_number(); + } + else if (compare_string(buffer, "ls") == 0) { + cpio_list(); + } + else if (compare_string(buffer, "cat") == 0) { + uart_send_string("Filename: \n"); + get_command(); + cpio_cat(buffer); + } + else if (compare_string(buffer, "async_uart") == 0) { + test_uart_async(); + } + else if (compare_string(buffer, "test_timer_lab3") == 0) { + test_timer(); + } + else if (compare_string(buffer, "test_page") == 0) { + debug_mode = 1; + const int test_size = 3; + const uint64_t test_address[] = {0x2001, 0x3010, 0x6100}; // covered index 2(4K), 3(4K), 6(8K) + const int page_size[] = {0, 0, 1}; + const uint64_t mask[] = {0xFFF, 0xFFF, 0x1FFF}; + for (int i = 0; i < test_size; ++i) { + reserve_page(page_size[i], test_address[i]); + print_frame_array(); + uart_printf("\n"); + } + for (int i = 0; i < test_size; ++i) { + page_free(test_address[i] & ~mask[i], page_size[i]); + print_frame_array(); + uart_printf("\n"); + } + debug_mode = 0; + } + else if (compare_string(buffer, "test_dyn") == 0) { + debug_mode = 1; + const int test_size = 10; + const int test_cases[] = {31, 2, 32, 63, 120, 256, 129, 155, 240, 250}; + void *addrs[test_size]; + for (int i = 0; i < test_size; ++i) { + addrs[i] = kmalloc(test_cases[i]); + print_slot_record(find_page(addrs[i])); + uart_printf("\n"); + } + for (int i = 0; i < test_size; ++i) { + kfree(addrs[i]); + print_slot_record(find_page(addrs[i])); + uart_printf("\n"); + } + debug_mode = 0; + } + else if (compare_string(buffer, "test_fork") == 0) { + run_user_program("fork_test.img", NULL); + } + else if (compare_string(buffer, "test_exec") == 0) { + run_user_program("exec_test.img", NULL); + } + else if (compare_string(buffer, "test_timer") == 0) { + run_user_program("timer_test.img", NULL); + } + else if (compare_string(buffer, "test_mbox") == 0) { + run_user_program("mbox_test.img", NULL); + } + else if (compare_string(buffer, "test_sys") == 0) { + run_user_program("syscall.img", NULL); + } + else if (compare_string(buffer, "help") == 0) { + uart_send_string("help : print this help menu\n"); + uart_send_string("hello : print Hello World!\n"); + uart_send_string("reboot : reboot the device\n"); + uart_send_string("info : print device info\n"); + uart_send_string("ls : print files in rootfs\n"); + uart_send_string("cat : print file content\n"); + uart_send_string("async_uart : test async uart\n"); + uart_send_string("test_timer : test timer multiplexing\n"); + uart_send_string("test_page : test buddy system\n"); + uart_send_string("test_dyn : test dynamic allocator\n"); + uart_send_string("test_fork : test user program\n"); + } + else + uart_send_string("\rcommand not found!\r\n"); +} diff --git a/Lab6/lib/switch.S b/Lab6/lib/switch.S new file mode 100644 index 000000000..6033b5501 --- /dev/null +++ b/Lab6/lib/switch.S @@ -0,0 +1,28 @@ +.section ".text" + +.global switch_to +switch_to: + stp x19, x20, [x0, 16 * 0] + stp x21, x22, [x0, 16 * 1] + stp x23, x24, [x0, 16 * 2] + stp x25, x26, [x0, 16 * 3] + stp x27, x28, [x0, 16 * 4] + stp fp, lr, [x0, 16 * 5] + mov x9, sp + str x9, [x0, 16 * 6] + + ldp x19, x20, [x1, 16 * 0] + ldp x21, x22, [x1, 16 * 1] + ldp x23, x24, [x1, 16 * 2] + ldp x25, x26, [x1, 16 * 3] + ldp x27, x28, [x1, 16 * 4] + ldp fp, lr, [x1, 16 * 5] + ldr x9, [x1, 16 * 6] + mov sp, x9 + msr tpidr_el1, x1 + ret + +.global get_current +get_current: + mrs x0, tpidr_el1 + ret \ No newline at end of file diff --git a/Lab6/lib/system_call.c b/Lab6/lib/system_call.c new file mode 100644 index 000000000..cfc5ce269 --- /dev/null +++ b/Lab6/lib/system_call.c @@ -0,0 +1,74 @@ +#include "system_call.h" +#include "switch.h" +#include "task.h" +#include "printf.h" +#include "mini_uart.h" + + +/* helper functions for user programs, not the real system calls */ +int get_pid() { + unsigned long ret; + asm volatile("mov x8, 0\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +size_t uart_read(char buf[], size_t size) { + unsigned long ret; + asm volatile("mov x8, 1\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +size_t uart_write(const char buf[], size_t size) { + unsigned long ret; + asm volatile("mov x8, 2\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int exec(const char *name, char *const argv[]) { + unsigned long ret; + asm volatile("mov x8, 3\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int fork() { + unsigned long ret; + asm volatile("mov x8, 4\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +void exit() { + asm volatile("mov x8, 5\n"); + asm volatile("svc 0\n"); +} + +int mbox_call(unsigned char ch, unsigned int *mbox) { + unsigned long ret; + asm volatile("mov x8, 6\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +void kill(int pid) { + asm volatile("mov x8, 7\n"); + asm volatile("svc 0\n"); +} + +unsigned int printf(char* fmt,...) { + char dst[100]; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret=vsprintf(dst,fmt,args); + uart_send_string(dst); + return ret; +} \ No newline at end of file diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c new file mode 100644 index 000000000..57e1d5693 --- /dev/null +++ b/Lab6/lib/task.c @@ -0,0 +1,153 @@ +#include "task.h" +#include "allocator.h" +#include "switch.h" +#include "shell.h" +#include "utils.h" +#include "mini_uart.h" +#include "sysreg.h" +#include "cpio.h" +#include "timer.h" + + +task_queue run_queue = {"run", NULL, NULL}; +task_queue wait_queue = {"wait", NULL, NULL}; +task_queue terminated_queue = {"terminated", NULL, NULL}; +int run_queue_sz = 0; +char **_argv = NULL; +static int task_cnt = 0; + +unsigned long user_addr; +unsigned long user_sp; + + +void run_user_program(const char* name, char *const argv[]) { + load_program((char*)name); + _argv = (char**)argv; + + task_struct *task = thread_create(switch_to_user_space); + user_addr = USER_PROGRAM_ADDR; + user_sp = task->user_fp; + add_timer(read_sysreg(cntfrq_el0) >> 5, normal_timer, NULL); // < 0.1s + core_timer_enable(); + idle(); +} + +void switch_to_user_space() { + asm volatile("mov x0, 0x340 \n"::); + asm volatile("msr spsr_el1, x0 \n"::); + asm volatile("msr elr_el1, %0 \n"::"r"(user_addr)); + asm volatile("msr sp_el0, %0 \n"::"r"(user_sp)); + asm volatile("eret \n"::); +} + +void create_root_thread() { + task_struct* root_task = thread_create(idle); + write_sysreg(tpidr_el1, root_task); +} + +task_struct* thread_create(void *func) { + task_struct* new_task = (task_struct*)page_malloc(0); + new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 1; + new_task->context.lr = (unsigned long)func; + new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 1; // kernel stack pointer for the thread + new_task->user_fp = page_malloc(0) + PAGE_SIZE_4K - 16; // user stack frame pointer + + new_task->state = RUNNING; + new_task->id = task_cnt++; + new_task->handler = NULL; + + debug_printf("[DEBUG][thread_create] id: %d\n", new_task->id); + + push_task_to_queue(&run_queue, new_task); + return new_task; +} + +void thread_schedule() { + task_struct *next_task = run_queue.begin; + if (!next_task->id && !next_task->next) // escapes idle(), but the call stack will grow forever + shell(); + + pop_task_from_queue(&run_queue, next_task); + push_task_to_queue(&run_queue, next_task); + + task_struct *cur = get_current(); + debug_printf("[DEBUG][thread_schedule] switch from thread %d to %d\n", cur->id, next_task->id); + switch_to(cur, next_task); +} + +void idle() { + while(1) { + kill_zombies(); + thread_schedule(); + } +} + +void kill_zombies() { + +} + +void push_task_to_queue(task_queue *queue, task_struct *task) { + if (queue->begin) { + queue->end->next = task; + task->prev = queue->end; + task->next = NULL; + queue->end = task; + } + else { + queue->begin = queue->end = task; + task->prev = task->next = NULL; + } + run_queue_sz += 1; + debug_printf("[DEBUG][push_task_to_queue] push thread %d into %s queue\n", task->id, queue->name); +} + +void pop_task_from_queue(task_queue *queue, task_struct *task) { + task_struct *prev = task->prev; + task_struct *next = task->next; + if (prev && next) { + prev->next = next; + next->prev = prev; + } + else if (!prev && next) { + next->prev = NULL; + queue->begin = next; + } + else if (prev && !next) { + prev->next = NULL; + queue->end = prev; + } + else + queue->begin = queue->end = NULL; + run_queue_sz -= 1; + debug_printf("[DEBUG][pop_task_from_queue] pop thread %d from %s queue\n", task->id, queue->name); +} + +void dump_queue(task_queue *queue) { + task_struct *task = queue->begin; + uart_printf("%s queue: ", queue->name); + while (task) { + uart_printf("%d ", task->id, task); + task = task->next; + } + uart_printf("\n"); +} + +/* Helper functions */ +void put_args(char *const argv[]) { + if (!argv) + return; + + char **iter = (char**) argv; + for (int i = 0; iter[i]; ++i) + asm volatile("mov %0, %1 \n"::"r"(i), "r"(iter[i])); +} + +task_struct *find_task_by_id(task_queue *queue, int pid) { + task_struct *task = queue->begin; + while (task) { + if (task->id == pid) + break; + task = task->next; + } + return task; +} \ No newline at end of file diff --git a/Lab6/lib/timer.c b/Lab6/lib/timer.c new file mode 100644 index 000000000..dc3181163 --- /dev/null +++ b/Lab6/lib/timer.c @@ -0,0 +1,108 @@ +#include "timer.h" +#include "mini_uart.h" +#include "sysreg.h" +#include "allocator.h" +#include "exception.h" +#include "shell.h" + + +static struct Timer *timer_list = NULL; + + +void init_timer() { + uint64_t tmp; + asm volatile("mrs %0, cntkctl_el1" : "=r"(tmp)); + tmp |= 1; + asm volatile("msr cntkctl_el1, %0" : : "r"(tmp)); +} + +void core_timer_enable() { + write_sysreg(cntp_ctl_el0, 1); // enable + *CORE0_TIMER_IRQ_CTRL = 2; // unmask timer interrupt +} + +void core_timer_disable() { + write_sysreg(cntp_ctl_el0, 0); // disable + *CORE0_TIMER_IRQ_CTRL = 0; // mask timer interrupt +} + +void add_timer(unsigned int time, timer_call_back call_back, void *args) { + struct Timer *timer = (struct Timer*)kmalloc(sizeof(struct Timer)); + timer->expire_time = read_sysreg(cntpct_el0) + time; + timer->call_back = call_back; + timer->args = args; + timer->next = NULL; + int need_update = 0; + //core_timer_disable(); + if (!timer_list) { + timer_list = timer; + need_update = 1; + } + else if (timer_list->expire_time > timer->expire_time) { + timer->next = timer_list; + timer_list = timer; + need_update = 1; + } + else { + struct Timer *pre = timer_list, *next = timer_list->next; + while (next && pre->expire_time < timer->expire_time) { + pre = next; + next = next->next; + } + pre->next = timer; + timer->next = next; + } + if (need_update) + write_sysreg(cntp_tval_el0, time); + //core_timer_enable(); +} + +void pop_timer() { + //core_timer_disable(); + struct Timer *timer = timer_list; + timer_list = timer_list->next; + //core_timer_enable(); + timer->call_back(timer->args); + if (!timer_list) + core_timer_disable(); + else + write_sysreg(cntp_tval_el0, timer_list->expire_time - read_sysreg(cntpct_el0)); +} + +void test_timer() { + char* msg1 = (char *)kmalloc(20); + char* msg2 = (char *)kmalloc(20); + char* msg3 = (char *)kmalloc(20); + msg1 = "\nThis is timer 1!\n"; + msg2 = "This is timer 2!\n"; + msg3 = "This is timer 3!\n"; + add_timer(3 * read_sysreg(cntfrq_el0), print_timer, msg3); + add_timer(2 * read_sysreg(cntfrq_el0), print_timer, msg2); + add_timer(1 * read_sysreg(cntfrq_el0), print_timer, msg1); + core_timer_enable(); +} + +/* callbacks */ +void show_time_elapsed(void *args) { + unsigned long cntpct = read_sysreg(cntpct_el0); + unsigned long cntfrq = read_sysreg(cntfrq_el0); + unsigned long tmp = cntpct * 10 / cntfrq; + uart_printf("--------------------\n"); + uart_printf("Time Elapsed: %d.%ds\n", tmp/10, tmp%10); + uart_printf("--------------------\n"); + add_timer(cntfrq << 1, show_time_elapsed, NULL); +} + +void print_timer(void *args) { + char *msg = (char *)args; + uart_send_string(msg); +} + +void normal_timer() { + unsigned long cntpct = read_sysreg(cntpct_el0); + unsigned long cntfrq = read_sysreg(cntfrq_el0); + unsigned long tmp = cntpct * 10 / cntfrq; + debug_printf("[DEBUG][normal_timer] time elapsed: %d.%ds\n", tmp/10, tmp%10); + add_timer(cntfrq >> 5, normal_timer, NULL); + thread_schedule(); +} \ No newline at end of file diff --git a/Lab6/lib/utils.c b/Lab6/lib/utils.c new file mode 100644 index 000000000..99d883e68 --- /dev/null +++ b/Lab6/lib/utils.c @@ -0,0 +1,96 @@ +#include "utils.h" +#include "mini_uart.h" + +int compare_string(const char *s1, const char *s2) { + unsigned char c1, c2; + + do { + c1 = (unsigned char)*s1++; + c2 = (unsigned char)*s2++; + if (c1 == '\0') { + return c1 - c2; + } + } while (c1 == c2); + + return c1 - c2; +} + +void uintoa(char *out, unsigned int i) +{ + unsigned int index = 0; + char tmp[20]; + do { + unsigned char m = i % 16; + i >>= 4; + + char c = m + '0'; + if (m == 10) + c = 'A'; + else if (m == 11) + c = 'B'; + else if (m == 12) + c = 'C'; + else if (m == 13) + c = 'D'; + else if (m == 14) + c = 'E'; + else if (m == 15) + c = 'F'; + + tmp[index++] = c; + + } while (i); + + index--; + for (unsigned int i = 0; i <= index; ++i) + out[i] = tmp[index - i]; + out[index + 1] = '\0'; +} + +unsigned int getIntegerFromString(const char *str) { + unsigned int value = 0u; + + while (*str) { + if(*str >= '0' && *str<= '9'){ + value = value * 10u + (*str - '0'); + } + ++str; + } + return value; +} + +unsigned long getHexFromString(const char *str) { + unsigned long value = 0u; + + while (*str) { + if(*str >= '0' && *str <= '9'){ + value = value*16 + *str - '0'; + }else if(*str >= 'a' && *str <= 'z'){ + value = value*16 + *str - 'a' + 10u; + }else if(*str >= 'A' && *str <= 'Z'){ + value = value*16 + *str - 'A' + 10u; + } + ++str; + } + return value; +} + +// convert hexadecimal string into decimal +unsigned long hexToDec(char *s) { + unsigned long r = 0; + for(int i = 0; i < 8; ++i) { + if(s[i] >= '0' && s[i] <= '9') + r = r * 16 + s[i] -'0'; + else + r = r * 16 + s[i] - 'A' + 10; + } + return r; +} + +/* align to multiple of 4 */ +void align_4(void* size) { + unsigned long* x =(unsigned long*) size; + if((*x)&3){ + (*x) += 4-((*x)&3); + } +} \ No newline at end of file diff --git a/Lab6/load_kernel.py b/Lab6/load_kernel.py new file mode 100755 index 000000000..13d229249 --- /dev/null +++ b/Lab6/load_kernel.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 +import os +import time +import serial#pyserial + +def waitFor(target,dev,display=True):#avoid loss data + msgs='' + while True: + cnt=dev.inWaiting() + if cnt>0: + msg=dev.read(cnt).decode() + msgs=msgs+msg + if display: + print(msg,end='') + if target == '.': + if msgs.find(target)!=-1: + return + else: + return + +def dumpImg(dev,k_addr='0x80000',kernel='kernel8.img'): + dev.write(str.encode("[Load Kernel]\n")) + + k_size=os.stat(kernel).st_size + + time.sleep(1) + waitFor('',dev) + dev.write(str.encode(k_addr + '\n')) + + time.sleep(1) + waitFor('',dev) + dev.write(str.encode(str(k_size) + '\n')) + + with open(kernel,"rb") as f: + time.sleep(1) + waitFor('',dev) + for i in range(k_size): + dev.write(f.read(1)) + waitFor('.',dev,False) + +if __name__=='__main__': + br=115200 + #dev=serial.Serial("/dev/ttyUSB0",br) + dev=serial.Serial("/dev/pts/2",br) + dumpImg(dev) diff --git a/Lab6/user/exec_test.c b/Lab6/user/exec_test.c new file mode 100644 index 000000000..ded309e8c --- /dev/null +++ b/Lab6/user/exec_test.c @@ -0,0 +1,6 @@ +#include "system_call.h" + +void exec_test() { + printf("\nExec Test, pid %d\n", get_pid()); + exec("fork_test.img", NULL); +} \ No newline at end of file diff --git a/Lab6/user/fork_test.c b/Lab6/user/fork_test.c new file mode 100644 index 000000000..c2cef3dfb --- /dev/null +++ b/Lab6/user/fork_test.c @@ -0,0 +1,31 @@ +#include "system_call.h" + +void fork_test(){ + printf("\nFork Test, pid %d\n", get_pid()); + int cnt = 1; + int ret = 0; + if ((ret = fork()) == 0) { // child + long long cur_sp; + asm volatile("mov %0, sp" : "=r"(cur_sp)); + printf("first child pid: %d, cnt: %d, ptr: %x, sp : %x\n", get_pid(), cnt, &cnt, cur_sp); + ++cnt; + + if ((ret = fork()) != 0){ + asm volatile("mov %0, sp" : "=r"(cur_sp)); + printf("first child pid: %d, cnt: %d, ptr: %x, sp : %x\n", get_pid(), cnt, &cnt, cur_sp); + } + else{ + while (cnt < 5) { + asm volatile("mov %0, sp" : "=r"(cur_sp)); + printf("second child pid: %d, cnt: %d, ptr: %x, sp : %x\n", get_pid(), cnt, &cnt, cur_sp); + delay(1000000); + ++cnt; + } + } + exit(); + } + else { + printf("parent here, pid %d, child %d\n", get_pid(), ret); + exit(); + } +} \ No newline at end of file diff --git a/Lab6/user/linker.ld b/Lab6/user/linker.ld new file mode 100644 index 000000000..1ba0f30fd --- /dev/null +++ b/Lab6/user/linker.ld @@ -0,0 +1,12 @@ +SECTIONS +{ + . = 0x900000; + .text.boot : { *(.text.boot) } + .text : { *(.text) } + .rodata : { *(.rodata) } + .data : { *(.data) } + . = ALIGN(0x8); + bss_begin = .; + .bss : { *(.bss*) } + bss_end = .; +} \ No newline at end of file diff --git a/Lab6/user/mbox_test.c b/Lab6/user/mbox_test.c new file mode 100644 index 000000000..8798c6fff --- /dev/null +++ b/Lab6/user/mbox_test.c @@ -0,0 +1,59 @@ +#include "system_call.h" +#include "mail_box.h" + +volatile unsigned int __attribute__((aligned(16))) my_mailbox[36]; + +void mbox_test() { + /* test mbox_call */ + printf("\nTest mbox\n"); + // my_mailbox[0] = 7 * 4; + // my_mailbox[1] = REQUEST_CODE; + // my_mailbox[2] = GET_BOARD_REVISION; + // my_mailbox[3] = 4; + // my_mailbox[4] = TAG_REQUEST_CODE; + // my_mailbox[5] = 0; + // my_mailbox[6] = END_TAG; + // int status = mbox_call(8, my_mailbox); + // printf("\rboard revision: 0x"); + // printf("%x\n", my_mailbox[5]); // it should be 0xa020d3 for rpi3 b+ + // if (status) + // printf("success\n"); + // else + // printf("fail\n"); + + + my_mailbox[0] = 7 * 4; // buffer size in bytes + my_mailbox[1] = MBOX_REQUEST; + // tags begin + my_mailbox[2] = GET_BOARD_REVISION; // tag identifier + my_mailbox[3] = 4; // maximum of request and response value buffer's length. + my_mailbox[4] = 8; + my_mailbox[5] = 0; // value buffer + // tags end + my_mailbox[6] = MBOX_TAG_LAST; + if (mbox_call(MBOX_CH_PROP, (unsigned int*)my_mailbox)) + printf("board revision number: 0x%x\n", my_mailbox[5]); + else + printf("can not get board revision number!\n"); + + + /* test kill */ + // int child_id[3]; + // int parent_id = 0; + // for (int i = 0; i < 3; ++i) { + // int id = fork(); + // if (!id) // child + // break; + // child_id[i] = id; + // parent_id = get_pid(); + // } + // if (get_pid() == parent_id) { + // for (int i = 0; i < 1000000; ++i) {} + // } + // else { + // printf("Thread %d before kill\n", get_pid()); + // while (1) {} + // } + + exit(); +} diff --git a/Lab6/user/timer_test.c b/Lab6/user/timer_test.c new file mode 100644 index 000000000..1eb4934a0 --- /dev/null +++ b/Lab6/user/timer_test.c @@ -0,0 +1,14 @@ +#include "system_call.h" + +void mix_test() { + fork(); + fork(); + fork(); + + for (int i = 1; i <= 10000000; ++i) { + for (int j = 0; j < 1000000; ++j) {} + printf("Thread: %d, counts to %dM\n", get_pid(), i); + } + + exit(); +} \ No newline at end of file From 936e28093f4d19c3ff8cc0548d33140514ca8231 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 9 May 2022 14:37:35 +0800 Subject: [PATCH 02/25] [Lab6] align kernel stack --- Lab6/lib/task.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index 57e1d5693..2172685be 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -47,9 +47,9 @@ void create_root_thread() { task_struct* thread_create(void *func) { task_struct* new_task = (task_struct*)page_malloc(0); - new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 1; + new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; - new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 1; // kernel stack pointer for the thread + new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread new_task->user_fp = page_malloc(0) + PAGE_SIZE_4K - 16; // user stack frame pointer new_task->state = RUNNING; From 97a0618439f6a867eef979ecb1280bd2e62c630b Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Tue, 10 May 2022 00:21:25 +0800 Subject: [PATCH 03/25] [Lab6] identity paging for kernel --- Lab6/Makefile | 4 +- Lab6/archive/initramfs.cpio | Bin 27648 -> 54784 bytes Lab6/archive/rootfs/fork_test.img | Bin 0 -> 27032 bytes Lab6/include/peripherals/base.h | 3 +- Lab6/include/vm.h | 25 ++++++++++++ Lab6/kernel/boot.S | 7 +++- Lab6/kernel/linker.ld | 4 +- Lab6/lib/vm.c | 61 ++++++++++++++++++++++++++++++ 8 files changed, 98 insertions(+), 6 deletions(-) create mode 100755 Lab6/archive/rootfs/fork_test.img create mode 100644 Lab6/include/vm.h create mode 100644 Lab6/lib/vm.c diff --git a/Lab6/Makefile b/Lab6/Makefile index 4fc21e821..f736daf14 100644 --- a/Lab6/Makefile +++ b/Lab6/Makefile @@ -6,7 +6,7 @@ FLAGS = -O0 -Wall -nostartfiles -ffreestanding -Iinclude -mgeneral-regs-only -g INC = include LIB = lib CPIO = archive/initramfs.cpio -USER_PROG = mbox_test +USER_PROG = fork_test all: kernel8.img bootloader.img $(CPIO) $(USER_PROG).img @@ -29,7 +29,7 @@ rd.o:$(CPIO) aarch64-linux-gnu-ld -r -b binary -o rd.o $(CPIO) qemu-kernel: - qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio -initrd archive/ta_initramfs.cpio + qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd archive/initramfs.cpio qemu-debug: aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index 0623a4777638ab6e66d0398c2aeacbee1dbd7da2..4d4d90f1071139cf8d9bd05e50ca5b211bd1ef59 100644 GIT binary patch delta 9412 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 st-n4;`kd%gF)|CJyPylZV?%#p+Q5uO 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 dkAENUKE8cC`}pf_VLqmMryZ^yFa{{aoI5wrjR literal 0 HcmV?d00001 diff --git a/Lab6/include/peripherals/base.h b/Lab6/include/peripherals/base.h index 9e3099335..7c2b1a472 100644 --- a/Lab6/include/peripherals/base.h +++ b/Lab6/include/peripherals/base.h @@ -4,6 +4,7 @@ // There is a VideoCore/ARM MMU translating physical addresses to bus addresses. // The MMU maps physical address 0x3f000000 to bus address 0x7e000000. -#define MMIO_BASE 0x3F000000 +#define KVA 0xffff000000000000 +#define MMIO_BASE (KVA + 0x3F000000) #endif /*_P_BASE_H */ \ No newline at end of file diff --git a/Lab6/include/vm.h b/Lab6/include/vm.h new file mode 100644 index 000000000..b2da8e00a --- /dev/null +++ b/Lab6/include/vm.h @@ -0,0 +1,25 @@ +#ifndef __VM_H +#define __VM_H + +//number of the most significant bits that must be either all 0s or all 1s +#define TCR_CONFIG_REGION_48bit (((64 - 48) << 0) | ((64 - 48) << 16)) +//smallest block of memory that can be independently mapped in the translation tables +#define TCR_CONFIG_4KB ((0b00 << 14) | (0b10 << 30)) +#define TCR_CONFIG_DEFAULT (TCR_CONFIG_REGION_48bit | TCR_CONFIG_4KB) + +#define MAIR_DEVICE_nGnRnE 0b00000000 //peripheral access +#define MAIR_NORMAL_NOCACHE 0b01000100 //normal RAM access +#define MAIR_IDX_DEVICE_nGnRnE 0 +#define MAIR_IDX_NORMAL_NOCACHE 1 +#define MAIR_CONFIG_DEFAULT ((MAIR_DEVICE_nGnRnE<<(MAIR_IDX_DEVICE_nGnRnE*8))|(MAIR_NORMAL_NOCACHE<<(MAIR_IDX_NORMAL_NOCACHE*8))) + +#define PD_TABLE 0b11 +#define BOOT_PGD_ATTR PD_TABLE +#define PD_BLOCK 0b01 +#define PD_ACCESS (1 << 10) //access flag, a page fault is generated if not set +#define BOOT_PUD_ATTR (PD_ACCESS | (MAIR_IDX_DEVICE_nGnRnE << 2) | PD_BLOCK) //for L1 (ARM peripherals) +#define BOOT_L2D_ATTR (PD_ACCESS | (MAIR_IDX_DEVICE_nGnRnE << 2) | PD_BLOCK) //for L2 (peripherals) +#define BOOT_L2N_ATTR (PD_ACCESS | (MAIR_IDX_NORMAL_NOCACHE << 2) | PD_BLOCK) //for L2 (normal) + + +#endif \ No newline at end of file diff --git a/Lab6/kernel/boot.S b/Lab6/kernel/boot.S index a08951733..fd933bb1a 100644 --- a/Lab6/kernel/boot.S +++ b/Lab6/kernel/boot.S @@ -1,4 +1,5 @@ #include "mm.h" +#include "vm.h" .section ".text.boot" @@ -17,7 +18,10 @@ master: ldr x0, =exception_table // setup interrupt vector base msr vbar_el1, x0 - mov sp, #0x800000 + bl mmu_init + + ldr x1, =__stk_start + mov sp, x1 ldr x1, =__bss_start ldr w2, =__bss_size @@ -40,7 +44,6 @@ from_el2_to_el1: eret // return to EL1 - // save registers to stack .macro save_regs sub sp, sp, 36 * 8 diff --git a/Lab6/kernel/linker.ld b/Lab6/kernel/linker.ld index fe2566016..df30f2423 100644 --- a/Lab6/kernel/linker.ld +++ b/Lab6/kernel/linker.ld @@ -1,6 +1,7 @@ SECTIONS { - . = 0x80000; + . = 0xffff000000000000; + . += 0x80000; .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } @@ -9,6 +10,7 @@ SECTIONS __bss_start = .; .bss : { *(.bss*) } __bss_end = .; + __stk_start = __bss_end + (1<<16); } __bss_size = (__bss_end - __bss_start) >> 3; \ No newline at end of file diff --git a/Lab6/lib/vm.c b/Lab6/lib/vm.c new file mode 100644 index 000000000..9fa989a92 --- /dev/null +++ b/Lab6/lib/vm.c @@ -0,0 +1,61 @@ +#include "vm.h" +#include "mini_uart.h" + +void mmu_init() { + //setup tcr & mair + asm volatile("msr tcr_el1, %0\n"::"r"(TCR_CONFIG_DEFAULT)); + asm volatile("msr mair_el1, %0\n"::"r"(MAIR_CONFIG_DEFAULT)); + + //L0 table init + asm volatile("str %0, [%1]\n"::"r"(0x1000|BOOT_PGD_ATTR),"r"(0)); + + //L1 table init + asm volatile("str %0, [%1]\n"::"r"(0x2000|BOOT_PGD_ATTR),"r"(0x1000)); //finer granularity for different memory type + asm volatile("str %0, [%1]\n"::"r"(0x40000000|BOOT_PUD_ATTR),"r"(0x1000+8)); // 1G block for ARM peripherals + + //L2 table for 0~1G (page frame size: 4MB) + asm volatile("\ + mov x10, %0\n\ + mov x11, %1\n\ + mov x0, #0x2000\n\ + mov x1, #512\n\ + mov x2, #0\n\ +beg1:\n\ + cbz x1, end1\n\ + ldr x3, =0x3F000000\n\ + cmp x2, x3\n\ + blt normalmem\n\ +peripheralsmem:\n\ + orr x3, x2, x10\n\ + b end2\n\ +normalmem:\n\ + orr x3, x2, x11\n\ + b end2\n\ +end2:\n\ + str x3, [x0]\n\ + add x0, x0, #8\n\ + sub x1, x1, #1\n\ + add x2, x2, #0x200000\n\ + b beg1\n\ +end1:\n\ + "::"r"(BOOT_L2D_ATTR),"r"(BOOT_L2N_ATTR)); + + //setting L0 table for lower VA region (0000) + asm volatile("msr ttbr0_el1, %0\n"::"r"(0));//ensure to read correct inst when mmu opened + + //setting L0 table for higher VA region (ffff) + asm volatile("msr ttbr1_el1, %0\n"::"r"(0)); + + //enalble mmu + asm volatile("\ + mrs x2, sctlr_el1\n\ + orr x2 , x2, 1\n\ + msr sctlr_el1, x2\n\ + "::); + + //no longer running on 0x80000 + asm volatile("\ + ldr x0, =0xffff000000000000\n\ + add x30, x30, x0\n\ + "::); +} \ No newline at end of file From 241db2fd00e35a0a6505552be7b7924e97b59b70 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 16 May 2022 23:17:18 +0800 Subject: [PATCH 04/25] [Lab6] dummy test --- Lab6/Makefile | 25 +--- Lab6/archive/initramfs.cpio | Bin 54784 -> 57344 bytes Lab6/archive/rootfs/dummy_test.img | Bin 0 -> 2744 bytes Lab6/include/cpio.h | 11 +- Lab6/include/memory.h | 6 +- Lab6/include/switch.h | 1 - Lab6/include/sysreg.h | 1 - Lab6/include/system_call.h | 4 - Lab6/include/task.h | 1 + Lab6/include/timer.h | 3 +- Lab6/include/vm.h | 12 +- Lab6/kernel/boot.S | 3 - Lab6/kernel/exception.c | 28 ++++- Lab6/lib/allocator.c | 8 +- Lab6/lib/cpio.c | 21 ++-- Lab6/lib/memory.c | 5 +- Lab6/lib/shell.c | 3 + Lab6/lib/system_call.c | 74 ------------ Lab6/lib/task.c | 32 +++-- Lab6/lib/vm.c | 84 ++++++++++--- Lab6/user/dummy_test.c | 6 + Lab6/user/include/system_call.h | 20 ++++ Lab6/user/lib/system_call.c | 181 +++++++++++++++++++++++++++++ Lab6/user/linker.ld | 2 +- 24 files changed, 377 insertions(+), 154 deletions(-) create mode 100755 Lab6/archive/rootfs/dummy_test.img delete mode 100644 Lab6/lib/system_call.c create mode 100644 Lab6/user/dummy_test.c create mode 100644 Lab6/user/include/system_call.h create mode 100644 Lab6/user/lib/system_call.c diff --git a/Lab6/Makefile b/Lab6/Makefile index f736daf14..3c12fcc77 100644 --- a/Lab6/Makefile +++ b/Lab6/Makefile @@ -1,25 +1,21 @@ -.PHONY: all clean qemu-kernel qemu-bootloader test-bootloader on-board load-kernel qemu +.PHONY: all clean qemu-kernel on-board ARMGNU ?= aarch64-linux-gnu -FLAGS = -O0 -Wall -nostartfiles -ffreestanding -Iinclude -mgeneral-regs-only -g -fPIC +FLAGS = -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC INC = include LIB = lib CPIO = archive/initramfs.cpio -USER_PROG = fork_test +USER_PROG = dummy_test -all: kernel8.img bootloader.img $(CPIO) $(USER_PROG).img +all: kernel8.img $(CPIO) $(USER_PROG).img kernel8.img: kernel/*.S kernel/*.c $(LIB)/*.S $(LIB)/*.c rd.o $(ARMGNU)-gcc $(FLAGS) -Tkernel/linker.ld $^ -o kernel8.elf -I$(INC) $(ARMGNU)-objcopy -O binary kernel8.elf kernel8.img -bootloader.img: bootloader/*.S bootloader/*.c $(LIB)/*.S $(LIB)/mini_uart.c $(LIB)/utils.c - $(ARMGNU)-gcc $(FLAGS) -Tbootloader/linker.ld $^ -o bootloader.elf -I$(INC) - $(ARMGNU)-objcopy -O binary bootloader.elf bootloader.img - -$(USER_PROG).img: user/$(USER_PROG).c $(LIB)/*.c $(LIB)/*.S - $(ARMGNU)-gcc $(FLAGS) -Tuser/linker.ld $^ -o $(USER_PROG).elf +$(USER_PROG).img: user/$(USER_PROG).c user/$(LIB)/*.c + $(ARMGNU)-gcc $(FLAGS) -Tuser/linker.ld $^ -o $(USER_PROG).elf -Iuser/$(INC) $(ARMGNU)-objcopy -O binary $(USER_PROG).elf $(USER_PROG).img $(CPIO): $(USER_PROG).img @@ -42,15 +38,6 @@ qemu-debug: # aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S # qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd $(CPIO) -d in_asm -qemu-bootloader: $(CPIO) - qemu-system-aarch64 -M raspi3 -kernel bootloader.img -display none -serial null -serial pty -initrd $(CPIO) - -load-kernel: - sudo ./load_kernel.py - -qemu: - sudo screen /dev/pts/2 115200 - on-board: sudo screen /dev/ttyUSB0 115200 diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index 4d4d90f1071139cf8d9bd05e50ca5b211bd1ef59..5fd0d53678ac6e3a5a8c1aaa10b3ba985730c2d1 100644 GIT binary patch delta 647 zcmZoz!`yIyd4d6(g^`)1sqsWJHzrrdiFHc6AilAo0SGucO+J{VVeAIx0Ev{++}z6e zlGNf7z0BNn1|axby?^CjW`>DC<^%=@xrrVO3{#ANc=HpR9!6;nAnU<-hMf-1;z*cCfYvxykwLGsU=EK&C5zOjqOrN@(Pj=HzHj?h2Kw zxB2n^zY0)@!I4j3F4H_l_j`BwKwJg9E7S-4`~ROCsAtW$|Nk?9>o z_dffq{Wxdl2fiGgHxL7G5T-xY033dlGY~YspC9<@)VQ(zvf7BL#fVHvF)J62 zm1{bb$6WmZOo_}k;8dpD71OSmb_f1#*RVjlu6x;$*I>FngV(8qPGU*%tV50PoJil7 z$&-GqV#I$<+nn>k#jJ;Q9&wTF zD~w+FSgCid^JaX0V9Kq}O!3lL@^$P2I5UPmCOH>=f&t)G6lk#uymcGbK(wh-LzyC< z=ZT^N%$mSqL_(`QTlmO<{?c{PO0=kLh?f9m_BJza8QMeW^EU%p0r~^Y7IjH`jAN_V z1c8E-Jk#enL`D5YLT+YqwU+pT=`-$!)di zgqC9o??84aYT=PzTJ=$b7(r05dZu6ejbp_YUUhBH?sWmx#n|V2+&uth9&g~u9 z0G`AC!XIy51oR=y?!8z+naRA^jb=RLW6kM{wJ+5vOZu#!PvL3Pr%j*Qp74X&(I%bzKuoWLO&htJ*=m8gdauW`<7sIT+|v zp?lYQ_N3kj_D5=;^h)B5NcD~QxWwFY4|}!7CR%*o #include +#include "peripherals/base.h" -#define MEMORY_BASE_ADDR 0x00 -#define MEMORY_END_ADDR 0x8000000 +#define MEMORY_BASE_ADDR (KVA + 0x0) +#define MEMORY_END_ADDR (KVA + 0x8000000 - 4096) #define PAGE_SIZE_4K ((uint64_t)1 << 12) #define FRAME_ARRAY_SIZE ((MEMORY_END_ADDR - MEMORY_BASE_ADDR) / PAGE_SIZE_4K) #define MAX_32K_NUM (FRAME_ARRAY_SIZE / 8) @@ -33,6 +34,7 @@ uint64_t getIndex(uint64_t addr, int size); frame_free_node *get_free_node(); void return_free_node(frame_free_node *node); uint64_t get_allocated_num(); +uint64_t get_free_num(); void clear_4K_page(uint64_t index); void print_frame_array(); diff --git a/Lab6/include/switch.h b/Lab6/include/switch.h index 8bc69578b..c550e1bb6 100644 --- a/Lab6/include/switch.h +++ b/Lab6/include/switch.h @@ -3,7 +3,6 @@ #include "task.h" -void switch_to(task_struct* prev, task_struct *next); task_struct* get_current(); #endif diff --git a/Lab6/include/sysreg.h b/Lab6/include/sysreg.h index d3669ee2d..7e605cf5f 100644 --- a/Lab6/include/sysreg.h +++ b/Lab6/include/sysreg.h @@ -19,5 +19,4 @@ #define ESR_ELx_EC_IABT_LOW 0b100000 #define ESR_ELx_EC_BRK_LOW 0b110000 - #endif \ No newline at end of file diff --git a/Lab6/include/system_call.h b/Lab6/include/system_call.h index 35f7cd198..4e120b234 100644 --- a/Lab6/include/system_call.h +++ b/Lab6/include/system_call.h @@ -12,9 +12,5 @@ int fork(); void exit(); int mbox_call(unsigned char ch, unsigned int *mbox); void kill(int pid); -unsigned int printf(char* fmt,...); - -/* some useful util functions */ -void delay(unsigned int clock); #endif \ No newline at end of file diff --git a/Lab6/include/task.h b/Lab6/include/task.h index 94c96f7c4..e92692954 100644 --- a/Lab6/include/task.h +++ b/Lab6/include/task.h @@ -37,6 +37,7 @@ typedef struct task_struct { int state; unsigned long user_fp; void (*handler)(); + void *page_table; struct task_struct *prev; struct task_struct *next; } task_struct; diff --git a/Lab6/include/timer.h b/Lab6/include/timer.h index e831252af..ae55eba5b 100644 --- a/Lab6/include/timer.h +++ b/Lab6/include/timer.h @@ -2,8 +2,9 @@ #define __TIMER_H #include +#include "peripherals/base.h" -#define CORE0_TIMER_IRQ_CTRL ((volatile unsigned int *)(0x40000040)) +#define CORE0_TIMER_IRQ_CTRL ((volatile unsigned int *)(KVA + 0x40000040)) #define MAX_TIMER_QUEUE_SIZE 10 typedef void (*timer_call_back)(void *); diff --git a/Lab6/include/vm.h b/Lab6/include/vm.h index b2da8e00a..101746f68 100644 --- a/Lab6/include/vm.h +++ b/Lab6/include/vm.h @@ -1,5 +1,7 @@ -#ifndef __VM_H -#define __VM_H +#ifndef _VM_H +#define _VM_H + +#include //number of the most significant bits that must be either all 0s or all 1s #define TCR_CONFIG_REGION_48bit (((64 - 48) << 0) | ((64 - 48) << 16)) @@ -21,5 +23,11 @@ #define BOOT_L2D_ATTR (PD_ACCESS | (MAIR_IDX_DEVICE_nGnRnE << 2) | PD_BLOCK) //for L2 (peripherals) #define BOOT_L2N_ATTR (PD_ACCESS | (MAIR_IDX_NORMAL_NOCACHE << 2) | PD_BLOCK) //for L2 (normal) +#define VA2PA(x) ((unsigned long)(x) & 0xffffffffffff) +#define PA2VA(x) ((unsigned long)(x) | 0xffff000000000000) + +void mmu_init(); +void initPT(void** page_table); +void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa); #endif \ No newline at end of file diff --git a/Lab6/kernel/boot.S b/Lab6/kernel/boot.S index fd933bb1a..2d8c6a53f 100644 --- a/Lab6/kernel/boot.S +++ b/Lab6/kernel/boot.S @@ -1,6 +1,3 @@ -#include "mm.h" -#include "vm.h" - .section ".text.boot" .globl _start diff --git a/Lab6/kernel/exception.c b/Lab6/kernel/exception.c index 7203a07a1..c7ff8c372 100644 --- a/Lab6/kernel/exception.c +++ b/Lab6/kernel/exception.c @@ -68,11 +68,26 @@ void lower_sync_handler(trap_frame *tf) { break; default: uart_printf("[ERROR][lower_sync_handler] unknown svc!\n"); - break; } } - else + else { uart_printf("[ERROR][lower_sync_handler] unknown exception!\n"); + while(1) {} + } + } + else { + unsigned ec = (esr & 0xFC000000) >> 26; + switch(ec) { + case ESR_ELx_EC_DABT_LOW: + uart_printf("[Segfault] Userland data abort exception! pc: %x\n", read_sysreg(elr_el1)); + while(1) {} + case ESR_ELx_EC_IABT_LOW: + uart_printf("[Segfault] Userland instruction abort exception! pc: %x\n", read_sysreg(elr_el1)); + while(1) {} + default: + uart_printf("[ERROR][lower_sync_handler] unknown exception!\n"); + while(1) {} + } } } @@ -81,7 +96,8 @@ void lower_iqr_handler() { } void curr_sync_handler() { - uart_printf("[ERROR][curr_sync_handler]\n"); + unsigned long elr = read_sysreg(elr_el1); + uart_printf("[ERROR][curr_sync_handler] PC: %x\n", elr); error_handler(); } @@ -132,10 +148,10 @@ size_t sys_uartwrite(const char buf[], size_t size) { } int sys_exec(trap_frame *tf, const char *name, char *const argv[]) { - load_program((char*)name); - _argv = (char**)argv; task_struct *cur_task = get_current(); - tf->elr_el1 = (unsigned long)USER_PROGRAM_ADDR; + load_program((char*)name, cur_task->page_table); + _argv = (char**)argv; + tf->elr_el1 = (unsigned long)USER_PROGRAM_VA; tf->sp_el0 = cur_task->user_fp; return 0; } diff --git a/Lab6/lib/allocator.c b/Lab6/lib/allocator.c index 086f67557..d68812edc 100644 --- a/Lab6/lib/allocator.c +++ b/Lab6/lib/allocator.c @@ -170,9 +170,9 @@ void memory_reserve(uint64_t start, uint64_t end) { } void init_reserve() { - memory_reserve(0x0000, 0x1000); // spin tables for multicore boot - memory_reserve(0x80000, 0x800000); // kernel and heap/stack space - // memory_reserve((uint64_t)CPIO_ADDR, (uint64_t)CPIO_ADDR + MAX_INITRAMFS_SIZE); // initramfs - // memory_reserve((uint64_t)USER_PROGRAM_ADDR, (uint64_t)USER_PROGRAM_ADDR + MAX_USER_PROGRAM_SIZE); + memory_reserve(KVA + 0x0000, KVA + 0x1000); // spin tables for multicore boot + reserve_page(0, KVA + 0x2000); // L2 page table for kernel + reserve_page(0, KVA + 0x3000); // L2 page table for kernel + memory_reserve(KVA + 0x80000, KVA + 0x800000); // kernel and heap/stack space debug_printf("[DEBUG][init_reserve] reserves 0X%x 4K pages\n", get_allocated_num()); } \ No newline at end of file diff --git a/Lab6/lib/cpio.c b/Lab6/lib/cpio.c index 26f65ea7e..2accbdd6e 100644 --- a/Lab6/lib/cpio.c +++ b/Lab6/lib/cpio.c @@ -6,6 +6,8 @@ #include "timer.h" #include "sysreg.h" #include +#include "vm.h" +#include "memory.h" void cpio_list() { @@ -70,8 +72,8 @@ void cpio_cat(char *filename) { } } -void load_program(char *name) { - char *target = findFile(name); +void load_program(char *name, void *page_table) { + unsigned char *target = (unsigned char*)findFile(name); if (target) { cpio_header *header = (cpio_header *)target; unsigned long pathname_size = hexToDec(header->namesize); @@ -80,13 +82,16 @@ void load_program(char *name) { align_4(&headerPathname_size); align_4(&file_size); - - unsigned char *addr = (unsigned char *)USER_PROGRAM_ADDR; - char *file_content = target + headerPathname_size; - for (unsigned int i = 0; i < file_size; i++) { - *addr = file_content[i]; - addr++; + + unsigned char *file_content = target + headerPathname_size; + int sz = file_size / 4096 + (file_size % 4096 != 0); + for (int i = 0; i < sz; ++i) { + unsigned char *addr = (unsigned char*)page_malloc(0); + map_pages(page_table, USER_PROGRAM_VA + 4096 * i, 1, (uint64_t)VA2PA(addr)); + for (int j = 0; j < 4096; ++j) + *(addr + j) = file_content[i * 4096 + j]; } + debug_printf("[DEBUG][load_program] load program: %s\n", name); } else { diff --git a/Lab6/lib/memory.c b/Lab6/lib/memory.c index 0c069aff0..c20eaadbe 100644 --- a/Lab6/lib/memory.c +++ b/Lab6/lib/memory.c @@ -52,7 +52,6 @@ uint64_t request_page(int size) { uart_printf("[ERROR][request_page] request_page(%d): illegal argument!\n", size); return 0; } - frame_free_node *free_node = frame_free_lists[size]; uint64_t index; if (free_node) { @@ -227,6 +226,10 @@ uint64_t get_allocated_num() { return cnt; } +uint64_t get_free_num() { + return (MEMORY_END_ADDR - MEMORY_BASE_ADDR) / 4096 - get_allocated_num(); +} + /* clear first 64 bytes */ void clear_4K_page(uint64_t index) { uint64_t *addr = (uint64_t*)GET_PAGE_ADDR(index); diff --git a/Lab6/lib/shell.c b/Lab6/lib/shell.c index 40afdde5b..bd174a56a 100644 --- a/Lab6/lib/shell.c +++ b/Lab6/lib/shell.c @@ -133,6 +133,9 @@ void parse_command() { else if (compare_string(buffer, "test_mbox") == 0) { run_user_program("mbox_test.img", NULL); } + else if (compare_string(buffer, "test_dummy") == 0) { + run_user_program("dummy_test.img", NULL); + } else if (compare_string(buffer, "test_sys") == 0) { run_user_program("syscall.img", NULL); } diff --git a/Lab6/lib/system_call.c b/Lab6/lib/system_call.c deleted file mode 100644 index cfc5ce269..000000000 --- a/Lab6/lib/system_call.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "system_call.h" -#include "switch.h" -#include "task.h" -#include "printf.h" -#include "mini_uart.h" - - -/* helper functions for user programs, not the real system calls */ -int get_pid() { - unsigned long ret; - asm volatile("mov x8, 0\n"); - asm volatile("svc 0\n"); - asm volatile("mov %0, x0\n":"=r"(ret):); - return ret; -} - -size_t uart_read(char buf[], size_t size) { - unsigned long ret; - asm volatile("mov x8, 1\n"); - asm volatile("svc 0\n"); - asm volatile("mov %0, x0\n":"=r"(ret):); - return ret; -} - -size_t uart_write(const char buf[], size_t size) { - unsigned long ret; - asm volatile("mov x8, 2\n"); - asm volatile("svc 0\n"); - asm volatile("mov %0, x0\n":"=r"(ret):); - return ret; -} - -int exec(const char *name, char *const argv[]) { - unsigned long ret; - asm volatile("mov x8, 3\n"); - asm volatile("svc 0\n"); - asm volatile("mov %0, x0\n":"=r"(ret):); - return ret; -} - -int fork() { - unsigned long ret; - asm volatile("mov x8, 4\n"); - asm volatile("svc 0\n"); - asm volatile("mov %0, x0\n":"=r"(ret):); - return ret; -} - -void exit() { - asm volatile("mov x8, 5\n"); - asm volatile("svc 0\n"); -} - -int mbox_call(unsigned char ch, unsigned int *mbox) { - unsigned long ret; - asm volatile("mov x8, 6\n"); - asm volatile("svc 0\n"); - asm volatile("mov %0, x0\n":"=r"(ret):); - return ret; -} - -void kill(int pid) { - asm volatile("mov x8, 7\n"); - asm volatile("svc 0\n"); -} - -unsigned int printf(char* fmt,...) { - char dst[100]; - __builtin_va_list args; - __builtin_va_start(args,fmt); - unsigned int ret=vsprintf(dst,fmt,args); - uart_send_string(dst); - return ret; -} \ No newline at end of file diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index 2172685be..9d246d9e8 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -7,6 +7,7 @@ #include "sysreg.h" #include "cpio.h" #include "timer.h" +#include "vm.h" task_queue run_queue = {"run", NULL, NULL}; @@ -18,17 +19,22 @@ static int task_cnt = 0; unsigned long user_addr; unsigned long user_sp; +unsigned long user_page_table; void run_user_program(const char* name, char *const argv[]) { - load_program((char*)name); - _argv = (char**)argv; - task_struct *task = thread_create(switch_to_user_space); - user_addr = USER_PROGRAM_ADDR; + load_program((char*)name, task->page_table); + _argv = (char**)argv; + user_addr = USER_PROGRAM_VA; + for (int i = 0; i < 4; ++i) + map_pages(task->page_table, 0xffffffffb000 + i * 0x1000, 1, VA2PA(page_malloc(0))); + task->user_fp = 0xfffffffff000 - 16; // update user stack frame pointer user_sp = task->user_fp; + user_page_table = (unsigned long)(task->page_table); add_timer(read_sysreg(cntfrq_el0) >> 5, normal_timer, NULL); // < 0.1s core_timer_enable(); + debug_mode = 0; idle(); } @@ -37,6 +43,7 @@ void switch_to_user_space() { asm volatile("msr spsr_el1, x0 \n"::); asm volatile("msr elr_el1, %0 \n"::"r"(user_addr)); asm volatile("msr sp_el0, %0 \n"::"r"(user_sp)); + debug_printf("[DEBUG][switch_to_user_space]\n"); asm volatile("eret \n"::); } @@ -47,11 +54,10 @@ void create_root_thread() { task_struct* thread_create(void *func) { task_struct* new_task = (task_struct*)page_malloc(0); + initPT(&(new_task->page_table)); new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread - new_task->user_fp = page_malloc(0) + PAGE_SIZE_4K - 16; // user stack frame pointer - new_task->state = RUNNING; new_task->id = task_cnt++; new_task->handler = NULL; @@ -70,9 +76,21 @@ void thread_schedule() { pop_task_from_queue(&run_queue, next_task); push_task_to_queue(&run_queue, next_task); + asm volatile("mov x0, %0 \n"::"r"(next_task->page_table)); + asm volatile("dsb ish \n"); //ensure write has completed + asm volatile("msr ttbr0_el1, x0 \n"); //switch translation based address. + asm volatile("tlbi vmalle1is \n"); //invalidates cached copies of translation table entries from L1 TLBs + asm volatile("dsb ish \n"); //ensure completion of TLB invalidatation + asm volatile("isb \n"); //clear pipeline + task_struct *cur = get_current(); debug_printf("[DEBUG][thread_schedule] switch from thread %d to %d\n", cur->id, next_task->id); - switch_to(cur, next_task); + + asm volatile("\ + mov x0, %0\n\ + mov x1, %1\n\ + bl switch_to\n\ + "::"r"(cur), "r"(next_task)); //avoid stack usage } void idle() { diff --git a/Lab6/lib/vm.c b/Lab6/lib/vm.c index 9fa989a92..3deed0eb2 100644 --- a/Lab6/lib/vm.c +++ b/Lab6/lib/vm.c @@ -1,19 +1,72 @@ #include "vm.h" +#include "memory.h" #include "mini_uart.h" + +/* map va for pa */ +void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa) { + if (!page_table) + uart_printf("[ERROR] null page table!\n"); + + for (int n = 0; n < page_num; ++n) { + unsigned long _va = (unsigned long)(va + n * 4096); + int index[4]; //index of each table + _va >>= 12; + index[3] = _va & 0x1ff; + _va >>= 9; + index[2] = _va & 0x1ff; + _va >>= 9; + index[1] = _va & 0x1ff; + _va >>= 9; + index[0] = _va & 0x1ff; + + unsigned long* table = (unsigned long*)PA2VA(page_table); + for (int i = 0; i <= 2; ++i) { + if (!table[index[i]]) { + initPT((void**)&table[index[i]]); + table[index[i]] |= PD_TABLE; + } + unsigned long entry = table[index[i]]; + entry = entry - (entry & 0xfff); + table = (unsigned long*)PA2VA(entry); //address of the first entry of next level table + } + if (table[index[3]]) + uart_printf("[ERROR] the VA has already been mapped!\n"); + //MAIR_IDX_NORMAL_NOCACHE << 2: index to MAIR (8 * 8bytes register) + table[index[3]] = (pa + n * 4096) | (1<<10) | (1<<6) | MAIR_IDX_NORMAL_NOCACHE << 2 | PD_TABLE; + } +} + +void initPT(void** page_table) { + char* table = (char*)page_malloc(0); + for (int i = 0; i < 4096; ++i) + table[i] = 0; + *page_table = (void*)VA2PA(table); +} + void mmu_init() { //setup tcr & mair asm volatile("msr tcr_el1, %0\n"::"r"(TCR_CONFIG_DEFAULT)); + /* + 1000 0000 0001 0000 0000 0000 0001 0000 + [5:0] the number of the most significant bits that must be all 0s + [21:16] the number of the most significant bits that must be all 1s + [15:14] granule size for user space (00=4KB, 01=16KB, 11=64KB) + [31:30] granule size for kernel space + */ asm volatile("msr mair_el1, %0\n"::"r"(MAIR_CONFIG_DEFAULT)); - - //L0 table init - asm volatile("str %0, [%1]\n"::"r"(0x1000|BOOT_PGD_ATTR),"r"(0)); - + /* + 0100 0100 0000 0000 + [7:0] device memory nGnRnE + [15:8] normal memory without cache + */ + //L1 table init + asm volatile("str %0, [%1]\n"::"r"(0x1000|BOOT_PGD_ATTR),"r"(0)); + //L2 table init asm volatile("str %0, [%1]\n"::"r"(0x2000|BOOT_PGD_ATTR),"r"(0x1000)); //finer granularity for different memory type asm volatile("str %0, [%1]\n"::"r"(0x40000000|BOOT_PUD_ATTR),"r"(0x1000+8)); // 1G block for ARM peripherals - - //L2 table for 0~1G (page frame size: 4MB) + //L3 table for 0~1G asm volatile("\ mov x10, %0\n\ mov x11, %1\n\ @@ -40,18 +93,17 @@ end2:\n\ end1:\n\ "::"r"(BOOT_L2D_ATTR),"r"(BOOT_L2N_ATTR)); - //setting L0 table for lower VA region (0000) - asm volatile("msr ttbr0_el1, %0\n"::"r"(0));//ensure to read correct inst when mmu opened - - //setting L0 table for higher VA region (ffff) + //setting L1 table for lower VA region (0000) + asm volatile("msr ttbr0_el1, %0\n"::"r"(0)); //ensure to read correct inst when mmu opened + //setting L1 table for higher VA region (ffff) asm volatile("msr ttbr1_el1, %0\n"::"r"(0)); + asm volatile("msr ttbr1_el1, %0\n"::"r"(0)); + asm volatile("isb \n"); //forces the changes to be seen before the MMU is enabled - //enalble mmu - asm volatile("\ - mrs x2, sctlr_el1\n\ - orr x2 , x2, 1\n\ - msr sctlr_el1, x2\n\ - "::); + asm volatile("mrs x0, sctlr_el1 \n"); + asm volatile("orr x0 , x0, 1 \n"); //enalble mmu for EL1&0 (bit 0 of sctlr_el1) + asm volatile("msr sctlr_el1, x0 \n"); //forces the change to be seen by the next instruction + asm volatile("isb \n"); //no longer running on 0x80000 asm volatile("\ diff --git a/Lab6/user/dummy_test.c b/Lab6/user/dummy_test.c new file mode 100644 index 000000000..a3bc71460 --- /dev/null +++ b/Lab6/user/dummy_test.c @@ -0,0 +1,6 @@ +#include "system_call.h" + +void dummy_test() { + printf("\nDummy test!\n"); + exit(); +} \ No newline at end of file diff --git a/Lab6/user/include/system_call.h b/Lab6/user/include/system_call.h new file mode 100644 index 000000000..0a72111e0 --- /dev/null +++ b/Lab6/user/include/system_call.h @@ -0,0 +1,20 @@ +#ifndef _SYSTEM_CALL_H +#define _SYSTEM_CALL_H + +#include + +/* helper functions for user programs, not the real system calls */ +int get_pid(); +size_t uart_read(char buf[], size_t size); +size_t uart_write(const char buf[], size_t size); +int exec(const char *name, char *const argv[]); +int fork(); +void exit(); +int mbox_call(unsigned char ch, unsigned int *mbox); +void kill(int pid); + +/* utility functions */ +unsigned int printf(char* fmt,...); +unsigned int vsprintf(char *dst,char* fmt, __builtin_va_list args); + +#endif \ No newline at end of file diff --git a/Lab6/user/lib/system_call.c b/Lab6/user/lib/system_call.c new file mode 100644 index 000000000..d79c5abbe --- /dev/null +++ b/Lab6/user/lib/system_call.c @@ -0,0 +1,181 @@ +#include "system_call.h" + + +/* helper functions for user programs, not the real system calls */ +int get_pid() { + unsigned long ret; + asm volatile("mov x8, 0\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +size_t uart_read(char buf[], size_t size) { + unsigned long ret; + asm volatile("mov x8, 1\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +size_t uart_write(const char buf[], size_t size) { + unsigned long ret; + asm volatile("mov x8, 2\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int exec(const char *name, char *const argv[]) { + unsigned long ret; + asm volatile("mov x8, 3\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int fork() { + unsigned long ret; + asm volatile("mov x8, 4\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +void exit() { + asm volatile("mov x8, 5\n"); + asm volatile("svc 0\n"); +} + +int mbox_call(unsigned char ch, unsigned int *mbox) { + unsigned long ret; + asm volatile("mov x8, 6\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +void kill(int pid) { + asm volatile("mov x8, 7\n"); + asm volatile("svc 0\n"); +} + +/* utility functions */ +unsigned int printf(char* fmt,...) { + char dst[100]; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret = vsprintf(dst,fmt,args); + uart_write(dst, 100); + return ret; +} + +unsigned int vsprintf(char *dst, char* fmt, __builtin_va_list args) { + long int arg; + int len, sign, i; + char *p, *orig=dst, tmpstr[19]; + + // failsafes + if(dst==(void*)0 || fmt==(void*)0) { + return 0; + } + + // main loop + arg = 0; + while(*fmt) { + // argument access + if(*fmt=='%') { + fmt++; + // literal % + if(*fmt=='%') { + goto put; + } + len=0; + // size modifier + while(*fmt>='0' && *fmt<='9') { + len *= 10; + len += *fmt-'0'; + fmt++; + } + // skip long modifier + if(*fmt=='l') { + fmt++; + } + // character + if(*fmt=='c') { + arg = __builtin_va_arg(args, int); + *dst++ = (char)arg; + fmt++; + continue; + } else + // decimal number + if(*fmt=='d') { + arg = __builtin_va_arg(args, int); + // check input + sign=0; + if((int)arg<0) { + arg*=-1; + sign++; + } + if(arg>99999999999999999L) { + arg=99999999999999999L; + } + // convert to string + i=18; + tmpstr[i]=0; + do { + tmpstr[--i]='0'+(arg%10); + arg/=10; + } while(arg!=0 && i>0); + if(sign) { + tmpstr[--i]='-'; + } + // padding, only space + if(len>0 && len<18) { + while(i>18-len) { + tmpstr[--i]=' '; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // hex number + if(*fmt=='x') { + arg = __builtin_va_arg(args, long int); + // convert to string + i=16; + tmpstr[i]=0; + do { + char n=arg & 0xf; + // 0-9 => '0'-'9', 10-15 => 'A'-'F' + tmpstr[--i]=n+(n>9?0x37:0x30); + arg>>=4; + } while(arg!=0 && i>0); + // padding, only leading zeros + if(len>0 && len<=16) { + while(i>16-len) { + tmpstr[--i]='0'; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // string + if(*fmt=='s') { + p = __builtin_va_arg(args, char*); +copystring: if(p==(void*)0) { + p="(null)"; + } + while(*p) { + *dst++ = *p++; + } + } + } else { +put: *dst++ = *fmt; + } + fmt++; + } + *dst=0; + // number of bytes written + return dst-orig; +} \ No newline at end of file diff --git a/Lab6/user/linker.ld b/Lab6/user/linker.ld index 1ba0f30fd..f362f072f 100644 --- a/Lab6/user/linker.ld +++ b/Lab6/user/linker.ld @@ -1,6 +1,6 @@ SECTIONS { - . = 0x900000; + . = 0x80000; .text.boot : { *(.text.boot) } .text : { *(.text) } .rodata : { *(.rodata) } From 10aff71e51df60d3fd2bd7dfa571161373947a20 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Tue, 17 May 2022 19:53:44 +0800 Subject: [PATCH 05/25] [Lab6] update sys call (bugs in fork) --- Lab6/Makefile | 2 +- Lab6/archive/initramfs.cpio | Bin 57344 -> 263680 bytes Lab6/archive/rootfs/exec_test.img | Bin 0 -> 2792 bytes Lab6/archive/rootfs/fork_test.img | Bin 27032 -> 3272 bytes Lab6/archive/rootfs/mbox_test.img | Bin 26856 -> 3040 bytes Lab6/archive/rootfs/timer_test.img | Bin 0 -> 2952 bytes .../{ta_initramfs.cpio => rootfs/vm.img} | Bin 247296 -> 247488 bytes Lab6/include/vm.h | 2 + Lab6/kernel/exception.c | 35 +++++++++++------- Lab6/lib/cpio.c | 2 +- Lab6/lib/memory.c | 6 +++ Lab6/lib/shell.c | 6 +-- Lab6/lib/task.c | 6 +-- Lab6/lib/timer.c | 1 + Lab6/lib/vm.c | 32 +++++++++++++++- Lab6/user/exec_test.c | 2 +- Lab6/user/include/mail_box.h | 23 ++++++++++++ Lab6/user/include/system_call.h | 1 + Lab6/user/lib/system_call.c | 6 +++ Lab6/user/linker.ld | 2 +- Lab6/user/mbox_test.c | 3 +- Lab6/user/timer_test.c | 3 +- 22 files changed, 103 insertions(+), 29 deletions(-) create mode 100755 Lab6/archive/rootfs/exec_test.img create mode 100755 Lab6/archive/rootfs/timer_test.img rename Lab6/archive/{ta_initramfs.cpio => rootfs/vm.img} (98%) create mode 100644 Lab6/user/include/mail_box.h diff --git a/Lab6/Makefile b/Lab6/Makefile index 3c12fcc77..6ac0e3d50 100644 --- a/Lab6/Makefile +++ b/Lab6/Makefile @@ -6,7 +6,7 @@ FLAGS = -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC INC = include LIB = lib CPIO = archive/initramfs.cpio -USER_PROG = dummy_test +USER_PROG = timer_test all: kernel8.img $(CPIO) $(USER_PROG).img diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index 5fd0d53678ac6e3a5a8c1aaa10b3ba985730c2d1..1af1931fca5128d28f0db76f829aca08bc2d8b89 100644 GIT binary patch literal 263680 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 literal 0 HcmV?d00001 diff --git a/Lab6/archive/rootfs/fork_test.img b/Lab6/archive/rootfs/fork_test.img index 709f3edaa76bee8c1800bcaa988ebb4f7b8c7a85..946319aff849a43e24db3eac785e4070941d9106 100755 GIT binary patch delta 761 zcmZvZKWI}?6vofXv$fa|BSws|HCL@78H|w>idJ|<)Ic0c$Rb?=3eAwB6$c^3M5@rC zL#{Vq{Z|5ZP>>?Dh)=4BI%E)9O&yh|I2Nb2*5UQ|-J~FuTsZvh`Of#w{X!;cMs-ib z&A)!?nj}+1u28S4c)ep3@}n?+evEqDzjzh+6i)q=#ez+Hq7^m|xud`x!oY+t>?p*_kKXd2Gm=-s0zJ=DW_kWxM%LGf5-X zvbCPTI;=)p@2Lq9S7Ya%s7kuSbADC5Nrwsn%zIJSe=`e^`h5PgJ|w_3jVeMv($Ga> zL(icvHPLTDuQbsgLVy0>em}HXq5{3dKsWm6N2{pWCQBUXAE0-DI^-FI(f2h}6?(a$ zmpqRSOzywLEOC6_tg_}HIRr!vt%dZbfC zU-=fK@uD^~9eiizMkiG)E7U?p6nfT~y|7O$Gxy`Zyuy4946HJbgT3GscnO>X$H7JL z8Mp+_fyB%|!5~P;ehe&w{a^-ha^T83U)HItcKpRSIzCQ-dNzdChCrgdO+6UwzJq+- P*`%_vyUZ%2Shn*o9)=BZ literal 27032 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 dkAENUKE8cC`}pf_VLqmMryZ^yFa{{aoI5wrjR diff --git a/Lab6/archive/rootfs/mbox_test.img b/Lab6/archive/rootfs/mbox_test.img index faf7eb29ccc3f099d6aa6165e12df99af40e7e47..9578fcbc53ea29f4e179230a66555c601193d55b 100755 GIT binary patch delta 755 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 E00#f6LI3~& delta 1173 zcmbVMUr19?82`@Q=2n{9?%kF&b9aRKkMztf-RPlfYnWs&YeZP&{6i&LV1^L}-cm@Y zV2300YCUBjGxi{RkqJE~{RQcvYZ64!lOaUdI`_|P1{HKK=YIEm-}n1{KfdqWo4aS1 z@7l+4E4u?2<5)A+EDi-?N7)|ZU@W}NV%*%)e6TeZG5lJPJpwprycTRBQm~9#zZ&6J zJsfL|;Bn>;|G8kGs9-P}3hRRYT`*cGIC6cYuV-keap2Mg064>etBbAmlZ&&853-;T z{?wDn7_!JE^q58Ud4yKhRDGO$BDov36gxEd}5hX1}e6=vV^gW-DkQ^5?ey*KE zAv$30H_w!iDf--8$%_I3kh1<8;AQpZ0Sh#5_V7u8hyZt#ZunMk*I24JQOLAgx{${} z9R?Vj*vKce6j7iHB`q$j6RM%L^?X7ulj9u}St~e6pk8ZLIB6wc0H)#E&3O1n{=NoP ztmGr}`9#y}&9S9NIaBwW&9S-JO%pJ2Oq6INSLm?SbzZU&#l$_HV?ZCk@B;w7cG5;( zF@jM5*ZV#lghacR`_RZm2okkwt9&TC>TAnt#FCwyX6?FIjFav3vvp7HjGY8o`q|=; zqEk*8luL{fMz zT`T4?b$page_table)); + initPT(&(cur_task->page_table)); load_program((char*)name, cur_task->page_table); + for (int i = 0; i < 4; ++i) + map_pages(cur_task->page_table, 0xffffffffb000 + i * 0x1000, 1, VA2PA(page_malloc(0))); _argv = (char**)argv; tf->elr_el1 = (unsigned long)USER_PROGRAM_VA; tf->sp_el0 = cur_task->user_fp; @@ -160,7 +165,7 @@ void sys_fork(trap_frame *tf) { task_struct *parent = get_current(); task_struct *child = thread_create(NULL); int child_id = child->id; - unsigned long user_fp = child->user_fp; + //unsigned long user_fp = child->user_fp; task_struct *prev = child->prev; task_struct *next = child->next; @@ -174,36 +179,38 @@ void sys_fork(trap_frame *tf) { dst++; } + initPT(&(child->page_table)); + // dupPT(parent->page_table, child->page_table, 0); + /* set up the correct value for registers */ parent->context.sp = (unsigned long)tf; if ((unsigned long)child > (unsigned long)parent) child->context.sp = parent->context.sp + ((unsigned long)child - (unsigned long)parent); else child->context.sp = parent->context.sp - ((unsigned long)parent - (unsigned long)child); - int parent_ustack_size = (parent->user_fp) - (tf->sp_el0) + 1; - child->context.fp = (unsigned long)child + PAGE_SIZE_4K - 1; + //int parent_ustack_size = (parent->user_fp) - (tf->sp_el0) + 1; + child->context.fp = (unsigned long)child + PAGE_SIZE_4K - 16; child->context.lr = (unsigned long)child_return_from_fork; child->id = child_id; - child->user_fp = user_fp; + //child->user_fp = user_fp; child->prev = prev; child->next = next; trap_frame *child_tf = (trap_frame*)(child->context.sp); - child_tf->sp_el0 = (child->user_fp) - parent_ustack_size + 1; + //child_tf->sp_el0 = (child->user_fp) - parent_ustack_size + 1; child_tf->regs[0] = 0; child_tf->regs[29] = child->context.fp; tf->regs[0] = child->id; - child->handler = parent->handler; /* copy the user stack of parent to child */ - char *src_stack = (char*)(tf->sp_el0); - char *dst_stack = (char*)(child_tf->sp_el0); + // char *src_stack = (char*)(tf->sp_el0); + // char *dst_stack = (char*)(child_tf->sp_el0); - while(parent_ustack_size--) { - *dst_stack = *src_stack; - src_stack++; - dst_stack++; - } + // while(parent_ustack_size--) { + // *dst_stack = *src_stack; + // src_stack++; + // dst_stack++; + // } debug_printf("[DEBUG][sys_fork] parent: %d, child: %d\n", parent->id, child->id); } diff --git a/Lab6/lib/cpio.c b/Lab6/lib/cpio.c index 2accbdd6e..12723bb9a 100644 --- a/Lab6/lib/cpio.c +++ b/Lab6/lib/cpio.c @@ -27,7 +27,7 @@ void cpio_list() { align_4(&headerPathname_size); // The pathname is followed by NUL bytes so that the total size of the fixed header plus pathname is a multiple of four. align_4(&file_size); // Likewise, the file data is padded to a multiple of four bytes. uart_send_string(addr + sizeof(cpio_header)); // print the fine name - uart_send_string("\r\n"); + uart_printf(" %d\n", file_size); addr += (headerPathname_size + file_size); } } diff --git a/Lab6/lib/memory.c b/Lab6/lib/memory.c index c20eaadbe..15f7d0a99 100644 --- a/Lab6/lib/memory.c +++ b/Lab6/lib/memory.c @@ -48,10 +48,16 @@ uint64_t page_malloc(int sz) { /* currently support 4K page request only, the value of frame array may be wrong otherwise */ uint64_t request_page(int size) { + if (!get_free_num()) { + uart_printf("[ERROR][request_page] run out of memory!\n"); + while (1) {} + } + if (size < 0 || size > 3) { uart_printf("[ERROR][request_page] request_page(%d): illegal argument!\n", size); return 0; } + frame_free_node *free_node = frame_free_lists[size]; uint64_t index; if (free_node) { diff --git a/Lab6/lib/shell.c b/Lab6/lib/shell.c index bd174a56a..91df99a73 100644 --- a/Lab6/lib/shell.c +++ b/Lab6/lib/shell.c @@ -136,8 +136,8 @@ void parse_command() { else if (compare_string(buffer, "test_dummy") == 0) { run_user_program("dummy_test.img", NULL); } - else if (compare_string(buffer, "test_sys") == 0) { - run_user_program("syscall.img", NULL); + else if (compare_string(buffer, "test_vm") == 0) { + run_user_program("vm.img", NULL); } else if (compare_string(buffer, "help") == 0) { uart_send_string("help : print this help menu\n"); @@ -147,7 +147,7 @@ void parse_command() { uart_send_string("ls : print files in rootfs\n"); uart_send_string("cat : print file content\n"); uart_send_string("async_uart : test async uart\n"); - uart_send_string("test_timer : test timer multiplexing\n"); + uart_send_string("test_timer_lab3 : test timer multiplexing\n"); uart_send_string("test_page : test buddy system\n"); uart_send_string("test_dyn : test dynamic allocator\n"); uart_send_string("test_fork : test user program\n"); diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index 9d246d9e8..0b43fb3d2 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -29,12 +29,11 @@ void run_user_program(const char* name, char *const argv[]) { user_addr = USER_PROGRAM_VA; for (int i = 0; i < 4; ++i) map_pages(task->page_table, 0xffffffffb000 + i * 0x1000, 1, VA2PA(page_malloc(0))); - task->user_fp = 0xfffffffff000 - 16; // update user stack frame pointer user_sp = task->user_fp; user_page_table = (unsigned long)(task->page_table); add_timer(read_sysreg(cntfrq_el0) >> 5, normal_timer, NULL); // < 0.1s - core_timer_enable(); - debug_mode = 0; + // core_timer_enable(); + // debug_mode = 0; idle(); } @@ -58,6 +57,7 @@ task_struct* thread_create(void *func) { new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread + new_task->user_fp = 0xfffffffff000 - 16; new_task->state = RUNNING; new_task->id = task_cnt++; new_task->handler = NULL; diff --git a/Lab6/lib/timer.c b/Lab6/lib/timer.c index dc3181163..119188355 100644 --- a/Lab6/lib/timer.c +++ b/Lab6/lib/timer.c @@ -63,6 +63,7 @@ void pop_timer() { timer_list = timer_list->next; //core_timer_enable(); timer->call_back(timer->args); + kfree((void*)timer); if (!timer_list) core_timer_disable(); else diff --git a/Lab6/lib/vm.c b/Lab6/lib/vm.c index 3deed0eb2..2ed3f8db0 100644 --- a/Lab6/lib/vm.c +++ b/Lab6/lib/vm.c @@ -6,7 +6,7 @@ /* map va for pa */ void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa) { if (!page_table) - uart_printf("[ERROR] null page table!\n"); + uart_printf("[ERROR][map_pages] null page table!\n"); for (int n = 0; n < page_num; ++n) { unsigned long _va = (unsigned long)(va + n * 4096); @@ -31,12 +31,38 @@ void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa) { table = (unsigned long*)PA2VA(entry); //address of the first entry of next level table } if (table[index[3]]) - uart_printf("[ERROR] the VA has already been mapped!\n"); + uart_printf("[ERROR][map_pages] the VA has already been mapped!\n"); //MAIR_IDX_NORMAL_NOCACHE << 2: index to MAIR (8 * 8bytes register) table[index[3]] = (pa + n * 4096) | (1<<10) | (1<<6) | MAIR_IDX_NORMAL_NOCACHE << 2 | PD_TABLE; } } +void dupPT(void* page_table_src, void* page_table_dst, int level) { + if (page_table_src == 0 || page_table_dst == 0) + uart_printf("[ERROR][dupPT] invalid table!"); + + //frame + if (level == 4) { + char* src = (char*)PA2VA(page_table_src); + char* dst = (char*)PA2VA(page_table_dst); + for (int i = 0; i < 4096; ++i) + dst[i] = src[i]; + return; + } + + //table + unsigned long* table_src = (unsigned long*)PA2VA(page_table_src); + unsigned long* table_dst = (unsigned long*)PA2VA(page_table_dst); + for (int i = 0; i < 512; ++i) { + if (table_src[i] != 0) { + initPT((void**)&table_dst[i]); + dupPT((void*)(table_src[i] & 0xfffffffff000), (void*)(table_dst[i]), level + 1); + unsigned long tmp = table_src[i] & 0xfff; + table_dst[i] |= tmp; + } + } +} + void initPT(void** page_table) { char* table = (char*)page_malloc(0); for (int i = 0; i < 4096; ++i) @@ -44,6 +70,8 @@ void initPT(void** page_table) { *page_table = (void*)VA2PA(table); } +void freePT(void** page_table) {} + void mmu_init() { //setup tcr & mair asm volatile("msr tcr_el1, %0\n"::"r"(TCR_CONFIG_DEFAULT)); diff --git a/Lab6/user/exec_test.c b/Lab6/user/exec_test.c index ded309e8c..72e407abc 100644 --- a/Lab6/user/exec_test.c +++ b/Lab6/user/exec_test.c @@ -2,5 +2,5 @@ void exec_test() { printf("\nExec Test, pid %d\n", get_pid()); - exec("fork_test.img", NULL); + exec("dummy_test.img", NULL); } \ No newline at end of file diff --git a/Lab6/user/include/mail_box.h b/Lab6/user/include/mail_box.h new file mode 100644 index 000000000..6370ebb4f --- /dev/null +++ b/Lab6/user/include/mail_box.h @@ -0,0 +1,23 @@ +#ifndef _MAIL_BOX_H +#define _MAIL_BOX_H + +#define MBOX_REQUEST 0 + +/* channels */ +#define MBOX_CH_POWER 0 +#define MBOX_CH_FB 1 +#define MBOX_CH_VUART 2 +#define MBOX_CH_VCHIQ 3 +#define MBOX_CH_LEDS 4 +#define MBOX_CH_BTNS 5 +#define MBOX_CH_TOUCH 6 +#define MBOX_CH_COUNT 7 +#define MBOX_CH_PROP 8 + +/* tags */ +#define MBOX_TAG_GETSERIAL 0x10004 +#define MBOX_TAG_LAST 0 +#define GET_BOARD_REVISION 0x00010002 +#define GET_ARM_EMEORY 0x00010005 + +#endif \ No newline at end of file diff --git a/Lab6/user/include/system_call.h b/Lab6/user/include/system_call.h index 0a72111e0..1175e7e2e 100644 --- a/Lab6/user/include/system_call.h +++ b/Lab6/user/include/system_call.h @@ -16,5 +16,6 @@ void kill(int pid); /* utility functions */ unsigned int printf(char* fmt,...); unsigned int vsprintf(char *dst,char* fmt, __builtin_va_list args); +void delay(unsigned int clock); #endif \ No newline at end of file diff --git a/Lab6/user/lib/system_call.c b/Lab6/user/lib/system_call.c index d79c5abbe..8b72e99ff 100644 --- a/Lab6/user/lib/system_call.c +++ b/Lab6/user/lib/system_call.c @@ -178,4 +178,10 @@ put: *dst++ = *fmt; *dst=0; // number of bytes written return dst-orig; +} + +void delay(unsigned int clock) { + while (clock--) { + asm volatile("nop"); + } } \ No newline at end of file diff --git a/Lab6/user/linker.ld b/Lab6/user/linker.ld index f362f072f..7bb1dde69 100644 --- a/Lab6/user/linker.ld +++ b/Lab6/user/linker.ld @@ -5,7 +5,7 @@ SECTIONS .text : { *(.text) } .rodata : { *(.rodata) } .data : { *(.data) } - . = ALIGN(0x8); + . = ALIGN(0x10); bss_begin = .; .bss : { *(.bss*) } bss_end = .; diff --git a/Lab6/user/mbox_test.c b/Lab6/user/mbox_test.c index 8798c6fff..efc50acc1 100644 --- a/Lab6/user/mbox_test.c +++ b/Lab6/user/mbox_test.c @@ -1,7 +1,6 @@ #include "system_call.h" #include "mail_box.h" -volatile unsigned int __attribute__((aligned(16))) my_mailbox[36]; void mbox_test() { /* test mbox_call */ @@ -21,7 +20,7 @@ void mbox_test() { // else // printf("fail\n"); - + volatile unsigned int __attribute__((aligned(16))) my_mailbox[36]; my_mailbox[0] = 7 * 4; // buffer size in bytes my_mailbox[1] = MBOX_REQUEST; // tags begin diff --git a/Lab6/user/timer_test.c b/Lab6/user/timer_test.c index 1eb4934a0..644325497 100644 --- a/Lab6/user/timer_test.c +++ b/Lab6/user/timer_test.c @@ -1,6 +1,7 @@ #include "system_call.h" -void mix_test() { +void timer_test() { + //printf("\nTimer Test\n"); fork(); fork(); fork(); From 0ea4503fb5da6374323152e20fb53988132516ef Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Wed, 18 May 2022 12:15:53 +0800 Subject: [PATCH 06/25] [Lab6] pass mbox test --- Lab6/Makefile | 2 +- Lab6/archive/initramfs.cpio | Bin 263680 -> 263680 bytes Lab6/archive/rootfs/mbox_test.img | Bin 3040 -> 3008 bytes Lab6/include/mail_box.h | 2 +- Lab6/kernel/exception.c | 17 ++++++++++++++--- Lab6/lib/mail_box.c | 15 +++++++++------ Lab6/lib/task.c | 4 ++-- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Lab6/Makefile b/Lab6/Makefile index 6ac0e3d50..188e91814 100644 --- a/Lab6/Makefile +++ b/Lab6/Makefile @@ -6,7 +6,7 @@ FLAGS = -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC INC = include LIB = lib CPIO = archive/initramfs.cpio -USER_PROG = timer_test +USER_PROG = mbox_test all: kernel8.img $(CPIO) $(USER_PROG).img diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index 1af1931fca5128d28f0db76f829aca08bc2d8b89..4a788af369e9bca943db66e16a6c96fc9f6e970a 100644 GIT binary patch delta 443 zcmZwBJxD@P6ae6Jy*JS;krXW|dPRvug@ss=L*~*TR8U(kH8doI)EXJ+=AgXfB9s+0 zG`KXF5Dm6PP&7z1R6|2FwB_@?p}d`EjU71mreVg(r+mG z>6%I=d0wUc794mRF%#mqDh;!;lv(B78V&H6M!VXeHxmZfV*m~SNJG50bg0ocqe1H9 z>!0*CyU1+WD2om(szRi31%lQia^T3@S6-g2dX1rf4Pch}ah19{u5s0)_k&hx7I*Y< z6!TFYcDg#=|C#RNRFfl47Xf*}Y&U$Vd_q#y9Dwx0k1 delta 470 zcmZwBy-Pw-6aesZy)StviKJ)}kw%3>g@(O^9I}uc8XOvG2-+%;B5DdF9i#>a#o`i} z7#Q>q^npc0Ee!=lO+n%m1Pu*7pG0*#w;DTe?vL{YH=Z)bQ|5G^G@y8c2_>nJq@p`e z=!`~uEU(cHqi@9D?-4N^VmBHclbo*19BZx9fCV58)2_?}z-DCxG63N_HeRQ$rnoCJ zhD`~;3StS`kJjt-Sx*XVp3^ev+zLrcoj#58eVjwkR3JOnyk)lhWD+%oxC>w&v)wAS zJI-;{E&4%|GmJZ89L2oN_So!>%0JT_PT#UqHoL8kQ!`c~#N8EURb#y>wGoLWh-4=+ zn^I{TiLq6cwvcYNtHmi11r_&A*rxMjdmT~Q>jt+4S(Igh5!Hn diff --git a/Lab6/archive/rootfs/mbox_test.img b/Lab6/archive/rootfs/mbox_test.img index 9578fcbc53ea29f4e179230a66555c601193d55b..289a5aca03fc08e24717ff09a743fa3cd7196a5a 100755 GIT binary patch delta 385 zcmaDLen4FCZ}qm7f0-F3GB7YqU^t*KF?ph(&BRn0AqK^XJ`4;~SQr>Yz)}s08z(iN4spg4lNC9I zS#yB=8$gyg;|nl<4v_z2av-O;D8rBc{{?_N5CG{s0mOemY9>$MWRc_n%F2MG9Qg!X zffj(+KY&))L#+J!vIi(p*Ccosg7TJ34!kb6eidkl|Y59k8o)S5@eWTjsL~e!2 z5nLMeYrg*fAMo%0f17Xr|Ca#i7$DsPq+5XW5+J<>NbdpCSAg^tApHeMzX8%LKyNbq z|NmbHNJ{`|4F*y|M?(ST5xfICHIJTUnnw>$vj=AUH% delta 407 zcmX>g{y<#tZ}qm7f0-F3GB7YqU{Fw;m^o33Gf2+k;zSQcp$5f? zK0qNB1_lwZat5W1)z8=%7feoKzsIOL*^;AJ)#UsC|0{r!432yY80U)26VAAImk-1T z0+1#fAl@Qpage_table)); - // dupPT(parent->page_table, child->page_table, 0); + dupPT(parent->page_table, child->page_table, 0); /* set up the correct value for registers */ parent->context.sp = (unsigned long)tf; @@ -225,7 +225,18 @@ void sys_exit() { int sys_mbox_call(unsigned char ch, volatile unsigned int *mbox) { debug_printf("[DEBUG][sys_mbox_call]"); - return mailbox_call(ch, mbox); + if (((uint64_t)mbox & 0xFFFF000000000000) == 0) { //lower va + //uart_printf("va: %x\n", mbox); + asm volatile("mov x0, %0 \n"::"r"(mbox)); + asm volatile("at s1e0r, x0 \n"); + uint64_t frame_addr = (uint64_t)read_sysreg(par_el1) & (0xFFFFFFFFF << 12); + uint64_t pa = frame_addr | ((uint64_t)mbox & 0xFFF); + //uart_printf("frame_addr: %x, pa: %x\n", frame_addr, pa); + if ((read_sysreg(par_el1) & 0x1) == 1) + uart_printf("[ERROR][sys_mbox_call] va translation fail!\n"); + return mailbox_call(ch, (volatile unsigned int*)pa, mbox); + } + return mailbox_call(ch, (volatile unsigned int*)mbox, mbox); } void sys_kill(int pid) { diff --git a/Lab6/lib/mail_box.c b/Lab6/lib/mail_box.c index 560c91eaf..27e918ec0 100644 --- a/Lab6/lib/mail_box.c +++ b/Lab6/lib/mail_box.c @@ -9,21 +9,24 @@ volatile unsigned int __attribute__((aligned(16))) mailbox[36]; /** * Make a mailbox call. Returns 0 on failure, non-zero on success */ -int mailbox_call(unsigned char ch, volatile unsigned int *mailbox) +int mailbox_call(unsigned char ch, volatile unsigned int *mailbox, volatile unsigned int *mailbox_va) { volatile unsigned int r = (((volatile unsigned int)((volatile unsigned long)mailbox)&~0xF) | (ch&0xF)); /* wait until we can write to the mailbox */ do{asm volatile("nop");}while(*MBOX_STATUS & MBOX_FULL); /* write the address of our message to the mailbox with channel identifier */ + *MBOX_WRITE = r; + /* now wait for the response */ while(1) { /* is there a response? */ do{asm volatile("nop");}while(*MBOX_STATUS & MBOX_EMPTY); /* is it a response to our message? */ - if(r == *MBOX_READ) + if(r == *MBOX_READ) { /* is it a valid successful response? */ - return mailbox[1]==MBOX_RESPONSE; + return mailbox_va[1]==MBOX_RESPONSE; + } } return 0; } @@ -65,7 +68,7 @@ void get_board_revision() { mailbox[5] = 0; // value buffer // tags end mailbox[6] = MBOX_TAG_LAST; - if (mailbox_call(MBOX_CH_PROP, mailbox)) + if (mailbox_call(MBOX_CH_PROP, mailbox, mailbox)) uart_printf("board revision number: 0x%x\n", mailbox[5]); else uart_printf("can not get board revision number!\n"); @@ -82,7 +85,7 @@ void get_arm_memory() { mailbox[6] = 0; // value buffer // tags end mailbox[7] = MBOX_TAG_LAST; - if (mailbox_call(MBOX_CH_PROP, mailbox)) { + if (mailbox_call(MBOX_CH_PROP, mailbox, mailbox)) { uart_printf("base address: %x\n", mailbox[5]); uart_printf("memory size: %x\n", mailbox[6]); } @@ -99,7 +102,7 @@ void get_serial_number() { mailbox[5] = 0; // clear output buffer mailbox[6] = 0; mailbox[7] = MBOX_TAG_LAST; - if(mailbox_call(MBOX_CH_PROP, mailbox)) + if(mailbox_call(MBOX_CH_PROP, mailbox, mailbox)) uart_printf("serial number is: %x%x\n", mailbox[5], mailbox[6]); else uart_printf("can not get serial number!\n"); diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index 0b43fb3d2..5a9c18c5b 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -32,8 +32,8 @@ void run_user_program(const char* name, char *const argv[]) { user_sp = task->user_fp; user_page_table = (unsigned long)(task->page_table); add_timer(read_sysreg(cntfrq_el0) >> 5, normal_timer, NULL); // < 0.1s - // core_timer_enable(); - // debug_mode = 0; + core_timer_enable(); + debug_mode = 0; idle(); } From 4f0305577b784e57c823e348fda7d4d5e4e358a5 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Wed, 18 May 2022 23:06:11 +0800 Subject: [PATCH 07/25] [Lab6] vc identity mapping --- Lab6/Makefile | 2 +- Lab6/archive/initramfs.cpio | Bin 263680 -> 263680 bytes Lab6/archive/rootfs/timer_test.img | Bin 2952 -> 2944 bytes Lab6/include/vm.h | 1 + Lab6/kernel/exception.c | 4 ++-- Lab6/lib/task.c | 5 ++++- Lab6/lib/vm.c | 18 +++++++++++++++--- Lab6/user/timer_test.c | 6 +++--- 8 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Lab6/Makefile b/Lab6/Makefile index 188e91814..6ac0e3d50 100644 --- a/Lab6/Makefile +++ b/Lab6/Makefile @@ -6,7 +6,7 @@ FLAGS = -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC INC = include LIB = lib CPIO = archive/initramfs.cpio -USER_PROG = mbox_test +USER_PROG = timer_test all: kernel8.img $(CPIO) $(USER_PROG).img diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index 4a788af369e9bca943db66e16a6c96fc9f6e970a..81240c08ae7ee5f68c9977234e9068e691a19de3 100644 GIT binary patch delta 191 zcmZqZ5oqWUm|)0i;^gFP+Gy5l#@K4cwAG9`{xze?#5!eOptz%{0SGu*7))GeF#X$W zW~u2CZ>@!_3akq@XxG|3CBD=@ws@T?D6m|Np;(0SFxV6y~zbV@}xK`-Rz^ zQRJ(Lkj=F{^Zu1>{k=EpV9laKAFTdQHsn^A&hd>|gYnID!*9&#ia$6xKw24C!6XC2 c2PmHn%D*xBBG-1thV6ylnfv)BD{yfD0HF*%=>Px# delta 210 zcmZqZ5oqWUm|)0i>}+mg*=W{k#@K4cwAG9`{xze~#5!djV{93Bh|Q`~`gy1*M|PsRh=quwyHvokp;PG9|;dFJE?A|}%fzA(E8_I&^Ue*yy# zIPxjXWtqpEw7vBUvpb`R?03ZvS_v`v>qCP*^cdbbHe6U z4tGY8uOdP=*Y?c&SGM){-l&5$iw=FT`afBaTVWEH2IHH_nq29MKR7u++89{DBm=_- WD4z|=zcG0u*LLOxE{@3$Ib{I@Gbrr< delta 139 zcmZn=?+_RGTfJ}PUuK4h9t;dq+<|x^hbQBKjX~_}j1HTl*o7Dcd%pkwKY;-V9QhRH zvdm*n+FZ-w&L|@LUGalfLQMYp&|nWehIdyNHf=dEnUPyz@()f8#wU{%xzZIGxHv%i c7+Aq11H%ta2%inge=vC^*LKE^$%)+Z03zlmOaK4? diff --git a/Lab6/include/vm.h b/Lab6/include/vm.h index 29e06d2dc..f5fa4c23e 100644 --- a/Lab6/include/vm.h +++ b/Lab6/include/vm.h @@ -31,5 +31,6 @@ void initPT(void** page_table); void freePT(void** page_table); void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa); void dupPT(void* page_table_src, void* page_table_dst, int level); +void vc_identity_mapping(void* page_table_src); #endif \ No newline at end of file diff --git a/Lab6/kernel/exception.c b/Lab6/kernel/exception.c index 90804474a..bcb05877e 100644 --- a/Lab6/kernel/exception.c +++ b/Lab6/kernel/exception.c @@ -168,7 +168,7 @@ void sys_fork(trap_frame *tf) { //unsigned long user_fp = child->user_fp; task_struct *prev = child->prev; task_struct *next = child->next; - + /* copy the task context & kernel stack (including trap frame) of parent to child */ char* src = (char*)parent; char* dst = (char*)child; @@ -181,7 +181,7 @@ void sys_fork(trap_frame *tf) { initPT(&(child->page_table)); dupPT(parent->page_table, child->page_table, 0); - + /* set up the correct value for registers */ parent->context.sp = (unsigned long)tf; if ((unsigned long)child > (unsigned long)parent) diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index 5a9c18c5b..69c1cc663 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -54,6 +54,9 @@ void create_root_thread() { task_struct* thread_create(void *func) { task_struct* new_task = (task_struct*)page_malloc(0); initPT(&(new_task->page_table)); + vc_identity_mapping(new_task->page_table); //for video program + // for (uint64_t va = 0x00003c000000000000; va <= 0x00003f000000000000 - 4096; va += 4096) + // map_pages(new_task->page_table, va, 1, va); new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread @@ -90,7 +93,7 @@ void thread_schedule() { mov x0, %0\n\ mov x1, %1\n\ bl switch_to\n\ - "::"r"(cur), "r"(next_task)); //avoid stack usage + "::"r"(cur), "r"(next_task)); } void idle() { diff --git a/Lab6/lib/vm.c b/Lab6/lib/vm.c index 2ed3f8db0..71352229d 100644 --- a/Lab6/lib/vm.c +++ b/Lab6/lib/vm.c @@ -31,7 +31,7 @@ void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa) { table = (unsigned long*)PA2VA(entry); //address of the first entry of next level table } if (table[index[3]]) - uart_printf("[ERROR][map_pages] the VA has already been mapped!\n"); + uart_printf("[ERROR][map_pages] the VA: %x has already been mapped!\n", va); //MAIR_IDX_NORMAL_NOCACHE << 2: index to MAIR (8 * 8bytes register) table[index[3]] = (pa + n * 4096) | (1<<10) | (1<<6) | MAIR_IDX_NORMAL_NOCACHE << 2 | PD_TABLE; } @@ -130,12 +130,24 @@ end1:\n\ asm volatile("mrs x0, sctlr_el1 \n"); asm volatile("orr x0 , x0, 1 \n"); //enalble mmu for EL1&0 (bit 0 of sctlr_el1) - asm volatile("msr sctlr_el1, x0 \n"); //forces the change to be seen by the next instruction - asm volatile("isb \n"); + asm volatile("msr sctlr_el1, x0 \n"); + asm volatile("isb \n"); //forces the change to be seen by the next instruction //no longer running on 0x80000 asm volatile("\ ldr x0, =0xffff000000000000\n\ add x30, x30, x0\n\ "::); +} + +/* for video program */ +void vc_identity_mapping(void* page_table) { + if (!page_table) + uart_printf("[ERROR][vc_identity_mapping] null page table!\n"); + + for (uint64_t va = 0x3c0000000000; va <= 0x3f0000000000 - 0x40000000; va += 0x40000000) { + int index = (va >> 39) & 0x1ff; //index of each L1 table + uint64_t* table = (uint64_t*)PA2VA(page_table); + table[index] = va | BOOT_PUD_ATTR; + } } \ No newline at end of file diff --git a/Lab6/user/timer_test.c b/Lab6/user/timer_test.c index 644325497..d3cf4692b 100644 --- a/Lab6/user/timer_test.c +++ b/Lab6/user/timer_test.c @@ -1,9 +1,9 @@ #include "system_call.h" void timer_test() { - //printf("\nTimer Test\n"); - fork(); - fork(); + // printf("\nTimer Test\n"); + // fork(); + // fork(); fork(); for (int i = 1; i <= 10000000; ++i) { From 0e06ded197f4d0fde15b959f3954382e39cf41d1 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Wed, 18 May 2022 23:28:28 +0800 Subject: [PATCH 08/25] [Lab6] fix vc mapping --- Lab6/lib/task.c | 6 +++--- Lab6/lib/vm.c | 26 +++++++++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index 69c1cc663..d27671011 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -54,9 +54,9 @@ void create_root_thread() { task_struct* thread_create(void *func) { task_struct* new_task = (task_struct*)page_malloc(0); initPT(&(new_task->page_table)); - vc_identity_mapping(new_task->page_table); //for video program - // for (uint64_t va = 0x00003c000000000000; va <= 0x00003f000000000000 - 4096; va += 4096) - // map_pages(new_task->page_table, va, 1, va); + //vc_identity_mapping(new_task->page_table); //for video program + for (uint64_t va = 0x3c000000; va <= 0x3f000000 - 4096; va += 4096) + map_pages(new_task->page_table, va, 1, va); new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread diff --git a/Lab6/lib/vm.c b/Lab6/lib/vm.c index 71352229d..8c7fd4ced 100644 --- a/Lab6/lib/vm.c +++ b/Lab6/lib/vm.c @@ -55,6 +55,9 @@ void dupPT(void* page_table_src, void* page_table_dst, int level) { unsigned long* table_dst = (unsigned long*)PA2VA(page_table_dst); for (int i = 0; i < 512; ++i) { if (table_src[i] != 0) { + // if () { + + // } initPT((void**)&table_dst[i]); dupPT((void*)(table_src[i] & 0xfffffffff000), (void*)(table_dst[i]), level + 1); unsigned long tmp = table_src[i] & 0xfff; @@ -141,13 +144,18 @@ end1:\n\ } /* for video program */ -void vc_identity_mapping(void* page_table) { - if (!page_table) - uart_printf("[ERROR][vc_identity_mapping] null page table!\n"); +// void vc_identity_mapping(void* page_table) { +// if (!page_table) +// uart_printf("[ERROR][vc_identity_mapping] null page table!\n"); - for (uint64_t va = 0x3c0000000000; va <= 0x3f0000000000 - 0x40000000; va += 0x40000000) { - int index = (va >> 39) & 0x1ff; //index of each L1 table - uint64_t* table = (uint64_t*)PA2VA(page_table); - table[index] = va | BOOT_PUD_ATTR; - } -} \ No newline at end of file +// /* +// index for 0x3c000000 & 0x3f000000 (1G frame) +// 0011 1100 0000 0000 00 +// 0011 1111 0000 0000 00 +// */ +// for (uint64_t i = 0b001111000000000000; i < 0b001111110000000000; ++i) { +// uart_printf("%d\n", i); +// uint64_t* table = (uint64_t*)PA2VA(page_table); +// *(table + i * 8) = ((uint64_t)0x3c0000000000 + i * (uint64_t)0x40000000) | BOOT_PUD_ATTR; +// } +// } \ No newline at end of file From a9b59549fb449a0e5dd8ea034ce46fad2dc4f0a0 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Fri, 20 May 2022 23:39:09 +0800 Subject: [PATCH 09/25] [Lab6] fix pop_front --- Lab6/archive/initramfs.cpio | Bin 263680 -> 263680 bytes Lab6/archive/rootfs/timer_test.img | Bin 2944 -> 2944 bytes Lab6/include/memory.h | 4 ++-- Lab6/lib/allocator.c | 8 ++++---- Lab6/lib/cpio.c | 7 +++++++ Lab6/lib/memory.c | 11 ++++++----- Lab6/lib/vm.c | 2 -- Lab6/user/timer_test.c | 3 --- 8 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index 81240c08ae7ee5f68c9977234e9068e691a19de3..e63f3e384762e271ec2c9c1cbdb62aa22448797e 100644 GIT binary patch delta 73 zcmZqZ5oqWUm|)0i?qup_)@ash#@K4cwAG9`{xzfV#5!e=xQoH|eXp7MxI{Q&T0X3O cv-`?9@6`qK?@2#Aw6e-{vLUy^vTw`+0H$;t5&!@I delta 73 zcmZqZ5oqWUm|)0i;^gFP+Gy5l#@K4cwAG9`{xze?#5!e=xTERzeXp7MxJ15+2-#fQ cGw)y7*57-h4%RF>^ug-?WJ7L+W#5Hq)$ diff --git a/Lab6/archive/rootfs/timer_test.img b/Lab6/archive/rootfs/timer_test.img index 57ae2dc099980ed1565c5353b8746a6839031db5..f0a191ddcb1be7cef9048dece5df89b4cefe29c1 100755 GIT binary patch delta 37 vcmV+=0NVe67l0SA#0eA#T!iqg?7P&?ORI37-W%b #include "peripherals/base.h" -#define MEMORY_BASE_ADDR (KVA + 0x0) -#define MEMORY_END_ADDR (KVA + 0x8000000 - 4096) +#define MEMORY_BASE_ADDR (KVA + 0x10000000) +#define MEMORY_END_ADDR (KVA + 0x10000000 + 0x10000000) #define PAGE_SIZE_4K ((uint64_t)1 << 12) #define FRAME_ARRAY_SIZE ((MEMORY_END_ADDR - MEMORY_BASE_ADDR) / PAGE_SIZE_4K) #define MAX_32K_NUM (FRAME_ARRAY_SIZE / 8) diff --git a/Lab6/lib/allocator.c b/Lab6/lib/allocator.c index d68812edc..3d2a02eb8 100644 --- a/Lab6/lib/allocator.c +++ b/Lab6/lib/allocator.c @@ -170,9 +170,9 @@ void memory_reserve(uint64_t start, uint64_t end) { } void init_reserve() { - memory_reserve(KVA + 0x0000, KVA + 0x1000); // spin tables for multicore boot - reserve_page(0, KVA + 0x2000); // L2 page table for kernel - reserve_page(0, KVA + 0x3000); // L2 page table for kernel - memory_reserve(KVA + 0x80000, KVA + 0x800000); // kernel and heap/stack space + // memory_reserve(KVA + 0x0000, KVA + 0x1000); // spin tables for multicore boot + // reserve_page(0, KVA + 0x2000); // L2 page table for kernel + // reserve_page(0, KVA + 0x3000); // L2 page table for kernel + // memory_reserve(KVA + 0x80000, KVA + 0x800000); // kernel and heap/stack space debug_printf("[DEBUG][init_reserve] reserves 0X%x 4K pages\n", get_allocated_num()); } \ No newline at end of file diff --git a/Lab6/lib/cpio.c b/Lab6/lib/cpio.c index 12723bb9a..e4fd3d64f 100644 --- a/Lab6/lib/cpio.c +++ b/Lab6/lib/cpio.c @@ -83,6 +83,13 @@ void load_program(char *name, void *page_table) { align_4(&headerPathname_size); align_4(&file_size); + asm volatile("mov x0, %0 \n"::"r"(page_table)); + asm volatile("dsb ish \n"); //ensure write has completed + asm volatile("msr ttbr0_el1, x0 \n"); //switch translation based address. + asm volatile("tlbi vmalle1is \n"); //invalidates cached copies of translation table entries from L1 TLBs + asm volatile("dsb ish \n"); //ensure completion of TLB invalidatation + asm volatile("isb \n"); //clear pipeline + unsigned char *file_content = target + headerPathname_size; int sz = file_size / 4096 + (file_size % 4096 != 0); for (int i = 0; i < sz; ++i) { diff --git a/Lab6/lib/memory.c b/Lab6/lib/memory.c index 15f7d0a99..21d1b032b 100644 --- a/Lab6/lib/memory.c +++ b/Lab6/lib/memory.c @@ -48,10 +48,10 @@ uint64_t page_malloc(int sz) { /* currently support 4K page request only, the value of frame array may be wrong otherwise */ uint64_t request_page(int size) { - if (!get_free_num()) { - uart_printf("[ERROR][request_page] run out of memory!\n"); - while (1) {} - } + // if (!get_free_num()) { + // uart_printf("[ERROR][request_page] run out of memory!\n"); + // while (1) {} + // } if (size < 0 || size > 3) { uart_printf("[ERROR][request_page] request_page(%d): illegal argument!\n", size); @@ -167,7 +167,8 @@ void merge_page(uint64_t index, int size) { void pop_front(frame_free_node **list) { frame_free_node *free_node = *list; *list = (*list)->next; - (*list)->prev = NULL; + if (*list) + (*list)->prev = NULL; return_free_node(free_node); } diff --git a/Lab6/lib/vm.c b/Lab6/lib/vm.c index 8c7fd4ced..08a65b8fc 100644 --- a/Lab6/lib/vm.c +++ b/Lab6/lib/vm.c @@ -19,7 +19,6 @@ void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa) { index[1] = _va & 0x1ff; _va >>= 9; index[0] = _va & 0x1ff; - unsigned long* table = (unsigned long*)PA2VA(page_table); for (int i = 0; i <= 2; ++i) { if (!table[index[i]]) { @@ -128,7 +127,6 @@ end1:\n\ asm volatile("msr ttbr0_el1, %0\n"::"r"(0)); //ensure to read correct inst when mmu opened //setting L1 table for higher VA region (ffff) asm volatile("msr ttbr1_el1, %0\n"::"r"(0)); - asm volatile("msr ttbr1_el1, %0\n"::"r"(0)); asm volatile("isb \n"); //forces the changes to be seen before the MMU is enabled asm volatile("mrs x0, sctlr_el1 \n"); diff --git a/Lab6/user/timer_test.c b/Lab6/user/timer_test.c index d3cf4692b..f0ca93a5c 100644 --- a/Lab6/user/timer_test.c +++ b/Lab6/user/timer_test.c @@ -1,9 +1,6 @@ #include "system_call.h" void timer_test() { - // printf("\nTimer Test\n"); - // fork(); - // fork(); fork(); for (int i = 1; i <= 10000000; ++i) { From 973d89c8d0907e99b19fa428c91c0accbf030764 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sat, 21 May 2022 14:19:16 +0800 Subject: [PATCH 10/25] [Lab7] init --- Lab7/.vscode/c_cpp_properties.json | 17 ++ Lab7/.vscode/settings.json | 16 ++ Lab7/Makefile | 45 +++++ Lab7/archive/initramfs.cpio | Bin 0 -> 263680 bytes Lab7/archive/rootfs/dummy_test.img | Bin 0 -> 2744 bytes Lab7/archive/rootfs/exec_test.img | Bin 0 -> 2792 bytes Lab7/archive/rootfs/fork_test.img | Bin 0 -> 3272 bytes Lab7/archive/rootfs/mbox_test.img | Bin 0 -> 3008 bytes Lab7/archive/rootfs/timer_test.img | Bin 0 -> 2944 bytes Lab7/archive/rootfs/vm.img | Bin 0 -> 247488 bytes Lab7/bootloader/boot.S | 40 ++++ Lab7/bootloader/linker.ld | 28 +++ Lab7/bootloader/main.c | 36 ++++ Lab7/include/allocator.h | 40 ++++ Lab7/include/cpio.h | 43 ++++ Lab7/include/exception.h | 34 ++++ Lab7/include/mail_box.h | 45 +++++ Lab7/include/memory.h | 43 ++++ Lab7/include/mini_uart.h | 28 +++ Lab7/include/mm.h | 19 ++ Lab7/include/peripherals/base.h | 10 + Lab7/include/peripherals/gpio.h | 12 ++ Lab7/include/peripherals/mail_box.h | 25 +++ Lab7/include/peripherals/mini_uart.h | 25 +++ Lab7/include/printf.h | 31 +++ Lab7/include/reboot.h | 8 + Lab7/include/shell.h | 9 + Lab7/include/switch.h | 8 + Lab7/include/sysreg.h | 22 +++ Lab7/include/system_call.h | 16 ++ Lab7/include/task.h | 76 ++++++++ Lab7/include/timer.h | 30 +++ Lab7/include/utils.h | 13 ++ Lab7/include/vm.h | 36 ++++ Lab7/kernel/boot.S | 175 +++++++++++++++++ Lab7/kernel/exception.c | 280 +++++++++++++++++++++++++++ Lab7/kernel/kernel.c | 18 ++ Lab7/kernel/linker.ld | 16 ++ Lab7/lib/allocator.c | 178 +++++++++++++++++ Lab7/lib/cpio.c | 107 ++++++++++ Lab7/lib/mail_box.c | 109 +++++++++++ Lab7/lib/memory.c | 264 +++++++++++++++++++++++++ Lab7/lib/mini_uart.c | 196 +++++++++++++++++++ Lab7/lib/mm.S | 6 + Lab7/lib/printf.c | 152 +++++++++++++++ Lab7/lib/reboot.c | 18 ++ Lab7/lib/shell.c | 157 +++++++++++++++ Lab7/lib/switch.S | 28 +++ Lab7/lib/task.c | 174 +++++++++++++++++ Lab7/lib/timer.c | 109 +++++++++++ Lab7/lib/utils.c | 96 +++++++++ Lab7/lib/vm.c | 159 +++++++++++++++ Lab7/load_kernel.py | 45 +++++ Lab7/user/dummy_test.c | 6 + Lab7/user/exec_test.c | 6 + Lab7/user/fork_test.c | 31 +++ Lab7/user/include/mail_box.h | 23 +++ Lab7/user/include/system_call.h | 21 ++ Lab7/user/lib/system_call.c | 187 ++++++++++++++++++ Lab7/user/linker.ld | 12 ++ Lab7/user/mbox_test.c | 58 ++++++ Lab7/user/timer_test.c | 12 ++ 62 files changed, 3398 insertions(+) create mode 100644 Lab7/.vscode/c_cpp_properties.json create mode 100644 Lab7/.vscode/settings.json create mode 100644 Lab7/Makefile create mode 100644 Lab7/archive/initramfs.cpio create mode 100755 Lab7/archive/rootfs/dummy_test.img create mode 100755 Lab7/archive/rootfs/exec_test.img create mode 100755 Lab7/archive/rootfs/fork_test.img create mode 100755 Lab7/archive/rootfs/mbox_test.img create mode 100755 Lab7/archive/rootfs/timer_test.img create mode 100644 Lab7/archive/rootfs/vm.img create mode 100644 Lab7/bootloader/boot.S create mode 100644 Lab7/bootloader/linker.ld create mode 100644 Lab7/bootloader/main.c create mode 100644 Lab7/include/allocator.h create mode 100644 Lab7/include/cpio.h create mode 100644 Lab7/include/exception.h create mode 100644 Lab7/include/mail_box.h create mode 100644 Lab7/include/memory.h create mode 100644 Lab7/include/mini_uart.h create mode 100644 Lab7/include/mm.h create mode 100644 Lab7/include/peripherals/base.h create mode 100644 Lab7/include/peripherals/gpio.h create mode 100644 Lab7/include/peripherals/mail_box.h create mode 100644 Lab7/include/peripherals/mini_uart.h create mode 100644 Lab7/include/printf.h create mode 100644 Lab7/include/reboot.h create mode 100644 Lab7/include/shell.h create mode 100644 Lab7/include/switch.h create mode 100644 Lab7/include/sysreg.h create mode 100644 Lab7/include/system_call.h create mode 100644 Lab7/include/task.h create mode 100644 Lab7/include/timer.h create mode 100644 Lab7/include/utils.h create mode 100644 Lab7/include/vm.h create mode 100644 Lab7/kernel/boot.S create mode 100644 Lab7/kernel/exception.c create mode 100644 Lab7/kernel/kernel.c create mode 100644 Lab7/kernel/linker.ld create mode 100644 Lab7/lib/allocator.c create mode 100644 Lab7/lib/cpio.c create mode 100644 Lab7/lib/mail_box.c create mode 100644 Lab7/lib/memory.c create mode 100644 Lab7/lib/mini_uart.c create mode 100644 Lab7/lib/mm.S create mode 100644 Lab7/lib/printf.c create mode 100644 Lab7/lib/reboot.c create mode 100644 Lab7/lib/shell.c create mode 100644 Lab7/lib/switch.S create mode 100644 Lab7/lib/task.c create mode 100644 Lab7/lib/timer.c create mode 100644 Lab7/lib/utils.c create mode 100644 Lab7/lib/vm.c create mode 100755 Lab7/load_kernel.py create mode 100644 Lab7/user/dummy_test.c create mode 100644 Lab7/user/exec_test.c create mode 100644 Lab7/user/fork_test.c create mode 100644 Lab7/user/include/mail_box.h create mode 100644 Lab7/user/include/system_call.h create mode 100644 Lab7/user/lib/system_call.c create mode 100644 Lab7/user/linker.ld create mode 100644 Lab7/user/mbox_test.c create mode 100644 Lab7/user/timer_test.c diff --git a/Lab7/.vscode/c_cpp_properties.json b/Lab7/.vscode/c_cpp_properties.json new file mode 100644 index 000000000..96a36df82 --- /dev/null +++ b/Lab7/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/include" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "cStandard": "c11", + "cppStandard": "c++14", + "intelliSenseMode": "linux-clang-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Lab7/.vscode/settings.json b/Lab7/.vscode/settings.json new file mode 100644 index 000000000..73281d200 --- /dev/null +++ b/Lab7/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "files.associations": { + "stdint.h": "c", + "memory.h": "c", + "array": "c", + "hash_map": "c", + "string_view": "c", + "initializer_list": "c", + "utility": "c", + "task.h": "c", + "allocator.h": "c", + "mini_uart.h": "c", + "exception.h": "c", + "mail_box.h": "c" + } +} \ No newline at end of file diff --git a/Lab7/Makefile b/Lab7/Makefile new file mode 100644 index 000000000..6ac0e3d50 --- /dev/null +++ b/Lab7/Makefile @@ -0,0 +1,45 @@ +.PHONY: all clean qemu-kernel on-board + +ARMGNU ?= aarch64-linux-gnu + +FLAGS = -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC +INC = include +LIB = lib +CPIO = archive/initramfs.cpio +USER_PROG = timer_test + +all: kernel8.img $(CPIO) $(USER_PROG).img + +kernel8.img: kernel/*.S kernel/*.c $(LIB)/*.S $(LIB)/*.c rd.o + $(ARMGNU)-gcc $(FLAGS) -Tkernel/linker.ld $^ -o kernel8.elf -I$(INC) + $(ARMGNU)-objcopy -O binary kernel8.elf kernel8.img + +$(USER_PROG).img: user/$(USER_PROG).c user/$(LIB)/*.c + $(ARMGNU)-gcc $(FLAGS) -Tuser/linker.ld $^ -o $(USER_PROG).elf -Iuser/$(INC) + $(ARMGNU)-objcopy -O binary $(USER_PROG).elf $(USER_PROG).img + +$(CPIO): $(USER_PROG).img + cd archive/rootfs && find . | cpio -o -H newc > ../initramfs.cpio + +rd.o:$(CPIO) + aarch64-linux-gnu-ld -r -b binary -o rd.o $(CPIO) + +qemu-kernel: + qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd archive/initramfs.cpio + +qemu-debug: + aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S + qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd archive/initramfs.cpio -d in_asm + +# qemu-kernel: +# qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd $(CPIO) + +# qemu-debug: +# aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S +# qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd $(CPIO) -d in_asm + +on-board: + sudo screen /dev/ttyUSB0 115200 + +clean: + rm -f *.elf *.img *.cpio *.o *.S *.s \ No newline at end of file diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio new file mode 100644 index 0000000000000000000000000000000000000000..e63f3e384762e271ec2c9c1cbdb62aa22448797e GIT binary patch literal 263680 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 Z_F`h}^x$ys*!Jz)my(UmcN+tN{||W8U*-S+ literal 0 HcmV?d00001 diff --git a/Lab7/archive/rootfs/dummy_test.img b/Lab7/archive/rootfs/dummy_test.img new file mode 100755 index 0000000000000000000000000000000000000000..bb2aeb37e88386c4816345a6d3f9eb6344f61d56 GIT binary patch literal 2744 zcmcIlTWnNS6kYe;p`{P|AT?=#%%hM{6k0UK(AcDRphAt2N?SwxqAz0`3w5N#YEcF- zu}S;EP@*OX3CIVnD8^voBt+|nNfR5ffPAUkTTqPh0n|rtXgRKZ@62Q}j@Tbga%P>o z_dffq{Wxdl2fiGgHxL7G5T-xY033dlGY~YspC9<@)VQ(zvf7BL#fVHvF)J62 zm1{bb$6WmZOo_}k;8dpD71OSmb_f1#*RVjlu6x;$*I>FngV(8qPGU*%tV50PoJil7 z$&-GqV#I$<+nn>k#jJ;Q9&wTF zD~w+FSgCid^JaX0V9Kq}O!3lL@^$P2I5UPmCOH>=f&t)G6lk#uymcGbK(wh-LzyC< z=ZT^N%$mSqL_(`QTlmO<{?c{PO0=kLh?f9m_BJza8QMeW^EU%p0r~^Y7IjH`jAN_V z1c8E-Jk#enL`D5YLT+YqwU+pT=`-$!)di zgqC9o??84aYT=PzTJ=$b7(r05dZu6ejbp_YUUhBH?sWmx#n|V2+&uth9&g~u9 z0G`AC!XIy51oR=y?!8z+naRA^jb=RLW6kM{wJ+5vOZu#!PvL3Pr%j*Qp74X&(I%bzKuoWLO&htJ*=m8gdauW`<7sIT+|v zp?lYQ_N3kj_D5=;^h)B5NcD~QxWwFY4|}!7CR%*o_8$ zNli3qAG&Q5ACN|n2U<~#;boI1)Wio8n~+k}CuOFf5G6*7Kb_DrerINP-K;D2g`3QN z_nvd^x!?J@cNe-YjV@@2<^aQ%h7AA)@L^GOH`fXxSKT%IQJrhQu6@1G^~Jdf?Z7uq z6{eO^uK?Ff4P)j~*yd8hrabEEdod+4`m{?^?eb`sN4wsC+f^^puH`{?;vK8@G8 zxK3h8@~l9)@VuP5FP$g-nt6!bPT8M`b)oBmn?uvjc-vsl9EW}5b=Wt%VE@nq`^R3` zx87ykRlcbCcpRS))S_k?F)OmtY(mUAgxC!8ccVm!27Sh;;lpUqS4mVxEy~T0l<176 zj9GreUdDQuR}d4~iJZvQPaWrd^NJB$=$dltb2o4G9QoQ-Htf5aIwm<6eu94Bw+K*g zW_$An&Vfj6vw}j0d|oDs4lv67!w3h~d$#bA1O27yBBiKz_9K=L6k7X@n5iin&|Xvr zDB0-r*O}BM>@k6TV#8j_PRi4Ljw3u8=jNV&6XE9;9G9!R{!9s~ZaC+i{L1B9 zNA5lpn6weT6MHWX;=<+G;6`(n`T1F5PnF3YLygp$HS}2%iCMg-6)pN!*=yd?J~t=( zXPK9i>iqU0eZFUCJ9rNJ3%|cT4XAyX>zOX5%wS%u8Y33)vF7x}+83ylC43gsr|`7s z)1ptMyYgg!K0%-C505+bjLGX&`jYr2@39vclgyzoR>~RQzEr+vmPBe@|LirfdtRlT z%y%GshkJN;3N!6fecrxGiQntf-4a6u@LKD+EP>r7eiHY@RKkH38S1=k z5xtjUlcD!)sR=UFMDhpb6gkZ6b@t$O-q&>qw@MFWMQT;@12MG@7H#BiW~v3|cX&OX zA@AqsnfLU38vm0|o-K7y7MagAsrj7bJ8?5Xk0L*;*x7loNv}V6ynUm7w6$4(teK~BG%**^<$>77J zJVg0gqHx?vE;66vca-vBPd=cYDjo?mc>zl7t60FB)K4zqqB1u)l%s`}>0FeBS{utk z&6`54M>;w;H8dP+YT5Gi=HqRfp8`wf#jg>c-TNZ8oPTvRKkHWT%jhqcMye{t2ahS= zQuV;WWBFWpU%H{PMtkOk`;L=MMfabM)57^hBHtY68u2V~o;Xfi_ZMZvJ;Xc25Ygv2 zPB(EC@htI4;smjpSkG8nh=1I7_*?-k%lZ0oNcb{>@pYEBM0I@ab=N<9g_{h?p^Qg8 eNd6YZXP$T9p5vXzm=mI;?ZcSdj`RL6-+u#IriL>B literal 0 HcmV?d00001 diff --git a/Lab7/archive/rootfs/fork_test.img b/Lab7/archive/rootfs/fork_test.img new file mode 100755 index 0000000000000000000000000000000000000000..946319aff849a43e24db3eac785e4070941d9106 GIT binary patch literal 3272 zcmcImU2GIp6h5=NZK17gff^e?cD4mASST7|C^qR75Nl9=wrdFSfo{8%HY{!ThuGLE zOKKtsedy38J|F~?2Z{*95aSq38ug)xO%RH{DKn*rQDT%I?SwAZ@67Bj>$+lnV3ND% z&N=6v`<-*XduQW4pAW~Kql3@0rkq5&GIP*uFk6!YqC(nK|BU3k|a^=d_P6NUEW zkx$1ueIA+XV7rF3x?9nV2&t3v6!WT6IynKI;momP%8S)rjsYKX(HxHZYDP@ObwB2c z8OGcRzsHD5lUU@LtkV~(+u=tI`@On!H2kadcU+9oT|%MVap7A7zgdW%4>^I{@7HLF z+5p`%7;f45ZM^5p6C=(Y--&f}aTdicNko@{>7<@Vrknezhd|m z!>{k3ehoA9YkQC%aP3dGXW%-KuyHOaoOM*gI7idhW#U9!y_mG0($*()jrW|fxP@Mu zMkkpQ5i+m7PUd6}nb-D``C}iM*WW?j>s+e-WI{g0(y4-Lrk)#{tG9rEJ4u^B{jOF> zYLiPD22X~YT=kIBumQdPfuv4=Z-!ej(W@c-0(c7DzQWk0(?YzfUr@Ao&qb?0w~FUa z0k3Hkka^4LILS3a9QIK} z{J?iWuOPFN<0Q|CE`>b#S^8W%1Ma2yWZ|C4J)tZ;;rbD3N`#th&g)_dwKE5D zV_paF5oCHF4EXTb%+?EWSXz z6*jkyfe*z01(YXL?&)k`FkqAUEVEy+VmdINzl1i zl^p4kd6G|&)|SqW!2eia?LyS$54Uzi<+j#vYZ3tVv9`6KRCeqM2A2}yyJ0=j8(wmC zFOn7%x=Dtn4CAFggxG?DQ+?6O!?{Ot9Nr(kFTyK7r5Lps-G2%pL&B$I1B|TahQ^?; zwDodBLLbEYKozjBe-HYz8SxqKIgC%CPh#giM_HdGh7SE#&@Y5!jL!oL&!;d( zp&zpK1CGPxM?5Wdew=$5@~)i{Vk`$Q^+ipCh0c&PUS#FB3bq?@Ay(OIOEw~Ab+Em; zIv7|UZ1339z1;5)x3oRGYDJ`T#nS}J*>!P3zOd;P^7TG0SASOYjVgUIzWa397tUbc z5f1gBhue@GnSRm&=X0y?2~h~c@!RMb=C|(%5rr&84{>*jTFB#&0m$=^{g9U-PeI;* zJP%1ih)KvYNJ4E^LJmQ0fowv)LC8Dz1g>42z5?9hc(^?LtWLb=+OH%h-fh;~*x6K& kuyc+1dDIrE-$jX;9i8Z|u=hjmNma`CVN6C7xc@EoU*=9BTmS$7 literal 0 HcmV?d00001 diff --git a/Lab7/archive/rootfs/mbox_test.img b/Lab7/archive/rootfs/mbox_test.img new file mode 100755 index 0000000000000000000000000000000000000000..289a5aca03fc08e24717ff09a743fa3cd7196a5a GIT binary patch literal 3008 zcmcImU2GIp6h5;v6liOIpvHz0I@_u(zpbV*R7pAo#2S=ByM&mS(A~Cy#-*EWi#8Tz z2qc=oLzj{mgAh<3T0~KUnn`%5Zw)jeP>ByJcM1y8J}3q4gf7?b%nGV>SHFw*ogExj zw_cWO=)xQ_FDgW10zSoTa>Q)Ifjs8w_tFKH!LL)9YL^eYeAw;%w_U@1+HJp=9eBN+ zs!!uJn9y-7Gd%04mU)h(?n~zhzapQk8!7vfvBvvOxwS#g9XmqKcsDs$UnA#QA2~no zCg+#EL@R2vjjVCx?`pXcYtf7$L!+SN;=EzS`!2Zknap1>1-_1*L(Zh?JHa_;evGL5 zA12p5$D0Q+C-h94LPZjMUIMa?$fzwnL{a}@&z3ZBfWK6oSxEu8g{%Vfi@n9LgsLo| zo<+?>N)GjwHVf#I_B2eJ*hVMHnUSaaJVVi;1UL8mYZQGxE?utf`coykC#g^0dq9cS zYZM4BFsv4z;nbnOKZ32YjAH)Z-#8fbk@FCEmg!U&T0m9^c3WZdaheVHekjXu^j*e) zL9`#|T7J$ME8^-+p;a1UgeO+N4=U}_y~*zn!V zR12D3>-Bhsyq}y#-qZ7G{7*h{HrGM9&wQ4o=5rMHJnI4F6SWiNUT+;oKM?<>>SZym z>0EHIq0{*;vt7R7_%I*GefQ%%bniO!?puW3I*z``#vcAX;e0dlo|!iS{V}tTdnNHk z%=8WW7(;Hc2fbQr0|nl9z5|o9*G(mVYx%b)#lHproA3s?{T-Atz~}Nv{w8Gy+Pi!7 z9id1s*x?IBf?aKTSNp3S-5rrmy>sV|PzH? zn}T&vvYZPs0(qq;*BcV@FxKB^kne;1Mh5wNkWZ!gXTGN~XiCZ?cRq6jV>*Km0eLQL z7Xq2%v*5z>DU1Th4|(!_-;uJT{#GwOj=dNSvJd*vSy&nha>S!dL!LVDN&zU2|l?{oV+dNM$A|JDP<4vWgy->xexdu z@FegIa11yGyak*9YRDZ)DVG6@fepZF;19r!z`?kbVc_k%63->k%51#8_&7cMRVUV2 t-ja$FYp>h>;hmGzC-C6}CSg%x;&~^!Bfawwds37%eIPiT;Qe3D{{}==(Q*I) literal 0 HcmV?d00001 diff --git a/Lab7/archive/rootfs/timer_test.img b/Lab7/archive/rootfs/timer_test.img new file mode 100755 index 0000000000000000000000000000000000000000..f0a191ddcb1be7cef9048dece5df89b4cefe29c1 GIT binary patch literal 2944 zcmcImU2GIp6h5=Fl>XU2YeFbtXIqU0TZ*QdR!KSqgqj8l?HXcYLbt84#7*nc5*v!L z1QJQ;Lzg!30YN|?Xb~}nmx+xbJT!$RIDaTtkx~aqqhDyO|lH@Smnuf`LN4}-SPk0H7wJvb16IUI+?6b z;dRN?@m>-<>!_A_jwk!2@ko`OC1XO2z=fEvW`fv^$k&P6p;JKC_wL-`_ONyvXOe% zw-6~g)aPpv(8cZPI_+f}jVLD}PmMW7;Sracz5XnPUqk=JWB9&Q!pGwJRNnz5T<@ho zaIJ2%dUOjtAHED*rGldV`|qC)ddPYLJWDkyY+Fl48|?PO=1PhUpQE-6-O`TeLpsqZ z@GuB-yH?1bf^|*KZIy2M*HID9K&{Qs<&%}1zdgT^)bWS|J`FKY#GvlV$9qdvLEbA!bv=FmX=nI<*@175CJy#Kgb@ z?c6ADt?NOh;bKCf)FRQFFvX?F&7S#bcHtCi65A z(?m?=Nc|ZmBsq9h}#vDSUu?AS2T30Y3sJ*TIAhpUrf&poQ&D zkEhA|=L^VtYCiS<$tTw4Iw;G`XGwBCCveU)Rw$pSohWm9>jL_L_&cciqg>N0a4@0M z_$;$szHWIipTT+e<36;{I`sD4gx%RBhViSKkgOxj!5(k$CyTL z;e%eSHG%jRTYLr{uHG>p|JL%iCn>&x_^Mk+oSb%<82qn@>AY*C=}X2gnQe5l*7&B?OU&uv9yS^fHU&GNWjQC5=A|rWgl~f@58<^Sjr;`US{nJskZ*=u1IFVs z-)k5(kjJ_6n&TMNX<`V-w?n=T$T4087oN{!G(bM=$Ok=VOV9b+oelEd*Pzg2&`+$w zOMPDJP_7zQrt<9lRYMnAl(O3KEoel{s?dS9s!&H|=s?$@zRF{H$6`% zxsw+axO4aGl=gA$ ziE9t}%fc;+httE)efK@Xd8MD+cemYa?ySmj^_*jVo^l}ZyWX8S(TN^QXFcpaE=t(0 L#3Yiv^fLbfS{cCI literal 0 HcmV?d00001 diff --git a/Lab7/archive/rootfs/vm.img b/Lab7/archive/rootfs/vm.img new file mode 100644 index 0000000000000000000000000000000000000000..8ba674e6c8650e239c6cd1322db6637bdd023baf GIT binary patch literal 247488 zcmeFadu-%ccHdV$vyv9GdhG+))vl1?^qY?++0$%3x=1#gZ?f2AH_2v`-E5MhnbGce zAETX_)k@fvx1}{;Ap&A`w1A)puqKfaS?d^*5d=vCvOS9OM-*zehAzWwn`<`cU=GWOmxAIdy>*Wy2( z85`RDNdDf^e8TR(@ysVa|8^#``sCS`^GbwFTZ5*nasoG@28w+ zPksB;hcbWkd?xdMz4ZRm5MSWwo0&h_{ejGTPp#fhKa+XT7vAGH?ASE1Arx zk7R!4`IUE{&2;R3=HcTfKQQ*5(fOr}(I3lXK9YGSa~sTdKQs0?^P$W~cdd*#ozeX= zbiwiIH#4EW?|^D-M)!Yx>dU`> zDzm!V6X@LDwX|GQ_Fq_hCX@NyOy-9kz4&bATRzQ)$=_pq8x8n=Vr8E)TG06UX9{UQ zN_jW9|DEL7^A|H;{{8>(bam|1!{x7rbj32@m3R04*Zv@RuXzlgJZp6^d<=(x>F%@n z>tg&Pu+GOnG8qWzPw{R^YvJ`w=JQXi-n@@cmc>!Wv1c-?KSW)u{5btDB=7oTya(#r zX78Qr?<0M_T*`Q2_3`h(-bM26?HzoGw1$!Kp1c$2*!2_R7rw}U%4C`}#dr9R!aIEU zQKNUp@lNKKmmg-{eq*=O+L2)gt|7c);X}J0uyDu1Z07MprM;d{Gm#Hx@@aGV zv`d-CZKv|(uH@6)&4>4m?za72&OClw<$ad2jmGEm;p>+6Lw5gW=J7j9^VR&bujRvU z7!C4#GYLZ-{&t?mFXh9(V`1hOmUn-}=>2LE7t;NDzKq|+5Ogf%?-mWvJgv;Yy!zV*IhR^Q5 zviF1@HGH0M?cUjS(+%JJf6(8>_ZZ%py$35d7h}EqoqSn_`4g_)d!(%I{?*gfhd=mm zdHg><{ncIM1G*+R1zBlJWP`MS@P9sC{ruCXpM3vo|1`AuP}c4bJ(@IG%Y60cmoHlx zA#Ue~A6>V&L_hw1(2wtb?Y}AJdHaVS{h>Vvqi&)pw>)M@Gexyec)?bs(n+W#t__LS*=>+`;~`~0cLPoBS#)N|*PkABDU{ZpUs z?Iho~^7($>Xq?JC{Nup)JD+^?pIRCJtxvz3r2j>wH#)xroinE%@1D64`ktRpbno&% zwlsgw@;*rx*DZ{^E-DWCUmTAAN99DX6s%c&jGJ^Std@P2{? z^$RlfiOi!UT{SSf1A`{pWr9%#VfojOEkcFj`~dgMYf)WBm0P z4qt!f;{|=v_G6E7hR1!Me<#V`o6rB!vzgUrO;4XTJ$x$j3-(@q;g2_s=I*bX{`z(F zgvrChAA4jSxW(E1+dmR?M1jUTKlbQFdq&ze%iET>Q~dJ|dw$LHu$%DkBY7Tveh&{1 z|2PW|zhON5Mv;e4!2|axJbX0&?1fMd(-R@z*pTPr!pqnJ@1cJ+7ZIdSfOR?|&_^ zZ{Ppg?*$sWpERs4WFBL;?taqxpXV(+mHFk2(K4O>9=4e2l)re}`a838-urRtX7o+> ze~k2}u+J<+|6_+`=ofWw^dBPA`THL=-orI^i_zV^F!tE&mfO%rkK8c36CTYD4(Tjz z$ZVkZ-v8SFl*c7+hZ-i>Mxk%{O-u8e32oZI4e5xs&pi67;Sp@5-%Rj%GvGP)ShnE% zU(4fXbq}_;)z$cU^u+F|&!1U6gPrAUD){?fExw3jk*6o0F&sacd7K&hwdJulf9nnG zsbHscCj3&zASd7daQUBG8J7%8!z0u^w0)}+Y5o`9nO$2Sk>mZp{e2IYf8WvvTi@*H zwhzDa>0QGN{79cMjGr0}p1*5x*wkZYBUqaX`JdSR+rRc}%MX9;@f&Slf7`}DJKxEC z{n-`x+wDxscnD1!7f@cfwsLH|@KGBZ{VL@Vf9kKFt`@P&%MbFYdei2|KJ#ezhw=W`{xBJTPh|e+!=|H8 zWio$a`t93cjBVprYZqazLE~KOf8V?4)8%De<5{0>w#sy$tCY_8`bGcT#?rfV{uyO_*la>DNqzni(~oJ-{~+)b=Ao?r ze*9faH=9ovutm36`*`{X3AUzpGaqiVH);RweCeg1_`<7gZ@u33=BsbDz4`JRufF=F zwl`jV^Yt%$<*nCV{}K-__rBQoGXwpDKXc{9=Q7W2y#AH8mtXqQg}2&1|JoP6(DvD{ zyz$Zt{0pUJGS4l2u5IyWUoXU*X-gh_?$s~+6j!UCd+p6O`|m4nzWPSnPrdQ_%dfuq z=5su}*0$&0tv6o#(pznBk%JU%U$nF@efHJv=U)ApS6@y^KV{KvKmEn-*S`4K?&p5$ zwO3M-w5@#Z^{=+sv$ofNvhC%syz$1XMj_8e_j5n_`Wv55$uw=zZ7;RG{JGb@@QM-} zTQ6D8FTC`#Z??VkRm1CxueSa4Yp=ZediQeym-|NJK}lIT;L4L~`-z{0iSFm#eC@Me zdg%+>ah8;{ZC`!utfz(#x;D(%${t8?S!$wKv~-^^Fo*ZEedTI-kDn zb1!}Al`p*dhR^rPt6#LpC|6tCWQcD2sh2+c+LsK)FMjc*pW2SgZfhgD?X6eee5>tp zKFwG6lvGUfB5&-qxAvrHYrFlG*WT(50%B-{@Rq%r*WSF=cJ39M6}5l7YQp5TW-`1Y z?kAF$!AlNFAwWDx5;|bH%?PG&WB+^kbFaQkK@*7#6bL32&SYMCJ#k7Bz3;Nx<)O$`p z;&{$4*SWns-+6sza=x>VGA^Gx{X$&6?vD#z;+OF1T6f>f{Pqp%zTVS2y|I03v0lHs z-8+xaW@O6SgW=;<4}QRv+)VQk@$0 z47nXRKRzH{S`91lHF$n`elekes!T9=<($T zo0lu4UD@ioiY~8|rra~%29Fvi;iHg#sT|)vem2`VMIQPtA0J=S2av8B?3I_aUY5k$ zQDG(e3db&PSM}c4m&S5eu8v+LAM&F5#UXteX-FGCD|e54%3kQZv(`O*EjN69c6m!Y zHXAF^9T`}jn{HnTbsn1Oo*bQ>zQ4A$d81rCh)2JZKRdHr(LPYRvANDOmCDmIaK%0o zZ~h%nhT@xvm1y3*xqjjP)_TA039%u?ds?VAhkin~XeVGoKSjGmukf3izY@wFAIf!+ zhP0H&HTJ3QMWdjPCOZNq*ra*}hL@-Mn~s%m+1_5A+Sxff>-%BsrnLSJUcmynBfr{* z%GxiaT=LSNk`}Cl10i^ZGA8>&NSpJ|u|-9rSu!Phx4Q;ztv$GPjym+5y|FQS?d~Yg zkQwoajHKyR(ve4PcfMn3;AZyv_^sj2oBS5DOVhdgog=hs(p;KsUlLuySZ--&K23}h z@+XYR-wdogzq-D;*|RF$3qSDX^#V2nbp`|4>*n^wYsg}?KV+9SzSMbt4w}f1-i1PJ z2=U|XTy!S#r#7!NgpI^Ybm&Wv71|T@?)D7YJKxykIq#crXl-lc&d9*F+Gw@7luLJS zarQ;Zg|_ffNP8D=UY;iAR=O1*ht0t0{`Rc}(E+0uH~QK;rlw2U$NJ*M&T@4=Nc_g) zV5swrxq0Gc4Ni#d2 zy}Y$FId%|PA`h}dTU*{-S)t_aqk3z{4eH%IxJ0bLyX8)_-XcQ)C z6NR(rx4Ec1Y7&^)ae(f6TD(8qLb0p=%;Grh_s@k5UjwA`@xOQHQ}QWOn8Pa zkPM+K(M?BTZ;J1Z>7KI%d?Zg(i>o}Rzd{!1)0Cc&`)cG1opxh=d1LJ2=-R|k$2RyN zoAim4b8T+@g78r&+Y}v7KT@urO?&r^h*P~graC4|aGF`M`JbU2{quwE!4c#}?FKob zuC%3UWW&Cb~~_mL^#gbw!gt8`5}gZC?a?V%s5Bv0sd(xRKjH^+jVNgE?hx(AsNE^)}% z`{-~o9`pTP$Mi%Ge9%8t!p1+N?^FHBi_PVq>zZ*+sN-b&7P@KX=EZ;qdRlcSjK_T* zE1$MpJ84wBcW&WQ z$2bIiMq9;pz`h(^Kfk1U7s|J~@i%g9b9^-0mt!0-c=z-T;#l`&E|a#GHlFb^r99*- zSEokBCpDn`Wjm9;@63I!!A{R=4XN|+?D-Xb>d)!thS~@2`LeJjwMNL?3S&HvOMK1z zo$@ydk4ohxw9TF}8%lNpZIO89S8jE!Jjmr%7MY`>ZAkBmXF}R4vd1;^G@_?@EuWU_ zu#TFa=Zx`4yGQ3U_aa+F5M$%-HRr;6kxlRU6uoAIqRaS-pX}dulP|B^rK6cY z6HXe>V>2?Z1wOP>?p1C_iA}o}Y-{FA%Gs67iD73gbzfXUhpC*juo?J>hUhaM|{J3V{1LFN|_0l||#uBna6a9W++v}GYCzU~necw4VvsCC8@^d%gKFm!dsYTDXGvtSPMEXbU zQsj!cJ(b@qOw#Cx2k}k23H3EQ-PhIQgighV_H#w(D)bmOlFwIqeI~R!%18HmjJVc# zhUZ{~ObvGQhVcS%Y5X@U4*L8dNAOC&&3%cj5XONWVGU2|pma- zsmBVt(?3U+7#C`tgJ;dcC8i_3#Ix2O{oG5C3FfKt;~V86#IBKDKwiq<>K(Ijb~5)~ z5*FHBvc40qugebb<)>Z8b!f)D_>f*zTT0b2c^g!=6MZ~mJmz*Ohkjo?m*6AJ@^ga8 zoL6Eah%R#F<%x2{TO5i;vqDc_Yip7X+Q^=|=KCwz2;juLCSyHsFPF*_wo`UK!Dem+ zn%MkW3sXM}PMQNIO|vlAkB-NPYxFR@s=g(2!;%Na%a&F+#bxL|*iVcTQ`#x^#?`^j zn>Sbc!&t}ff$?k6`|;nb=c;*t=Tx5b-+Ys zR4(^n+`@d9;XJ;Uy|8w6ZD4(J?Zr#^Jw43%VtZ?^L9;NZmJW3xt?HyTBI=cnljJGC zzaq@br08p#D^1#MGG~fxg3q0Er-#5tzsbI2-itm~{fBs}whqlqC!929*|T<4Xm`na zD0+!J=_U{eblALjK_A+5E$bet}1&)->G z6&{sB&9PU55%n(6w)a$Ro_gZt>7#4X>yM7Ixnkz43^V2c($X={TL~NF2pmV&R<0!d zVD)wOeCoQMI8;-X==w2!8V=ROfx*oA^AG$F{Py&t1>3VaTR=Seu$sEnGmU6hlqcT~ z>vSz!3i|uiM?A(M`Fz}d+72Ht5kRKUMY=#ru2;n6FRIHr`bjIi@V-AIJi7IyTllWF`njincws6(AT@x z>qg+CGQ|sX*wjON?|AQr!H)b>!-J#D=Wh0P-4i`9l6{}(Ma_SjjcR(Ib&X)_2mDTt zA?x6%^?vaihbq5Oq3E$D#eBD?!@H-AfFE^6CfMJ}k9i`nAdY9?3nt8Wdt6i=;}qsa zMUSyyE$^WmPAb3AVS#VcQ_Oc$7cgU;NoxfM;Q`E%QP#I~R!FqMIH`;+mWG|*PkInu z>Xk?QmkSxMGHzzBiZyTMfT=%o#;kQ}eUv!XXJT9^_u9b{oHmv_|H;@j_Yss~RhSM#Rat6V)R7b;z=gpK4gt?X8* zcP)IR)kAT$l#`ZL<@hiy-EoNXb%?JI!+%_s?hjMuQRh`1e0W%%d|Cebu;qTx@_TG_ z{XwhaNqtTbI6>e9ffEEy5I8{~9f9xVzF&1eXqb-Z@s2$x7VJIfpB^8Yyw=$_-7%Bx zTRUGkKNpvIToH=vp?llUbe_3O>OPz6nPNZJ;^yWV_P4MHj(s_IwiZUpol{x9Io3Wl zci{}>X)m72K5kfvZ$g`wTVcKyEd0JezvuKI*TQqPyZ7qo`uqb=v(@qPyt0Ot%Wf~< z-L9`M$a0w4zNc_rA0Ap6Ct*Zen9t^Ju5XXcm#b5w;?ZH^qt&nyUxer#bjyA?AY(z+ z_BktuzN)4?(c|4n*S7*r9vfZrE~}Lx+a(^(<;|8Xm1Mr2y|$>+Pgwo&B97J$u9`!c@@VxciOv7i%Y`^nZ&-rE<(=K?yyUd z7jRJsP4@819#cDJZ!yp2v)O{L!+=%ZU#EC&G+v^!*qNK+9Ev|n$ThZPxi(0@g^W;t z`9Wb!LjQ!mR@v2t=py0dbvOBAy$9_$O(U^V9ccIXo#P&vPvky%%2-4)1i#~Rxi0n9 z%AXcqy}H&#J7&$;&YZV%*5y`L=K`|JdOPi$kTy?#u+}?)hRS42Bl-$S2UfIUr6X(< zR-OjeyrTy@y{mV(ZWYdNBj@m^^9af_XlDs$<~zGN6NSGAd_CZQ2f37QkZQu^;oK@^ zdi~C|=+GX$JgNQaxeptS6Z@ESju2Y8k-=%5(?P$0llDl`M!};R45~?kj8RwWFL?nM z;!Mu-XJ*=0)R*#1=aGa_qwrC=qJ#WC*csb|&zXhQarR%apHKXwH_$ogEPSU_Q~!O_ z^sG&=0bG zXlMJ@zl^U@e6N5BdJ3I|PDF=EKaJiWEIAXb{vXWL|EX{B`m@pasQd({a6WLffD!xE z@@E0i+1Z)3aDEyeJMfBsEA*0db2Zp`n?p3g3+%Zco}cVjyCak?xAW5vxEEH+OQDV5u+o1@t)GT^e2zR`LNbF}MAq z;$j`%417F|q|QU;S3qat@_WJaXLfl`eP}z#5N(CNo;ca41(`CPBmYM9`|KesJWFYl zltcN*)7p05sxXm`3jQ(jb2{=BLVC}Cv#t}I?5shGpHbPw)VWf9^$Z+U9wGX_lDr8g z{6MX4pS_K3ge=jou^*N)G;RSy*|g2V#?vX(%lxL4=qS@u@(-YPB0S24=q<|YTbWxK zo|p?h!DwgY(of7?4>rJPws#Jk;>_kD<0P%yVdq{x-(A=zk4$-7;%h(tYX&Z9G=zce^G~%qkpt?vw7Im&92Gy=gvbl> z3(EYAw*M31qy@`xTGHmrQ!#Mt9+lbbu)z0Z$NAWv;u&L5<`X<$)LVUc zzxjj$Ta_n9h}3k^BAFxQg_X*cwGFo^m!}ERPg)d{6`lsG#u!I zkSQ<%GwSc>&KT=34>5f&+plpCq5RM%_6Bpi$@z6?QNG409vfXVZ%7(!C~T@?Sw|yR z9uMZIC0B)blQmsqGc0ypxuba*aN!yAFyO>bb27@)VSZGE3)jJB%iI36N8u8O$fL?g z3%!gt<61lv^o+F+Z1p65ZYA;4+GBoG5*bi>}=t5wf}th_DH9t z4StOB7?IZ7Am}UNVw-^RvBt>WmWcUo_Py$=IYjU(^iSyCylqt)=6yNkF+f*=6+ikh z$}F)jC@1Pu^*rwLCc73M;E(R+rS%msq|X(P&Bn&lg9mu=eUHZPW&QOO?9$}B6RJlX zQtrsbo^I*960Gw&iZPsTb2B%)@Nsw-tibHr&}vEB^Sn3X+SdtQ>4POx8ZVUEpsxK% z#>_8+^cMQf+XdK}8{55;%rR5f5{$^7#|eAevob(g(D)x7ljLVrkCV@&Fije_-mCkHR0qi@%ZSP_68<|qx~ya z5^PG>4yEIu+bS4T!$%P(`C!`H-h@MaLi0!NeA`yTV=JU7;Dqm&edOh^&wDN|oLwHB zTx1?lbdQT%iQm%oz52^k_S)o?d)L?PTX?;b%mIq-al@&5;LMAMm6x>qjEfobsqM%f z7fysq-XGkMW#!%v;@E3*e%$u&iX41sxpro){k7$LUlT;@L~+zc~ht;<`I?@umaA-o9ikBOc;VWwuJ_`D0wd z7;b95r;oNm{{()l@1cj87f9v?dRLJ_u8Aj2G7e7W2`DpJS4h4g!M+Wx0~W?fX1kUf zBen`Qo)6)~{(<5cSFr~RleI7Appx}Y_Gw6_O2*y!`OcV%=dV?+#Upjmo@T`zD&(7J z`ERK+XQlm|VeDgTVqlm&FP(R26|69ifx0dMzId)@lAIy{Hf zV8I*-d(GLe$-duC+hbQQ-{CoGof68`ku@Z~uQA`5Ti`pod}o9+bL&gPC4P*!=h?z= z=N;1fv9!u=o!ZvUiRz&6@>Ite_C)cWXun5Ldj+cv!Hw^x`?CztsGY;3%^_R}+4D6q zcem&ErLm4!PO8PFQabQD>a!TNqV4hNS-rExSugpCsZ`g)KBGR#`cPps7(8;z6bU;`ujdgr!|zo@fI>i6WQ0(**gO1)?|gu;n3(6`>E77b+X z#_aMszOvRH+&U|NEyR&V{!_q8egcs@wMXKSIh9A)XnZK&)8ktGO8nlz4jvh=#Ca;+ z4^3~4%v`&03BMWmHrn34H5vOC;eKi^cY$)eeg_|w4ZdoV@S%6o42*;m*x(BWA6W23 z8vqxbg%14Z+kc{n<}4c5!r#kbC50d12{}?Op1q#pfaAK}T{67HVJcC%k5} zoxwk)`UBz{jg@Gd-;)8}seBO;kDjG1aZTI1y*0Z6@8XX(lO`7ji9^OF=CWs@mF<`< zoOPuQ632T($JsZ8!?_^r0=+MuHw!1^fcoJ>2fF%`Ztc69yRtgEc^jOhpYSnr5KNQ@ zd7~ZjZuug?^G4ZwT* zPAB^;Jx;VO>WJP^-K!1BE4pzQXyxAtx*I!-G~fk&Y!siT**J+deK+5fPTE|uXKggw zH?MchJSAzbU+f5dGy0x(i(Ue=a(dch$eGTOnYH=B{_z2H8+oOlz=<|4I?Mq|uF;tq z?==G-(GWIM^H;9kSsWbT2S)q`hkEYvoU>q@>z4f@-AX^E{60+cUq|1+AAa&@2Tn_i zeRqVDFB>~Ua;`cwD})d8d-6c^Hnvyq!YlhBdDcHTFn?pAZ(I68INciVyt%n_b_g9q zJK{c;Cv?5qvg(VSl!lqdDR*gM9bKe63Tb-s zl<Q?AuSXYuQOugc|#`oH*d-L4%;?BlO&*a**aE3Y! zCv+6NKo9xVoB%pOvP`IXgrmX=g*KOP}i4E1h_LGSKoM}mj?aWIlR(O!kA{2ij# zDR-!S;65_UTs-&S;&JkGeR|i;2n#6WeP+rBjN-8|C13P4{(Yi*G(J$Mwh| z_@cY$CxwUTA;a?3iLK@_()CfTFNnwFOdbAq%y(w^<D z4*o}bA|9Xi^pT|XV@IxOTl6I=lMs7bxWwU6>!^;&acg^}=W`RiZtc;Y!9RAf>O);( zdC;@{Li!HM;;c)t%()fp5c1N-V|;W^+v~f!Rj}ck(e6Y;^$J)aOYSUKqPHf(Jc0N_ z4%SE4N6AlJxyJtT^Nh%t`aI4;G5!zO+Sng@oC&)9pf}hbVV*0{rLXNc!*f3-7Dftb z|I&S=RXv&!LQj9-m7J-c=&|!$*Ev(qe3YIOa!xMhi@M8Z_G!UKe#MBVjzx@!v9n|O z_oKc9Y-QgHAMAx-7u%R7%xRkK>FLD$H0s{d+>Iw+zyYLn&wSJF?0|v% ztWl0IBILfPqr!J=0{$ISTjtA;bL{x7OWJuXQ{YX0+B;*KSg$n-m$+PE!~6+)gYg6N zll}}LYaqd1&$kcdQHY%d9%_U1cQH;%oA`ima;kne?=O(HDp?}be1-D+Fs@4@??pF$ zkMKww&r5w|ncnA&KK{ePSSLASsB#F=*)tv4ez2m=6rVB9_UFSkHfh^IH|G0T<}p1^ zaeu3_8i`3-*`kXc@cePDeko}m<<8<`SK!a^%yo?sDUi~Pr+lp4# zWc!-*{>0|R;nFe_O8HX56_{37MjEBa!1E&5#BYlr$e zmRy@nL}|#9aANGjoILT&yOrQ%`Wtz*Ct-~R8wuKK^QD|6cX2(A;$C%RjaPHieh#Jt zlUSCx_c-O}0DN8fW)AW?Ia9MWUk++0$B!;t2QS_b8u>PmQO_jg?bnD~}WPmL4z4BeoazL$-stK>X41 zWA0Nl6&_{%tEDYolaOz9RnXh;6 zSIY~$GY=fswLbS3w!sYfB24_zBxqI3U#p}$uslUFR1L10lZR%j)W2FjlDC`xF2Vuo zUJX8lGu$%2#9|u3J$y0asHxbXc*W)Z7 zZR~I09Z(+SA7`AzJ0agmV%~*uKYI@t*Qenp9IFkPm!eG3sy1IMr4#QO$LQXN%#pL- zjP)bdtn|m))yjigmzYCl4ghQk*-yaSFzW)$efqMvZl(HH%Zuv3ULNh!Ra`wo=3cay z<2Yg^EJkNfFEW>uRtKda4C^yfi>s_ZFt?t}7vQTs`PQ{h%e&G&dk}aRy07*BW^Ol`k5hi-A!JYD2L&h9OZALHJx|t~isN6|1!*#+JcP%&-GPO# z3)e9|{$6R5y$iMm@4ls%tTQAsrF4}-Uv8^km#ar5zI~q14sBklAX9~J#T8RgR`ITQ zRf$F`J}YuwyxNb?V#@rL&1HpsXf_AopQ#)lr)xbsE}{5VSPS3EQ!Z3l@pHw0FNeb9 zdl`e1x}P9$g1`v^CkPxb1k`tx3y)WA>cee0ENYFf4>zq>N*WIAA$GdrxL%&&*Jd)lD*sq!J*nbX?uFb%h97!>+>sXI;w8OM>GUBVq>Cs(@7s82+?V9v+Jup%k_>___8h8OWozdt1=nyKML!>_! z&-Dz^LDb*&s6N=QT>3-3H_qhw`&Ph-zJ9+tq&-K6?bi=tM^SfdtF$tFocsU?EB5|_ zm+p@OE74}H$<}MnBlr8&+1H7*ltKIO@$t1}0$uH&(T~!fE)DOTRy=W(*)h4;ul*~^ zPyA8h1bx=Tr5mcnN;v79hw2)Kv^!|fKcKI9A9fDv8uljfI)gyI;`wqrOJ!K`oV3{V zT=Um#tVA~s!HfFD^^Nb7vlZ8UUBgD#>y#<*OX*vMsP`X|hv$i~#r%z1p%K+m^5`ds4J z8$&zf{ZL-B$2!7;wx&Kvyvdh<=R1}of3L9zdS-0y!kO4d9q$1=SP!4Rcc$z9)_TA9 zd9Xa33wxeugDMx=@JM-zi!tJPqvc6B`TmD%#SG+Md1Pafz=tw=Z6U9(bagph;Wh9r9BgI?VIeXpATydd!K$Hn*^%tq3DR6X5r&wDQ zV=wkd(0=d@g72&C?NvK#es=b-KYY4DmpL2JRNLbn#p9V~<0Rb+Z_Kd?zZciW*E~)d z&m%8~#e{Z7o5XjN^f>t2cV2^yfE@=v^ar#%@uaXB7(qky2qow6=KH0-yEENu+kLBg zx3Y8Ufs^02BVNEr`=00zMAzHq&B8}?#2X>w3G}t*WU*t2AKd6%yVJc>Xm{$<)<$N} zpqG&e$rZkMYH5F9jXcfWTj~cJe3PNmCdh~f`a}$%`fn2HWfStFI=m)VmR6Zf!W)>FZLfW3*0kXuH z&X=LEp2LM3embQ#~3TLXSPQywh_2FwsrO6lpbIqPY(2!E*ATcyzt$#aNE(*yk<%05;gf zP~ziP=?SNDop-Pa{QLm%jmAdhix=J(bnVu?_VbvU^FVdNeu|Pv{fsBwawfKO@M!<^Tv~ z%gA=%Ic)=fh3IJdcXXA0v^(O<J7;DJdY5;oz9x)AZA=PQ!VY^zx=m%)5@NH$Q&ImgAGc=k6#t;hbLeVp zsd_Xz6c@Ass_H{K zLuOSDZ5M2^7skVR59&`oVU7Qc4m)#gqr0HXn4?qw0bPwPDX-BOQNH-5e~~Vkxt8r? zUZ;ED{sz7rXn#c?b;wwP750pD2J;)(f$>=~>W&;hM`IJtK~Yc6i^;C$UTxU>0qU3< z4Sq)@M_|N{K1A=c8Ca#^r1x_px0>#c$9z}lJ;!5q+9!2hzB$>BuOeiOYtbP@2EoYV zr04V>IiB<0 zO0bE~I|r;(g7uGfK8$lJ=#|h;!})@}XI5yV!f8)^Ih$bTHwtH8tUM?%K9D>mb1Qql z>!~_5B2+CIpBHgrjxG6Dw(S{aoTDRuf)D3Z_MU@EWCH(w^a;~J{^<9SF)vH#Fy?L2 z%76yCNH`HTdyP{#Vdr?9)b=)ed++sJT-bZ|zF;#9Ev5MZNs~kQ1`|ymqQjttO&RA^ zI>zAGo6C!{_RX^5I=bFzBSZ1P*xuumTql&7ONn`xy}+5w_*uDo`8`C}$L$TB1vM}z z&3_?$`-417-Mx1hi-(_$HP!D@hel$gvW1nm4HBFZJw>|32RjRrtHiFcT=_n!v|iv&&`#gVyz+1z~WcZ|G^{3kxs$NfdD zkozllXY4y0iTxD({l>bz!oBnvdvZ*kg05mdN@DTVVCvB-O*77psWlc7t-@AkiGiIVp>@N5Ta*N(~e*CcQwI(HA#d|YD(I%wt zVeO5%5as}=3u6v%Q>OJx9+R|d&LUEN+8QqL_-Lgcl)Q>3#y*UbWY;$nmvXek+kRoe zzNyg8Vyp@{nO#8nvb)o1rQ58eEyw#&#HaIKj6IM%<@e)AE)si^Hj5v>#KvMw$xm~h zMT)J3&wlSjd?#b%>hzN2D#(w?1AmDxgS~bs{n*mg(K-CC^<9|@x_&>NTJiZ|aFWmM zU~`$C7JdpR&JSFW4?n{3E5)|gida{6`{AAizbj#muM$tK_)Iuy4vw(|e!>oi zNBRCh<4EYXA|B;<5>CuXGN@R$y#EQCsfPv)T;5qijZ*(^XXs~^9ydw ziGmwrHjf=+UGw*MiFkfo`{&3fX|x^%t+@PFzZXu7`TblzYwhgSRGUnz2l6KwOnc58 zRQ%kJ>(cVHYMgLljh%UQ-TM%mo4F9yp4c12T8wX}X?0_*28g|i@7~zDg3Ws-B!Ry2-Fs5G^RARhP6n=vnNu zp7|KoXY_o(`YN68FZRpRYR^>%AHt)*r_B{?P~<58{Xf!FQy*Ved|gfcR!I}{9^ZpY zvi8ZhV~gL~s)hf!Ox@Q~#!;sg&$WaH;W@4RgOqbrd1C%OAMrEp{qtI{eR;L!ZT0jY zom>wVC`w{HJ z&NryYcts!8&}S!%|q3f+oLH>7=aDv^ujkamWKEBm*MwW#@F^8 z^Len;zH-qxni?LCs(2@4PwJhmTO)CO4|~tv=cDjVa5!X=+#VmUsYfF)@)$Eu-eG%v zMY|sLXjB>EQ6cl%E0=Z(eldK#8gWfK6m1_is=fy)*Yjn2wjVSTACI|wC3t?gK1iMF zoku*`TIQC0*QjYe4n01)rhV%>vG|_QUbA}Fxz_T8k*x`xx3fuC#cw@B`ZnskJTlf^ zO}X;T!PzPMHg;j%u-3ZOGre$%&vR8%AEnt($74r82OB_nDuwc~1W(vv;<29fuB9x| zM_*UsyVA4yY%cgiqQ5Ga4tb(YL(k6J50y)&c$JB+!frU~wkMphkFk|GFOB}LMTe_h z@ZMF=w9p($hx6HB5I+YC+B|sj4EcmNu;m%=QM}e72lYxT+6vK8*f9L6ZHGGNxu5<= zH$jJYLOaamRu;iH*+-smz`Zb}&m|T)RlDWBUUjdwoP@LX3HSjMos-tO8~lssN+I>2 zEaWjQ9r6H1JQvM4RR6|%l1xc2!3S-Xv82yeZ9Na04w{Tb#FyS5XIX3oJNS9#+5&Cck)QJfixmFV-_c>0Ee5r^dR4c(n=Is?MDIGB^ix!(5Yb28ewYV6yjI+u2!g zBOiQ-C&{WWkLzmcc-Snj;6VFeY=KTf{?uN4nYNF~ zeDvgkf5Y{~iyh@~iLoLr<$$&L;XQc$b=bOBo4=$!c4i)2=!e9YpX2Bs%q|Egp8IDi z2kiI`<$TA|0KP)@p1-Q>yAFRi_=O}dcxvB}?>p%SWmAZ5we>w{I??eVeigt$K2-E< z;6l&jO>^}x4AnOyE1ap~{d<2#v3yjz2T$4=dRz1!Y!8ksZ>|Krh)f|%$T9PJ(o;%H zcu)+g&F5)x&3q$RXsoWiJADH)y&fm^SMobj35QD0&{3U6H~vGndwmW+(tSQ{we_r5 zI?CXB`hjELvFG&c*(nCY-1NVJ@R|%)l_47-cOJ|3`2Dw5LTo|C7VxA#Xf)e3TM4I;yK6aY$JiF2o+|rF-_;F%-0!E?kiFdf&cYns zi~aK(^drc-%Bwd9)s!dN$O-xhex$=MpYOiO84EvGB6&hLQKwiA{QdaG=`e;JU)k8? z2QBoNPs25s5|6DBk4>=OCc4H7`jRrLsaL(z2q)=j^=FD#i0pg2fp;F)H@>I-e%xw) z?RwGAv`Op&u#pZD9dsr01=5eUpSlaII?W%O($pJ+YRVIB;Ury7ytnHZ*O5m06u$@b zbNtZVv_15ZY){ViV}o*!UP4Y1pLMzOv0W`52)zx?+>3w4bv1QrL>loSoEYb0*U<*O z{{rg9GtCPq-$6ob55`IbS)1(dFh3Zblm#7V!w)tcc8DKuHUfic%2Yjt6Cv}6g)zUK zt(PAHY#7Zkk`LLVUu3QgIinAdJQgspbj-DYxorHY`78aL5t1(v?akMId~osn$gYEC zHFau48fY{BB)*U(^>tw{xcM6Bxo~%*-QGEAX$yJ|E-_EiE9fH9gN=M-2}3Zua&s&hppmeRP>q=if7&xd?oioIq!e4_^$0t@65!a z^28x}8hpSa_7yC7GM`W9l+S$B
LaIRxxGkGu2Nc^r*p2nQQ3R%~CR5{JU3A)Ai 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 Y|NVQD{zsGk@BjU0zWVPb{hucNe;je&3jhEB literal 0 HcmV?d00001 diff --git a/Lab7/bootloader/boot.S b/Lab7/bootloader/boot.S new file mode 100644 index 000000000..e72c38675 --- /dev/null +++ b/Lab7/bootloader/boot.S @@ -0,0 +1,40 @@ +.section ".text.relo" +.globl _start +# need to relocate the bootloader from 0x80000 to 0x60000 +_start: + adr x10, . //x10=0x80000 + ldr x11, =_blsize + add x11, x11, x10 + ldr x12, =_stext // x12=0x60000 + +moving_relo: + cmp x10, x11 //without bootloader + b.eq end_relo + ldr x13, [x10] + str x13, [x12] //move 0x80000 data to 0x60000 + add x12, x12, #8 + add x10, x10, #8 + b moving_relo +end_relo: + ldr x14, =_bl_entry //jump to boot part + br x14 + + +.section ".text.boot" +.globl _start_bl + mrs x0, mpidr_el1 + and x0, x0,#0xFF // Check processor id + cbz x0, master // Hang for all non-primary CPU + +hang: + b hang + +master: + adr x0, _sbss + adr x1, _ebss + sub x1, x1, x0 + bl memzero + + mov sp, #0x400000 // 4MB + bl main + \ No newline at end of file diff --git a/Lab7/bootloader/linker.ld b/Lab7/bootloader/linker.ld new file mode 100644 index 000000000..60c1e4351 --- /dev/null +++ b/Lab7/bootloader/linker.ld @@ -0,0 +1,28 @@ +ENTRY(_start) +SECTIONS +{ + . = 0x60000; + _stext = .; + .text : { + *(.text.relo) + _bl_entry = .; + *(.text.boot) + *(.text) + *(.rodata) + } + . = ALIGN(0x1000); + _etext = .; + + _sdata = .; + .data : { *(.data) } + . = ALIGN(0x1000); + _edata = .; + + + _sbss = .; + .bss : { *(.bss*) } + . = ALIGN(0x1000); + _ebss = .; + + _blsize = _ebss - _stext; +} \ No newline at end of file diff --git a/Lab7/bootloader/main.c b/Lab7/bootloader/main.c new file mode 100644 index 000000000..86f193d73 --- /dev/null +++ b/Lab7/bootloader/main.c @@ -0,0 +1,36 @@ +#include "mini_uart.h" +#include "utils.h" + +void load_kernel() { + char buffer[MAX_BUFFER_SIZE]; + + while (compare_string(buffer, "[Load Kernel]") != 0) { + uart_recv_string(buffer); + } + + unsigned long k_addr=0,k_size=0; + uart_send_string("Please enter kernel load address (Hex): "); + + uart_recv_string(buffer); + k_addr = getHexFromString(buffer); + uart_send_string("Please enter kernel size (Dec): "); + uart_recv_string(buffer); + k_size = getIntegerFromString(buffer); + + uart_send_string("Please send kernel image now...\n"); + unsigned char* target=(unsigned char*)k_addr; + while(k_size--){ + *target=uart_getb(); + target++; + uart_send('.'); + } + + uart_send_string("loading...\n"); + asm volatile("br %0\n"::"r"(k_addr)); // GCC inline assembly +} + +int main() { + uart_init(); + load_kernel(); + return 0; // should not reach here +} \ No newline at end of file diff --git a/Lab7/include/allocator.h b/Lab7/include/allocator.h new file mode 100644 index 000000000..24a7ea44d --- /dev/null +++ b/Lab7/include/allocator.h @@ -0,0 +1,40 @@ +#ifndef _ALLOCATOR_H +#define _ALLOCATOR_H + +#include "memory.h" +#include + +/* + Partition of a 4K page: (size, amount) + (32, 32) (64, 15) (128, 8) (256, 4) + + First 64 byte is used to record usage of each slot, shown below: + uint32_t usage32; + uint16_t usage64; // upper 1 bit is not used + uint8_t usage128; + uint8_t usage258; // upper 4 bits reserve for future use + + [Future use] 4 bits of record of 256-bytes slot can be used to represent fused mode to get larger slot +*/ + +void *kmalloc(size_t size); +void kfree(void *addr); +uint64_t get_slot_record(frame_free_node *page, int size); +void set_slot_record(frame_free_node *page, int size, int which_slot, int value); +int is_full(frame_free_node *page, int size); +int is_empty(frame_free_node *page, int size); +int round_to_smallest(size_t size); +frame_free_node *get_page_with_slot(int size); +void *allocate_slot(frame_free_node *page, int size); +frame_free_node *find_page(void *addr); +void clear_page(frame_free_node *page); +void print_slot_record(frame_free_node *page); +void free_page_if_empty(frame_free_node *page); + +/* + memory reservation +*/ +void memory_reserve(uint64_t start, uint64_t end); +void init_reserve(); + +#endif \ No newline at end of file diff --git a/Lab7/include/cpio.h b/Lab7/include/cpio.h new file mode 100644 index 000000000..5aa3f44ec --- /dev/null +++ b/Lab7/include/cpio.h @@ -0,0 +1,43 @@ +#ifndef __CPIO__ +#define __CPIO__ + +#include "peripherals/base.h" + +#define __USE_QEMU__ + +#ifdef __USE_QEMU__ +#define CPIO_ADDR ((char *)(KVA + 0x8000000)) // qemu +#else +#define CPIO_ADDR ((char *)(KVA + 0x20000000)) // raspi3 +#endif +#define MAX_INITRAMFS_SIZE 0x100000 // 1M + +#define USER_PROGRAM_VA 0x0 +#define MAX_USER_PROGRAM_SIZE 0x100000 // 1M + + +typedef struct +{ + // uses 8-byte hexadecimal fields for all numbers + char magic[6]; //determine whether this archive is written with little-endian or big-endian integers. + char ino[8]; //determine when two entries refer to the same file. + char mode[8]; //specifies both the regular permissions and the file type. + char uid[8]; // numeric user id + char gid[8]; // numeric group id + char nlink[8]; // number of links to this file. + char mtime[8]; // Modification time of the file + char filesize[8]; // size of the file + char devmajor[8]; + char devminor[8]; + char rdevmajor[8]; + char rdevminor[8]; + char namesize[8]; // number of bytes in the pathname + char check[8]; // always set to zero by writers and ignored by readers. +} __attribute__((packed)) cpio_header; + +void cpio_list(); +void cpio_cat(char *filename); +char * findFile(char *name); +void load_program(char *name, void *page_table); + +#endif \ No newline at end of file diff --git a/Lab7/include/exception.h b/Lab7/include/exception.h new file mode 100644 index 000000000..31b87d1d7 --- /dev/null +++ b/Lab7/include/exception.h @@ -0,0 +1,34 @@ +#ifndef _EXCEPTION_H +#define _EXCEPTION_H + +#include "task.h" +#include + +void enable_interrupt(); +void disable_interrupt(); +void dumpState(); +void lower_sync_handler(); +void lower_iqr_handler(); +void curr_sync_handler(); +void curr_iqr_handler(); +void error_handler(); +void child_return_from_fork(); + +/* Implement system calls */ +int sys_getpid(); +size_t sys_uartread(char buf[], size_t size); +size_t sys_uartwrite(const char buf[], size_t size); +int sys_exec(trap_frame *tf, const char *name, char *const argv[]); +void sys_fork(trap_frame *tf); +void sys_exit(); +int sys_mbox_call(unsigned char ch, volatile unsigned int *mbox); +void sys_kill(int pid); +void sys_signal(int SIGNAL, void (*handler)()); +void sys_signal_kill(int pid, int SIGNAL); + +/* helper functions */ +extern void (*_handler)(); +extern int _pid; +void signal_handler_wrapper(); + +#endif diff --git a/Lab7/include/mail_box.h b/Lab7/include/mail_box.h new file mode 100644 index 000000000..981fcd628 --- /dev/null +++ b/Lab7/include/mail_box.h @@ -0,0 +1,45 @@ +#ifndef _MAIL_BOX_H +#define _MAIL_BOX_H + +/* a properly aligned buffer */ +extern volatile unsigned int mailbox[36]; + +#define MBOX_REQUEST 0 + +/* channels */ +#define MBOX_CH_POWER 0 +#define MBOX_CH_FB 1 +#define MBOX_CH_VUART 2 +#define MBOX_CH_VCHIQ 3 +#define MBOX_CH_LEDS 4 +#define MBOX_CH_BTNS 5 +#define MBOX_CH_TOUCH 6 +#define MBOX_CH_COUNT 7 +#define MBOX_CH_PROP 8 + +/* tags */ +#define MBOX_TAG_GETSERIAL 0x10004 +#define MBOX_TAG_LAST 0 +#define GET_BOARD_REVISION 0x00010002 +#define GET_ARM_EMEORY 0x00010005 + +int mailbox_call(unsigned char ch, volatile unsigned int *mailbox, volatile unsigned int *mailbox_va); + + +/* old macros from lab1 */ +// #define GET_BOARD_REVISION 0x00010002 +// #define GET_ARM_EMEORY 0x00010005 +// #define REQUEST_CODE 0x00000000 +// #define REQUEST_SUCCEED 0x80000000 +// #define REQUEST_FAILED 0x80000001 +// #define TAG_REQUEST_CODE 0x00000000 +// #define END_TAG 0x00000000 + +// extern volatile unsigned int mailbox[8]; + +// int mailbox_call(unsigned char ch, volatile unsigned int *mbox); +void get_board_revision(); +void get_arm_memory(); +void get_serial_number(); + +#endif \ No newline at end of file diff --git a/Lab7/include/memory.h b/Lab7/include/memory.h new file mode 100644 index 000000000..3d3c34631 --- /dev/null +++ b/Lab7/include/memory.h @@ -0,0 +1,43 @@ +#ifndef _MEMORY_H +#define _MEMORY_H + +#include +#include +#include "peripherals/base.h" + +#define MEMORY_BASE_ADDR (KVA + 0x10000000) +#define MEMORY_END_ADDR (KVA + 0x10000000 + 0x10000000) +#define PAGE_SIZE_4K ((uint64_t)1 << 12) +#define FRAME_ARRAY_SIZE ((MEMORY_END_ADDR - MEMORY_BASE_ADDR) / PAGE_SIZE_4K) +#define MAX_32K_NUM (FRAME_ARRAY_SIZE / 8) +#define GET_PAGE_ADDR(index) (MEMORY_BASE_ADDR + (index << 12)) +#define GET_PAGE_INDEX(addr) ((addr - MEMORY_BASE_ADDR) >> 12) + + +typedef struct frame_free_node { + uint64_t index; + struct frame_free_node *next; + struct frame_free_node *prev; // double linked list to enable O(1) removal + struct frame_free_node **list_addr; // find out which list it belongs to in Q(1) +} frame_free_node; + +void memory_init(); +uint64_t page_malloc(int sz); +uint64_t request_page(int size); +uint64_t reserve_page(int size, uint64_t addr); +void page_free(uint64_t addr, int size); +void merge_page(uint64_t index, int size); +void pop_front(frame_free_node **list); +void remove_from_list(frame_free_node **list, uint64_t index); +void add_to_list(frame_free_node **list, uint64_t index); +uint64_t getIndex(uint64_t addr, int size); +frame_free_node *get_free_node(); +void return_free_node(frame_free_node *node); +uint64_t get_allocated_num(); +uint64_t get_free_num(); +void clear_4K_page(uint64_t index); + +void print_frame_array(); +void print_frame_free_lists(); + +#endif diff --git a/Lab7/include/mini_uart.h b/Lab7/include/mini_uart.h new file mode 100644 index 000000000..319eb2dd6 --- /dev/null +++ b/Lab7/include/mini_uart.h @@ -0,0 +1,28 @@ +#ifndef _MINI_UART_H +#define _MINI_UART_H + +void delay(unsigned int clock); +void uart_init( void ); +char uart_recv( void ); +void uart_send ( char c ); +void uart_send_string(char* str); +unsigned int uart_printf(char* fmt,...); +void uart_recv_string(char *buffer); +unsigned char uart_getb(); +void uart_hex(unsigned int d); + +extern char read_buf[]; +extern char write_buf[]; +extern int read_buf_start, read_buf_end; +extern int write_buf_start, write_buf_end; + +void enable_uart_interrupt(); +void disable_uart_interrupt(); +void set_transmit_interrupt(); +void clear_transmit_interrupt(); +void uart_handler(); +void test_uart_async(); +char uart_async_recv(); +void uart_async_send_string(char *str); + +#endif /*_MINI_UART_H */ \ No newline at end of file diff --git a/Lab7/include/mm.h b/Lab7/include/mm.h new file mode 100644 index 000000000..63d247edd --- /dev/null +++ b/Lab7/include/mm.h @@ -0,0 +1,19 @@ +#ifndef _MM_H +#define _MM_H + +#define PAGE_SHIFT 12 +#define TABLE_SHIFT 9 +#define SECTION_SHIFT (PAGE_SHIFT + TABLE_SHIFT) + +#define PAGE_SIZE (1 << PAGE_SHIFT) +#define SECTION_SIZE (1 << SECTION_SHIFT) + +#define LOW_MEMORY (2 * SECTION_SIZE) + +#ifndef __ASSEMBLER__ + +void memzero(unsigned long src, unsigned long n); + +#endif + +#endif /*_MM_H */ \ No newline at end of file diff --git a/Lab7/include/peripherals/base.h b/Lab7/include/peripherals/base.h new file mode 100644 index 000000000..7c2b1a472 --- /dev/null +++ b/Lab7/include/peripherals/base.h @@ -0,0 +1,10 @@ +#ifndef _P_BASE_H +#define _P_BASE_H + +// There is a VideoCore/ARM MMU translating physical addresses to bus addresses. +// The MMU maps physical address 0x3f000000 to bus address 0x7e000000. + +#define KVA 0xffff000000000000 +#define MMIO_BASE (KVA + 0x3F000000) + +#endif /*_P_BASE_H */ \ No newline at end of file diff --git a/Lab7/include/peripherals/gpio.h b/Lab7/include/peripherals/gpio.h new file mode 100644 index 000000000..eaf7c4955 --- /dev/null +++ b/Lab7/include/peripherals/gpio.h @@ -0,0 +1,12 @@ +#ifndef _P_GPIO_H +#define _P_GPIO_H + +#include "peripherals/base.h" + +#define GPFSEL1 ((volatile unsigned int *)(MMIO_BASE + 0x00200004)) +#define GPSET0 ((volatile unsigned int *)(MMIO_BASE + 0x0020001C)) +#define GPCLR0 ((volatile unsigned int *)(MMIO_BASE + 0x00200028)) +#define GPPUD ((volatile unsigned int *)(MMIO_BASE + 0x00200094)) +#define GPPUDCLK0 ((volatile unsigned int *)(MMIO_BASE + 0x00200098)) + +#endif /*_P_GPIO_H */ \ No newline at end of file diff --git a/Lab7/include/peripherals/mail_box.h b/Lab7/include/peripherals/mail_box.h new file mode 100644 index 000000000..49ce6a868 --- /dev/null +++ b/Lab7/include/peripherals/mail_box.h @@ -0,0 +1,25 @@ +#ifndef _P_MAIL_BOX_H +#define _P_MAIL_BOX_H + +#include "base.h" + +#define VIDEOCORE_MBOX (MMIO_BASE + 0x0000B880) +#define MBOX_READ ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x0)) +#define MBOX_POLL ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x10)) +#define MBOX_SENDER ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x14)) +#define MBOX_STATUS ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x18)) +#define MBOX_CONFIG ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x1C)) +#define MBOX_WRITE ((volatile unsigned int*)(VIDEOCORE_MBOX + 0x20)) +#define MBOX_RESPONSE 0x80000000 +#define MBOX_FULL 0x80000000 +#define MBOX_EMPTY 0x40000000 + +// #define MAILBOX_BASE MMIO_BASE + 0xb880 +// #define MAILBOX_READ ((volatile unsigned int *)(MAILBOX_BASE)) +// #define MAILBOX_STATUS ((volatile unsigned int *)(MAILBOX_BASE + 0x18)) +// #define MAILBOX_WRITE ((volatile unsigned int *)(MAILBOX_BASE + 0x20)) + +// #define MAILBOX_EMPTY 0x40000000 +// #define MAILBOX_FULL 0x80000000 + +#endif \ No newline at end of file diff --git a/Lab7/include/peripherals/mini_uart.h b/Lab7/include/peripherals/mini_uart.h new file mode 100644 index 000000000..05b992d82 --- /dev/null +++ b/Lab7/include/peripherals/mini_uart.h @@ -0,0 +1,25 @@ +#ifndef _P_MINI_UART_H +#define _P_MINI_UART_H + +#include "peripherals/base.h" + +#define AUX_ENABLES ((volatile unsigned int *)(MMIO_BASE + 0x00215004)) +#define AUX_MU_IO_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215040)) +#define AUX_MU_IER_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215044)) +#define AUX_MU_IIR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215048)) +#define AUX_MU_LCR_REG ((volatile unsigned int *)(MMIO_BASE + 0x0021504C)) +#define AUX_MU_MCR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215050)) +#define AUX_MU_LSR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215054)) +#define AUX_MU_MSR_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215058)) +#define AUX_MU_SCRATCH ((volatile unsigned int *)(MMIO_BASE + 0x0021505C)) +#define AUX_MU_CNTL_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215060)) +#define AUX_MU_STAT_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215064)) +#define AUX_MU_BAUD_REG ((volatile unsigned int *)(MMIO_BASE + 0x00215068)) + +#define ARM_IRQ_REG_BASE ((volatile unsigned int*)(MMIO_BASE + 0x0000b000)) +#define IRQ_PENDING_1 ((volatile unsigned int*)(MMIO_BASE + 0x0000b204)) +#define ENB_IRQS1 ((volatile unsigned int*)(MMIO_BASE + 0x0000b210)) +#define DISABLE_IRQS1 ((volatile unsigned int*)(MMIO_BASE + 0x0000b21c)) +#define AUX_IRQ (1 << 29) + +#endif /*_P_MINI_UART_H */ \ No newline at end of file diff --git a/Lab7/include/printf.h b/Lab7/include/printf.h new file mode 100644 index 000000000..4286af5cf --- /dev/null +++ b/Lab7/include/printf.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 bzt (bztsrc@github) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ +#ifndef __PRINT_H +#define __PRINT_H + +unsigned int sprintf(char *dst, char* fmt, ...); +unsigned int vsprintf(char *dst,char* fmt, __builtin_va_list args); + +#endif \ No newline at end of file diff --git a/Lab7/include/reboot.h b/Lab7/include/reboot.h new file mode 100644 index 000000000..8b0a5896d --- /dev/null +++ b/Lab7/include/reboot.h @@ -0,0 +1,8 @@ +#ifndef _REBOOT_H +#define _REBOOT_H + +void set(long addr, unsigned int value); +void reboot(int tick); +void cancel_reboot(); + +#endif \ No newline at end of file diff --git a/Lab7/include/shell.h b/Lab7/include/shell.h new file mode 100644 index 000000000..a553069bf --- /dev/null +++ b/Lab7/include/shell.h @@ -0,0 +1,9 @@ +#ifndef _SHELL_H +#define _SHELL_H + +void shell(void); +unsigned int debug_printf(char* fmt,...); + +extern int debug_mode; + +#endif \ No newline at end of file diff --git a/Lab7/include/switch.h b/Lab7/include/switch.h new file mode 100644 index 000000000..c550e1bb6 --- /dev/null +++ b/Lab7/include/switch.h @@ -0,0 +1,8 @@ +#ifndef _SWITCH_H +#define _SWITCH_H + +#include "task.h" + +task_struct* get_current(); + +#endif diff --git a/Lab7/include/sysreg.h b/Lab7/include/sysreg.h new file mode 100644 index 000000000..7e605cf5f --- /dev/null +++ b/Lab7/include/sysreg.h @@ -0,0 +1,22 @@ +#ifndef __SYSREG_H_ +#define __SYSREG_H_ + +#define read_sysreg(r) ({ \ + unsigned long __val; \ + asm volatile("mrs %0, " #r : "=r" (__val)); \ + __val; \ +}) + +#define write_sysreg(r, __val) ({ \ + asm volatile("msr " #r ", %0" :: "r" (__val)); \ +}) + +#define ESR_ELx_EC(esr) ((esr & 0xFC000000) >> 26) +#define ESR_ELx_ISS(esr) (esr & 0x03FFFFFF) + +#define ESR_ELx_EC_SVC64 0b010101 +#define ESR_ELx_EC_DABT_LOW 0b100100 +#define ESR_ELx_EC_IABT_LOW 0b100000 +#define ESR_ELx_EC_BRK_LOW 0b110000 + +#endif \ No newline at end of file diff --git a/Lab7/include/system_call.h b/Lab7/include/system_call.h new file mode 100644 index 000000000..4e120b234 --- /dev/null +++ b/Lab7/include/system_call.h @@ -0,0 +1,16 @@ +#ifndef _SYSTEM_CALL_H +#define _SYSTEM_CALL_H + +#include + +/* helper functions for user programs, not the real system calls */ +int get_pid(); +size_t uart_read(char buf[], size_t size); +size_t uart_write(const char buf[], size_t size); +int exec(const char *name, char *const argv[]); +int fork(); +void exit(); +int mbox_call(unsigned char ch, unsigned int *mbox); +void kill(int pid); + +#endif \ No newline at end of file diff --git a/Lab7/include/task.h b/Lab7/include/task.h new file mode 100644 index 000000000..e92692954 --- /dev/null +++ b/Lab7/include/task.h @@ -0,0 +1,76 @@ +#ifndef _TASK_H +#define _TASK_H + +#include + +#define TERMINATED 0 +#define RUNNING 1 +#define WAITING 2 + + +typedef struct trap_frame { + unsigned long regs[32]; + unsigned long sp_el0; + unsigned long elr_el1; + unsigned long spsr_el1; +} trap_frame; + +typedef struct cpu_context { + unsigned long x19; + unsigned long x20; + unsigned long x21; + unsigned long x22; + unsigned long x23; + unsigned long x24; + unsigned long x25; + unsigned long x26; + unsigned long x27; + unsigned long x28; + unsigned long fp; //x29: kernel frame pointer + unsigned long lr; //x30: link register for function calls + unsigned long sp; // kernel stack pointer +} cpu_context; + +typedef struct task_struct { + cpu_context context; + int id; + int state; + unsigned long user_fp; + void (*handler)(); + void *page_table; + struct task_struct *prev; + struct task_struct *next; +} task_struct; + +typedef struct task_queue { + char name[10]; + task_struct *begin; + task_struct *end; +} task_queue; + +extern task_queue run_queue; +extern task_queue wait_queue; +extern task_queue terminated_queue; +extern int run_queue_sz; +extern char **_argv; + +extern unsigned long user_addr; +extern unsigned long user_sp; + +task_struct* thread_create(void* func); +void thread_schedule(); +void kill_zombies(); +void idle(); +void create_root_thread(); +void run_user_program(const char* name, char *const argv[]); +void switch_to_user_space(); + +void dump_queue(task_queue *queue); +void push_task_to_queue(task_queue *queue, task_struct *task); +void pop_task_from_queue(task_queue *queue, task_struct *task); + +/* Helper functions */ +void put_args(char *const argv[]); +task_struct *find_task_by_id(task_queue *queue, int pid); + +#endif \ No newline at end of file diff --git a/Lab7/include/timer.h b/Lab7/include/timer.h new file mode 100644 index 000000000..ae55eba5b --- /dev/null +++ b/Lab7/include/timer.h @@ -0,0 +1,30 @@ +#ifndef __TIMER_H +#define __TIMER_H + +#include +#include "peripherals/base.h" + +#define CORE0_TIMER_IRQ_CTRL ((volatile unsigned int *)(KVA + 0x40000040)) +#define MAX_TIMER_QUEUE_SIZE 10 + +typedef void (*timer_call_back)(void *); +struct Timer { + struct Timer *next; + uint64_t expire_time; + timer_call_back call_back; + void *args; +}; + +void init_timer(); +void core_timer_enable(); +void core_timer_handler(); +void add_timer(unsigned int time, timer_call_back, void *); +void pop_timer(); +void test_timer(); + +/* callbacks */ +void show_time_elapsed(void *); +void print_timer(void *); +void normal_timer(); + +#endif diff --git a/Lab7/include/utils.h b/Lab7/include/utils.h new file mode 100644 index 000000000..613a92528 --- /dev/null +++ b/Lab7/include/utils.h @@ -0,0 +1,13 @@ +#ifndef _UtilS_H +#define _UtilS_H + +#define MAX_BUFFER_SIZE 256u + +int compare_string(const char *s1, const char *s2); +void uintoa(char *out, unsigned int i); +unsigned int getIntegerFromString(const char *str); +unsigned long getHexFromString(const char *str); +unsigned long hexToDec(char *s); +void align_4(void* size); + +#endif \ No newline at end of file diff --git a/Lab7/include/vm.h b/Lab7/include/vm.h new file mode 100644 index 000000000..f5fa4c23e --- /dev/null +++ b/Lab7/include/vm.h @@ -0,0 +1,36 @@ +#ifndef _VM_H +#define _VM_H + +#include + +//number of the most significant bits that must be either all 0s or all 1s +#define TCR_CONFIG_REGION_48bit (((64 - 48) << 0) | ((64 - 48) << 16)) +//smallest block of memory that can be independently mapped in the translation tables +#define TCR_CONFIG_4KB ((0b00 << 14) | (0b10 << 30)) +#define TCR_CONFIG_DEFAULT (TCR_CONFIG_REGION_48bit | TCR_CONFIG_4KB) + +#define MAIR_DEVICE_nGnRnE 0b00000000 //peripheral access +#define MAIR_NORMAL_NOCACHE 0b01000100 //normal RAM access +#define MAIR_IDX_DEVICE_nGnRnE 0 +#define MAIR_IDX_NORMAL_NOCACHE 1 +#define MAIR_CONFIG_DEFAULT ((MAIR_DEVICE_nGnRnE<<(MAIR_IDX_DEVICE_nGnRnE*8))|(MAIR_NORMAL_NOCACHE<<(MAIR_IDX_NORMAL_NOCACHE*8))) + +#define PD_TABLE 0b11 +#define BOOT_PGD_ATTR PD_TABLE +#define PD_BLOCK 0b01 +#define PD_ACCESS (1 << 10) //access flag, a page fault is generated if not set +#define BOOT_PUD_ATTR (PD_ACCESS | (MAIR_IDX_DEVICE_nGnRnE << 2) | PD_BLOCK) //for L1 (ARM peripherals) +#define BOOT_L2D_ATTR (PD_ACCESS | (MAIR_IDX_DEVICE_nGnRnE << 2) | PD_BLOCK) //for L2 (peripherals) +#define BOOT_L2N_ATTR (PD_ACCESS | (MAIR_IDX_NORMAL_NOCACHE << 2) | PD_BLOCK) //for L2 (normal) + +#define VA2PA(x) ((unsigned long)(x) & 0xffffffffffff) +#define PA2VA(x) ((unsigned long)(x) | 0xffff000000000000) + +void mmu_init(); +void initPT(void** page_table); +void freePT(void** page_table); +void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa); +void dupPT(void* page_table_src, void* page_table_dst, int level); +void vc_identity_mapping(void* page_table_src); + +#endif \ No newline at end of file diff --git a/Lab7/kernel/boot.S b/Lab7/kernel/boot.S new file mode 100644 index 000000000..2d8c6a53f --- /dev/null +++ b/Lab7/kernel/boot.S @@ -0,0 +1,175 @@ +.section ".text.boot" + +.globl _start +_start: + mrs x0, mpidr_el1 // Load value from a system register to one of the general purpose registers (x0–x30) + and x0, x0,#0xFF // Check processor id + cbz x0, master // Hang for all non-primary CPU + b proc_hang + +proc_hang: + b proc_hang + +master: + bl from_el2_to_el1 + ldr x0, =exception_table // setup interrupt vector base + msr vbar_el1, x0 + + bl mmu_init + + ldr x1, =__stk_start + mov sp, x1 + + ldr x1, =__bss_start + ldr w2, =__bss_size +memzero: + cbz w2, main + str xzr, [x1], #8 + sub w2, w2, #1 + b memzero + +main: + bl kernel_main // Perform an unconditional branch and store the return address in x30 + b proc_hang // Should never come here + +from_el2_to_el1: + mov x0, (1 << 31) // EL1 uses aarch64 + msr hcr_el2, x0 + mov x0, 0x3c5 // EL1h (SPSel = 1) with interrupt disabled + msr spsr_el2, x0 + msr elr_el2, lr + eret // return to EL1 + + +// save registers to stack +.macro save_regs + sub sp, sp, 36 * 8 + stp x0, x1, [sp, 16 * 0] + stp x2, x3, [sp, 16 * 1] + stp x4, x5, [sp, 16 * 2] + stp x6, x7, [sp, 16 * 3] + stp x8, x9, [sp, 16 * 4] + stp x10, x11, [sp, 16 * 5] + stp x12, x13, [sp, 16 * 6] + stp x14, x15, [sp, 16 * 7] + stp x16, x17, [sp, 16 * 8] + stp x18, x19, [sp, 16 * 9] + stp x20, x21, [sp, 16 * 10] + stp x22, x23, [sp, 16 * 11] + stp x24, x25, [sp, 16 * 12] + stp x26, x27, [sp, 16 * 13] + stp x28, x29, [sp, 16 * 14] + str x30, [sp, 16 * 15] + + mrs x19, sp_el0 + mrs x20, elr_el1 + mrs x21, spsr_el1 + stp x19,x20, [sp, 16 * 16] + str x21, [sp, 16 * 17] +.endm + +// load registers from stack +.macro load_regs + ldp x21, x20, [sp, 16 * 17] + ldp x19, x20, [sp, 16 * 16] + msr spsr_el1, x21 + msr elr_el1, x20 + msr sp_el0, x19 + + ldp x0, x1, [sp, 16 * 0] + ldp x2, x3, [sp, 16 * 1] + ldp x4, x5, [sp, 16 * 2] + ldp x6, x7, [sp, 16 * 3] + ldp x8, x9, [sp, 16 * 4] + ldp x10, x11, [sp, 16 * 5] + ldp x12, x13, [sp, 16 * 6] + ldp x14, x15, [sp, 16 * 7] + ldp x16, x17, [sp, 16 * 8] + ldp x18, x19, [sp, 16 * 9] + ldp x20, x21, [sp, 16 * 10] + ldp x22, x23, [sp, 16 * 11] + ldp x24, x25, [sp, 16 * 12] + ldp x26, x27, [sp, 16 * 13] + ldp x28, x29, [sp, 16 * 14] + ldr x30, [sp, 16 * 15] + add sp, sp, 36 * 8 +.endm + + +//exception table +.align 11 +exception_table: + b TODO + .align 7 + b TODO + .align 7 + b TODO + .align 7 + b TODO + + .align 7 + b curr_sync + .align 7 + b curr_iqr + .align 7 + b TODO + .align 7 + b TODO + + .align 7 + b lower_sync + .align 7 + b lower_iqr + .align 7 + b TODO + .align 7 + b TODO + + .align 7 + b TODO + .align 7 + b TODO + .align 7 + b TODO + .align 7 + b TODO + +//Synchronous from lower level +lower_sync: + save_regs + mov x0, sp // points to the kernel stack of the running user thread + bl lower_sync_handler + load_regs + eret + +//IRQ from lower level (sp points to the kernel stack of the running user thread) +lower_iqr: + save_regs + bl lower_iqr_handler + load_regs + eret + +//Synchronous from current level +curr_sync: + save_regs + bl curr_sync_handler + load_regs + eret + +//IRQ from current level +curr_iqr: + save_regs + bl curr_iqr_handler + load_regs + eret + +.globl child_return_from_fork +child_return_from_fork: + load_regs + eret + +TODO: + save_regs + bl error_handler + load_regs + eret \ No newline at end of file diff --git a/Lab7/kernel/exception.c b/Lab7/kernel/exception.c new file mode 100644 index 000000000..bcb05877e --- /dev/null +++ b/Lab7/kernel/exception.c @@ -0,0 +1,280 @@ +#include "utils.h" +#include "mini_uart.h" +#include "peripherals/mini_uart.h" +#include "exception.h" +#include "sysreg.h" +#include "timer.h" +#include "system_call.h" +#include "switch.h" +#include "memory.h" +#include "cpio.h" +#include "shell.h" +#include "mail_box.h" +#include "vm.h" + + +void enable_interrupt() { asm volatile("msr DAIFClr, 0xf"); } +void disable_interrupt() { asm volatile("msr DAIFSet, 0xf"); } + +/* system call */ +void lower_sync_handler(trap_frame *tf) { + unsigned long esr, svc; + asm volatile("mrs %0, esr_el1 \n":"=r"(esr):); + unsigned long *regs = tf->regs; + if (((esr >> 26) & 0x3f) == 0x15) { + svc = esr & 0x1ffffff; + if (svc == 0) { + switch(regs[8]) { + case 0: + regs[0] = sys_getpid(); + thread_schedule(); + break; + case 1: + enable_interrupt(); + regs[0] = sys_uartread((char*)regs[0], (size_t)regs[1]); + disable_interrupt(); + break; + case 2: + enable_interrupt(); + regs[0] = sys_uartwrite((const char*)regs[0], (size_t)regs[1]); + disable_interrupt(); + break; + case 3: + sys_exec(tf, (const char*)regs[0], (char * const*)regs[1]); + thread_schedule(); + break; + case 4: + sys_fork(tf); + thread_schedule(); + break; + case 5: + sys_exit(regs[0]); + thread_schedule(); + break; + case 6: + regs[0] = sys_mbox_call((unsigned char)regs[0], (volatile unsigned int*)regs[1]); + thread_schedule(); + break; + case 7: + sys_kill(regs[0]); + thread_schedule(); + break; + case 8: + sys_signal((int)regs[0], (void (*)())regs[1]); + thread_schedule(); + break; + case 9: + sys_signal_kill((int)regs[0], (int)regs[1]); + thread_schedule(); + break; + default: + uart_printf("[ERROR][lower_sync_handler] unknown svc!\n"); + } + } + else { + uart_printf("[ERROR][lower_sync_handler] unknown exception!\n"); + while(1) {} + } + } + else { + unsigned ec = (esr & 0xFC000000) >> 26; + switch(ec) { + case ESR_ELx_EC_DABT_LOW: + uart_printf("[Segfault] Userland data abort exception! pc: %x\n", read_sysreg(elr_el1)); + while(1) {} + case ESR_ELx_EC_IABT_LOW: + uart_printf("[Segfault] Userland instruction abort exception! pc: %x\n", read_sysreg(elr_el1)); + while(1) {} + default: + uart_printf("[ERROR][lower_sync_handler] unknown exception!\n"); + while(1) {} + } + } +} + +void lower_iqr_handler() { + pop_timer(); +} + +void curr_sync_handler() { + unsigned long elr = read_sysreg(elr_el1); + uart_printf("[ERROR][curr_sync_handler] PC: %x\n", elr); + error_handler(); +} + +void curr_iqr_handler() { + if (*IRQ_PENDING_1 & AUX_IRQ) + uart_handler(); + else + pop_timer(); +} + +void error_handler() { + uart_send_string("[ERROR] unknown exception...\n"); + while(1){} +} + +void dumpState() { + unsigned long esr = read_sysreg(esr_el1); + unsigned long elr = read_sysreg(elr_el1); + unsigned long spsr = read_sysreg(spsr_el1); + uart_printf("--------------------\n"); + uart_printf("SPSR: 0x%x\n", spsr); + uart_printf("ELR: 0x%x\n", elr); + uart_printf("ESR: 0x%x\n", esr); + uart_printf("--------------------\n"); +} + +/* Implement system calls */ +int sys_getpid() { + debug_printf("[DEBUG][sys_getpid] id: %d\n", get_current()->id); + return get_current()->id; +} + +size_t sys_uartread(char buf[], size_t size) { + char recv; + for (int i = 0; i < size; ++i) { + recv = uart_recv(); + buf[i] = recv; + } + debug_printf("[DEBUG][sys_uartread]\n"); + return size; +} + +size_t sys_uartwrite(const char buf[], size_t size) { + for (int i = 0; i < size; ++i) + uart_send((char)buf[i]); + debug_printf("[DEBUG][sys_uartwrite]\n"); + return size; +} + +int sys_exec(trap_frame *tf, const char *name, char *const argv[]) { + task_struct *cur_task = get_current(); + freePT(&(cur_task->page_table)); + initPT(&(cur_task->page_table)); + load_program((char*)name, cur_task->page_table); + for (int i = 0; i < 4; ++i) + map_pages(cur_task->page_table, 0xffffffffb000 + i * 0x1000, 1, VA2PA(page_malloc(0))); + _argv = (char**)argv; + tf->elr_el1 = (unsigned long)USER_PROGRAM_VA; + tf->sp_el0 = cur_task->user_fp; + return 0; +} + +void sys_fork(trap_frame *tf) { + task_struct *parent = get_current(); + task_struct *child = thread_create(NULL); + int child_id = child->id; + //unsigned long user_fp = child->user_fp; + task_struct *prev = child->prev; + task_struct *next = child->next; + + /* copy the task context & kernel stack (including trap frame) of parent to child */ + char* src = (char*)parent; + char* dst = (char*)child; + int size = PAGE_SIZE_4K; + while(size--) { + *dst = *src; + src++; + dst++; + } + + initPT(&(child->page_table)); + dupPT(parent->page_table, child->page_table, 0); + + /* set up the correct value for registers */ + parent->context.sp = (unsigned long)tf; + if ((unsigned long)child > (unsigned long)parent) + child->context.sp = parent->context.sp + ((unsigned long)child - (unsigned long)parent); + else + child->context.sp = parent->context.sp - ((unsigned long)parent - (unsigned long)child); + //int parent_ustack_size = (parent->user_fp) - (tf->sp_el0) + 1; + child->context.fp = (unsigned long)child + PAGE_SIZE_4K - 16; + child->context.lr = (unsigned long)child_return_from_fork; + child->id = child_id; + //child->user_fp = user_fp; + child->prev = prev; + child->next = next; + trap_frame *child_tf = (trap_frame*)(child->context.sp); + //child_tf->sp_el0 = (child->user_fp) - parent_ustack_size + 1; + child_tf->regs[0] = 0; + child_tf->regs[29] = child->context.fp; + tf->regs[0] = child->id; + child->handler = parent->handler; + + /* copy the user stack of parent to child */ + // char *src_stack = (char*)(tf->sp_el0); + // char *dst_stack = (char*)(child_tf->sp_el0); + + // while(parent_ustack_size--) { + // *dst_stack = *src_stack; + // src_stack++; + // dst_stack++; + // } + + debug_printf("[DEBUG][sys_fork] parent: %d, child: %d\n", parent->id, child->id); +} + +void sys_exit() { + task_struct *cur_task = get_current(); + cur_task->state = TERMINATED; + pop_task_from_queue(&run_queue, cur_task); + push_task_to_queue(&terminated_queue, cur_task); + debug_printf("[DEBUG][sys_exit] thread: %d\n", cur_task->id); +} + +int sys_mbox_call(unsigned char ch, volatile unsigned int *mbox) { + debug_printf("[DEBUG][sys_mbox_call]"); + if (((uint64_t)mbox & 0xFFFF000000000000) == 0) { //lower va + //uart_printf("va: %x\n", mbox); + asm volatile("mov x0, %0 \n"::"r"(mbox)); + asm volatile("at s1e0r, x0 \n"); + uint64_t frame_addr = (uint64_t)read_sysreg(par_el1) & (0xFFFFFFFFF << 12); + uint64_t pa = frame_addr | ((uint64_t)mbox & 0xFFF); + //uart_printf("frame_addr: %x, pa: %x\n", frame_addr, pa); + if ((read_sysreg(par_el1) & 0x1) == 1) + uart_printf("[ERROR][sys_mbox_call] va translation fail!\n"); + return mailbox_call(ch, (volatile unsigned int*)pa, mbox); + } + return mailbox_call(ch, (volatile unsigned int*)mbox, mbox); +} + +void sys_kill(int pid) { + task_struct *task = NULL; + if ((task = find_task_by_id(&run_queue, pid))) + pop_task_from_queue(&run_queue, task); + else if ((task = find_task_by_id(&wait_queue, pid))) + pop_task_from_queue(&wait_queue, task); + if (task) { + task->state = TERMINATED; + push_task_to_queue(&terminated_queue, task); + } + debug_printf("[DEBUG][sys_kill]"); +} + +void sys_signal(int SIGNAL, void (*handler)()) { + get_current()->handler = handler; +} + +void sys_signal_kill(int pid, int SIGNAL) { + task_struct *task = NULL; + if (!(task = find_task_by_id(&run_queue, pid))) + task = find_task_by_id(&wait_queue, pid); + if (!task) + return; + _handler = task->handler; + _pid = pid; + task_struct *handler_task = thread_create(switch_to_user_space); + user_addr = (unsigned long)signal_handler_wrapper; + user_sp = handler_task->user_fp; +} + +/* helper functions */ +void (*_handler)() = NULL; +int _pid = 0; +void signal_handler_wrapper() { + if (_handler) + _handler(); + kill(_pid); + exit(); +} \ No newline at end of file diff --git a/Lab7/kernel/kernel.c b/Lab7/kernel/kernel.c new file mode 100644 index 000000000..a767fd276 --- /dev/null +++ b/Lab7/kernel/kernel.c @@ -0,0 +1,18 @@ +#include "mini_uart.h" +#include "shell.h" +#include "exception.h" +#include "timer.h" +#include "memory.h" +#include "allocator.h" +#include "task.h" + + +void kernel_main(void) { + uart_init(); + memory_init(); + init_reserve(); + init_timer(); + enable_interrupt(); + create_root_thread(); + shell(); +} diff --git a/Lab7/kernel/linker.ld b/Lab7/kernel/linker.ld new file mode 100644 index 000000000..df30f2423 --- /dev/null +++ b/Lab7/kernel/linker.ld @@ -0,0 +1,16 @@ +SECTIONS +{ + . = 0xffff000000000000; + . += 0x80000; + .text.boot : { *(.text.boot) } + .text : { *(.text) } + .rodata : { *(.rodata) } + .data : { *(.data) } + . = ALIGN(0x8); + __bss_start = .; + .bss : { *(.bss*) } + __bss_end = .; + __stk_start = __bss_end + (1<<16); +} + +__bss_size = (__bss_end - __bss_start) >> 3; \ No newline at end of file diff --git a/Lab7/lib/allocator.c b/Lab7/lib/allocator.c new file mode 100644 index 000000000..3d2a02eb8 --- /dev/null +++ b/Lab7/lib/allocator.c @@ -0,0 +1,178 @@ +#include "allocator.h" +#include "utils.h" +#include "mini_uart.h" +#include "shell.h" +#include "cpio.h" + + +/* record the usage of each slot */ +const int slot_size = 4; +const int slot[] = {32, 64, 128, 256}; +const uint64_t slot_max[] = {UINT32_MAX, UINT16_MAX - 1, UINT8_MAX, 15}; +const int slot_record_bits[] = {32, 15, 8, 4}; +const uint64_t slot_masks[] = {UINT32_MAX, UINT16_MAX, UINT8_MAX, UINT8_MAX}; +const int slot_shift_amout[] = {32, 16, 8, 0}; +const int slot_offset[] = {64, 64 + 32 * 32, 64 + 32 * 32 + 64 * 15, 64 + 32 * 32 + 64 * 15 + 128 * 8}; + +/* mantain pages */ +frame_free_node *allocated_pages = NULL; + +void *kmalloc(size_t size) { + int sz = round_to_smallest(size); + frame_free_node * page = get_page_with_slot(sz); + return allocate_slot(page, sz); +} + +void kfree(void *addr) { + frame_free_node *page = find_page(addr); + uint64_t _addr = (uint64_t)addr - GET_PAGE_ADDR(page->index); + int size; + for (size = 3; size >= 0; --size) { + if (_addr >= slot_offset[size]) + break; + } + _addr -= slot_offset[size]; + int which_slot = _addr / slot[size]; + set_slot_record(page, size, which_slot, 0); + free_page_if_empty(page); +} + +/* get usage record of the slot size in the page */ +uint64_t get_slot_record(frame_free_node *page, int size) { + uint64_t page_addr = GET_PAGE_ADDR(page->index); + uint64_t record = *(uint64_t *)page_addr; + return (record & (slot_masks[size] << slot_shift_amout[size])) >> slot_shift_amout[size]; +} + +/* set/unset the bit in the record for a slot of a size of a page */ +void set_slot_record(frame_free_node *page, int size, int which_slot, int value) { + uint64_t record = get_slot_record(page, size); + uint64_t mask = (uint64_t)1 << which_slot; + if (value == 0) { + mask = ~mask; + record &= mask; + } + else + record |= mask; + uint64_t *full_record_ptr = (uint64_t *)GET_PAGE_ADDR(page->index); + mask = slot_masks[size] << slot_shift_amout[size]; + *full_record_ptr &= ~mask; + *full_record_ptr |= (record << slot_shift_amout[size]); + if (which_slot >= slot_record_bits[size]) + uart_printf("[ERROR] set_slot_record: invlaid slot index!\n"); + debug_printf("[DEBUG][set_slot_record] set %d'th of %d bytes slot to %d\n", which_slot, slot[size], value); +} + +/* check if there is any empty 2^size bytes slot is spedified page */ +int is_full(frame_free_node *page, int size) { + return get_slot_record(page, size) == slot_max[size]; +} + +int is_empty(frame_free_node *page, int size) { + return get_slot_record(page, size) == 0; +} + +int round_to_smallest(size_t size) { + if (size <= 0) + uart_printf("[ERROR] round_to_smallest: invalid size!\n"); + if (size > 256) + uart_printf("[ERROR] round_to_smallest: too large!\n"); + int i; + for (i = 0; i < 4; ++i) { + if (slot[i] >= size) + break; + } + if (i == 4) + uart_printf("[ERROR][round_to_smallest] should not reach here!\n"); + debug_printf("[DEBUG][round_to_smallest] round %d to %d bytes\n", size, slot[i]); + return i; +} + +frame_free_node *get_page_with_slot(int size) { + frame_free_node *page = allocated_pages; + while (page) { + if (!is_full(page, size)) + break; + page = page->next; + } + if (!page) { + uint64_t addr = page_malloc(0); + uint64_t index = GET_PAGE_INDEX(addr); + add_to_list(&allocated_pages, index); + page = allocated_pages; + clear_4K_page(page->index); + } + return page; +} + +void *allocate_slot(frame_free_node *page, int size) { + uint64_t record = get_slot_record(page, size); + uint64_t mask = 1; + int i; + for (i = 0; i < slot_record_bits[size]; ++i) { + if ((record & mask) == 0) + break; + mask <<= 1; + } + set_slot_record(page, size, i, 1); + if (i == slot_record_bits[size]) + uart_printf("[ERROR] allocate_slot: should not reach here!\n"); + uint64_t addr = GET_PAGE_ADDR(page->index) + slot_offset[size] + slot[size] * i; + return (void*)addr; +} + +frame_free_node *find_page(void *addr) { + uint64_t _addr = (uint64_t)addr; + uint64_t mask = (~(uint64_t)0) << 12; + _addr &= mask; + frame_free_node *iter = allocated_pages; + while (iter) { + if (GET_PAGE_ADDR(iter->index) == _addr) + break; + iter = iter->next; + } + return iter; +} + +void clear_page(frame_free_node *page) { + char *addr = (char*)GET_PAGE_ADDR(page->index); + int sz = 1 << 12; + for (int i = 0; i < sz; ++i) + addr[i] = 0; +} + +void print_slot_record(frame_free_node *page) { + if (page) { + uart_printf("[Slot record] (page index: %ld) ", page->index); + for (int i = 0; i < 4; ++i) { + uint64_t record = get_slot_record(page, i); + uart_printf("%x ", record); + } + uart_printf("\n"); + } + else + uart_printf("[Slot record] page already freed!\n"); +} + +void free_page_if_empty(frame_free_node *page) { + for (int i = 0; i < 4; ++i) { + if (!is_empty(page, i)) + return; + } + remove_from_list(&allocated_pages, page->index); + page_free(GET_PAGE_ADDR(page->index), 0); +} + + +void memory_reserve(uint64_t start, uint64_t end) { + for (uint64_t i = start; i < end + PAGE_SIZE_4K; i += PAGE_SIZE_4K) + reserve_page(0, i); +} + +void init_reserve() { + // memory_reserve(KVA + 0x0000, KVA + 0x1000); // spin tables for multicore boot + // reserve_page(0, KVA + 0x2000); // L2 page table for kernel + // reserve_page(0, KVA + 0x3000); // L2 page table for kernel + // memory_reserve(KVA + 0x80000, KVA + 0x800000); // kernel and heap/stack space + debug_printf("[DEBUG][init_reserve] reserves 0X%x 4K pages\n", get_allocated_num()); +} \ No newline at end of file diff --git a/Lab7/lib/cpio.c b/Lab7/lib/cpio.c new file mode 100644 index 000000000..e4fd3d64f --- /dev/null +++ b/Lab7/lib/cpio.c @@ -0,0 +1,107 @@ +#include "peripherals/gpio.h" +#include "mini_uart.h" +#include "utils.h" +#include "shell.h" +#include "cpio.h" +#include "timer.h" +#include "sysreg.h" +#include +#include "vm.h" +#include "memory.h" + + +void cpio_list() { + /* + cpio archive comprises a header record with basic numeric metadata followed by + the full pathname of the entry and the file data. + */ + char *addr = CPIO_ADDR; + + while (compare_string((char *)(addr + sizeof(cpio_header)), "TRAILER!!!") != 0) { + cpio_header *header = (cpio_header*)addr; + + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); // The pathname is followed by NUL bytes so that the total size of the fixed header plus pathname is a multiple of four. + align_4(&file_size); // Likewise, the file data is padded to a multiple of four bytes. + uart_send_string(addr + sizeof(cpio_header)); // print the fine name + uart_printf(" %d\n", file_size); + addr += (headerPathname_size + file_size); + } +} + +char *findFile(char *name) { + char *addr = CPIO_ADDR; + while (compare_string((char *)(addr + sizeof(cpio_header)), "TRAILER!!!") != 0) { + if ((compare_string((char *)(addr + sizeof(cpio_header)), name) == 0)) { + return addr; + } + cpio_header *header = (cpio_header *)addr; + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); + align_4(&file_size); + addr += (headerPathname_size + file_size); + } + return 0; +} + +void cpio_cat(char *filename) { + char *target = findFile(filename); + if (target) { + cpio_header *header = (cpio_header *)target; + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); + align_4(&file_size); + + char *file_content = target + headerPathname_size; + for (unsigned int i = 0; i < file_size; i++) { + uart_send(file_content[i]); // print the file content + } + uart_send_string("\r\n"); + } + else { + uart_send_string("File not found!\n"); + } +} + +void load_program(char *name, void *page_table) { + unsigned char *target = (unsigned char*)findFile(name); + if (target) { + cpio_header *header = (cpio_header *)target; + unsigned long pathname_size = hexToDec(header->namesize); + unsigned long file_size = hexToDec(header->filesize); + unsigned long headerPathname_size = sizeof(cpio_header) + pathname_size; + + align_4(&headerPathname_size); + align_4(&file_size); + + asm volatile("mov x0, %0 \n"::"r"(page_table)); + asm volatile("dsb ish \n"); //ensure write has completed + asm volatile("msr ttbr0_el1, x0 \n"); //switch translation based address. + asm volatile("tlbi vmalle1is \n"); //invalidates cached copies of translation table entries from L1 TLBs + asm volatile("dsb ish \n"); //ensure completion of TLB invalidatation + asm volatile("isb \n"); //clear pipeline + + unsigned char *file_content = target + headerPathname_size; + int sz = file_size / 4096 + (file_size % 4096 != 0); + for (int i = 0; i < sz; ++i) { + unsigned char *addr = (unsigned char*)page_malloc(0); + map_pages(page_table, USER_PROGRAM_VA + 4096 * i, 1, (uint64_t)VA2PA(addr)); + for (int j = 0; j < 4096; ++j) + *(addr + j) = file_content[i * 4096 + j]; + } + + debug_printf("[DEBUG][load_program] load program: %s\n", name); + } + else { + uart_send_string("File not found!\n"); + } +} \ No newline at end of file diff --git a/Lab7/lib/mail_box.c b/Lab7/lib/mail_box.c new file mode 100644 index 000000000..27e918ec0 --- /dev/null +++ b/Lab7/lib/mail_box.c @@ -0,0 +1,109 @@ +#include "peripherals/mail_box.h" +#include "mail_box.h" +#include "mini_uart.h" +#include "utils.h" + +/* mailbox message buffer */ +volatile unsigned int __attribute__((aligned(16))) mailbox[36]; + +/** + * Make a mailbox call. Returns 0 on failure, non-zero on success + */ +int mailbox_call(unsigned char ch, volatile unsigned int *mailbox, volatile unsigned int *mailbox_va) +{ + volatile unsigned int r = (((volatile unsigned int)((volatile unsigned long)mailbox)&~0xF) | (ch&0xF)); + /* wait until we can write to the mailbox */ + do{asm volatile("nop");}while(*MBOX_STATUS & MBOX_FULL); + /* write the address of our message to the mailbox with channel identifier */ + + *MBOX_WRITE = r; + + /* now wait for the response */ + while(1) { + /* is there a response? */ + do{asm volatile("nop");}while(*MBOX_STATUS & MBOX_EMPTY); + /* is it a response to our message? */ + if(r == *MBOX_READ) { + /* is it a valid successful response? */ + return mailbox_va[1]==MBOX_RESPONSE; + } + } + return 0; +} + +// volatile unsigned int __attribute__((aligned(16))) mailbox[8]; + +// int mailbox_call(unsigned char ch, volatile unsigned int *mbox) { +// uart_printf("==========\n"); +// for (int i = 0; i < 8; ++i) +// uart_printf("%x\n", mbox[i]); +// uart_printf("==========\n"); +// /* +// 1. Combine the message address (upper 28 bits) with channel number (lower 4 bits) +// 2. Check if Mailbox 0 status register’s full flag is set. +// 3. If not, then you can write to Mailbox 1 Read/Write register. +// 4. Check if Mailbox 0 status register’s empty flag is set. +// 5. If not, then you can read from Mailbox 0 Read/Write register. +// 6. Check if the value is the same as you wrote in step 1. +// */ +// unsigned int msg = (((unsigned int)((unsigned long)mailbox) & ~0xF) | (ch & 0xF)); +// while (*MAILBOX_STATUS & MAILBOX_FULL) {} +// *MAILBOX_WRITE = msg; +// while (1) { +// while (*MAILBOX_STATUS & MAILBOX_EMPTY) {} +// if(msg == *MAILBOX_READ){ +// return mbox[1] == REQUEST_SUCCEED; +// } +// } +// return 0; +// } + +void get_board_revision() { + mailbox[0] = 7 * 4; // buffer size in bytes + mailbox[1] = MBOX_REQUEST; + // tags begin + mailbox[2] = GET_BOARD_REVISION; // tag identifier + mailbox[3] = 4; // maximum of request and response value buffer's length. + mailbox[4] = 8; + mailbox[5] = 0; // value buffer + // tags end + mailbox[6] = MBOX_TAG_LAST; + if (mailbox_call(MBOX_CH_PROP, mailbox, mailbox)) + uart_printf("board revision number: 0x%x\n", mailbox[5]); + else + uart_printf("can not get board revision number!\n"); +} + +void get_arm_memory() { + mailbox[0] = 8 * 4; // buffer size in bytes + mailbox[1] = MBOX_REQUEST; + // tags begin + mailbox[2] = GET_ARM_EMEORY; // tag identifier + mailbox[3] = 8; // maximum of request and response value buffer's length. + mailbox[4] = 8; + mailbox[5] = 0; // value buffer + mailbox[6] = 0; // value buffer + // tags end + mailbox[7] = MBOX_TAG_LAST; + if (mailbox_call(MBOX_CH_PROP, mailbox, mailbox)) { + uart_printf("base address: %x\n", mailbox[5]); + uart_printf("memory size: %x\n", mailbox[6]); + } + else + uart_printf("can not get memory info!\n"); +} + +void get_serial_number() { + mailbox[0] = 8*4; // length of the message + mailbox[1] = MBOX_REQUEST; // this is a request message + mailbox[2] = MBOX_TAG_GETSERIAL; // get serial number command + mailbox[3] = 8; // buffer size + mailbox[4] = 8; + mailbox[5] = 0; // clear output buffer + mailbox[6] = 0; + mailbox[7] = MBOX_TAG_LAST; + if(mailbox_call(MBOX_CH_PROP, mailbox, mailbox)) + uart_printf("serial number is: %x%x\n", mailbox[5], mailbox[6]); + else + uart_printf("can not get serial number!\n"); +} \ No newline at end of file diff --git a/Lab7/lib/memory.c b/Lab7/lib/memory.c new file mode 100644 index 000000000..21d1b032b --- /dev/null +++ b/Lab7/lib/memory.c @@ -0,0 +1,264 @@ +#include "memory.h" +#include "mini_uart.h" +#include "shell.h" + + +frame_free_node *frame_free_lists[4]; // 4K, 8K, 16K, 32K +char frame_array[FRAME_ARRAY_SIZE]; // 0xBB: buddy, 0xAA: allocated +frame_free_node *node_pool_head; // only mantain the "next" pointer, should not use "prev" +frame_free_node node_pool[FRAME_ARRAY_SIZE]; +frame_free_node *free_node_table[FRAME_ARRAY_SIZE]; // map index to node to enable O(1) search and removal + + +void memory_init() { + for (int i = 0; i < FRAME_ARRAY_SIZE; ++i) { + frame_array[i] = 0xBB; + if (i % 8 == 0) + frame_array[i] = 3; + free_node_table[i] = NULL; + } + + for (int i = 0; i < MAX_32K_NUM - 1; ++i) { + node_pool[i].next = &node_pool[i + 1]; + node_pool[i + 1].prev = &node_pool[i]; + } + node_pool[MAX_32K_NUM - 1].next = NULL; + node_pool[0].prev = NULL; + for (int i = 0; i < MAX_32K_NUM; ++i) { + node_pool[i].index = i << 3; + node_pool[i].list_addr = &frame_free_lists[3]; + free_node_table[i << 3] = &node_pool[i]; + } + + for (int i = MAX_32K_NUM; i < FRAME_ARRAY_SIZE - 1; ++i) + node_pool[i].next = &node_pool[i + 1]; + node_pool[FRAME_ARRAY_SIZE - 1].next = NULL; + + frame_free_lists[0] = NULL; + frame_free_lists[1] = NULL; + frame_free_lists[2] = NULL; + frame_free_lists[3] = &node_pool[0]; + node_pool_head = &node_pool[MAX_32K_NUM]; +} + +uint64_t page_malloc(int sz) { + uint64_t index = request_page(sz); + return GET_PAGE_ADDR(index); +} + +/* currently support 4K page request only, the value of frame array may be wrong otherwise */ +uint64_t request_page(int size) { + // if (!get_free_num()) { + // uart_printf("[ERROR][request_page] run out of memory!\n"); + // while (1) {} + // } + + if (size < 0 || size > 3) { + uart_printf("[ERROR][request_page] request_page(%d): illegal argument!\n", size); + return 0; + } + + frame_free_node *free_node = frame_free_lists[size]; + uint64_t index; + if (free_node) { + index = free_node->index; + pop_front(&frame_free_lists[size]); + } + else { + index = request_page(size + 1); + int end = index + (2 << size) - 1; + int mid = (index + end) / 2; + for (int i = index + 1; i <= end; ++i) + frame_array[i] = 0xBB; + frame_array[mid + 1] = size; + add_to_list(&frame_free_lists[size], mid + 1); + debug_printf("[DEBUG][request_page] release redundant memory, index: %ld, size: %ldK\n", mid + 1, 4 * (1 << size)); + } + for (int i = 0; i < (1 << size); ++i) + frame_array[index + i] = 0xAA; + debug_printf("[DEBUG][request_page] allocate memory, index: %ld, size: %dK\n", index, 4 << size); + + return index; +} + +/* same as request_page but guarantees to cover specified address */ +uint64_t reserve_page(int size, uint64_t addr) { + if (size < 0 || size > 3) { + uart_printf("[ERROR][reserve_page] reserve_page(%d): illegal argument!\n", size); + return 0; + } + + uint64_t index = GET_PAGE_INDEX(addr); + uint64_t aligned_index = index & (~(uint64_t)0 << size); + frame_free_node *free_node = free_node_table[aligned_index]; + if (free_node && free_node->list_addr == &frame_free_lists[size]) { + remove_from_list(&frame_free_lists[size], aligned_index); + debug_printf("[DEBUG][reserve_page] allocate memory, index: %ld, size: %dK\n", aligned_index, 4 << size); + } + else { + aligned_index = reserve_page(size + 1, addr); + int end = aligned_index + (2 << size) - 1; + int mid = (aligned_index + end) / 2; + for (int i = aligned_index + 1; i <= end; ++i) + frame_array[i] = 0xBB; + if (index <= mid) { + frame_array[mid + 1] = size; + add_to_list(&frame_free_lists[size], mid + 1); + debug_printf("[DEBUG][reserve_page] release redundant memory, index: %ld, size: %ldK\n", mid + 1, 4 * (1 << size)); + } + else { + frame_array[aligned_index] = size; + add_to_list(&frame_free_lists[size], aligned_index); + debug_printf("[DEBUG][reserve_page] release redundant memory, index: %ld, size: %ldK\n", aligned_index, 4 * (1 << size)); + } + debug_printf("[DEBUG][reserve_page] allocate memory, index: %ld, size: %dK\n", index, 4 << size); + } + for (int i = 0; i < (1 << size); ++i) + frame_array[index + i] = 0xAA; + + return aligned_index; +} + +void page_free(uint64_t addr, int size) { + uint64_t index = getIndex(addr, size); + if (index >= FRAME_ARRAY_SIZE || frame_array[index] != 0xAA) + uart_printf("[ERROR][page_free] page_free: illegal index!\n"); + + debug_printf("[DEBUG][page_free] free %ldK page, index: %ld\n", 4 << size, index); + frame_array[index] = size; + for (int i = 1; i < (1 << size); ++i) + frame_array[index + i] = 0xBB; + add_to_list(&frame_free_lists[size], index); + merge_page(index, size + 1); +} + +void merge_page(uint64_t index, int size) { + if (size > 3) + return; + + uint64_t mask = (1 << size) - 1; + uint64_t start = index & ~mask; + uint64_t end = index | mask; + int mergable = 1; + for (uint64_t i = start; i <= end; ++i) { + if (frame_array[i] == 0xAA) { + mergable = 0; + break; + } + } + + if (!mergable) + return; + + debug_printf("[DEBUG][merge_page] merge into %ldK page\n", 4 << size); + for (uint64_t i = start + 1; i <= end; ++i) + frame_array[i] = 0xBB; + frame_array[start] = size; + for (uint64_t i = start; i <= end; ++i) { + if (free_node_table[i]) + remove_from_list(&frame_free_lists[size - 1], i); + } + add_to_list(&frame_free_lists[size], start); + + merge_page(index, size + 1); +} + +/* remove the first free node from a list */ +void pop_front(frame_free_node **list) { + frame_free_node *free_node = *list; + *list = (*list)->next; + if (*list) + (*list)->prev = NULL; + return_free_node(free_node); +} + +/* remove the free node holding specify index from a list, if exits */ +void remove_from_list(frame_free_node **list, uint64_t index) { + frame_free_node *target = free_node_table[index]; + free_node_table[index] = NULL; + if (target->list_addr != list) + uart_printf("[ERROR][remove_from_list] list address not matched!\n"); + target->list_addr = NULL; + if (target == *list) { + *list = (*list)->next; + (*list)->prev = NULL; + } + else { + target->next->prev = target->prev; + target->prev->next = target->next; + } + return_free_node(target); +} + +/* add a free node holding specify index to a list */ +void add_to_list(frame_free_node **list, uint64_t index) { + frame_free_node *new_node = get_free_node(); + free_node_table[index] = new_node; + new_node->list_addr = list; + new_node->index = index; + new_node->prev = NULL; + new_node->next = *list; + if (*list) + (*list)->prev = new_node; + (*list) = new_node; +} + +uint64_t getIndex(uint64_t addr, int size) { + uint64_t _addr = addr - MEMORY_BASE_ADDR; + int page_size = (1 << size) << 12; + if (_addr % page_size != 0) + uart_printf("[ERROR][getIndex] getIndex: illegal address: %x\n", _addr); + return _addr / PAGE_SIZE_4K; +} + +frame_free_node *get_free_node() { + frame_free_node *node = node_pool_head; + if (!node) + uart_printf("[ERROR][get_free_node] get_free_node: no more nodes!\n"); + node_pool_head = node_pool_head->next; + return node; +} + +void return_free_node(frame_free_node *node) { + node->next = node_pool_head; + node_pool_head = node; +} + +uint64_t get_allocated_num() { + uint64_t cnt = 0; + for (uint64_t i = 0; i < FRAME_ARRAY_SIZE; ++i) { + if (frame_array[i] == 0xAA) + ++cnt; + } + return cnt; +} + +uint64_t get_free_num() { + return (MEMORY_END_ADDR - MEMORY_BASE_ADDR) / 4096 - get_allocated_num(); +} + +/* clear first 64 bytes */ +void clear_4K_page(uint64_t index) { + uint64_t *addr = (uint64_t*)GET_PAGE_ADDR(index); + addr[0] = 0; +} + + +void print_frame_array() { + uart_printf("frame_array: "); + for (uint64_t i = 0; i < 8; ++i) { + uart_printf("(%ld, %x) ", i, frame_array[i]); + } + uart_printf("\n"); +} + +void print_frame_free_lists() { + uart_printf("frame_free_lists: "); + for (int i = 0; i < 4; ++i) { + if (frame_free_lists[i]) + uart_printf("(%d, %ld) ", i, frame_free_lists[i]->index); + else + uart_printf("(%d, NULL) ", i); + } + uart_printf("\n"); +} \ No newline at end of file diff --git a/Lab7/lib/mini_uart.c b/Lab7/lib/mini_uart.c new file mode 100644 index 000000000..9f4503ef4 --- /dev/null +++ b/Lab7/lib/mini_uart.c @@ -0,0 +1,196 @@ +#include "peripherals/mini_uart.h" +#include "peripherals/gpio.h" +#include "utils.h" +#include "mini_uart.h" +#include "printf.h" +#include + + +// The AUX_MU_LSR_REG register (8 bits) shows the data status. +// The AUX_MU_IO_REG register (8 bits) is primary used to write data to and read data from the UART FIFOs. +void uart_send ( char c ) { + if (c == '\n') + uart_send('\r'); + while(!(*AUX_MU_LSR_REG & 0x20)) {} // Bit 5, if set to 1, tells us that the transmitter is empty. + *AUX_MU_IO_REG = c; +} + +char uart_recv ( void ) { + while(!(*AUX_MU_LSR_REG & 0x01)) {} // Bit 0, if set to 1, indicates that the data is ready. + char recv = *AUX_MU_IO_REG & 0xFF; + return recv != '\r' ? recv : '\n'; +} + +void uart_recv_string(char *buffer) { + int size = 0; + while(size < MAX_BUFFER_SIZE){ + buffer[size] = uart_recv(); + uart_send(buffer[size]); + if(buffer[size++] == '\n'){ + break; + } + } + buffer[--size] = '\0'; +} + +void uart_send_string(char* str) { + for (int i = 0; str[i] != '\0'; i ++) { + uart_send((char)str[i]); + } +} + +unsigned int uart_printf(char* fmt,...) { + char dst[100]; + //__builtin_va_start(args, fmt): "..." is pointed by args + //__builtin_va_arg(args,int): ret=(int)*args;args++;return ret; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret=vsprintf(dst,fmt,args); + uart_send_string(dst); + return ret; +} + +void uart_hex(unsigned int d) { + unsigned int n; + int c; + for(c=28;c>=0;c-=4) { + // get highest tetrad + n=(d>>c)&0xF; + // 0-9 => '0'-'9', 10-15 => 'A'-'F' + n+=n>9?0x37:0x30; + uart_send(n); + } +} + +unsigned char uart_getb(){ //for data transfer + unsigned char r; + do{ asm volatile("nop"); } while (!(*AUX_MU_LSR_REG & 0x01)); + r = (unsigned char)(*AUX_MU_IO_REG); + return r; +} + +void delay(unsigned int clock) { + while (clock--) { + asm volatile("nop"); + } +} + +// An alternative function is a number from 0 to 5 that can be set for each pin and configures which device is connected to the pin. +// GPFSEL1 register is used to control alternative functions for pins 10-19. +// pin 14 -> TXD1: set bits 14-12 to 5 +// pin 15 -> RXD1: set bits 17-15 to 5 +void uart_init ( void ) { + // connect Mini UART to the GPIO pins + unsigned int selector; + selector = *GPFSEL1; + selector &= ~(7u << 12); // Clean gpio14 + selector |= 2u << 12; // Set alt5 for gpio14 + selector &= ~(7u << 15); // Clean gpio15 + selector |= 2u << 15; // Set alt5 for gpio15 + *GPFSEL1 = selector; + + // Remove both the pull-up and pull-down states from a pin + *GPPUD = 0; + delay(150u); + *GPPUDCLK0 = (1u << 14) | (1u << 15); + delay(150u); + *GPPUDCLK0 = 0; + + // Initializing the Mini UART + *AUX_ENABLES = 1u; // Enable mini uart (this also enables access to its registers) + *AUX_MU_CNTL_REG = 0u; // Disable auto flow control and disable receiver and transmitter (for now) + *AUX_MU_IER_REG = 1u; // Disable receive and transmit interrupts + *AUX_MU_LCR_REG = 3u; // Enable 8 bit mode + *AUX_MU_MCR_REG = 0u; // Set RTS line to be always high + *AUX_MU_BAUD_REG = 270u; // Set baud rate to 115200 + *AUX_MU_CNTL_REG = 3u; // Finally, enable transmitter and receiver + + *AUX_MU_IIR_REG = 6u; + + read_buf_start = read_buf_end = 0; + write_buf_start = write_buf_end = 0; +} + + + +/* async mini uart */ +char read_buf[MAX_BUFFER_SIZE]; +char write_buf[MAX_BUFFER_SIZE]; +int read_buf_start, read_buf_end; +int write_buf_start, write_buf_end; + +void enable_uart_interrupt() { *ENB_IRQS1 = AUX_IRQ; } +void disable_uart_interrupt() { *DISABLE_IRQS1 = AUX_IRQ; } +void set_transmit_interrupt() { *AUX_MU_IER_REG |= 0x2; } +void clear_transmit_interrupt() { *AUX_MU_IER_REG &= ~(0x2); } + +void uart_handler() { + disable_uart_interrupt(); + int RX = (*AUX_MU_IIR_REG & 0x4); + int TX = (*AUX_MU_IIR_REG & 0x2); + if (RX) { + char c = (char)(*AUX_MU_IO_REG); + read_buf[read_buf_end++] = c; + if (read_buf_end == MAX_BUFFER_SIZE) + read_buf_end = 0; + } + else if (TX) { + while (*AUX_MU_LSR_REG & 0x20) { + if (write_buf_start == write_buf_end) { + clear_transmit_interrupt(); + break; + } + char c = write_buf[write_buf_start++]; + *AUX_MU_IO_REG = c; + if (write_buf_start == MAX_BUFFER_SIZE) + write_buf_start = 0; + } + } + else { + uart_send_string("[Error] uart_handler: should not reach here!\n"); + while (1) { } + } + enable_uart_interrupt(); +} + +char uart_async_recv() { + // wait until there are new data + while (read_buf_start == read_buf_end) + asm volatile("nop"); + char c = read_buf[read_buf_start++]; + if (read_buf_start == MAX_BUFFER_SIZE) + read_buf_start = 0; + return c == '\r' ? '\n' : c; +} + +void uart_async_send_string(char *str) { + + for (int i = 0; str[i]; i++) { + if (str[i] == '\n') { + write_buf[write_buf_end++] = '\r'; + write_buf[write_buf_end++] = '\n'; + continue; + } + write_buf[write_buf_end++] = str[i]; + if (write_buf_end == MAX_BUFFER_SIZE) + write_buf_end = 0; + } + set_transmit_interrupt(); +} + +void test_uart_async() { + uart_send_string("[Please type something]\n"); + enable_uart_interrupt(); + delay(15000); + char buffer[MAX_BUFFER_SIZE]; + size_t index = 0; + while (1) { + buffer[index] = uart_async_recv(); + if (buffer[index] == '\n') + break; + index++; + } + buffer[index + 1] = '\0'; + uart_async_send_string(buffer); + disable_uart_interrupt(); +} diff --git a/Lab7/lib/mm.S b/Lab7/lib/mm.S new file mode 100644 index 000000000..2e2d88c28 --- /dev/null +++ b/Lab7/lib/mm.S @@ -0,0 +1,6 @@ +.globl memzero +memzero: + str xzr, [x0], #8 // Post-index: store 0 to the unmodified address in x0 first, then update x0 (to x0 + #8) + subs x1, x1, #8 + b.gt memzero + ret \ No newline at end of file diff --git a/Lab7/lib/printf.c b/Lab7/lib/printf.c new file mode 100644 index 000000000..f54f6736f --- /dev/null +++ b/Lab7/lib/printf.c @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2018 bzt (bztsrc@github) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +/** + * minimal sprintf implementation + */ +#include "../include/printf.h" + +unsigned int vsprintf(char *dst, char* fmt, __builtin_va_list args) +{ + long int arg; + int len, sign, i; + char *p, *orig=dst, tmpstr[19]; + + // failsafes + if(dst==(void*)0 || fmt==(void*)0) { + return 0; + } + + // main loop + arg = 0; + while(*fmt) { + // argument access + if(*fmt=='%') { + fmt++; + // literal % + if(*fmt=='%') { + goto put; + } + len=0; + // size modifier + while(*fmt>='0' && *fmt<='9') { + len *= 10; + len += *fmt-'0'; + fmt++; + } + // skip long modifier + if(*fmt=='l') { + fmt++; + } + // character + if(*fmt=='c') { + arg = __builtin_va_arg(args, int); + *dst++ = (char)arg; + fmt++; + continue; + } else + // decimal number + if(*fmt=='d') { + arg = __builtin_va_arg(args, int); + // check input + sign=0; + if((int)arg<0) { + arg*=-1; + sign++; + } + if(arg>99999999999999999L) { + arg=99999999999999999L; + } + // convert to string + i=18; + tmpstr[i]=0; + do { + tmpstr[--i]='0'+(arg%10); + arg/=10; + } while(arg!=0 && i>0); + if(sign) { + tmpstr[--i]='-'; + } + // padding, only space + if(len>0 && len<18) { + while(i>18-len) { + tmpstr[--i]=' '; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // hex number + if(*fmt=='x') { + arg = __builtin_va_arg(args, long int); + // convert to string + i=16; + tmpstr[i]=0; + do { + char n=arg & 0xf; + // 0-9 => '0'-'9', 10-15 => 'A'-'F' + tmpstr[--i]=n+(n>9?0x37:0x30); + arg>>=4; + } while(arg!=0 && i>0); + // padding, only leading zeros + if(len>0 && len<=16) { + while(i>16-len) { + tmpstr[--i]='0'; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // string + if(*fmt=='s') { + p = __builtin_va_arg(args, char*); +copystring: if(p==(void*)0) { + p="(null)"; + } + while(*p) { + *dst++ = *p++; + } + } + } else { +put: *dst++ = *fmt; + } + fmt++; + } + *dst=0; + // number of bytes written + return dst-orig; +} + +/** + * Variable length arguments + */ +unsigned int sprintf(char *dst, char* fmt, ...) +{ + //__builtin_va_start(args, fmt): "..." is pointed by args + //__builtin_va_arg(args,int): ret=(int)*args;args++;return ret; + __builtin_va_list args; + __builtin_va_start(args, fmt); + return vsprintf(dst,fmt,args); +} \ No newline at end of file diff --git a/Lab7/lib/reboot.c b/Lab7/lib/reboot.c new file mode 100644 index 000000000..bceb3922f --- /dev/null +++ b/Lab7/lib/reboot.c @@ -0,0 +1,18 @@ +#define PM_PASSWORD 0x5a000000 +#define PM_RSTC 0x3F10001c +#define PM_WDOG 0x3F100024 + +void set(long addr, unsigned int value) { + volatile unsigned int* point = (unsigned int*)addr; + *point = value; +} + +void reboot(int tick) { // reboot after watchdog timer expire + set(PM_RSTC, PM_PASSWORD | 0x20); // full reset + set(PM_WDOG, PM_PASSWORD | tick); // number of watchdog tick +} + +void cancel_reboot() { + set(PM_RSTC, PM_PASSWORD | 0); // full reset + set(PM_WDOG, PM_PASSWORD | 0); // number of watchdog tick +} \ No newline at end of file diff --git a/Lab7/lib/shell.c b/Lab7/lib/shell.c new file mode 100644 index 000000000..91df99a73 --- /dev/null +++ b/Lab7/lib/shell.c @@ -0,0 +1,157 @@ +#include "mini_uart.h" +#include "shell.h" +#include "utils.h" +#include "reboot.h" +#include "peripherals/mail_box.h" +#include "mail_box.h" +#include "cpio.h" +#include "timer.h" +#include "memory.h" +#include "allocator.h" +#include "printf.h" +#include "task.h" +#include "exception.h" + + +int debug_mode = 0; +char buffer[MAX_BUFFER_SIZE]; + +void get_command(); +void parse_command(); + +void get_board_revision(); + +void shell(void) { + while (1) { + uart_send_string("> "); + get_command(); + parse_command(); + } +} + +void get_command() { + unsigned int index = 0; + char recv; + while (1) { + recv = uart_recv(); + if (recv == '\r') + continue; + uart_send(recv); + buffer[index++] = recv; + index = index < MAX_BUFFER_SIZE ? index : MAX_BUFFER_SIZE - 1; + if (recv == '\n') { + buffer[index - 1] = '\0'; + break; + } + } +} + +unsigned int debug_printf(char* fmt,...) { + if (debug_mode) { + char dst[100]; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret=vsprintf(dst,fmt,args); + uart_send_string(dst); + return ret; + } + return 0; +} + +void parse_command() { + if (compare_string(buffer, "\0") == 0) {} + else if (compare_string(buffer, "hello") == 0) + uart_send_string("Hello World!\n"); + else if (compare_string(buffer, "reboot") == 0) { + uart_send_string("rebooting ...\n"); + reboot(100); + while (1) {} + } + else if (compare_string(buffer, "info") == 0) { + get_board_revision(); + get_arm_memory(); + get_serial_number(); + } + else if (compare_string(buffer, "ls") == 0) { + cpio_list(); + } + else if (compare_string(buffer, "cat") == 0) { + uart_send_string("Filename: \n"); + get_command(); + cpio_cat(buffer); + } + else if (compare_string(buffer, "async_uart") == 0) { + test_uart_async(); + } + else if (compare_string(buffer, "test_timer_lab3") == 0) { + test_timer(); + } + else if (compare_string(buffer, "test_page") == 0) { + debug_mode = 1; + const int test_size = 3; + const uint64_t test_address[] = {0x2001, 0x3010, 0x6100}; // covered index 2(4K), 3(4K), 6(8K) + const int page_size[] = {0, 0, 1}; + const uint64_t mask[] = {0xFFF, 0xFFF, 0x1FFF}; + for (int i = 0; i < test_size; ++i) { + reserve_page(page_size[i], test_address[i]); + print_frame_array(); + uart_printf("\n"); + } + for (int i = 0; i < test_size; ++i) { + page_free(test_address[i] & ~mask[i], page_size[i]); + print_frame_array(); + uart_printf("\n"); + } + debug_mode = 0; + } + else if (compare_string(buffer, "test_dyn") == 0) { + debug_mode = 1; + const int test_size = 10; + const int test_cases[] = {31, 2, 32, 63, 120, 256, 129, 155, 240, 250}; + void *addrs[test_size]; + for (int i = 0; i < test_size; ++i) { + addrs[i] = kmalloc(test_cases[i]); + print_slot_record(find_page(addrs[i])); + uart_printf("\n"); + } + for (int i = 0; i < test_size; ++i) { + kfree(addrs[i]); + print_slot_record(find_page(addrs[i])); + uart_printf("\n"); + } + debug_mode = 0; + } + else if (compare_string(buffer, "test_fork") == 0) { + run_user_program("fork_test.img", NULL); + } + else if (compare_string(buffer, "test_exec") == 0) { + run_user_program("exec_test.img", NULL); + } + else if (compare_string(buffer, "test_timer") == 0) { + run_user_program("timer_test.img", NULL); + } + else if (compare_string(buffer, "test_mbox") == 0) { + run_user_program("mbox_test.img", NULL); + } + else if (compare_string(buffer, "test_dummy") == 0) { + run_user_program("dummy_test.img", NULL); + } + else if (compare_string(buffer, "test_vm") == 0) { + run_user_program("vm.img", NULL); + } + else if (compare_string(buffer, "help") == 0) { + uart_send_string("help : print this help menu\n"); + uart_send_string("hello : print Hello World!\n"); + uart_send_string("reboot : reboot the device\n"); + uart_send_string("info : print device info\n"); + uart_send_string("ls : print files in rootfs\n"); + uart_send_string("cat : print file content\n"); + uart_send_string("async_uart : test async uart\n"); + uart_send_string("test_timer_lab3 : test timer multiplexing\n"); + uart_send_string("test_page : test buddy system\n"); + uart_send_string("test_dyn : test dynamic allocator\n"); + uart_send_string("test_fork : test user program\n"); + } + else + uart_send_string("\rcommand not found!\r\n"); +} diff --git a/Lab7/lib/switch.S b/Lab7/lib/switch.S new file mode 100644 index 000000000..6033b5501 --- /dev/null +++ b/Lab7/lib/switch.S @@ -0,0 +1,28 @@ +.section ".text" + +.global switch_to +switch_to: + stp x19, x20, [x0, 16 * 0] + stp x21, x22, [x0, 16 * 1] + stp x23, x24, [x0, 16 * 2] + stp x25, x26, [x0, 16 * 3] + stp x27, x28, [x0, 16 * 4] + stp fp, lr, [x0, 16 * 5] + mov x9, sp + str x9, [x0, 16 * 6] + + ldp x19, x20, [x1, 16 * 0] + ldp x21, x22, [x1, 16 * 1] + ldp x23, x24, [x1, 16 * 2] + ldp x25, x26, [x1, 16 * 3] + ldp x27, x28, [x1, 16 * 4] + ldp fp, lr, [x1, 16 * 5] + ldr x9, [x1, 16 * 6] + mov sp, x9 + msr tpidr_el1, x1 + ret + +.global get_current +get_current: + mrs x0, tpidr_el1 + ret \ No newline at end of file diff --git a/Lab7/lib/task.c b/Lab7/lib/task.c new file mode 100644 index 000000000..d27671011 --- /dev/null +++ b/Lab7/lib/task.c @@ -0,0 +1,174 @@ +#include "task.h" +#include "allocator.h" +#include "switch.h" +#include "shell.h" +#include "utils.h" +#include "mini_uart.h" +#include "sysreg.h" +#include "cpio.h" +#include "timer.h" +#include "vm.h" + + +task_queue run_queue = {"run", NULL, NULL}; +task_queue wait_queue = {"wait", NULL, NULL}; +task_queue terminated_queue = {"terminated", NULL, NULL}; +int run_queue_sz = 0; +char **_argv = NULL; +static int task_cnt = 0; + +unsigned long user_addr; +unsigned long user_sp; +unsigned long user_page_table; + + +void run_user_program(const char* name, char *const argv[]) { + task_struct *task = thread_create(switch_to_user_space); + load_program((char*)name, task->page_table); + _argv = (char**)argv; + user_addr = USER_PROGRAM_VA; + for (int i = 0; i < 4; ++i) + map_pages(task->page_table, 0xffffffffb000 + i * 0x1000, 1, VA2PA(page_malloc(0))); + user_sp = task->user_fp; + user_page_table = (unsigned long)(task->page_table); + add_timer(read_sysreg(cntfrq_el0) >> 5, normal_timer, NULL); // < 0.1s + core_timer_enable(); + debug_mode = 0; + idle(); +} + +void switch_to_user_space() { + asm volatile("mov x0, 0x340 \n"::); + asm volatile("msr spsr_el1, x0 \n"::); + asm volatile("msr elr_el1, %0 \n"::"r"(user_addr)); + asm volatile("msr sp_el0, %0 \n"::"r"(user_sp)); + debug_printf("[DEBUG][switch_to_user_space]\n"); + asm volatile("eret \n"::); +} + +void create_root_thread() { + task_struct* root_task = thread_create(idle); + write_sysreg(tpidr_el1, root_task); +} + +task_struct* thread_create(void *func) { + task_struct* new_task = (task_struct*)page_malloc(0); + initPT(&(new_task->page_table)); + //vc_identity_mapping(new_task->page_table); //for video program + for (uint64_t va = 0x3c000000; va <= 0x3f000000 - 4096; va += 4096) + map_pages(new_task->page_table, va, 1, va); + new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; + new_task->context.lr = (unsigned long)func; + new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread + new_task->user_fp = 0xfffffffff000 - 16; + new_task->state = RUNNING; + new_task->id = task_cnt++; + new_task->handler = NULL; + + debug_printf("[DEBUG][thread_create] id: %d\n", new_task->id); + + push_task_to_queue(&run_queue, new_task); + return new_task; +} + +void thread_schedule() { + task_struct *next_task = run_queue.begin; + if (!next_task->id && !next_task->next) // escapes idle(), but the call stack will grow forever + shell(); + + pop_task_from_queue(&run_queue, next_task); + push_task_to_queue(&run_queue, next_task); + + asm volatile("mov x0, %0 \n"::"r"(next_task->page_table)); + asm volatile("dsb ish \n"); //ensure write has completed + asm volatile("msr ttbr0_el1, x0 \n"); //switch translation based address. + asm volatile("tlbi vmalle1is \n"); //invalidates cached copies of translation table entries from L1 TLBs + asm volatile("dsb ish \n"); //ensure completion of TLB invalidatation + asm volatile("isb \n"); //clear pipeline + + task_struct *cur = get_current(); + debug_printf("[DEBUG][thread_schedule] switch from thread %d to %d\n", cur->id, next_task->id); + + asm volatile("\ + mov x0, %0\n\ + mov x1, %1\n\ + bl switch_to\n\ + "::"r"(cur), "r"(next_task)); +} + +void idle() { + while(1) { + kill_zombies(); + thread_schedule(); + } +} + +void kill_zombies() { + +} + +void push_task_to_queue(task_queue *queue, task_struct *task) { + if (queue->begin) { + queue->end->next = task; + task->prev = queue->end; + task->next = NULL; + queue->end = task; + } + else { + queue->begin = queue->end = task; + task->prev = task->next = NULL; + } + run_queue_sz += 1; + debug_printf("[DEBUG][push_task_to_queue] push thread %d into %s queue\n", task->id, queue->name); +} + +void pop_task_from_queue(task_queue *queue, task_struct *task) { + task_struct *prev = task->prev; + task_struct *next = task->next; + if (prev && next) { + prev->next = next; + next->prev = prev; + } + else if (!prev && next) { + next->prev = NULL; + queue->begin = next; + } + else if (prev && !next) { + prev->next = NULL; + queue->end = prev; + } + else + queue->begin = queue->end = NULL; + run_queue_sz -= 1; + debug_printf("[DEBUG][pop_task_from_queue] pop thread %d from %s queue\n", task->id, queue->name); +} + +void dump_queue(task_queue *queue) { + task_struct *task = queue->begin; + uart_printf("%s queue: ", queue->name); + while (task) { + uart_printf("%d ", task->id, task); + task = task->next; + } + uart_printf("\n"); +} + +/* Helper functions */ +void put_args(char *const argv[]) { + if (!argv) + return; + + char **iter = (char**) argv; + for (int i = 0; iter[i]; ++i) + asm volatile("mov %0, %1 \n"::"r"(i), "r"(iter[i])); +} + +task_struct *find_task_by_id(task_queue *queue, int pid) { + task_struct *task = queue->begin; + while (task) { + if (task->id == pid) + break; + task = task->next; + } + return task; +} \ No newline at end of file diff --git a/Lab7/lib/timer.c b/Lab7/lib/timer.c new file mode 100644 index 000000000..119188355 --- /dev/null +++ b/Lab7/lib/timer.c @@ -0,0 +1,109 @@ +#include "timer.h" +#include "mini_uart.h" +#include "sysreg.h" +#include "allocator.h" +#include "exception.h" +#include "shell.h" + + +static struct Timer *timer_list = NULL; + + +void init_timer() { + uint64_t tmp; + asm volatile("mrs %0, cntkctl_el1" : "=r"(tmp)); + tmp |= 1; + asm volatile("msr cntkctl_el1, %0" : : "r"(tmp)); +} + +void core_timer_enable() { + write_sysreg(cntp_ctl_el0, 1); // enable + *CORE0_TIMER_IRQ_CTRL = 2; // unmask timer interrupt +} + +void core_timer_disable() { + write_sysreg(cntp_ctl_el0, 0); // disable + *CORE0_TIMER_IRQ_CTRL = 0; // mask timer interrupt +} + +void add_timer(unsigned int time, timer_call_back call_back, void *args) { + struct Timer *timer = (struct Timer*)kmalloc(sizeof(struct Timer)); + timer->expire_time = read_sysreg(cntpct_el0) + time; + timer->call_back = call_back; + timer->args = args; + timer->next = NULL; + int need_update = 0; + //core_timer_disable(); + if (!timer_list) { + timer_list = timer; + need_update = 1; + } + else if (timer_list->expire_time > timer->expire_time) { + timer->next = timer_list; + timer_list = timer; + need_update = 1; + } + else { + struct Timer *pre = timer_list, *next = timer_list->next; + while (next && pre->expire_time < timer->expire_time) { + pre = next; + next = next->next; + } + pre->next = timer; + timer->next = next; + } + if (need_update) + write_sysreg(cntp_tval_el0, time); + //core_timer_enable(); +} + +void pop_timer() { + //core_timer_disable(); + struct Timer *timer = timer_list; + timer_list = timer_list->next; + //core_timer_enable(); + timer->call_back(timer->args); + kfree((void*)timer); + if (!timer_list) + core_timer_disable(); + else + write_sysreg(cntp_tval_el0, timer_list->expire_time - read_sysreg(cntpct_el0)); +} + +void test_timer() { + char* msg1 = (char *)kmalloc(20); + char* msg2 = (char *)kmalloc(20); + char* msg3 = (char *)kmalloc(20); + msg1 = "\nThis is timer 1!\n"; + msg2 = "This is timer 2!\n"; + msg3 = "This is timer 3!\n"; + add_timer(3 * read_sysreg(cntfrq_el0), print_timer, msg3); + add_timer(2 * read_sysreg(cntfrq_el0), print_timer, msg2); + add_timer(1 * read_sysreg(cntfrq_el0), print_timer, msg1); + core_timer_enable(); +} + +/* callbacks */ +void show_time_elapsed(void *args) { + unsigned long cntpct = read_sysreg(cntpct_el0); + unsigned long cntfrq = read_sysreg(cntfrq_el0); + unsigned long tmp = cntpct * 10 / cntfrq; + uart_printf("--------------------\n"); + uart_printf("Time Elapsed: %d.%ds\n", tmp/10, tmp%10); + uart_printf("--------------------\n"); + add_timer(cntfrq << 1, show_time_elapsed, NULL); +} + +void print_timer(void *args) { + char *msg = (char *)args; + uart_send_string(msg); +} + +void normal_timer() { + unsigned long cntpct = read_sysreg(cntpct_el0); + unsigned long cntfrq = read_sysreg(cntfrq_el0); + unsigned long tmp = cntpct * 10 / cntfrq; + debug_printf("[DEBUG][normal_timer] time elapsed: %d.%ds\n", tmp/10, tmp%10); + add_timer(cntfrq >> 5, normal_timer, NULL); + thread_schedule(); +} \ No newline at end of file diff --git a/Lab7/lib/utils.c b/Lab7/lib/utils.c new file mode 100644 index 000000000..99d883e68 --- /dev/null +++ b/Lab7/lib/utils.c @@ -0,0 +1,96 @@ +#include "utils.h" +#include "mini_uart.h" + +int compare_string(const char *s1, const char *s2) { + unsigned char c1, c2; + + do { + c1 = (unsigned char)*s1++; + c2 = (unsigned char)*s2++; + if (c1 == '\0') { + return c1 - c2; + } + } while (c1 == c2); + + return c1 - c2; +} + +void uintoa(char *out, unsigned int i) +{ + unsigned int index = 0; + char tmp[20]; + do { + unsigned char m = i % 16; + i >>= 4; + + char c = m + '0'; + if (m == 10) + c = 'A'; + else if (m == 11) + c = 'B'; + else if (m == 12) + c = 'C'; + else if (m == 13) + c = 'D'; + else if (m == 14) + c = 'E'; + else if (m == 15) + c = 'F'; + + tmp[index++] = c; + + } while (i); + + index--; + for (unsigned int i = 0; i <= index; ++i) + out[i] = tmp[index - i]; + out[index + 1] = '\0'; +} + +unsigned int getIntegerFromString(const char *str) { + unsigned int value = 0u; + + while (*str) { + if(*str >= '0' && *str<= '9'){ + value = value * 10u + (*str - '0'); + } + ++str; + } + return value; +} + +unsigned long getHexFromString(const char *str) { + unsigned long value = 0u; + + while (*str) { + if(*str >= '0' && *str <= '9'){ + value = value*16 + *str - '0'; + }else if(*str >= 'a' && *str <= 'z'){ + value = value*16 + *str - 'a' + 10u; + }else if(*str >= 'A' && *str <= 'Z'){ + value = value*16 + *str - 'A' + 10u; + } + ++str; + } + return value; +} + +// convert hexadecimal string into decimal +unsigned long hexToDec(char *s) { + unsigned long r = 0; + for(int i = 0; i < 8; ++i) { + if(s[i] >= '0' && s[i] <= '9') + r = r * 16 + s[i] -'0'; + else + r = r * 16 + s[i] - 'A' + 10; + } + return r; +} + +/* align to multiple of 4 */ +void align_4(void* size) { + unsigned long* x =(unsigned long*) size; + if((*x)&3){ + (*x) += 4-((*x)&3); + } +} \ No newline at end of file diff --git a/Lab7/lib/vm.c b/Lab7/lib/vm.c new file mode 100644 index 000000000..08a65b8fc --- /dev/null +++ b/Lab7/lib/vm.c @@ -0,0 +1,159 @@ +#include "vm.h" +#include "memory.h" +#include "mini_uart.h" + + +/* map va for pa */ +void map_pages(void* page_table, uint64_t va, int page_num, uint64_t pa) { + if (!page_table) + uart_printf("[ERROR][map_pages] null page table!\n"); + + for (int n = 0; n < page_num; ++n) { + unsigned long _va = (unsigned long)(va + n * 4096); + int index[4]; //index of each table + _va >>= 12; + index[3] = _va & 0x1ff; + _va >>= 9; + index[2] = _va & 0x1ff; + _va >>= 9; + index[1] = _va & 0x1ff; + _va >>= 9; + index[0] = _va & 0x1ff; + unsigned long* table = (unsigned long*)PA2VA(page_table); + for (int i = 0; i <= 2; ++i) { + if (!table[index[i]]) { + initPT((void**)&table[index[i]]); + table[index[i]] |= PD_TABLE; + } + unsigned long entry = table[index[i]]; + entry = entry - (entry & 0xfff); + table = (unsigned long*)PA2VA(entry); //address of the first entry of next level table + } + if (table[index[3]]) + uart_printf("[ERROR][map_pages] the VA: %x has already been mapped!\n", va); + //MAIR_IDX_NORMAL_NOCACHE << 2: index to MAIR (8 * 8bytes register) + table[index[3]] = (pa + n * 4096) | (1<<10) | (1<<6) | MAIR_IDX_NORMAL_NOCACHE << 2 | PD_TABLE; + } +} + +void dupPT(void* page_table_src, void* page_table_dst, int level) { + if (page_table_src == 0 || page_table_dst == 0) + uart_printf("[ERROR][dupPT] invalid table!"); + + //frame + if (level == 4) { + char* src = (char*)PA2VA(page_table_src); + char* dst = (char*)PA2VA(page_table_dst); + for (int i = 0; i < 4096; ++i) + dst[i] = src[i]; + return; + } + + //table + unsigned long* table_src = (unsigned long*)PA2VA(page_table_src); + unsigned long* table_dst = (unsigned long*)PA2VA(page_table_dst); + for (int i = 0; i < 512; ++i) { + if (table_src[i] != 0) { + // if () { + + // } + initPT((void**)&table_dst[i]); + dupPT((void*)(table_src[i] & 0xfffffffff000), (void*)(table_dst[i]), level + 1); + unsigned long tmp = table_src[i] & 0xfff; + table_dst[i] |= tmp; + } + } +} + +void initPT(void** page_table) { + char* table = (char*)page_malloc(0); + for (int i = 0; i < 4096; ++i) + table[i] = 0; + *page_table = (void*)VA2PA(table); +} + +void freePT(void** page_table) {} + +void mmu_init() { + //setup tcr & mair + asm volatile("msr tcr_el1, %0\n"::"r"(TCR_CONFIG_DEFAULT)); + /* + 1000 0000 0001 0000 0000 0000 0001 0000 + [5:0] the number of the most significant bits that must be all 0s + [21:16] the number of the most significant bits that must be all 1s + [15:14] granule size for user space (00=4KB, 01=16KB, 11=64KB) + [31:30] granule size for kernel space + */ + asm volatile("msr mair_el1, %0\n"::"r"(MAIR_CONFIG_DEFAULT)); + /* + 0100 0100 0000 0000 + [7:0] device memory nGnRnE + [15:8] normal memory without cache + */ + + //L1 table init + asm volatile("str %0, [%1]\n"::"r"(0x1000|BOOT_PGD_ATTR),"r"(0)); + //L2 table init + asm volatile("str %0, [%1]\n"::"r"(0x2000|BOOT_PGD_ATTR),"r"(0x1000)); //finer granularity for different memory type + asm volatile("str %0, [%1]\n"::"r"(0x40000000|BOOT_PUD_ATTR),"r"(0x1000+8)); // 1G block for ARM peripherals + //L3 table for 0~1G + asm volatile("\ + mov x10, %0\n\ + mov x11, %1\n\ + mov x0, #0x2000\n\ + mov x1, #512\n\ + mov x2, #0\n\ +beg1:\n\ + cbz x1, end1\n\ + ldr x3, =0x3F000000\n\ + cmp x2, x3\n\ + blt normalmem\n\ +peripheralsmem:\n\ + orr x3, x2, x10\n\ + b end2\n\ +normalmem:\n\ + orr x3, x2, x11\n\ + b end2\n\ +end2:\n\ + str x3, [x0]\n\ + add x0, x0, #8\n\ + sub x1, x1, #1\n\ + add x2, x2, #0x200000\n\ + b beg1\n\ +end1:\n\ + "::"r"(BOOT_L2D_ATTR),"r"(BOOT_L2N_ATTR)); + + //setting L1 table for lower VA region (0000) + asm volatile("msr ttbr0_el1, %0\n"::"r"(0)); //ensure to read correct inst when mmu opened + //setting L1 table for higher VA region (ffff) + asm volatile("msr ttbr1_el1, %0\n"::"r"(0)); + asm volatile("isb \n"); //forces the changes to be seen before the MMU is enabled + + asm volatile("mrs x0, sctlr_el1 \n"); + asm volatile("orr x0 , x0, 1 \n"); //enalble mmu for EL1&0 (bit 0 of sctlr_el1) + asm volatile("msr sctlr_el1, x0 \n"); + asm volatile("isb \n"); //forces the change to be seen by the next instruction + + //no longer running on 0x80000 + asm volatile("\ + ldr x0, =0xffff000000000000\n\ + add x30, x30, x0\n\ + "::); +} + +/* for video program */ +// void vc_identity_mapping(void* page_table) { +// if (!page_table) +// uart_printf("[ERROR][vc_identity_mapping] null page table!\n"); + +// /* +// index for 0x3c000000 & 0x3f000000 (1G frame) +// 0011 1100 0000 0000 00 +// 0011 1111 0000 0000 00 +// */ +// for (uint64_t i = 0b001111000000000000; i < 0b001111110000000000; ++i) { +// uart_printf("%d\n", i); +// uint64_t* table = (uint64_t*)PA2VA(page_table); +// *(table + i * 8) = ((uint64_t)0x3c0000000000 + i * (uint64_t)0x40000000) | BOOT_PUD_ATTR; +// } +// } \ No newline at end of file diff --git a/Lab7/load_kernel.py b/Lab7/load_kernel.py new file mode 100755 index 000000000..13d229249 --- /dev/null +++ b/Lab7/load_kernel.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 +import os +import time +import serial#pyserial + +def waitFor(target,dev,display=True):#avoid loss data + msgs='' + while True: + cnt=dev.inWaiting() + if cnt>0: + msg=dev.read(cnt).decode() + msgs=msgs+msg + if display: + print(msg,end='') + if target == '.': + if msgs.find(target)!=-1: + return + else: + return + +def dumpImg(dev,k_addr='0x80000',kernel='kernel8.img'): + dev.write(str.encode("[Load Kernel]\n")) + + k_size=os.stat(kernel).st_size + + time.sleep(1) + waitFor('',dev) + dev.write(str.encode(k_addr + '\n')) + + time.sleep(1) + waitFor('',dev) + dev.write(str.encode(str(k_size) + '\n')) + + with open(kernel,"rb") as f: + time.sleep(1) + waitFor('',dev) + for i in range(k_size): + dev.write(f.read(1)) + waitFor('.',dev,False) + +if __name__=='__main__': + br=115200 + #dev=serial.Serial("/dev/ttyUSB0",br) + dev=serial.Serial("/dev/pts/2",br) + dumpImg(dev) diff --git a/Lab7/user/dummy_test.c b/Lab7/user/dummy_test.c new file mode 100644 index 000000000..a3bc71460 --- /dev/null +++ b/Lab7/user/dummy_test.c @@ -0,0 +1,6 @@ +#include "system_call.h" + +void dummy_test() { + printf("\nDummy test!\n"); + exit(); +} \ No newline at end of file diff --git a/Lab7/user/exec_test.c b/Lab7/user/exec_test.c new file mode 100644 index 000000000..72e407abc --- /dev/null +++ b/Lab7/user/exec_test.c @@ -0,0 +1,6 @@ +#include "system_call.h" + +void exec_test() { + printf("\nExec Test, pid %d\n", get_pid()); + exec("dummy_test.img", NULL); +} \ No newline at end of file diff --git a/Lab7/user/fork_test.c b/Lab7/user/fork_test.c new file mode 100644 index 000000000..c2cef3dfb --- /dev/null +++ b/Lab7/user/fork_test.c @@ -0,0 +1,31 @@ +#include "system_call.h" + +void fork_test(){ + printf("\nFork Test, pid %d\n", get_pid()); + int cnt = 1; + int ret = 0; + if ((ret = fork()) == 0) { // child + long long cur_sp; + asm volatile("mov %0, sp" : "=r"(cur_sp)); + printf("first child pid: %d, cnt: %d, ptr: %x, sp : %x\n", get_pid(), cnt, &cnt, cur_sp); + ++cnt; + + if ((ret = fork()) != 0){ + asm volatile("mov %0, sp" : "=r"(cur_sp)); + printf("first child pid: %d, cnt: %d, ptr: %x, sp : %x\n", get_pid(), cnt, &cnt, cur_sp); + } + else{ + while (cnt < 5) { + asm volatile("mov %0, sp" : "=r"(cur_sp)); + printf("second child pid: %d, cnt: %d, ptr: %x, sp : %x\n", get_pid(), cnt, &cnt, cur_sp); + delay(1000000); + ++cnt; + } + } + exit(); + } + else { + printf("parent here, pid %d, child %d\n", get_pid(), ret); + exit(); + } +} \ No newline at end of file diff --git a/Lab7/user/include/mail_box.h b/Lab7/user/include/mail_box.h new file mode 100644 index 000000000..6370ebb4f --- /dev/null +++ b/Lab7/user/include/mail_box.h @@ -0,0 +1,23 @@ +#ifndef _MAIL_BOX_H +#define _MAIL_BOX_H + +#define MBOX_REQUEST 0 + +/* channels */ +#define MBOX_CH_POWER 0 +#define MBOX_CH_FB 1 +#define MBOX_CH_VUART 2 +#define MBOX_CH_VCHIQ 3 +#define MBOX_CH_LEDS 4 +#define MBOX_CH_BTNS 5 +#define MBOX_CH_TOUCH 6 +#define MBOX_CH_COUNT 7 +#define MBOX_CH_PROP 8 + +/* tags */ +#define MBOX_TAG_GETSERIAL 0x10004 +#define MBOX_TAG_LAST 0 +#define GET_BOARD_REVISION 0x00010002 +#define GET_ARM_EMEORY 0x00010005 + +#endif \ No newline at end of file diff --git a/Lab7/user/include/system_call.h b/Lab7/user/include/system_call.h new file mode 100644 index 000000000..1175e7e2e --- /dev/null +++ b/Lab7/user/include/system_call.h @@ -0,0 +1,21 @@ +#ifndef _SYSTEM_CALL_H +#define _SYSTEM_CALL_H + +#include + +/* helper functions for user programs, not the real system calls */ +int get_pid(); +size_t uart_read(char buf[], size_t size); +size_t uart_write(const char buf[], size_t size); +int exec(const char *name, char *const argv[]); +int fork(); +void exit(); +int mbox_call(unsigned char ch, unsigned int *mbox); +void kill(int pid); + +/* utility functions */ +unsigned int printf(char* fmt,...); +unsigned int vsprintf(char *dst,char* fmt, __builtin_va_list args); +void delay(unsigned int clock); + +#endif \ No newline at end of file diff --git a/Lab7/user/lib/system_call.c b/Lab7/user/lib/system_call.c new file mode 100644 index 000000000..8b72e99ff --- /dev/null +++ b/Lab7/user/lib/system_call.c @@ -0,0 +1,187 @@ +#include "system_call.h" + + +/* helper functions for user programs, not the real system calls */ +int get_pid() { + unsigned long ret; + asm volatile("mov x8, 0\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +size_t uart_read(char buf[], size_t size) { + unsigned long ret; + asm volatile("mov x8, 1\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +size_t uart_write(const char buf[], size_t size) { + unsigned long ret; + asm volatile("mov x8, 2\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int exec(const char *name, char *const argv[]) { + unsigned long ret; + asm volatile("mov x8, 3\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int fork() { + unsigned long ret; + asm volatile("mov x8, 4\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +void exit() { + asm volatile("mov x8, 5\n"); + asm volatile("svc 0\n"); +} + +int mbox_call(unsigned char ch, unsigned int *mbox) { + unsigned long ret; + asm volatile("mov x8, 6\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +void kill(int pid) { + asm volatile("mov x8, 7\n"); + asm volatile("svc 0\n"); +} + +/* utility functions */ +unsigned int printf(char* fmt,...) { + char dst[100]; + __builtin_va_list args; + __builtin_va_start(args,fmt); + unsigned int ret = vsprintf(dst,fmt,args); + uart_write(dst, 100); + return ret; +} + +unsigned int vsprintf(char *dst, char* fmt, __builtin_va_list args) { + long int arg; + int len, sign, i; + char *p, *orig=dst, tmpstr[19]; + + // failsafes + if(dst==(void*)0 || fmt==(void*)0) { + return 0; + } + + // main loop + arg = 0; + while(*fmt) { + // argument access + if(*fmt=='%') { + fmt++; + // literal % + if(*fmt=='%') { + goto put; + } + len=0; + // size modifier + while(*fmt>='0' && *fmt<='9') { + len *= 10; + len += *fmt-'0'; + fmt++; + } + // skip long modifier + if(*fmt=='l') { + fmt++; + } + // character + if(*fmt=='c') { + arg = __builtin_va_arg(args, int); + *dst++ = (char)arg; + fmt++; + continue; + } else + // decimal number + if(*fmt=='d') { + arg = __builtin_va_arg(args, int); + // check input + sign=0; + if((int)arg<0) { + arg*=-1; + sign++; + } + if(arg>99999999999999999L) { + arg=99999999999999999L; + } + // convert to string + i=18; + tmpstr[i]=0; + do { + tmpstr[--i]='0'+(arg%10); + arg/=10; + } while(arg!=0 && i>0); + if(sign) { + tmpstr[--i]='-'; + } + // padding, only space + if(len>0 && len<18) { + while(i>18-len) { + tmpstr[--i]=' '; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // hex number + if(*fmt=='x') { + arg = __builtin_va_arg(args, long int); + // convert to string + i=16; + tmpstr[i]=0; + do { + char n=arg & 0xf; + // 0-9 => '0'-'9', 10-15 => 'A'-'F' + tmpstr[--i]=n+(n>9?0x37:0x30); + arg>>=4; + } while(arg!=0 && i>0); + // padding, only leading zeros + if(len>0 && len<=16) { + while(i>16-len) { + tmpstr[--i]='0'; + } + } + p=&tmpstr[i]; + goto copystring; + } else + // string + if(*fmt=='s') { + p = __builtin_va_arg(args, char*); +copystring: if(p==(void*)0) { + p="(null)"; + } + while(*p) { + *dst++ = *p++; + } + } + } else { +put: *dst++ = *fmt; + } + fmt++; + } + *dst=0; + // number of bytes written + return dst-orig; +} + +void delay(unsigned int clock) { + while (clock--) { + asm volatile("nop"); + } +} \ No newline at end of file diff --git a/Lab7/user/linker.ld b/Lab7/user/linker.ld new file mode 100644 index 000000000..7bb1dde69 --- /dev/null +++ b/Lab7/user/linker.ld @@ -0,0 +1,12 @@ +SECTIONS +{ + . = 0x80000; + .text.boot : { *(.text.boot) } + .text : { *(.text) } + .rodata : { *(.rodata) } + .data : { *(.data) } + . = ALIGN(0x10); + bss_begin = .; + .bss : { *(.bss*) } + bss_end = .; +} \ No newline at end of file diff --git a/Lab7/user/mbox_test.c b/Lab7/user/mbox_test.c new file mode 100644 index 000000000..efc50acc1 --- /dev/null +++ b/Lab7/user/mbox_test.c @@ -0,0 +1,58 @@ +#include "system_call.h" +#include "mail_box.h" + + +void mbox_test() { + /* test mbox_call */ + printf("\nTest mbox\n"); + // my_mailbox[0] = 7 * 4; + // my_mailbox[1] = REQUEST_CODE; + // my_mailbox[2] = GET_BOARD_REVISION; + // my_mailbox[3] = 4; + // my_mailbox[4] = TAG_REQUEST_CODE; + // my_mailbox[5] = 0; + // my_mailbox[6] = END_TAG; + // int status = mbox_call(8, my_mailbox); + // printf("\rboard revision: 0x"); + // printf("%x\n", my_mailbox[5]); // it should be 0xa020d3 for rpi3 b+ + // if (status) + // printf("success\n"); + // else + // printf("fail\n"); + + volatile unsigned int __attribute__((aligned(16))) my_mailbox[36]; + my_mailbox[0] = 7 * 4; // buffer size in bytes + my_mailbox[1] = MBOX_REQUEST; + // tags begin + my_mailbox[2] = GET_BOARD_REVISION; // tag identifier + my_mailbox[3] = 4; // maximum of request and response value buffer's length. + my_mailbox[4] = 8; + my_mailbox[5] = 0; // value buffer + // tags end + my_mailbox[6] = MBOX_TAG_LAST; + if (mbox_call(MBOX_CH_PROP, (unsigned int*)my_mailbox)) + printf("board revision number: 0x%x\n", my_mailbox[5]); + else + printf("can not get board revision number!\n"); + + + /* test kill */ + // int child_id[3]; + // int parent_id = 0; + // for (int i = 0; i < 3; ++i) { + // int id = fork(); + // if (!id) // child + // break; + // child_id[i] = id; + // parent_id = get_pid(); + // } + // if (get_pid() == parent_id) { + // for (int i = 0; i < 1000000; ++i) {} + // } + // else { + // printf("Thread %d before kill\n", get_pid()); + // while (1) {} + // } + + exit(); +} diff --git a/Lab7/user/timer_test.c b/Lab7/user/timer_test.c new file mode 100644 index 000000000..f0ca93a5c --- /dev/null +++ b/Lab7/user/timer_test.c @@ -0,0 +1,12 @@ +#include "system_call.h" + +void timer_test() { + fork(); + + for (int i = 1; i <= 10000000; ++i) { + for (int j = 0; j < 1000000; ++j) {} + printf("Thread: %d, counts to %dM\n", get_pid(), i); + } + + exit(); +} \ No newline at end of file From d67c156775a2b41cfd81581e2edcbfb14e2c5f66 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Wed, 25 May 2022 18:47:21 +0800 Subject: [PATCH 11/25] [Lab6] fix video player bug --- Lab6/archive/initramfs.cpio | Bin 263680 -> 263680 bytes Lab6/kernel/exception.c | 3 +++ Lab6/lib/memory.c | 9 ++++++++- Lab6/lib/task.c | 3 --- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Lab6/archive/initramfs.cpio b/Lab6/archive/initramfs.cpio index e63f3e384762e271ec2c9c1cbdb62aa22448797e..c64b96fa6491f921ec0e2a6e58ffd6d65df38420 100644 GIT binary patch delta 393 zcmZqZ5oqWU;4?4>LPG-sQ)gpy7mJB}s?ui0KrRZffbvYIUu0$xpO`Ad22nn-Rz=p> z!r9FYEbr(FQwO6V>L>H^aBiRUfcY;MJ4Bn)#5!dpea_A>^)MQuZ!<5?GajfGbC4Dj zb7Lb*uvJdZF!!Nq+5YxB^L=hMQ)fd%XA6)Pb0?T@oM0*qU<`;Y+uy!sUc?Qx#uC+K zj&Mz=dZq*QaBjSJ5#}M+$-g92WS{|I>}-a^bLPG;XBS%9wC)0_1s?w%zW(LT>(7+hVHJW~rnMHhJst}u@k%f_o z>%>|WStBz`V?(gKqmu=gMpwUir{OIwcCZdN(}{H|G6oi|reKxM&e(NKu9f86?8I}I z2dE3=EVIe8Y*b`ST-{uN+KipeoWZ(*u10lO^GBQZk2Z`z%(VTZ4fCyIP)iNLmYSP7 zfweih;page_table)); dupPT(parent->page_table, child->page_table, 0); + //vc_identity_mapping(new_task->page_table); //for video program + for (uint64_t va = 0x3c000000; va <= 0x3f000000; va += 4096) + map_pages(child->page_table, va, 1, va); /* set up the correct value for registers */ parent->context.sp = (unsigned long)tf; diff --git a/Lab6/lib/memory.c b/Lab6/lib/memory.c index 21d1b032b..4d2dcf8d3 100644 --- a/Lab6/lib/memory.c +++ b/Lab6/lib/memory.c @@ -175,6 +175,8 @@ void pop_front(frame_free_node **list) { /* remove the free node holding specify index from a list, if exits */ void remove_from_list(frame_free_node **list, uint64_t index) { frame_free_node *target = free_node_table[index]; + if (!target) + uart_printf("[ERROR][remove_from_list] illegal index!\n"); free_node_table[index] = NULL; if (target->list_addr != list) uart_printf("[ERROR][remove_from_list] list address not matched!\n"); @@ -184,7 +186,10 @@ void remove_from_list(frame_free_node **list, uint64_t index) { (*list)->prev = NULL; } else { - target->next->prev = target->prev; + if (target->next) + target->next->prev = target->prev; + if (!target->prev) + uart_printf("[ERROR][remove_from_list] should not reach here!\n"); target->prev->next = target->next; } return_free_node(target); @@ -220,6 +225,8 @@ frame_free_node *get_free_node() { } void return_free_node(frame_free_node *node) { + if (!node) + uart_printf("[ERROR][return_free_node] null node!\n"); node->next = node_pool_head; node_pool_head = node; } diff --git a/Lab6/lib/task.c b/Lab6/lib/task.c index d27671011..da8544d72 100644 --- a/Lab6/lib/task.c +++ b/Lab6/lib/task.c @@ -54,9 +54,6 @@ void create_root_thread() { task_struct* thread_create(void *func) { task_struct* new_task = (task_struct*)page_malloc(0); initPT(&(new_task->page_table)); - //vc_identity_mapping(new_task->page_table); //for video program - for (uint64_t va = 0x3c000000; va <= 0x3f000000 - 4096; va += 4096) - map_pages(new_task->page_table, va, 1, va); new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread From 8699244c43df577d96602ef307987b60d6c96107 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sat, 28 May 2022 20:44:29 +0800 Subject: [PATCH 12/25] [Lab7] basic1 --- Lab7/archive/initramfs.cpio | Bin 263680 -> 1024 bytes Lab7/archive/rootfs/dir1/dummy1.txt | 3 + Lab7/archive/rootfs/dir2/dummy2.txt | 1 + Lab7/archive/rootfs/dummy_test.img | Bin 2744 -> 0 bytes Lab7/archive/rootfs/exec_test.img | Bin 2792 -> 0 bytes Lab7/archive/rootfs/fork_test.img | Bin 3272 -> 0 bytes Lab7/archive/rootfs/mbox_test.img | Bin 3008 -> 0 bytes Lab7/archive/rootfs/timer_test.img | Bin 2944 -> 0 bytes Lab7/archive/rootfs/vm.img | Bin 247488 -> 0 bytes Lab7/include/cpio.h | 8 + Lab7/include/tmpfs.h | 35 ++++ Lab7/include/utils.h | 2 + Lab7/include/vfs.h | 75 +++++++++ Lab7/kernel/exception.c | 3 + Lab7/kernel/kernel.c | 9 ++ Lab7/lib/cpio.c | 69 ++++++++ Lab7/lib/memory.c | 9 +- Lab7/lib/shell.c | 29 ++++ Lab7/lib/task.c | 3 - Lab7/lib/tmpfs.c | 237 ++++++++++++++++++++++++++++ Lab7/lib/utils.c | 29 ++++ Lab7/lib/vfs.c | 88 +++++++++++ 22 files changed, 596 insertions(+), 4 deletions(-) create mode 100644 Lab7/archive/rootfs/dir1/dummy1.txt create mode 100644 Lab7/archive/rootfs/dir2/dummy2.txt delete mode 100755 Lab7/archive/rootfs/dummy_test.img delete mode 100755 Lab7/archive/rootfs/exec_test.img delete mode 100755 Lab7/archive/rootfs/fork_test.img delete mode 100755 Lab7/archive/rootfs/mbox_test.img delete mode 100755 Lab7/archive/rootfs/timer_test.img delete mode 100644 Lab7/archive/rootfs/vm.img create mode 100644 Lab7/include/tmpfs.h create mode 100644 Lab7/include/vfs.h create mode 100644 Lab7/lib/tmpfs.c create mode 100644 Lab7/lib/vfs.c diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index e63f3e384762e271ec2c9c1cbdb62aa22448797e..7c2dab2ec7b88c885e5752115f34f0d6ce887b6c 100644 GIT binary patch literal 1024 zcmeH_!485j42E~+DYh5DwhWj@2#}a~B0K^IIe1Y_^z9uT6Tt+GXM0$o`?IfqH%K7` z1SCVcO2CH3su(gvrI}^Bm5`})OcmGtf)I_Lb2cL$`Uc zm$u!7#GJ`z8O$|nK0P8cv(opRv2K%z9ti_;*WS+O2ZjB;7ecrnsZ=oQB_?Kk;otS@ z37fsZyMJ6T`L4G87tS|e{)2yX{&Do*oVsfuZH!4uo(M`iknufuZ|iv)^15!h>pa+M RQ)h=`Su3UNwfw_Q;0gQInz8@@ literal 263680 zcmeFadvx5%b?4V0$C5mf^_(1yB}D^1h9n*YKoZ1*jYs4CXb>O)5CljN05wBvW;GAZ zaAe6Dc|}Qkj&&lRthmyN<7h39EuVNL+beD2P0Spxcf8)5V<+BtCE4D8k~KJz<4xpb zZOgk6V~vsfsb7D)s|&wwG=T0#a|Xop)bCfns=BwnzgxF%z3#8Av#qo3RNJZ31E)p@ z&$ijW_EV$7gl%U=y7I!dw$mM_yE+HYj&`_s{qI!Unat&BMFn9tz9nJQB6?k?+eZdS z*HxI_DWi9~qx;M$SKh#2#Lw3BMn(Vek39YKPprOhlR}Us` z+vVpHsrTO=Pb9u@+J2AJAN-?NU;OQV^zy;gKi(KheB(`tTi>ipB>r&yVB)LmZ%o`< ze`D&N#ou<%Kb`mnad!_U?w#<{z0K0S&C-2(bGq>o(>+lvo$>V<|9QaIKgv9#E?GYN z6W#FnyMDfqPb+u*ZHYVo&daa5zWUSbd*O+EXd)s@yZ~Wf7`{u;G?;SkwRWOG?!bcK`zr2-5%&)&Wy1s7LiNvkh$LkUgZ5TgG z7V<2SNOeE*g~W4*8ltp`2aE?R&wqC7L}Gs9a^lY06N!iJUQXRvKUmk8c;WqXiA3F- z6CZnIZrz?Ked6WBMbgwK5^v7Nhh_d|;<>M6cysi>lX!08)eXn1yZ?IKbDz}nFz-*- zJvZ<`V*dJjQg_x4r0(@663_jLrLAjD+&=UdKlu-?A4uH$5##f4ec~M-cu(Ta2Q1yH zrTMiW%>$O^18+#(tN(cF^QlDQvqtw$!mi!BGW_a{?p?5LP2D^6zQjAN4RpIYX88GG zAHUDlJ$Lu5mE~z;&M-D!?7cqse}Ro%Tbuk}9KUnM`vZx0tXmrReR=xV|3Ttwzx!8f z&Fg<<_CPXpbX*T7p8IplV{PZ5xO@j5i1H0k|42^L)S*9-_|Q-P?Z!Mz|km{)x5MqlxF9LSKS z_U_h?M6&e@CJzbvxm)kQ%{%>JO ziw7+a{Rwyzk|(PpOg^&tkd=&%$jS|6{GnlMc}!Nj?^?KS`kglLy*G}2pFZlrVY=vg zx@Z%zMB>CVA9?DjhD5@2uKQQ_pUoy7_}KgF-usqE67?4Iu>E?zzp-(Yrvq<&`_CQt zQr+0U{omipE&m>}Uk^V^Q*R+@M(ru_fH7?GC!+ZJ@l59C@6h~R`+Y2?jCG6ujK#mtLUDhxqV=gKKhXNr<0qeb@|ll(?Bw<9&p-A=M|;c7 zXIoAs?6pMoKWO3D^rgh7{-?kEr!9Z};QK%Ii*G;vUq1BUAOF_ji~p-VD*6wy`h^MW z-g_{4;cquK-fRzk^*?TGJYm=W+CtMS8-HQpFIo8T|GTmAn--=l{6h<$u<*|<{EUSU zY;0`&R~9~O;ma1bS@^$MIBwyG4T~o%{11P-VJaz+==x#PaQ2Vt^RF#)|Ay!`@o?rI zS>hi&^AFzm2ZsFnPog0E|MzFEqS6zIzuAcBS$;)j(^lf*H!^$|D%-c4N1dI%h24Cn zt!u=kYa1FW)ovb<-TY(EKL4Sd+5GB@|IFEdvu2l>E!k*1elGFyk=tfOf1%!NE3>`s zm~D0E!`N*Wn(lUe(K40+o$lDXoJ#F^eIZJ0k@{q~g7hbWt=P-IS7+?I({`kViRP-bJbscx&6w zz2QqgbYM0&NMc;lW517?ja_eHI7Yf<@h77AyfM<}V&WMiy%ZDw4=w)dLHQaZ{f5Pd zW29e?DP!Hr_?H&XxF{SW{jS9q8zV9P3&%**yWKGP^H(=E+B0RQZQQk;vD5s=|I_-` z|M9K=`gYxa|E;J0@x%Y(;8UOe5=9mJ$7|3pOvl)%%f>-(u?N5O*Y?ir`mg`P#>NX4 zK9m_l^<>6Sk6XwX>ZdJa48>TBG1PBbn6NR@cPwNKl`w1=Lw&)*3l^?feV?*WW2n@d zqalsPP+ggOjiKr@_mR}!KVzuh&F~#!to!U3inR{6hS7Cuu-%P$Hm`NC_Hd?s#I1## z8R{5{hDKYjJ#=ae_2W-#&B2tT-!_r^wlH)9>A)83eJYZi_+^SU<2eb?qR-^F;yoBw&2&HpfOXoPJi3*uwHJ+9Stro^6Ju0M`_TH=%;tFc;By032RARr{SWG%`)%f2ZTx0q z&x`&z_PfzM+Se0_AGv+{AYwmY}$8F-T?Psi=I7l zBJtdB+k9`T?$+!_UAkNu#$z|{?$sAF*eyH;=B2WwiI>r2@@GV2G#h3P*Pz3X@K9;k19X3TH;!`^+ajJwQV zd+)&Bh2wL>-hs_QIe9bQZ@YH_9lO43Ygpo;&SaW*m3xQ(#LYY0dWX$195MMhp18A? z_}uKR#7obwH(5I}?7-E9XDqyB_nj85S(r@RxuvxInKVP0a4eHHok=^BxKm%3Dc9B# zTzR&(SVDO<#_^hS1`Staii90VV%||oOUd)7_FdF3fbQIpA z4nLKl@!3rH_bp6(YIgneM(<~$IG65=nKFJp6MosA|FZpl#onRK+nZc`6<$AMvT3sO z+{>&9+_d?LTh>mw{=8jVd?It5cp>plXsmap?yUcN3zHUp*TP@6@Xsv#w1wZc(DIoK zHLgD!y}yKY>52Lux&0?L7qamOi97!V@ATQ!JzL+qclQrc#=AXFyw9eEY;EM@32Rz* z|Muvdxt`44Q)|G`XtKi%W+$>o2Gm!EZxkp71<`QL8s#V}g` zcJvN!Sz9#T9L7%fJZAc)=k0UrAGEqGKMW>~cR%FTL4?blb;HLd)Ng~&`oFRF#N3+U zbC+xHouL~({U6cax%cSanY{-qHyvWV{;f<|hWTBtz4u62-~Qgl{H?d#njQSxX#LjF zHMz;kN_`|7r2U=$dt?4X8yoNT*5|*TSpSjR!zOEqkA8CYl$GJiUwiBAev6CrW3*oX z>WjasHT|zAUV7{8-(#-MF#3e$dBtIs_8Gxc!jjT|aL0j}P1- z-%nZjGp z&((e1bb;l0($as(PoMZvSD#cS{eaO*4R-y}daLo*YB+rSz`L^gr2a>5rwxy*e*U#6 ze_JO1^@EA|gRFy^9x<|KlZRVBdfPg1i?jQe-sW^fmd49J zdi%6JBW=CqtHcw2^tPj2Gj);E*z@bkvQ&*ylsbsme0=iwch zXNO!pOi#FcscxT-H(8p8jgP$do_LRY??0J&cb|;p!*F=ykLmkgQCq1e-GQ&Zl1Yag zJ!#kU;SQtJdv34TTzAw4|Ipcz}ZCe8TLo_QZ2*MvrU8>?xCrS6__m+gD%wO-Ez>-G=i_u*_o{HuVj6Ql~!0b+VG&|U(v$$@vf$qKf;=jz`60Mzp3AT~z zTfS^*z8uk}4Gc&})W7%kM-2~WD}6b_=cdDxy)Th1n8nZP?rd+XYaMo!-BX|Muvf<7 zT-}U6Y%2Ksw-%qnF~`&0_Zp7xPTWbPes(r>^Ov8;o^p0dQ^YTIbaG?ArQ>G~o1!vqLDR+s(0A8Xj*S=I zVPm78p*-U2Y;8Y>T}FP8Pt}_?pL(xbqe^i7l3m+-b{O;s& zKSXWGnInAw>_R@Tq~hmi|u2SatY4U1@h zm(ik*Ujq-xp6#vrg@=q^?rA$lC;RN>#B+D;-8qb{>`h|>m7)Doy0`sOzh`?AvgQ1t zjoDO=@fk}?d#d92uzBZOhAH#Uzi<1P9x@J^r2bb+(0Lb3HP9fr?_~rHR4H^lwJ*9na`JyGPgkH%8NR zOP=0y_HjmbzGTm{a%SoOYtqNbguS!7|7SFZ@#>4ecVDm9YVKS6Lfv?Lm-|6grr8?z z-efjmU9g^;eg07Et?Avwo9gXN z+P_QBT>rpRH|k$_w*Kag7wT_5_WX?-&(uGEtkn5 zKbUxM>DiCeKX(0@<1f^I=*g#^s{i0ep1*#Gf3CDd;=!3G>ZgC=*=)>_`sl$EH=g=1 zSMyIid9&XB`^e23&)0wW`DY)yar5SbJUmyw>EDItpR_6a7sx@1`ll`J^$*@?dGN-^ zZafx~e#D~dqbb6c2i;=ArXuU-o_O}7ZUN%iAFF@tBhR}bKkySU(emKU zCqMYi^`}8Kl_0{)&+$ zg#hs&N$3H~Z9*`)8~fj5PuzHnf`%d)$P$byoJd@M{BgJR6mgMAh#&Xd24H{ZBTqYd zj$lkArk{PG{(Ak7UuPZbv1cvSGmpC_aUmlvH($8^d}is(uU_Io>)`ljrv=WmpY7=E z>c0Mg#~#1&V^ORhKQK5nJTj{INxK-fA8Q=^TigG)kH9_xuL}ekhIaS&S_El#h-@$S z{fb{$%ch};bkB*y7e^+O-IGn}sq@XrrRkoTm6_({L;77f+4iV@#POV8x@mQGvZ;S; zc(SRTGEO~u_)u8B?(Y}8#4q95g_icQ$<+bszS!C}y0m&>x?I1@Eo+0bC#Oz=Vefdy zLgP^Pm}u8JR^k($!Kd8V6vKF`r}dKP6V@tL;<5egN;~hlSe+{M47u$*HrOd%Y7Hy# z)pcyP_tMIR-b&$6O1a1|?NB_`3RdE$b^iSF{7O&vR&}8s=<(TW%cqK^om*)>i!Lvg zrqDCL4em8g!bc(fQX#(m`0-@Z2zltc{P^&iK7e$kV6VKS^<_!C?G;v{uP}9DwWRmH zIFm}BIoo%Fe8`LH7l!m@q#!tTtAn+uJ!iG1@Ta z>fAlnGTb*ldUauCd7w}|h)2JZKRGsA)ILzU)I`&fV&&->xMH7)H~$?_hT^M`ph6hP0H&HTJ3QMI)<^ zh8rCw*ra*}hNnh4s*aU#SzVnUSz9|g?)SskO>zAlyn+RCM}D;rm9$e%DKe>Jf3`PKFL z<<@!WUig78UoT)YP-ifpy)LhwIEO5j`a^bU<1}4SU0uB}B|2bqda1pkabz^FeJoC&Xew0aoy0Fqcey$bOmrR-J_;qz z!UCPdvp6{-jd-tAC_cuUh8EK2dqxM7i^-<(=0p4%N7K$WB+d9_^3=-AaB3&AL>^>^ zwl=#ww?Lbn?>&AMeMs477msuaABB=9`ZjbXc7p3G&Hh)vQ7KH~$`wwHqjP74Pc|HD zb+-1Yk;8|m6TD(8qLb0p=%-TTh_s@k5UjwA`>v&?1>vI*On8PakPM+K(M@|{Z;J26 z(bl6`d?ZgJ)AKy1zd{!1)0Cc&`%>f!oi?yIyOcW7w=mS*xC%bVCVe91oSRrYE_@Wq zHbuwNj}+=>|kv55q zguRL!hH3o!Gnb~F9oe6rUlbM!)yEbZkINn|RHsVBg9m?2rjLXZ?T|R+#;;qUYh=qG zlaZIY6iN@Kq-h*EoJvhKuL&Q8vh~qZit|Hciu{$pqfnX9b3Bh8%gR$@MmJ$c7OJZs zPurCKni=VHZGyhaPvc)>|3kCG-i>fVCy@tT%`@!TaO@|nn8%5@-V3ajmYc?pTt%jY z6FS(hU$JZ28N8oqZ*cusF?m9-lNQ}HxSVo!CT)y3=^kW8xP&2N@4dsxc+B*BjiW=Y z@In7n3>*I$eV^)2UTiM^xvm-KxH=9ute~65&Yy62pr=)L!f@Q@W96qU)J`fDFCLr5 zj`TOt-&s9~1FKSP@s-u_0ptpdH13m~Ng3Dz*khEdHaB^Gc#-+zb7P}!>avStpOh z=166SQck7tC{(U+YOwhX*Y}MjCmS+zK(1aL$J*%s7{AJ%rtau)evCuVXS7vp2kgtf z#bYz7ceZ@18-Km$mIwQi?P@4)9y2L-%D!*}fA&FdZ zUrZN;I7v4lf6Te4Jkh9TDB6WW#vE5#+ecWNAq{H@$O=Dyu8}dT_+Dviza+aS8Yh|k zZ~cW~p9X(_y&%NKzt@}#??pDf&!^~BBNSc6SNvrEHkf?*x?MV&`7`09@jNyo^IG6T zJLO*GHs;y13(mG?zNC;{$($H=)=bNZ8FZM+i3_WNk7$TK<5AwF=3%4yWpsOHzLT`b ziExsPfiHT5HmLF%NBYvy_{bYeX6A25Q)n%0wq^V=En!#pDWBX%ir#oV6CuNEe8 zbi{-Brro&unw{>~)yD~)iVf}06``xpW7tT3zWnPWuH8{Sy5Gl$YmH}k4pzuiS7VzS zFAx{Uf3@PE&mVFGuk_p8=h+Hw9N6gA@RU9b*;k;s_d-~;9>2Wk=c7OMvBK{3pCe0* z3$@O{vufcI(h*4V5=BYB{8|5Lyu900pUdmr-OW8O(ntRU+v+XWg-wD^( zWe51>$6beYsK&kckX}_=iq$b08&tLveLQ14=5{HEeqTK2;Umm4bAr*FS7alIE^_6| z6Xl4vFcghyg+6_)tw}a$Bb(})>91rXfD`kYjP-nbIbWWzosyFgHWPEu#OBvpnEF|8 z(i|{ps)fN;bbO4sMi0ZQ>YFz=EO}tOY-xp4ScdMM{lqvirk!GMob75le}2BhjdlDz zF#cNfR{U4%x$2}4oU(SE%^hr#C9tyop7dFq3ywu@r5YaCMqwS=v1cp9+XHyFsKg{T-Y+7q~@i-k{oxC(XFFcBcnqw~o zBkG-{ZSSenJmtj8r;o0QuRl7<=8BoGGR&9*h)c&jZ!v6;BXI0pm^%~ogQeHm=Tq0^ z#G#b3MAskV$Kg;)92krpJ9f?gf#0TnG;4d7W($Z%KP;tgLVV*kbHjJR^{yGx#$$sPi4YolRSocZwtJ{=T_lvu-Gauw3!>&RF?{2#2%I_t&5AA z^D9<&@m?&A|4ivC5k_=aFOIW|$`{w))YUcHH$KA{hcTY!b(!Du+o50Y?Os;`AC)Oy zn8T(X+Iz=)-wk%;AL;4pV?KAet@(=RfsyR{NH1#s(`;1J`>bm?Ti@Y#IEAc(qt^Sy zZy2ilN`<1wniTWhJ{{gYZ3O(NGcv*cPJYZ2fdz3q179#k?W&zv!9omw9yj`f)k7s@?1b~vSRFZY|~1>^LiVHwI%x$3;ra)c54 z$2iBN`*MZaE1fIP=Iziytm8X-e{9B$rI9l?UuE+VHlEC--`dvNY2CMzPyDdgLhrp$ zex)rG`uUVbds}tCozO3Dudl_ozt5>0JgHpGn{uym^{h~+bhQ#zlFzuZYo*@X;Ulgd zirY>(acNbKAI7D-AL9Hvgx9;_KP*f4yD4+8^QsPhxLcn5vi$4amit=E?_;Cu*IFI- z>$8u*J_7p)>?5#`z&--;2)v&Ae${=aVLYPuckE8FVDCZ4=wSEoxu*8f#<67k!m;f6 zxvSc#^cb?&%)^1`F6!xBfoTxy%6o~7V~tWoyB#Fg z5Sr}amp!I-%-&+2O(v6BUxyB>jK5CtT4}sQXSyjp!Z{TGEFss}l7-qJ{T4Dp{pAOR zF$w(>`dVd|8lsDYldrqUAL>15hiNK_mFhsd$L}2X$b2OC(No4Ek|FpVoJcpTuU7uJ z@a)-zX4)}p#&+hsfwL|bnwzGOUDn%a=Y+I*@`JVB2{cqDV;a#{NII~h4J#dCrLgj8 zaLqfqw$?U(dF4X({5En9e>#t#JY9B{aBQ-vg)>q3d%)KN{&$c|`35N^ob5@^Q>L%q zxfUJTqc2Ztzk2S6mBxvEOgcvht#ohKsLtu2U%*LwBx$4IQ3?j7q(R20EA^MWfD3UZ z=b1Az4Rh*Cd8YG7!l+XCs9e!Oey^>imf>@3YJQOYSM28#|L6^L4mu0pDW%kZ%QUTv zBWv~pcj!z_opJQxfi^`PeH-nbYiMJ4^4uRMt1gue;ekF_zKpVa)W(jueShc&**>(h zE$d&v*C@VMzyv*o&O#@m!=#`3u6E^}30D6PX6pacxA^+A()g(S2q$+wurG@d`_(dM z0npjWu?2U28Xr6GihnEgl5}$^*!ebxXo45mbKf&L+@W?yC|z#nr>}7@tdy5fb*M%t zx^esGoj(UBZ|3KC_|gh~ca+`_OVL-P0bleseciR0cIOw+$LaD+&y28=4}hVG)zgX# zb$B)K@o7YL?l!*yIun=K3!XW%%X8{O+d+nCEA;im$wtk}l<6G#H=^HX4`KFMOq-+} z%153SR@>)=iFB0nkCBO1$8pQY+l}${Yi`7@pz)|H9qW_D@n{dJp z)coqvi`YiU68#$cVJSo77BG}eTP zIQ2go`NoX%*9Pv$o@}HLCyjv^&){E7>k!ggdyP|guGMS?r@M=_oe(R3e=Bx7b`oi@ z)oH)zHQ}T8L%W-sUYymON})MF#s|t%Eg1^wh`u|Inc2%Odz1I-kJIS87_aa{hWsCK z*hZ8`9`rtar9VCfCx3i~9v@n6&idcfcu9KQ50N$T8rGp2_oAIIQ|7-YW1H*wPD8N9 zE<#5$PSUy^cJ8TTE!lnY$dr#ucs)0)!4PjvW{A2A-K1qQ_WUc|?y88&*DVLTvnd#!-|>9+g?`Fw6IF3)QpSh%Y8F1kl^DyAVPjfQL(`bHFgbUZsX3NG&l zFf;D<$0;FB+%vx}dVW|9TtXV6j}3$WRNcGK=`HUp@Yv8aGNE}rrNzz`PG>ugxo?j& zSz71ED1#AceH#RQMOw&x@ry)yt4fhx;JB6<%bzxP8kf)Rba)B zevC5n>y!d^O#_t9F^AXCwGdhYfoZsfg&Nt)Z@G@9|*}3ldyte1_UX5$NPVh<}ESb`HA>Rh| z+Mi_1{4z*yq2GMF06TMOwQZO=X6l-U5&1JXVQ>35MY7zTZtrTHVH^lvT>Jc110T`w z>H622=O8X_K5tWfGddaB0UN(8)-0jN+(4L5{v}C|{0b|7oZ^?|U#kw)2z|Q#H8Q1f zdcKd*7z{%bAJv(0t@aOxR!t2w&1{ z#q(Y~7f#qj%u{n8_EDQK^7IV-ob(g(D=vR#+=D$WJAioR_2%0LoB4@uT(}oFltNRy z%I5U#omh+vCym#z8I_MY0hN^(ntd>SwDFMdI}6N6Qwo2zl*X@DAwOY0X7aa?)8Wy# zPS8R0m-L5R4;||~HrKIo-p7b*wY~cpt4%(?XlKDsI0@g-mY`3M!$)|Hcbq$~ytO1R zrSKxYLrh}tZH^t=I+7oo4`96FVJRP(!bRcKrO_GrU-NZWDg4z+nr-3aVdCSXYuX!_ z5cYM-L!T9KlqnppJMDhiKoYS&N}9WmgXsN(O6h@x-{K>mUoahuWPot=4gbA((7KK z;%gxkPkbYcdWCi69^HZtc6(0@5AMTsstfV#CG@{J294ahJ9F`-1Kr-fXe=Wh!cb+_ zO6c>)xP&p>$Yg6fZH4{`{8-;Z4>KNMygcJJ*a${V@?ktSfzLcW351Ln=OhwQ?;Usf+eB zD{faI-$cuNOPx6@?dNo3A6pXx!{~YbyhE+v62}L4AWuF{ap_8lD}=2-H&-Z);!B~k z7iq*FbGf?SEgvdps}MS2n%&Z_RDSW9n_nug{i5>yFs?2|{f1Zp1v-|i{( zy7p_edk#y%f;kfQnzLV%eZNh%$F5Mm-E&ksB^0V7Ye;-wW3nkd#dmc1&Io7b7H4|$ z{1|c1v#Fk@OQiS5(ki=lYP)?-R0oBpMjDT>CyMVx`+EenSFqF&-1u&~f0h9n+vjj^ za|jng_IwRZTyDL1GSwK$NvXILO9x(ieHLT8X#4oI&R<&Lte5=66szlQpV21$z5Uze zyPD~JjM$T04Saljq35reSF`S=(h^4WOXymk|J_`p+tFpEmchDS*f*A1hf1gOG19l+ zOQ{$8@%^(4VIH2T>{4Wteb}L1SAN1uL|;eW&RMAtAKjz#=>w3Dt@J-Q z`f`N*1wZ?>D$O(!q!*;x(YE}YEI!bR#nJvDSiXH3Jo`1ibj@^Z%2j}Na$&!wI3Ey~q1>`-is z;mM|U*|5$wlUI4P-`}ONXX3wFq39y#lKWC+OEz_}HbvWk27NwuICiRN z5=v$$!;c4l`F#Q_a1HZT8>1Y5_;xU#P@Ekw9Snbj)K&L-zl7S;<;x%Pf!&DRMVk}$ zIU3RT0M-8^!zzaJY?2`ID`KiF3;+;}2+6|#_ zq73w{Z&Ql~GB+?jyNIu>g=-g%%3lj{q>=v=u#%rZ%J=DUt$rnZ z?_dXyj90=u#qPUDS9-_J9Y2ZR4161{u3i`p{flrvGLb$`Ilg`eAC(QhYLoDxcTx?E zgcI1{3kDxp@I@N{7oCN6{Ab#Oa2lPs+DQG`Pm(&(w?N1}axyzLbIJBDHEze}A>~0w zatjt}U+^cq#*H$9M7J0r416tdqcKmC**+o;X?v@Pn0-cj944aqCIVd!XO-U+%JJBu{n1$}H3KToxB5^ef! zz9}8GxoFQ?U$T8t@0fW?()OQdbbT}Wo_32~0<%JT+Q*PHoxNiVlU*Hyo#;05N9^E*cp;@)uCD;e3;*pYofQbI)52n*$>IHj;_whfvNUY=?md> zp{MEm^32h0bPVl?`%s?H^=iwiFLqKKW5ieLIesTIIv5=uruT7zp88ts zRcr-*$h2%=_^t*%qM>)??>n|VweDS>?l?D#Y_*+TaeWNyO0tEiS6J8ZUVC-VKRP ze5QJbA$r{(*CU7Ei|(SI6dt0749iz1wwjNTuJ>wvK|Drh>hQN?zBAn~a~4rPnQRV3 zHgYzP*#+Q*d{J+3@PD)?;_+!uA4yt&?8r53i@ro<5@K%)moVIG9o0BIXl*b5d~T%I ztv%W^_{T0*eW*()4|=v$NZ&zOoOQ{SIWdPFLSEWz}Rd+ldevNn7*+MQ^qUJff{ z$vX=c>8&9*Payt~gT=nZKJrsnuCc%Tc}8SReI93_82>wLZR`&{&IDb&*5>RFH_zqh z($_W~;kiF17Dftb|I&S=RXwT^LQj9-6`iRcYPIuR{hX<1K1$CCIVTtLMcrjH`)R>P ze#MBVjya5ov9n{D_oKc9Y-QgHAM6EZ7u%S|&1stL>C*}MsnoqsbMy7)vv2rP0~hQ+ z^v0FecJocUwgv|Bvqm|>h>-i7j&k3zarifmte7u9&avaSE^6nYOo2D~Y440_LcLZg zT*7jN4f7}H4aN`5Px@yFSp#wQdZv9Sk3#G$@K771zYB3v+Q zuH2bc%J%=T7wIdRpU90ZbNKr>F*au2g0Y|GR4J<(nD{h&{?SF~CFvyT2+eggj#?jB z6rWsO^}P62ZfewnfjkY{K!x0$cYa$Hs#o3Q*G z<@_u9VtCE@T-$7i`gP2^Hk*jjkR{>7*o8TH;+c2L!^!kF@@h}q8VfcOwAJSGIg9SX zdhEr$>c|?e=BE8Qm^@5ES>oQuDKiJ)*OhPPAg_JhGb7SRdXD@ukK^lYp6vw=ThSEH zz5;w** z*b;<+yoIs^R>+p*ua@dxDlhQPJaAao^4uR^1vBJ}F!Dzep;an>wUTbf@)XEWDY$A* z9-6gM|5Evg-frf*2s@~IDfnd5WPB*!zc@7vv8LYAHNIm%YgsI|z*=*4_ZwD`JVoEG zWsHx%Fn-hL*Jc>Uo?V)6E)|2V((xYHPb8Y9%6zS)gKzfyF+b(|rxSnpsbg#pcH_;9 zgW#t%dFsyoCgK_Q`Z&u+8~Yo02b4$o_cKo7osjP&G4H~-pS=f+>*Mefj-`goOHrn1 zm71@X(usGCV|4F_%#pL-jP)bdtn|m))!elUCz(TL4ghQk*-yaSFzW)$efni_T}$;Z zl^4~4y*%2dtGIH8%)MwY$Nh+vu;?2Up%@ zlpFubE{KyUTY1$G=zFXzzlp!F%7*i`E$;nNqr9pv)TOujPo!B-}n{wUNWG1J`_W^WwGqvrMJnQz#9% zja)h7z8&w=s*T#0#)Z$f&0nt|2flBRLUrFsJaWmmokg=W4);El_(guEd;0VCa_apz>jSB}%YyAm&iLrbgM($D3AH-pZmQ-D1Q!-{#-nlGeiebf7_#aZL4zW5B1(Sljq;p0#5YxTh$@%IXY~s zeh@o~x?@|#mEp(94}h>@?>~6yelM^RZPuD>z4jP#zg3<6I+2z#XdixjcrBSgSNqTC zN9j*zde#mro;b>E9G>pb{uSjXelKx?K5OFA4W(iwoOI4Zbqzz>9W>}4(AT^VI|p?R zdy{ybK_Fl5e7T*aGOTz`T5Ni*`KvZoq8oYvJQ(xoj)3pn))E|CSL+R-=Q4&_ZoYkXHpZ# zkAyzzcn{#gdidy-Bh6P=7CU^O2eUnCx95pAsB)nVkCdml5F?&fTAqZH-~Vu}ctT`C zJkkeI4=^PiWOpE15b1lG-<26Lw<@whxzj>2dJ4@4Px20Xq(U=nrUj;z?mO zFoK5Y5lYVC&F`1mFORh>thUeV-OA1>2TuOJ9q|H2+V@0%AiBP7UM+k?N4ya-oEHngKsi)8s(tNp^qIZ znbMhM;#G%AhtT4WGnItcKI+FA-^qqbo*QrXankqq_FIvY|zrqh6|u@2iXF=qBWe_o@C6JPs5Z_FfuoOrM=LUtz`bfh+i^4b#VA*NG>Ed~QM;e{3p0KkQB?&o!T%xRzQ{zahJq zbgDNgw@ z!wpM)$u{#5GURk2I+J$KGyW=#kIEN4`I%MULVVNMSXS@y4%OGVaj1<+!AjU+&q%ka z%aD!%6=1ln%dWTr*~YU+iS= z7h2lSuBL_;mkrR%D;IjW$5vH+XlKZ*%AxIoP4f7lJMTgL$tSGwpV4S%u5EPZbQyDW z>OY{Xu_fhI8Y9XV-}EoiC1dB3?ab@6bY5M;mjmrD=c5i8i?G6;kY05aX9Jy45a7d{qdOZ3ccrW z%uf5H&a>x-8}LcK#8fcf>Q^hcF_d2e~xgy)?dRw}{zM>`+JITiGZYp3pf!R9k7v{B)- zslJ>|u=5+)voBU26c`^!o}#&x&ENG@ohlKkmWZQ{y+2D(T%5mtMRQ#fJg_&BNUEw{B@X+1Hu`Rskx zX6T-Y^8*qmhw=?3ntq55gBCVrm{;i-gJW;bPLJC+%W~`JdZ(2P#RFq|AE)R#qRd=M z$h+(X&SZwq3f;@^A-X>A6J>67y7RoK^29zXhn2)gWs4qIZJs~NVTJsYHs2R(VHxseO*W&ycL^D0%tV>k zUGU@N7QOHJ@x!*)nv{4I@6`-Nn~=VTwKwKMm;<0Lj5&OpGOl0pF^Rk8EF$H{t>F@n zk5>9Y$*Xu`?87)oc6~K*DMU-WZ53winD z*d57JW$l>m7N741C;8lVHkavX;iquuSm$y1@FN^NlWTjmh($4;gj1ro|2gtW8m&h`D=fd( z?}Za%et#~XwRZMus!hh#1NoB-#yw{aDtzvb>*Dg%YMgLljh%UQ-TNUnH*+DZJ+U{4 zwHUvh#?_6r8Zc(e%iI8Y{V_A;$K|W#IAP-NaZ%h>A!|{{h<@N1Hy@>P{Bd(FV-m-k z>cE~J?cGp1J&XKd@!cC+SFm}{XdJwGT|w#NLgp=enH7!uB~+dCO||%AmI0PrCe8s ztG%UC3J%*%v$r)WFZHnQ%+Ga>4tDbW2=-y}4GHErnWy8&HT$XcrwYx|D*Bv@)+xoGT74R=RXyc4n~_0r0P-mt#A zy=U+9Uic>19WqgFA0Mu%Me@iCXL1fL(ScT%Tv=Mhh~mbqfzHL9AALmwYq)4uhcSbR@t zuUWb4yxsDIk*x_Gv$IKO#cw%7`Znr3+nZ`ArCj;u;Ovxr8#}vhxZS#yGre#M&vTVh zAEnt!$74r82OB_niiPsA1W(vv;<23d-cDJfkG?L(cd=)a$+Yu_M1NH%9r8q*hMt|b z?=F;1@hTHth25~%ZBIC1A7d+XUK;(q9UZQA!FyLd<3e*J?apU|LHHajX!GF7GvpKA zz?NscNAbEHIVe|J(N>6#!iM2jYCF_9&#m-7x(PbG6WU=qJvR-;(LVBs1MY<(eJ-)c zsoE{~<*IwB5vC7;<;#sq53!8lVnPI2|j46 zj3xbirPgz|>7dD2M11M}ahAnau$`X=-;Y)t2E@@uDT}>6+>-~~>9aW3Al;%m(w2rM zTGlx4!Z{Akj@Vg<;bdov^O1n;P!4>_2TfQ8W$m{9rQ{dSj7L;|^~HKdD4h$>=+scR z5U(~tTh*C!zYNX+4VY^(&H%B`0!%iaYdbm)Zsdax@g!OG%j3F~I_@@&PgCzseCg~x zY1+;%jL!AVJ0DQA9dMw1Ft$J^A%AKwewnt9$$a#roqxl{=@X5Ga0#&@E#-i<_~AYH z`fIm!FExK&eeBFUxX=%YFMp1sqboTjoOtd(Q#oMAcPJ+tXFBl}vibZ~ao=_L!@(~k zdBIcrhWx&heo!`r=$2aFou(5VKg6#BILL>Jo^>8?9X@Za{)M6XW@LpkRlI-SpHV0u z#qPnAc81;-y=$voy|c@6PA?);$P#kQyq@%w(h}|zgHrSPw76!z5iB%T*WR7>&apNh zC-qnIJ5mgXV$aY~O-48TL$~|-9Dbzx{IsRkvs~#!TfX2VFPbw8agvQJKQ_g%DE17w zNsbL>=b7LGJxALmA8n90^dJ3*_*7V~`j=9UXwvSHCHO(ta4)+BoY*6-c8A=N4}CN~ znLLGFvG3SEO1+S=QuVbk#BU#%5h{+5d+2~2?N0Uzai!F)oN0s;yr2gpOZ3UY3H{{b zq;{#iVTf+=>&rDbpo_Mv$FL(PA3KbnXq6L#QpyrtLfPTyRNkNTP=Hljx6*6KUixZNc8>0J$K(?I2=cD-%8fxO<%u?Of_{P@ z>F`s>TF!IE!k;UVJfWMYQz!@i{ovAJH-;UYTUzD^E%cb5hHEe-9$Oww;cu)QPajW^YYePTNCb0{^Mmk7z(3Q*=NI%+s z>SnNNGJkAJQ*I1ODNnS8lXN-pzFo(-jx^Gz_&uPXuD9xcM4r zJ$`wq!QMG(X$yJ|E+J3SE9fH9gN=M-2}3YDb9U5~ha6@1(8kxSF=K}*jUm3p*%12!C-eFAsPdVQ znzZw8;Ldd{El2MK8j;^M%F~!rSRw0rk1D5HI6*h}{*7PrW0{AI_r9e+@TV5}yTpH_ z`BrmsmOG=NIw;(X6Ym1wP?7%&()s>?ul<&15FNH7y z7v+h^^7v}xGsViVv=OEecE}jAB>kjs!#I4Lf3m=zNXF-(<}}fRq8)~n#L1^6oUpmE zz2k8*{hHC^4o^EP7N0KvyghBpr{!NG$Jn&tS?Z`<^Sx%i%Sewt*BF5NO5zfh?eohu z^8=(o2M;$l_l6j#9gsFo_lD_puXdVGFOo4Zg690{(Ths&hssO3$@A^D4`a#AagwK+ z|MGc{`fv2XCaeOVnX+~KIu*JWzUY*2+y;H*ggVE*8|PchPNvy>1%CV(yNKt##7R7$ zFPGbzuS9jHy)_=uGumDuOyc5&6KgMw+bDAIG%D8!3+H6MJNY%0Hf6}`qb$3MRN4Yh`8XC94w_~Cm^ z^b{82tJdPhuk*uKYFpc8y7@;B_sTz=)*5OJhpqU@;pF*l*d`94{Dk++ZK0cJdp+g{ zSTwidt(KmP=lF4N{#Y)o|4#1jS6^bnsqpx?%vgDI615~R#dyhLWb?eF!)9jvd~A7f zu%mmiz`Vk4abw;$`YXm;tvwUZtg$e@@c9Eb)@i}5obpEB3SFO8tzQc#LTqaG+{Ix= zJ;0Iij*lPn0QmINZ=!i^h#&Fb%X|q~Bd7XlfBF54m2hLc#@GVP{56DP?|r4M{gVHS zOUrZSE1(07xHPpICu|h@`%e_dSc9=FKlZ&a-_9Bw_l)=B#*2*O+l9zG|dJ)0CS& z?b|P3*X5$K+j7LucEjD$_45~^?Wfu6>q0yhi?0OFA-zh_*lC#|Z`{X~<)@2#UXD1? zC`Vc4E|{f1ojcA4Fr7szuoKFs6pkpD24}fM|M8e?T=-TEI!$| z?-(8I*1m$c{FURj`Xz_;B44OfQPJ?bWFK zsl~?`^CeO#UCp^#%IC**h+%jyeFaWB>kXgfuYKty3MclKhWwW69yx*z>vg4+iA<5c zZ+!CFUY$!2g2IQ8{ib|BY$tjN`IxwRW)yp~7zVN}b#7B>ITwswrh7ukQ{Q6WBIWBG zka(|F=wrlq!@m!C_W6&yo@rio`LVO(o-0nehVy>Zop)kBk_JWFrz;tf|1F*=U9~Y{ z{DlmOr)cddTGQN)o)S*rAWY&yr9($aK2&#w^mpXdIa|`{zM9|26F=xi^*!)LJl~Gi zxryzxKj{+64Dq3jVHdIIAlysdJGL;%S#{3pb6x=+7&nS9omFNGNg2FX@lRMuxe^_{ zH|hmnzMVpvI9)>?6?wTFUgdAv#PvG<0FiqC*24y$g}z%R> zv~Ygv=(U-4`!;NG-)nlVw5b#4-1#c_f;R6noKq0ZN?@k437I>ipON1S-WiyoUzP4` z*YQ06bnvTZ3Xv7|`=DF!gRxy7P+)|Nfh}d?TLXN#Ms6kZgxC(EtFRI{`SK(>gxGz^ z6E-II(kbni)2C)yn)7`2^1SQVxeng_c6~ZYZWOXdh_;v<>#$NAhS>WA-jpjng$;#F z<@#e%=Kd;$lgiCevU7L#p0ELEGhim3*n=^4zWIvU9U=L^Np;;#=IyM}kidy_4MJdG?bE{F1@eB|N#tmqW|iuGscF6nCF zOB*xaK27K(LSMgeEuBt(%D70hRflSXqA6W2TUs^?`e|^gC(kcTp*b{_g`5ckFu~6g zaxv09b_`iz%_a0dru1vsu?F$x19<}b zscY%@tZW#bGe+Y%y2P(v+_mIsxV>S;&eu6#4cOa$TI3JR(do!0I#PTQV(a2dP;)HA zRYQh+8sZ0eX55AjP@ErXi~>%Y1L2+f^^LoxeW|afJa7OLbQbnH_kLeb8uS;ow`7O+ z#Lwr)uR}GiMLQfn5l>&Nv7T%_aFULv{-fQO8>ugPg#HRy0Rv-9p?dpm=_!A%1YIw^qx{hn6%xjP?}cLq8fD zper>dkRIS!$bYr&RX=0|S>Z<;^LdlM4u391&)po~$@WLlZ{VzW>~&-cyIOT;tmf;U zth@|Qx65}Ke%MG4e#kT91bFiGLA9{)=?Evy6;NNv5bYrHF%a?2ytd|}NUwCWhLg(V z{FG#b_9&c~-^O1S_J&_)hoPP0^v}u4-w5`A_=2u@6|HK9(54L_L%zQ>^C7d4^EHt3 z3qyL|Gjc=7J$3hazBJv{sr@@@pY-eUE5^0zY<@P*`xr&n(3^Js2{Na?*4Lpvy-Ht; zSNay!xnX#)CEjc`C*&O z`82~<*0jSjI|pUsyDXoUm%mD5MER6FRq=>UCPqV_@1JjN_WzSsN8Df1U+bTo)Y{n_jgUV zF3vxi&|)=A_pgHb{k~kNmd;{@gNtN6>f7 z6JWQ|_SB}~wHp7jd>XI3Z{`Sej+MFI5DT?~l6=xw9d!=PrxRX}+q_`xI|2V9ekduY z8W=$%AgN&&x(ezK6@g{=tbykekYkWKC+NKr|bMjpKDZgCVQO(1Hhy3+} zYU3k%;#u?Dn!iWak_O(zGdkC=ODWgt-|6#YBQT!?9nF_qX>A{|bNShKl54NsGs$z~ z?Y-xg-8=)litlQN(1w4_88L1pE{l`Xr4w$ADBfNu<^zNCpWSZFQhh3OC5)G$gUt>t zaH1b`-~P(j0`SCKMSpsJ5r2o$jeCU^botYIo5uFocgFBH0c1x400$+s66iDn_b74OSQsn_Oj)2)|Embj1X)8u56`5JfQB76!v z+bil%8AD-HY78a*YBdx-E_Aj)zN~DGRnGU0%F3Nv&o8U>_|?VpBcth)nR!g+B_w~f zijVkG-O!(!^Vk}j{Q5`s`NCE3aq~;aP+&Lo99!)&AAX(qUh6p%`P}gB2k}#@p>U$E zVcp7kKQ!8TO#bPZLl<4bTE)ia3qG;Ur%om#7>lt!;^W0Q8N7unc9*<7`PlQ2=3hm(!*v-Qi& zDJmV~e&&pr1NSjoX-h5hL)MrlIe&if;z)CQFY^G~!BJ}n(5nTkRBwejob0F@m=Eh(h#Iu-;*M%GrM2`U!g}!Af~|QwNn1hRi>+2TJWPkPpN8xVkSFZffrIGlGTcv77kRiB;!EOXrXal|^6bd{AY+Da^X6 zt74!Vx^58E1`$rE|_K?AzTn$oF_O4R(wCzRZKn)qvaX@C-K?9- z=NfuJyl)jMKe9ktd?0Xr@jRR5S}%bE{iy#gxYqhFI!QEiP9uCz@T2_OspD?bistaS zrgnYD(AIwKd)lqTJhNki?rg63j|-6>u%Nw?2RT%^g+gSnbM#zC_pybf{Lx|0s_kK) zlb3et(?tKN%-z;~JNZQuJxp70_qNvAI5O(aT7aMU#8%**zMVMsE_1)>ES=SlbzCs8 zZ;xH!yJpi(=@GuwhF=I<=j{#s9FPv$(p!b}9q+_^ab(ZBi2v=>dAn&v133^DsqVUp83^*lH%ubwy;;;_~Id~cKUcMJw#fm{iH-VgZEcG2lz7_NVA zx9;0XuR4Z(G_s{O)OWS3Qy9Xl@(|K)kdvL@;^W5oBg#?Pk}25`aXL+D6>g{ArKDB4 z3OQ%*_q$-iyNvALiJ5e7Pgd5{S7WbpE==dE{5o&vn)Zhbg17h~WUd7s=m+HA)_?9_ zms01Qr15F!8u|9IlAbzqxwFCdOGkS^*OE_X^|pgcn702!qtk)ngYeXF8MkzaIC zIG4ARI`1|QIQjjt+E(N6U~{U;+%pG$4rM!Zbqsc@FQY%>H$Is>wOd^Uj^G7f*j2Kl z{CB(CI`1UE=+l=VFY43U7n?3{hH`FtKI>nU=Nfk?Ul`JF`7%TQhupB2spt6U1mC=s ze?C8*e@&Z~&SDNsGZ=qSbr(wlZ3cMzN|&-BcwJrc^U;TxmW7hLpA=aaSD|a{P0~*v zADmoiNH%l~H!N^}b$an^p*+Ncxuauqc7EI2X&uXv4}SR5yKfp=a&;k&xe{NV(D&F3 z=-E>GJp4sc4(AWmm(l(T*%ZX%3rTAV<4t2r>hH=?*WHv6p_KoB+M(tUHRcjtI^T@$ zDJBy%p6{NJrl*PC8EvjiD!XzneOiBd_?t4n~h_-AUv4u`VGbWJ?%|4~6DKuq=Cu%YhMPz!z=Kx1o?7jZ=_&U#7D2 z*Ot%!!+$9K88X8U46q-hqx`gmuXEr3_S2NBuDdA*e*Cep+84MQ|1ustfak!p9FKQ?4GS zV?x`QF_`$cw$?U3vpnO*{j??YF@AorpUB@oKD(l`8Pd~AZ~N67+2e1%B;2L)=r-CXXUo8WFCrm3DqHhN zK2DqF+H9@P&epVYo~>axI&;pP?_SP_3nN16LOpyPjxDLWMZDV?v&=j&`1t1+qj~gr z-7B0Ff~DkX6HZR1j;&HQG|2<5T4Uhe=ewHM;vb#NdJ_FTGNrl7Jl_@0XOHEu_nyT` zXU;e~G&W@C(aaZ!;YmHCdE>~(kLb|WkTdY|^*-wd*ps<(osS{L;l^3OEp>I;6!Npz1-BfO@aA|Lp9QeLh1Fb9uL&{%=I)s!V@h5T}_`Cjy? zcy^)53(t4rCoAg5qIC)N3zWs20Jarz^p(~d&WNV`WU-EejO+dRJXZ@ZpJx7bx9OlG zS4Wz=`sY`V+PcvE<@9puQPR+Ft1jCKrE{eB=;yG_WjkRgnB+NqK6WK-!{IcVG&`qIJ1ZQY#mQ_-%3(~*ct__#!HGE>SGH^8_O7fS zW!=l?&A;~fuhz9sA77U63`Uyg)$>j5u|&+wzg;6`F#n*k{E&Bn%sO4hSxHOF+^N>t zxvv%$Tha0PzSP&=p*di`Z`!V}L&=`>P44?6*b@2up--PR4CV?oZmK1mz)`%?hcmy) zJ!5;#Bkfo}jhJ^iD=Uk+>&xZPvCd<2 zM+fiQedMZBHl(dsJMrsZ^0o6=A;ll4I*V^UDw@NdZ2249EyeiE4D z)%&Qm`j^TN{72)M!uHYbF+_(o9)VV=eAQAqy<_xCIj|^JhICjh)xT6;vN-L~4ljmF z_)Ip|{U%ewh!9&j*|4^wF-wR?p?l2*-p@EOkBtm6F0L3}u1}2KPO0*~*Xev&;+lCp ze;%CiAHKi9Ouv?{@uP)grIdKq={4`N*Yz)zzHo|k>x7$oV$8vOHFF27A24?Hv7_we zRNEEiks`lpi^)Q=M?7;9%-xV)#RNGeLKYDOMlFLFqaE<;1 z7=Rx?;o+wv?()io9)Hb%^8GZmdY#3=^XDh5STFZ|eJL#=YnY6moxEAynRj3hA@h>N zq32jjU~QDO1g%S{jNE)eZQ&&T2=&es7mj)5*Pit__6sOoIYaOtTsnMBWs0Z04#kf` z_|Y}}be{gr%#ou**oUIAe^>|QFBXP*e7fvs)E*$pP+FCz`)Y=wy*UhgXfo!{d|!mL z>~~|I1=r=|SA6Il=-v;@NpHJl`FwC4jprGwGInK6uJx$RKe~R8=d6|JtOfVmrB^6@ z$Vc3Lp}f_KkK?IWoNS#i&2IS(%k%GdTXs3}`~1XR`!wR7E6z{1n`@P)a5rU@Gq3m| z+^SqZZFs#^-t9bB+1trejkKj;BtBFJg^J$~_Yv4fU>|{f1ojbly&#}I&<|fPbuUy; zAB$423zhX+iZ6x*^LFf~w5=#7+3z{ol%BG)Aj38XcS?Jq!~CxYZ20Epz{DB(sXJx+ zhSUE3>hPMq#1mJOV|)wnwSrez58d0Iq|2P^WPenM!*=d3_NE&9yRK&aTd4f|MZUzZ z!Y12i3O3Hqf_-arJ6M#G7QFiwC$n>y(5-c>gbio!&?~%i_HdU{-`%G1&mPw@PCiDV zpPb!dKz=Y!CokunHxA3~@0!h%EAixqdyS!ZIp5QNCFFmr`%5cRy<4Tx+Dfssd_y?g zJ4+vG^T65jGVr-qSP3I|+^W9eb30e%WPmVy=HKf~YcZTipFPu(@lA(qK|JMa9dxg- z5>A|x@atB}wQ#~lDwck*JMH!s#>uO1PpCY7$6DuZDBH=~iNnr!TeYzgM)YaL>RITS z&gx?m#iaoQWJu?V)pw$|`Ed^qIs=%MCyV3H&L`)ed2emco+ssbHQHdrN%a4%+D#k= ziZh?k?kp>H{nd5$+3>1p{4$#lZ`W-Y5O+Zg`TGK{5Tuiy|B_t9?27Q<*y6d-RDEs zizZW{O6oA_qpwK zg|k!8FOnPSRr$wI-sJJd)LgTe!WY%1{=Q1INy8x>Zy^ABb2GVD!ezaLUv?x z@qXY3zC>SPr7-ewLVn$O;J}VcPNWxvljKQ!jZHSSpjUQ+k1!0s^9e?r4MC4VM_8e= zxJPEuRn@egRA1k>1Md&aG;T;vPPOyRRC7y=}7fwjD2~IJe}`db}~gjO`D@X#E%NHMBRA*=xXj~ zr)KPo@6qvc{CupK+k$>L|58nyzyq0r5B9c!17if@J36nP9lO??9p}kM&*k35tRH9L ztq^?^;smbfAo@V$hx}ohxO?`Y;je|V)xXJB5WQ+*MV})516H&>_%L5NW6qygYnL0} zs}H8VAUo(0>VYmF=}sSulPCH=jp#;# zeQnNf9sLb?QYZQr;_4I^hrTDz(9wqF^rh(g%%$RlO=V}KDhpI<4LeZ7|gl!g`r>=ZU2I z>3KCUiK8L<=q8QnG*6;u@Gkp-ewujNR3U7T5!npL9y$qqukyAE(F5oJ+2WdqB41n` zsu3ri{joah28x$%kj;n9skTI4#*c4o>!)YRUuqcn&|kRfzOi9=Feavtt)~553~$xL z$4UJkwk0yAcEH>TIMFWi<`}GA{-4Hc#DO2WnIHGGGcaepSmoxQfwb?0n~y1#C%d9p z9jft6{Ai90J;a;_Yut+S$DYUwwy5j``apchthA+;6~Z@Zq@?!^?V;c)xe?{4dGO1Ufi3jPW$g!`M?4^X{+GGPxP=Ql4FBztafVn zlCuktL*b-(6Z1JU$B#1256h{h%sFiHHPR$HDs!(w@j;!CCI3g9+K~LJP!HuP7Sdk8 zL^7kav^C*G+jH@mxj}SO{<;6-E1KuoD||#3KH=TRN7vF*dHN&kf9-I})ydjQq=U_0 zoy}iGXT}TrVPkBR#VMF`Lw+Pn3MFUoDW0nx>K$vmB778TOotC0@$LNV8P9fxV}bJ= zt;a8CeKzINaDE?sGcSca85W+NDWiIDf413Ts>Ro2`rUk0Osc z??;|$Vef~aV=%gKJswM^jUtK`Y*i``Us7SG&ao6fAHSYjU$fQ3%AlZVKTCv3?TYdFVPc&Y(IYQs=_xarGYw=AR zlO9)_>bu(Bi5=tN`LT`BNqIPB#%;e{m62{j(`@hEg1`HaXfS+=EQ4V#TNpPwqas}*eG_=w||xb0#Db~zu@ zOUuYlq|?kEH5)+l=g6r)?vCTB7US}8VqM+r>S(M={WjZ^MdO@rL;T^|*=#Q_HvQu8 zg8A@`_VV~NYY~$;p2TzL^TDrYIj(KN@R;VBL^F<`T8$IW(zoTnq)-|3tD;w{cogDG zd^6@PRKIe?`(wvK{M2fE4yPUZgY@*!mUw3Tl0dUo@hHR>JTqrB+T4{qIi4zmZ^+`h zU+V~k_^HKs$rAHw@OO2s`3g4qmU6Kj84A*xy^yt?Y7vt-o`e%2a|lXO@zx?w3$}qdQoS65rH| z`Z4AkxH^B1F+TIQ=rQWgJ?#`6CeOEzfUSPa1<;OFmO|oA4o|ziG0;`~{SfAGimuoP z$U4++c?W0azZY_oRbmpqSjq_q#{g|t< zZw9$NpyAw%Xb@^In&w_qPd^RUim#PW{9$YAIvistz8oQYS=i&DIpsoS)(Sr2Lwve* zri}l7>YzOXdR}U%a^pgk0aolC^5=f_OkrI9YRAEgXo@elR_APHz8MmIw@uHKcDJF* zBXnyzb|%J;)AerYlq0`*$qU{0>C6VO^at*b0YIpM%%H zL}%U^?OMmn$H?Zt`)D7f)_1q*&~c()%Q%V0*7-{-tZnW@_Y}g4vN#i3=(*x;?`n2U zSp4|mUgIZTSm)TT4570))1bP>h5BZ)_NT|CA&#=d3!&{Rp7H(O5Vx0Di8uC%7pg;C zJbf2={WBkN>97$>zQ<@d>ZiH zNuQcH?)X(YKja(V{U;jTxii*vIYWJIrakKy;_Av`2RuJwW4%Z9N1{(C`B9(dKjZsS)RA*$U_rfoJPP@N2;Aif`fQ@*OeV{&AGF>g4 zgb^YA6!n)(p$mK+>EooaJ#w>CJp6piGe^5A3;!$p;0OI9Ug$fBla4}vi+8>6N`<21 zhm29+iT4<`J?01We$@xf_N2{6!OncF;k!t_`g|Vno6$cW`7=^G^JN&?{`;#GJ}TGe zP1lSk;EBEqeMP+bukMNd<;(q%Pcig2&(KNo!NZ;|uF=hV>kLx1Xhft$u+=Oz}9&rL5nzlXklP+o<|LMb?Hm4<$jGBpOI z4Kf}QooZp@(-Cbjkv*+;rZ(2q*xYL0LC)%V?b{+m7P?1QdXWeAjD;AWf2OT3L`Rp} zR!Ik6=uGKx(GNK7IbHc`Y7jXFg6Em-nUHC&zkET-7u51#*IoSI z=R-R~dD13mjUr8ES_@-`UB7+q|K4@C&LuBN@!rdT6pq$8`|QWs|FibmYrod5Bqmv9 z38#Ufre0wImA*or&UDV@Z9m>I?js#-tCUPoXUPR|&(3!4%8HAOfz80V&Lb_8Q~7qr z7)pIE>9csRWSDUBHVatjH*XL2q&`t;Z^98wNw=Ji0xPfthuQhArf_e1nlT?3mfBl= zc+a5`^rCpHC7iI0goEs0&nNOFJ6Sr4z79Qv{bc=GANR-&eLHqz>A8VI&eHXK7xl4x z8?Y+GsvUX4h7wNl|LFPT9{+UM5W*>bU+yz~z@tqqy>sTojrk>|W3Gg;fu6Aq{8+P+ z?JO=!Jo!1f6erGSbPTEedEbmm1EpUa8k!#Ae2SgPI7S%l3B5zRtNG zbJ$Cq^NGM*C4C5EN#-cj#>pq~%t(!_H;vQcITJEC zr1=Z@(D<8lp7%=KdwzBA?I_i&p>OX_-h-#)fU&-GS9(^#{P@{9M&;uv^#;FqPFrz; zKfv5M;r+cQ!QTBw_4o&edC>B zjvX27ITOZez6{;d7Rj%tvGIh`%ZGvH<xg(EA=IwQ>3ec+mJsyopu=AC)N{B=cIkENWMI zeVgi{C1okZP2~xU&}o#xoYe9D)So7{X21zNLw}c^tEDY6k1BZ*kF`RD6*htTar(Nv zFCywAontz;NOp3%*oW;8c2T5KOrq6VB&7auUR+DGX zg;Pv}Un9;a=In#i&rz`-Cy$Trm%~YIk@CpXm)o@aSeqZ`)ru^M56^4XJ$}LR@|7V& z!YHLX^S;ETlTyEJk{=rz89toR?m5<$dB)ZAARcRtdL9{9ti}(N{Mjilbam?g7au^W zOpfgC8=ROJ$L%pdhKXXmqL@Vhp(YbuNf ziRa7TNcZrL-Rtd-r;?7yT}6{V~mBBH*?4u&uk=|;8kspwG-A>CP&)am=i(1sAunR*NM~T=Jx11 zd9l5ni#Zt9EC~k_WD!g>k0l(!yuqbz+Y2>*Nb{r{O`beX!VAhbXRJ>hRo`+c7$Y}h zhK*k*@cC~3*cE7>rKcaYZgkY{6tyHVQ-zDRqjTk z;-584_CRaCP2p>$?0q8N-r3Q8%4?%x1i#{)y{N3=sXk$i&+MMyBP#rU(y{#fn$mch zRd>B-e?lx%dY6^1R>QY+5?&pM%=JzYtD)r>2i!`_tK zUgoe)B8;H9bvWX#lvm}iJ*|2cU1@&Rj1SNBclqCQM}CA;Zf%J;tL0Ic#B{a!RV$tN zmpz!S3ETN0Fw#218gQasDnqndbzMuj;(aN)mi&L7(r#i@{@0ALDnI3B%uNI~5!ggv z6M;+@$AnD1Wc1*Yd4 zJ7=|DR{595RqezQ-=h4cJHOwuQas9u59YR>6V9utyxKvcG$-N}%K0DKOF8vjYn*fs zVxjcX99I90xMa?Rb9v~Owbp+n>G>TP@!)CoktyZ?-q<6!68*z@oh%(5<3k+uc^n=; zclJ*eoxiI!yu?p@UO29Yf9CubvWI^0;aT^@;Wtf|`Ubt{((`HX!n!ItQD+#%U-6f% z+>^=|W#2Y^k@nnY)mdTk<)d>~3eTci)AVP@e7smc`SZB`Ts3@F4xO|lVFQhSx7_4p zyc`{_z2VEXJ^4l8+=|CX_k}($-N*0cn(s!R;`yy4R+LLyU~fJ3%VVjN8JB`?djRnF9bM%rPdde|8i92Q;zf#dGgFfnJPcdtCBcLU*yla z+V3Ro=Q5nsM)Z5p=MD@FgB|i!>YNU7SyMkdcxpF$21bU)`!6&e7{-4JKDM}c#y1OP zNM^wV86qt17bv&V82R$L_U(8?=O>}XdT`Sdb0dF#9{i)GscK{*>P>3wySXOFQ^hSL>a!Gx>w(VjO&{ooo?DUda~JkJvR3# zUTf=ABbeA8fQGrt`;NzTU&%9hknf51&ixaYcLhIm;G(ly$dGV?(x(!?QaEK{rS=6s z!l|`==g`#UmQmyk{?HMt@zqxfJ8&l7=GG}wY6COEM0%Tj_vk6~J^hUK;a3tTkJZ`1 z>7wx)?EwBe_g`rMC&?3jE=tvTwc)AG?-=U8)cB}yf-)}w4_W`Jg%k1(7T7m@Go4#L zaeVF!IKemkqN7%eM^-xYnD$Ve>})Rj{eUdJ4G)#Z$jcMoPUpd;uMhO>pY0xQyds>` zFVpU*A5`~Q7-WS_ADq~Ye=+nM6gyV((s_KKb!xO_Trx#lmn~Nnc{nj&z=~QtY_p9TR=8c@c)$aNk^YS-&lqykH+ZoDJCnFsm?=!Q0rE?q$GnT$xR)pR6wlS5 z!iheP@s*yTEz>*leUNM#!twotegPxZSG0Ry>Mzvivy?4??@i)z7PxnAW{&S7nL@@j z#;yi7zD(5z+W?)QXQ&_dYTV`Db07PJ6iz25`x;u0rssf{!U{bD<8ibC<3(PmXr=hckr8ipCYR z8RkdO>#~o)sgPDBEJX*y8cWmelfmCB?OwbfQ99w|z2Y<|W!z1Gujn8c# z{i#bAy5{CD3|#7O=nVan(q_@t*7@et*V<4Qa;P}i{L+1dnQwy=cK+P_m30Q$B@7vi z*JPxxcwY^y#6SI<>}|=Fbb9LlqH+7k`7ZO%oBknNT4zJX)HabRFamdQ(nT0$F&0tV zP4l($`kc+q`9H!2$XdG)FO|kg_=u+S_o=TO$-C^$1O1)nLS3vr%-IPm=`Zk7dklUv zt*+oEjG+1koo#0ZLz(!tF*#Dc>G|o@=bG$)@d2%tjuJjuRQ#pyjQ8j)K4)GT)A+Q0 zJgacpr?4uXBUKEec4kO;(FS>=^&R>-+G((V%_o(YS+qFV;Ma|*Bhg({8hf} zC+SXfhsOxtI%(Y5IrEJ&#k)XF*QfYp`}0%&XS;>Su#?`c*& z);mn)qcf2w$$62_FvCLe%y&;q5q|mhX+C)JSf*=(N&`hMbXNArY|H+99;UB&Pg~Pm zxgSSSf912@SS*#lc*wGYbLV_U^M11W_FT@_FON^LZ-f13)3KdwA8bqJ5GV(|1uy2` zyiNHalf1)*Iz8NSnK`>!8MDN=2`j!M@`QfAO-I|hp4yx0m_^aiMldNRKi z$0rSQz+fdls)@-`Ws5&3b3huKn(vc~s@HN!)w1b<&9^Iivg zcN|gJQoL64o%j<~pKRx)b9F1$MOm1spI5s}{qVTHFs#kfHdFid(9w?m^F7D%=gd`h zHE~$3YT36RIwAAk>Xg;b`{gnsp&i`h0tzu9PU#gR*q{~0s zdT+WOQRD?KdWI^_Mx(wCz8*eY`z&Nv`muswlF=B~Q0meyvi?hIEe#iaGvo+Io<<>Cxq*4RyX z-Wd+7n~Ulq${rRwL)FS$B>R5G4h|n=|1$f({WWu{*niaY<>o&2@}3?%x<~t=l&5HQ zYr4A9#k(l`C&4DJzxGqFgpvo?j&@zy!5%}8+v>QjPAXvo?H=5_6PZ~F4l9kzUgN@k zDPQ{S_tin<_EN>!;oUp7)2>!p=hepd>zkej_G%)_3WMIxb!9`u3mECV%WCWG)1jNn zX|DsFcDmDWVErZjMm*O_`xH(wkG{^jM`yE#Gwb}0;y@?ohfjbzdt!Zfd{5i+XWNM% zV+&u^Uc(Yb@?90zBYqxkJP`KBFBf0!i8BUq9{!m=6duAp*q&qIyczQ4<8V)(>1~Y4 zwzzc8gKt%Cd!w(SUf4%*UHr4o7J#e5X@|&$mluD|)qGF|oNUW}-v0}7OW(-V**|t( z-?frBsZ1#Lk$SD=d~pTQ{}e=}iBzrlT`Ar1NJK6i2iY zSg9;eIg_9|m7>&vG}sNqVP8IB$QiPO9MNv1b7*&jb1q8qKpdaH&bRZPcwV-VC;2q+ zyjBAvTT==;0$axO@9)vev>AP0`XKbQ=e^u}@QCyFX*q}H+op6KaVmiiWr!cnT;|Uc z_UsRGkImxw=R2ckb=Fg9J>^U%=c-xP<@ew4y&``qV{_wE!v_wWJb$sjhx^`+e%sq? z=QJ929hh!v&wmpzA)Ga5$ziPjS|;bid4)>gr25fs&{ohjhkK9hRCveisYk^>vZHV) z>$aSK0t?Rg%+7Z;&0iik?a$~hcRzAqsF%FJNoUFQUDWT>&cKU!v}N9-H)TVuH%`9J z$cW^cK1k;S!3q9(CmEt{_`FySgL2+`oW>8OK8=Kv*5r9s9|$(cG_ocB*Apj|;i=A> z!WZ|v11I>GEOquDFUybNQW#ynJdw}CdeT zy9n<*KHLKTI@`%v!=*4->K$p-e#o2O7(`Ena;)8*JKvM{<5z@J?z}Q#l5^7VZ@qDf zv0^R=KDcOOYWtjl11CM>_hahPg3UW2JgQ(XXnD_5qfw!;v%cI66K%&c%HxI|593?{Sj- zh^>RJ;ZL8K*^`xqaLR3& z9y-EVeA>O|L-(xN1R2YXxe2c%K5<#%D~n<~l-sw-Pl56&B~Ro>9B{%1CGCr6a6y05 z&gfU4isd)-yN@*&IOIBI%fxScVeMTDE5V4OBNfqg(8!$FLGk%)e+Z4qJkDs=i6-V~TE>Z|epy`?lU@0ENO545pEZ5L;?rx}Wj={;*{QzyIgzStgZY6){B z$Q0*Vz>jaQG0%K+%cS%ivXl2yW?0!C{4i(3*wRw|Sc&Q{dzAWJYg@2Dz!Cz78 z!-6>AL4U->Gx*7m7}V^c;G0h45b#gibYTyE>US;m{ou!QrEo$vX~W{x^IxfZm7P-R zG~P-*0$w?vI`~6L+hFRuh`7?x%!_)QSNKy&@tew$y8zXA3*eQg#_ z8dp&UI??Cp>#*MUDi;}mPjqI?4{% zcXoJRre6*9r>x;*;Z$qmJL-m>)OZ1&!HsY`+tcY~py(c%%B|H1A5rqdo(3oE*P?Ve z`%HEM`xQJ+%;9lqTtlAZQ;k2>$5YK`1e|hXt1P?9*SVp0M>l!+wMfllF$X~1u%mn$ z-E(%2wAff4C&tK(|CpmvzfcW~;xdI5<52Od`5^SU>Xk)RS8sDOwvml~@$!Y?OnGuP zr!SZCk)=~Z6VqVD7)SiYd{_Eee0cdU8>gHPHDpLSin%NKxyK%5%;+)J`m@UQ^Y!2) z{e8Ia_&Due@hXi=R(bG3+mVjaev4)0DU6rXw6eujFDMu=KFRrpYE?VsUC*v`9a`gX z$#TI)E##ENb2Y-m5$%QVsrl;VaFQ;ju6dlyzVdRQyhWMQ!;cs~#X8TXe%Ji^f#zEj zzZ!TfRi^mz6ua5CncMFB&xY{?{hM83-Zz{(4}DtdtCjwrxz2%!hV8;fe%A=2JYdg7!*1l0L^G~-|^L0uuDqd=tidQ=ieZbfG_WQl_ z*aqmMFeVHb6^~ESG<)aMc^f}(klOf~XQ50m5v^r>#9INUV%fMIr`yLfD~^*JD{drw zs)CcXVQ(*phmAlB^0ZvLy94rsuFLz6uI)Z9{&oeNqB+h;kFU6mEs;K5Ur0-i`Ki_C z0#3{OXkQCfrw+8YGp=E*TubY9<$f38)V=TW_EPglE5+yFK=)4eX5yoc{f&%|;fFN` z9K_4-Ic0l3#fuNCrF-~eYz$A2HqFfN-G>gg_aOsEJK77sbr7{BkH`5-GlT4nMPA~% zF_vU}hn-e3t9OQSp%t)=04-Jw^pQ3hOjsd}w3C zbRPM3oIF3ZcweY<@!fK~7RS~T>!;T4g1@nJkAdElLzgSFn(s^TUoKCj(k~URyyG|u zuSFX3s^_)vsywpjTJo)C+V!kUoOdppCUw+p8TI+Ww(tE!6 zy%pM!ug7}cGmq}|mhFF?R=cFF*UDZWVZ<3u_*+j*vhoItz(elbLd*mD&#%wi3AtEJ z9>NJ7omG!GZ0gX3lj!2*bT+?@M4uO@kDpmfg$Mms^Wep!!FPy{=lA`urjBb(BaD#y zEB7`_f+bgD0+=J<(wVM%ag_DpZxSFFDShEGa+lO_e#^JoMrRo`P9AYANJ@P z?+TA8GDqH=ag5)^&+6~A4>n5%(P8|CmG~81X?<4{Uu8kFc#G@9Gd2_P(Y0Cc6{dK! zDTS4yYE$%i$aOgDZaDk+Ue9~JxnE7)SCS?!k8kFA%ep5H={Ose^Ap!&h71SnwSZ(uFiv03~V z*x8jy&iPEApV^Dw3oiWEaN)Zs%ddg_K9H7j?a+CVtZ09j`bOGZh-dODJf-idiPPEr zd*;Cb9vJV^F0?mdcBK8#Qgs&w`fpgQNUHP+Q=r6+gPT&G=vcZvYbRFM~ zIQ&~}`&msol?g>Q%&$|}L&CE#Iytjvw4C~v8>bXbU_-g=Uy=OK<`{!}K6SsE`mQ#O z%7h|I>_hTl+~YH4rM@4*j5dgj_Rfy(gR1>XM%rh0j!#`~$@~2U8|gsd1VygsAEmG0 zX|?rTZ8~A1I_TN^R6q}5`=NuWFTRe-@t;LoReqix?wJh!Ogr{>&c%Kqg@yE^@Irqh zXUb=_^<8Z`m1{rj+jXIF{L)b8(7EwT7tFtJa}V#pCioYdO8tu|KDd>muP%;Ew5mOm z4{5a5>GZ=k2KzZHW3IA5-UtcOqY< zd^@o(4js2tJEa{`Zs)n-mKZ0Eg}p5xyfm)!d{*jSIN2GTUGS|vyz*0l&Mikj6Hj`F zJeSh_oo%TPDDyvQ)_m%ZRddJKucVJ{E3lF-s1!DFIRPv4jqdk>>l|h&xrwn;TWT2} z96e}uI(cTbOTyCj(=p2VX!JO`2;HN(Wzy3A;&}_k34vF8AJ?H0&ni3bOUL#{$~IrB z{dlag%LO1)mmbyp3qnEH9(D^(ffRQ!lm5;MxA4QV_o9-s}JyAM8yZr4||KjGA8ddR1X z?>Xlqn>Ju&d82o-F!5o?9BrKoov(3>@~<>b=or2k^K`7yX)b{}rS-!P2!0)P4kfjp zg%dQ(7Q*jXn#bPD!byHvmRq+0FXUI4WYJ3FM4#lpqwKp_zlXZ^r)z0o>2cB=AN66r z+uQnijDk(O)8;li!WtBIxi2@q7az5Nk?Q4n)Y?ZTP6K<*mw3AVz0+giDfR(pU7Pj| z=i03>!e2q^=Z7@(4IUTn8UJCoV{7?wV9a}^p5waltoeNDg@S%^^`!0e_S)kc?wzj??1OlYfO!|j%Uockx$;Wk5|@*O6Fl)vwZ^fOFBpy(QK(pbU#$+Z;K zGdH(DnA)CjV&0CiFXLkJVjelgY3D`qN$m^O*km_17ZckDT0bWycyTFJC2=WL7QCph zmiNDX@@b5|E-g>#x$%PCG&^^2VCN;`H|@PR6J!y2v^)s!Z=Jss`(8V7bT-Tz zP$u%E?^7$XlZBUXf~qa$=Ubd!5^mb-QjjN0m(fl;ENpW3j*b{3o(FnTUw#^!h=(lx zYAH;7rj&W9$R2Rd=$Yd99ix66C%MYPM`7bFXTtBiYTktWY6*|!cnS44Umi>0M0>(s z4>p$Ro~$-XdqZan7f;boygS%4Qd9lea@hFy;FRfm+{x3D7)J5XSF}G}%#|xWV{6H! z=V2qs2&_}S9BCu=lWI0+-stT@#O6F1S#M!XOC8V7HJ&I3JLHA^FvtvPJuV?XTeD)G zim{UFA5&j<|IUY3>t6gY9$_CDSou1NFTyT1@0#Ue%n|liu*bqK!W2&wY?y1YPY~8- zRE}tB-=}k03R?+PIhCYY{IS-Nu6qof8#~ytn>9@8t&6rp81GoeV||LTKl1^sQ^a|8 z?>j!ue(8?fzP)tJZR-uJNt=JRbe^hsJRRrZpDT%vFH1b2H~jp!!dFbgTtY*S=B@Z$ zJ@zQ1dTDT6W9VXC2yQmF7i`hneT|6+&v!NM#RvN=w9i~&E2Fl)!q~?8PVmsWJaeGr z!(2=;K80~*z|Z}DS~YN3u1sOUytkhhS}vV`uRH=C_$m);fF@VDz9P^Zh6SvUqo&?e zXBD?SpLea?`#S1=HM}WpDGDBpr^6NeA!h6I)s(&7X-d^;E#;QVbE)vPlvjzgrFdUU z*`@M~!`D(qrPIc|>v=7FC=XB9lHbp3T91$Je_rdlS+Ac@1d`leU5;+a(Kr9&)^PWa zbM&$D5YdsUfPv_nrZax~G zo12g1XiRz)@YKssJ#qP^r(S&N&@<0{JbCYx-+BGLt;zL!ljPN#TayN3@Jq>SAG+}A7#Mjqz@2E?j&r?YUe16-f zi}|#C7w%7P{K%zOUEh1SVsh&*{%&&X2d^Zz{`+T=TmR#;$*mv$ zL#y}MZPyp}=I8sPjQzuvtqdHu?^(?;uF zziHtM|E%u%TU+bCar5EsTkp5;vG9k<4Z?o;-fMsS&leZ}(ZU~g-+1qp?}qR5)B8XA zj`4fz<~_-+pKjgq4KRm4=)+0!f379T#KJx4{bP2YB-h5CtVv6hC=0 zd4xD7OZVi%<2>I;uD+h*EtLO*x%!(Hx2`d{zWv94|I3eUNpAfO<8w!S@}b8+n%sEY;$5~lzZJ#VW^o?BtNT{{ zr@Oz>og`nda&IJdAHJ30S7+tk1ly+WTibsz`LMNtj!?%OKOgY;eW~v1&HL7ur^Ru@ z*m$w;di8&Tjon+D{7-@3apQek@}UKb1HW&MeCx}}Z-4tIR~i?7V)*h8lx)4k=| z*utpgIeP8JO>3v8o~~~v?ZOYY{;P%WeDNoS%dc#C_sm!7-~G&2&Lmcj$yf51|KNK` zvgHfOJD>U94h!oxTyBnb-`Kv*zPaUP-~K~eEKGUsusq@Orsa9l@~r#x>0jAyc_x;p z$w$h&y|+50vTAuzzwi9D$%561`=rk5YT;JDM?Am(^cSv;h5Sv{hiC+WbYQ=B+2+D;FlPt$-Rc_pPLN+xwY3_$<=3&fxE7aS-r>dM6PA&=*GtexMrPI%h4TiBV()~}m9B=mXR4`1h- ze!zIRY47T3%f!3C`_>k_f6LnYcGHKUt=s#ci%hnD-Q?nKOGAGG-cZuyb%e=BJ{_`> z(-C>OA&>7HwwA_Zwd1DI1=H`efuFvw?;ZLm<1e|p*ShWc3G22S>p%I-ll8lwv{LQw z$xl7^+}|s7=gGcLeCpX}_a}+z%LgBO?1d+uKGt&R z#pe$lPVAGV^~ZYaADK*!ee=@mAH3^_SN_BG|NT2(JA3MlFTYUtU+mSAe^#uitMrN^ z);+Yf^TN*-7w@qbpZ>p#i%;AAw~U(3S^U1y-!S^F(Kn3l`hON?blB+IMxQmhZEXpzk?opYg+%?yZNrZ%_sZ{W+U+)00gFw$J-NDRw{P0*n|8a|%bRxlZR4jc8_903-(ItJJ9A{r z8M$%64I39cVsi&!T>6;x>-0yyPnvl8g{K~S^0?XejrC7F|EW*B^kV%>&)d`aoIzHO zegCT2exJt>I(=XLSGRp_>y-@q{vC@`pT;S&?-R2Z_vO-h`~HI&;n??#6XN*T_stew zpXL+tmwnGTA-3;ZGV)lkv^^G{W#2QVSjxVC!`{dCJ!6R$Ge(~^o4F;&*N}}FR$}+R zf9`WX{;jwF-S_`s=r=$4Yk&68&EI?dms-hcsXy8L(D)C#zuow;x!2_Fzgk>m4DgcK z`7arLHD~|7k+c7QkhA~qweN=g-)I#3zsqQ1_WhGaA2fQ+DE9vYhQS4+3-8$&!Km#2 zcOv`$$C3U2ryJD%zjpW1!;B*PzXLmc8TgrC3(WKEbz_2L`}JXa$9N)?b#43g0edct0e*jT46r!{$j|F< zjsZ5u0Gnfg%`rgcTF8bP1MK*@8Ux(TG=DudL~8Uu{`_MvJX!z3Q-9}~7oU0l6ZN0? z)N_wN^}_M`=9hP;5uSL=0-t}W{^L)*RG%5w7N+c0BG*FN%i zVeo)a(PbBN%k@T?clT=p-?s30EWp~ppJs$JcKA_7IAe!+Y@)FPW0QF7@NPyP3zi3K z99d%r#xbwjd*eNGZQyhEzSP*E#q90XjvfB>AN%A*4n{?x#!$aHLQ0~zgk~Ac(c5*Lplmr?*FiVXSqlj@6-J} Z_F`h}^x$ys*!Jz)my(UmcN+tN{||W8U*-S+ diff --git a/Lab7/archive/rootfs/dir1/dummy1.txt b/Lab7/archive/rootfs/dir1/dummy1.txt new file mode 100644 index 000000000..9ac4701e6 --- /dev/null +++ b/Lab7/archive/rootfs/dir1/dummy1.txt @@ -0,0 +1,3 @@ +This + is + dummy1 ! diff --git a/Lab7/archive/rootfs/dir2/dummy2.txt b/Lab7/archive/rootfs/dir2/dummy2.txt new file mode 100644 index 000000000..81ea3b3c0 --- /dev/null +++ b/Lab7/archive/rootfs/dir2/dummy2.txt @@ -0,0 +1 @@ +dummy2 !! diff --git a/Lab7/archive/rootfs/dummy_test.img b/Lab7/archive/rootfs/dummy_test.img deleted file mode 100755 index bb2aeb37e88386c4816345a6d3f9eb6344f61d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2744 zcmcIlTWnNS6kYe;p`{P|AT?=#%%hM{6k0UK(AcDRphAt2N?SwxqAz0`3w5N#YEcF- zu}S;EP@*OX3CIVnD8^voBt+|nNfR5ffPAUkTTqPh0n|rtXgRKZ@62Q}j@Tbga%P>o z_dffq{Wxdl2fiGgHxL7G5T-xY033dlGY~YspC9<@)VQ(zvf7BL#fVHvF)J62 zm1{bb$6WmZOo_}k;8dpD71OSmb_f1#*RVjlu6x;$*I>FngV(8qPGU*%tV50PoJil7 z$&-GqV#I$<+nn>k#jJ;Q9&wTF zD~w+FSgCid^JaX0V9Kq}O!3lL@^$P2I5UPmCOH>=f&t)G6lk#uymcGbK(wh-LzyC< z=ZT^N%$mSqL_(`QTlmO<{?c{PO0=kLh?f9m_BJza8QMeW^EU%p0r~^Y7IjH`jAN_V z1c8E-Jk#enL`D5YLT+YqwU+pT=`-$!)di zgqC9o??84aYT=PzTJ=$b7(r05dZu6ejbp_YUUhBH?sWmx#n|V2+&uth9&g~u9 z0G`AC!XIy51oR=y?!8z+naRA^jb=RLW6kM{wJ+5vOZu#!PvL3Pr%j*Qp74X&(I%bzKuoWLO&htJ*=m8gdauW`<7sIT+|v zp?lYQ_N3kj_D5=;^h)B5NcD~QxWwFY4|}!7CR%*o_8$ zNli3qAG&Q5ACN|n2U<~#;boI1)Wio8n~+k}CuOFf5G6*7Kb_DrerINP-K;D2g`3QN z_nvd^x!?J@cNe-YjV@@2<^aQ%h7AA)@L^GOH`fXxSKT%IQJrhQu6@1G^~Jdf?Z7uq z6{eO^uK?Ff4P)j~*yd8hrabEEdod+4`m{?^?eb`sN4wsC+f^^puH`{?;vK8@G8 zxK3h8@~l9)@VuP5FP$g-nt6!bPT8M`b)oBmn?uvjc-vsl9EW}5b=Wt%VE@nq`^R3` zx87ykRlcbCcpRS))S_k?F)OmtY(mUAgxC!8ccVm!27Sh;;lpUqS4mVxEy~T0l<176 zj9GreUdDQuR}d4~iJZvQPaWrd^NJB$=$dltb2o4G9QoQ-Htf5aIwm<6eu94Bw+K*g zW_$An&Vfj6vw}j0d|oDs4lv67!w3h~d$#bA1O27yBBiKz_9K=L6k7X@n5iin&|Xvr zDB0-r*O}BM>@k6TV#8j_PRi4Ljw3u8=jNV&6XE9;9G9!R{!9s~ZaC+i{L1B9 zNA5lpn6weT6MHWX;=<+G;6`(n`T1F5PnF3YLygp$HS}2%iCMg-6)pN!*=yd?J~t=( zXPK9i>iqU0eZFUCJ9rNJ3%|cT4XAyX>zOX5%wS%u8Y33)vF7x}+83ylC43gsr|`7s z)1ptMyYgg!K0%-C505+bjLGX&`jYr2@39vclgyzoR>~RQzEr+vmPBe@|LirfdtRlT z%y%GshkJN;3N!6fecrxGiQntf-4a6u@LKD+EP>r7eiHY@RKkH38S1=k z5xtjUlcD!)sR=UFMDhpb6gkZ6b@t$O-q&>qw@MFWMQT;@12MG@7H#BiW~v3|cX&OX zA@AqsnfLU38vm0|o-K7y7MagAsrj7bJ8?5Xk0L*;*x7loNv}V6ynUm7w6$4(teK~BG%**^<$>77J zJVg0gqHx?vE;66vca-vBPd=cYDjo?mc>zl7t60FB)K4zqqB1u)l%s`}>0FeBS{utk z&6`54M>;w;H8dP+YT5Gi=HqRfp8`wf#jg>c-TNZ8oPTvRKkHWT%jhqcMye{t2ahS= zQuV;WWBFWpU%H{PMtkOk`;L=MMfabM)57^hBHtY68u2V~o;Xfi_ZMZvJ;Xc25Ygv2 zPB(EC@htI4;smjpSkG8nh=1I7_*?-k%lZ0oNcb{>@pYEBM0I@ab=N<9g_{h?p^Qg8 eNd6YZXP$T9p5vXzm=mI;?ZcSdj`RL6-+u#IriL>B diff --git a/Lab7/archive/rootfs/fork_test.img b/Lab7/archive/rootfs/fork_test.img deleted file mode 100755 index 946319aff849a43e24db3eac785e4070941d9106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3272 zcmcImU2GIp6h5=NZK17gff^e?cD4mASST7|C^qR75Nl9=wrdFSfo{8%HY{!ThuGLE zOKKtsedy38J|F~?2Z{*95aSq38ug)xO%RH{DKn*rQDT%I?SwAZ@67Bj>$+lnV3ND% z&N=6v`<-*XduQW4pAW~Kql3@0rkq5&GIP*uFk6!YqC(nK|BU3k|a^=d_P6NUEW zkx$1ueIA+XV7rF3x?9nV2&t3v6!WT6IynKI;momP%8S)rjsYKX(HxHZYDP@ObwB2c z8OGcRzsHD5lUU@LtkV~(+u=tI`@On!H2kadcU+9oT|%MVap7A7zgdW%4>^I{@7HLF z+5p`%7;f45ZM^5p6C=(Y--&f}aTdicNko@{>7<@Vrknezhd|m z!>{k3ehoA9YkQC%aP3dGXW%-KuyHOaoOM*gI7idhW#U9!y_mG0($*()jrW|fxP@Mu zMkkpQ5i+m7PUd6}nb-D``C}iM*WW?j>s+e-WI{g0(y4-Lrk)#{tG9rEJ4u^B{jOF> zYLiPD22X~YT=kIBumQdPfuv4=Z-!ej(W@c-0(c7DzQWk0(?YzfUr@Ao&qb?0w~FUa z0k3Hkka^4LILS3a9QIK} z{J?iWuOPFN<0Q|CE`>b#S^8W%1Ma2yWZ|C4J)tZ;;rbD3N`#th&g)_dwKE5D zV_paF5oCHF4EXTb%+?EWSXz z6*jkyfe*z01(YXL?&)k`FkqAUEVEy+VmdINzl1i zl^p4kd6G|&)|SqW!2eia?LyS$54Uzi<+j#vYZ3tVv9`6KRCeqM2A2}yyJ0=j8(wmC zFOn7%x=Dtn4CAFggxG?DQ+?6O!?{Ot9Nr(kFTyK7r5Lps-G2%pL&B$I1B|TahQ^?; zwDodBLLbEYKozjBe-HYz8SxqKIgC%CPh#giM_HdGh7SE#&@Y5!jL!oL&!;d( zp&zpK1CGPxM?5Wdew=$5@~)i{Vk`$Q^+ipCh0c&PUS#FB3bq?@Ay(OIOEw~Ab+Em; zIv7|UZ1339z1;5)x3oRGYDJ`T#nS}J*>!P3zOd;P^7TG0SASOYjVgUIzWa397tUbc z5f1gBhue@GnSRm&=X0y?2~h~c@!RMb=C|(%5rr&84{>*jTFB#&0m$=^{g9U-PeI;* zJP%1ih)KvYNJ4E^LJmQ0fowv)LC8Dz1g>42z5?9hc(^?LtWLb=+OH%h-fh;~*x6K& kuyc+1dDIrE-$jX;9i8Z|u=hjmNma`CVN6C7xc@EoU*=9BTmS$7 diff --git a/Lab7/archive/rootfs/mbox_test.img b/Lab7/archive/rootfs/mbox_test.img deleted file mode 100755 index 289a5aca03fc08e24717ff09a743fa3cd7196a5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3008 zcmcImU2GIp6h5;v6liOIpvHz0I@_u(zpbV*R7pAo#2S=ByM&mS(A~Cy#-*EWi#8Tz z2qc=oLzj{mgAh<3T0~KUnn`%5Zw)jeP>ByJcM1y8J}3q4gf7?b%nGV>SHFw*ogExj zw_cWO=)xQ_FDgW10zSoTa>Q)Ifjs8w_tFKH!LL)9YL^eYeAw;%w_U@1+HJp=9eBN+ zs!!uJn9y-7Gd%04mU)h(?n~zhzapQk8!7vfvBvvOxwS#g9XmqKcsDs$UnA#QA2~no zCg+#EL@R2vjjVCx?`pXcYtf7$L!+SN;=EzS`!2Zknap1>1-_1*L(Zh?JHa_;evGL5 zA12p5$D0Q+C-h94LPZjMUIMa?$fzwnL{a}@&z3ZBfWK6oSxEu8g{%Vfi@n9LgsLo| zo<+?>N)GjwHVf#I_B2eJ*hVMHnUSaaJVVi;1UL8mYZQGxE?utf`coykC#g^0dq9cS zYZM4BFsv4z;nbnOKZ32YjAH)Z-#8fbk@FCEmg!U&T0m9^c3WZdaheVHekjXu^j*e) zL9`#|T7J$ME8^-+p;a1UgeO+N4=U}_y~*zn!V zR12D3>-Bhsyq}y#-qZ7G{7*h{HrGM9&wQ4o=5rMHJnI4F6SWiNUT+;oKM?<>>SZym z>0EHIq0{*;vt7R7_%I*GefQ%%bniO!?puW3I*z``#vcAX;e0dlo|!iS{V}tTdnNHk z%=8WW7(;Hc2fbQr0|nl9z5|o9*G(mVYx%b)#lHproA3s?{T-Atz~}Nv{w8Gy+Pi!7 z9id1s*x?IBf?aKTSNp3S-5rrmy>sV|PzH? zn}T&vvYZPs0(qq;*BcV@FxKB^kne;1Mh5wNkWZ!gXTGN~XiCZ?cRq6jV>*Km0eLQL z7Xq2%v*5z>DU1Th4|(!_-;uJT{#GwOj=dNSvJd*vSy&nha>S!dL!LVDN&zU2|l?{oV+dNM$A|JDP<4vWgy->xexdu z@FegIa11yGyak*9YRDZ)DVG6@fepZF;19r!z`?kbVc_k%63->k%51#8_&7cMRVUV2 t-ja$FYp>h>;hmGzC-C6}CSg%x;&~^!Bfawwds37%eIPiT;Qe3D{{}==(Q*I) diff --git a/Lab7/archive/rootfs/timer_test.img b/Lab7/archive/rootfs/timer_test.img deleted file mode 100755 index f0a191ddcb1be7cef9048dece5df89b4cefe29c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 zcmcImU2GIp6h5=Fl>XU2YeFbtXIqU0TZ*QdR!KSqgqj8l?HXcYLbt84#7*nc5*v!L z1QJQ;Lzg!30YN|?Xb~}nmx+xbJT!$RIDaTtkx~aqqhDyO|lH@Smnuf`LN4}-SPk0H7wJvb16IUI+?6b z;dRN?@m>-<>!_A_jwk!2@ko`OC1XO2z=fEvW`fv^$k&P6p;JKC_wL-`_ONyvXOe% zw-6~g)aPpv(8cZPI_+f}jVLD}PmMW7;Sracz5XnPUqk=JWB9&Q!pGwJRNnz5T<@ho zaIJ2%dUOjtAHED*rGldV`|qC)ddPYLJWDkyY+Fl48|?PO=1PhUpQE-6-O`TeLpsqZ z@GuB-yH?1bf^|*KZIy2M*HID9K&{Qs<&%}1zdgT^)bWS|J`FKY#GvlV$9qdvLEbA!bv=FmX=nI<*@175CJy#Kgb@ z?c6ADt?NOh;bKCf)FRQFFvX?F&7S#bcHtCi65A z(?m?=Nc|ZmBsq9h}#vDSUu?AS2T30Y3sJ*TIAhpUrf&poQ&D zkEhA|=L^VtYCiS<$tTw4Iw;G`XGwBCCveU)Rw$pSohWm9>jL_L_&cciqg>N0a4@0M z_$;$szHWIipTT+e<36;{I`sD4gx%RBhViSKkgOxj!5(k$CyTL z;e%eSHG%jRTYLr{uHG>p|JL%iCn>&x_^Mk+oSb%<82qn@>AY*C=}X2gnQe5l*7&B?OU&uv9yS^fHU&GNWjQC5=A|rWgl~f@58<^Sjr;`US{nJskZ*=u1IFVs z-)k5(kjJ_6n&TMNX<`V-w?n=T$T4087oN{!G(bM=$Ok=VOV9b+oelEd*Pzg2&`+$w zOMPDJP_7zQrt<9lRYMnAl(O3KEoel{s?dS9s!&H|=s?$@zRF{H$6`% zxsw+axO4aGl=gA$ ziE9t}%fc;+httE)efK@Xd8MD+cemYa?ySmj^_*jVo^l}ZyWX8S(TN^QXFcpaE=t(0 L#3Yiv^fLbfS{cCI diff --git a/Lab7/archive/rootfs/vm.img b/Lab7/archive/rootfs/vm.img deleted file mode 100644 index 8ba674e6c8650e239c6cd1322db6637bdd023baf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247488 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
LaIRxxGkGu2Nc^r*p2nQQ3R%~CR5{JU3A)Ai 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
SF)2$rkIVdBRwZU;YFI)_}YEc(*mgDU?` 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 Y|NVQD{zsGk@BjU0zWVPb{hucNe;je&3jhEB diff --git a/Lab7/include/cpio.h b/Lab7/include/cpio.h index 5aa3f44ec..bb944d35a 100644 --- a/Lab7/include/cpio.h +++ b/Lab7/include/cpio.h @@ -40,4 +40,12 @@ void cpio_cat(char *filename); char * findFile(char *name); void load_program(char *name, void *page_table); +/* VFS */ +void* fbase_get(); +int fmode_get(void* _addr); +char* fdata_get(void* _addr, unsigned long* size); +char* fname_get(void* _addr, unsigned long* size); +void* next_fget(void* _addr); +void fdump(); + #endif \ No newline at end of file diff --git a/Lab7/include/tmpfs.h b/Lab7/include/tmpfs.h new file mode 100644 index 000000000..010a1b6a0 --- /dev/null +++ b/Lab7/include/tmpfs.h @@ -0,0 +1,35 @@ +#ifndef __TMPHS_H__ +#define __TMPHS_H__ + +#include "vfs.h" +#include + + +typedef struct { + char* name; + int type; + int capacity; + int size; + void* data; // contain a list of child vnodes if this is a dir, real data if this is a file + void* cache;// only for FILE_TYPE +} Content; + +int tmpfs_setup(filesystem* fs, mount* root); +int tmpfs_nodeInit(mount* mnt, vnode* root); +void tmpfs_dump(vnode* cur, int level); +void cache_init(Content* content); + +// vops +int tmpfs_lookup(vnode* dir_node, vnode** target, const char* component_name); +int tmpfs_creat(vnode* dir_node, vnode** target, const char* component_name); +/* TODO */ +int tmpfs_mkdir(struct vnode* dir_node, struct vnode** target, const char* component_name); + +// fops +int tmpfs_read(file* f, void* buf, size_t len); +int tmpfs_write(file* f, const void* buf, size_t len); +int tmpfs_open(vnode* file_node, file** target); +int tmpfs_close(file* file); + + +#endif \ No newline at end of file diff --git a/Lab7/include/utils.h b/Lab7/include/utils.h index 613a92528..68d636b25 100644 --- a/Lab7/include/utils.h +++ b/Lab7/include/utils.h @@ -7,7 +7,9 @@ int compare_string(const char *s1, const char *s2); void uintoa(char *out, unsigned int i); unsigned int getIntegerFromString(const char *str); unsigned long getHexFromString(const char *str); +unsigned long getHexFromString8(const char *str); unsigned long hexToDec(char *s); void align_4(void* size); +const char* slashIgnore(const char* src, char* dst, int size); #endif \ No newline at end of file diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h new file mode 100644 index 000000000..c73d37b74 --- /dev/null +++ b/Lab7/include/vfs.h @@ -0,0 +1,75 @@ +#ifndef __VFS_H__ +#define __VFS_H__ + +#include + +struct vnode { + struct mount* mnt; + struct vnode_operations* v_ops; + struct file_operations* f_ops; + void* internal; +}; + +// file handle +struct file { + struct vnode* node; + unsigned long f_pos; // The next read/write position of this opened file + struct file_operations* f_ops; + int flags; +}; + +struct mount { + struct vnode* root; + struct filesystem* fs; +}; + +struct filesystem { + const char* name; + int (*setup_mount)(struct filesystem* fs, struct mount* mnt); +}; + +struct file_operations { + int (*write) (struct file* f, const void* buf, unsigned long len); + int (*read) (struct file* f, void* buf, unsigned long len); + int (*open)(struct vnode* file_node, struct file** target); + int (*close)(struct file* file); + //long lseek64(struct file* file, long offset, int whence); +}; + +struct vnode_operations { + int (*lookup)(struct vnode* dir_node, struct vnode** target, const char* component_name); + int (*create)(struct vnode* dir_node, struct vnode** target, const char* component_name); + int (*mkdir)(struct vnode* dir_node, struct vnode** target, const char* component_name); +}; + +typedef struct mount mount; +typedef struct filesystem filesystem; +typedef struct vnode vnode; +typedef struct vnode_operations vnode_operations; +typedef struct file file; +typedef struct file_operations file_operations; + +#define DIR_TYPE 1 +#define FILE_TYPE 2 +#define DIR_CAP 16 +#define PREFIX_LEN 16 +#define O_CREAT 2 + +#define SUCCESS 0 +#define FAIL 1 +#define FILE_NOT_EXIST 2 + +extern struct mount* rootfs; + +// register the file system to the kernel. +// you can also initialize memory pool of the file system here. +int register_filesystem(filesystem* fs, const char* fs_name); +int vfs_open(const char* pathname, int flags, file** target); +int vfs_close(file* f); +int vfs_read(file* f, void* buf, size_t len); +int vfs_write(file* f, const void* buf, size_t len); +int vfs_mkdir(const char* pathname); +int vfs_mount(const char* target, const char* filesystem); +int vfs_lookup(const char* pathname, vnode** target); + +#endif \ No newline at end of file diff --git a/Lab7/kernel/exception.c b/Lab7/kernel/exception.c index bcb05877e..85052bd98 100644 --- a/Lab7/kernel/exception.c +++ b/Lab7/kernel/exception.c @@ -181,6 +181,9 @@ void sys_fork(trap_frame *tf) { initPT(&(child->page_table)); dupPT(parent->page_table, child->page_table, 0); + //vc_identity_mapping for video program + for (uint64_t va = 0x3c000000; va <= 0x3f000000 - 4096; va += 4096) + map_pages(child->page_table, va, 1, va); /* set up the correct value for registers */ parent->context.sp = (unsigned long)tf; diff --git a/Lab7/kernel/kernel.c b/Lab7/kernel/kernel.c index a767fd276..3e9dd772d 100644 --- a/Lab7/kernel/kernel.c +++ b/Lab7/kernel/kernel.c @@ -5,6 +5,8 @@ #include "memory.h" #include "allocator.h" #include "task.h" +#include "vfs.h" +#include "tmpfs.h" void kernel_main(void) { @@ -14,5 +16,12 @@ void kernel_main(void) { init_timer(); enable_interrupt(); create_root_thread(); + + // setup tmpfs + filesystem* fs = kmalloc(sizeof(filesystem)); + register_filesystem(fs, "tmpfs"); + fs->setup_mount(fs, rootfs); + //tmpfs_dump(rootfs->root, 0); + shell(); } diff --git a/Lab7/lib/cpio.c b/Lab7/lib/cpio.c index e4fd3d64f..8b0c74580 100644 --- a/Lab7/lib/cpio.c +++ b/Lab7/lib/cpio.c @@ -104,4 +104,73 @@ void load_program(char *name, void *page_table) { else { uart_send_string("File not found!\n"); } +} + + +/* VFS */ +void* fbase_get() { + return (void*)CPIO_ADDR; +} + +char* fdata_get(void* _addr, unsigned long* size) { + cpio_header* addr = (cpio_header*)_addr; + unsigned long psize = getHexFromString8(addr->namesize), dsize = getHexFromString8(addr->filesize); + *size = dsize; + if ((sizeof(cpio_header) + psize) & 3) + psize += 4- ((sizeof(cpio_header) + psize) & 3); + if (dsize & 3) + dsize += 4 - (dsize & 3); + + char* path = (char*)(addr + 1); + char* data = path + psize; + + return data; +} + +int fmode_get(void* _addr) { + cpio_header* addr = (cpio_header*)_addr; + unsigned long tmp = VA2PA(getHexFromString8(addr->mode)) >> 12; + if (tmp == 4) + return 1; //dir + else if (tmp == 8) + return 2; //file + return -1; +} + +char* fname_get(void* _addr, unsigned long* size) { + cpio_header* addr = (cpio_header*)_addr; + unsigned long psize = getHexFromString8(addr->namesize), dsize = getHexFromString8(addr->filesize); + *size = psize; + if ((sizeof(cpio_header) + psize) & 3) + psize += 4 - ((sizeof(cpio_header) + psize) & 3); + if (dsize & 3) + dsize += 4 - (dsize & 3); + return (char*)(addr + 1); +} + +void* next_fget(void* _addr) { + cpio_header* addr = (cpio_header*)_addr; + unsigned long psize = getHexFromString8(addr->namesize), dsize = getHexFromString8(addr->filesize); + if ((sizeof(cpio_header) + psize) & 3) + psize += 4 - ((sizeof(cpio_header) + psize) & 3); + if (dsize & 3) + dsize += 4 - (dsize & 3); + + char* path = (char*)(addr + 1); + char* data = path + psize; + + if (compare_string(path,"TRAILER!!!") == 0) + return 0; + addr = (cpio_header*)(data + dsize); + return addr; +} + +void fdump() { + void* addr = CPIO_ADDR; + while(addr) { + unsigned long tmp; + char* str = fname_get(addr, &tmp); + uart_printf("%d, %s\n", tmp, str); + addr = next_fget(addr); + } } \ No newline at end of file diff --git a/Lab7/lib/memory.c b/Lab7/lib/memory.c index 21d1b032b..4d2dcf8d3 100644 --- a/Lab7/lib/memory.c +++ b/Lab7/lib/memory.c @@ -175,6 +175,8 @@ void pop_front(frame_free_node **list) { /* remove the free node holding specify index from a list, if exits */ void remove_from_list(frame_free_node **list, uint64_t index) { frame_free_node *target = free_node_table[index]; + if (!target) + uart_printf("[ERROR][remove_from_list] illegal index!\n"); free_node_table[index] = NULL; if (target->list_addr != list) uart_printf("[ERROR][remove_from_list] list address not matched!\n"); @@ -184,7 +186,10 @@ void remove_from_list(frame_free_node **list, uint64_t index) { (*list)->prev = NULL; } else { - target->next->prev = target->prev; + if (target->next) + target->next->prev = target->prev; + if (!target->prev) + uart_printf("[ERROR][remove_from_list] should not reach here!\n"); target->prev->next = target->next; } return_free_node(target); @@ -220,6 +225,8 @@ frame_free_node *get_free_node() { } void return_free_node(frame_free_node *node) { + if (!node) + uart_printf("[ERROR][return_free_node] null node!\n"); node->next = node_pool_head; node_pool_head = node; } diff --git a/Lab7/lib/shell.c b/Lab7/lib/shell.c index 91df99a73..53e6ab20d 100644 --- a/Lab7/lib/shell.c +++ b/Lab7/lib/shell.c @@ -11,6 +11,7 @@ #include "printf.h" #include "task.h" #include "exception.h" +#include "vfs.h" int debug_mode = 0; @@ -139,6 +140,34 @@ void parse_command() { else if (compare_string(buffer, "test_vm") == 0) { run_user_program("vm.img", NULL); } + else if (compare_string(buffer, "test_fs") == 0) { + char buffer1[17] = "This is fs_test!\n"; + char buffer2[30]; + file* f; + + vfs_open("/dir1/dummy1.txt", O_CREAT, &f); + vfs_read(f, buffer2, 30); + uart_printf("%s", buffer2); + vfs_close(f); + vfs_open("/dir1/dummy1.txt", O_CREAT, &f); + vfs_write(f, buffer1, 17); + vfs_close(f); + vfs_open("/dir1/dummy1.txt", O_CREAT, &f); + vfs_read(f, buffer2, 30); + buffer2[17] = '\0'; + uart_printf("%s", buffer2); + vfs_close(f); + + char buffer_n[16] = "test new file!\n"; + vfs_open("/new_file.txt", O_CREAT, &f); + vfs_write(f, buffer_n, 16); + vfs_close(f); + vfs_open("/new_file.txt", O_CREAT, &f); + vfs_read(f, buffer2, 30); + buffer2[16] = '\0'; + uart_printf("%s", buffer2); + vfs_close(f); + } else if (compare_string(buffer, "help") == 0) { uart_send_string("help : print this help menu\n"); uart_send_string("hello : print Hello World!\n"); diff --git a/Lab7/lib/task.c b/Lab7/lib/task.c index d27671011..da8544d72 100644 --- a/Lab7/lib/task.c +++ b/Lab7/lib/task.c @@ -54,9 +54,6 @@ void create_root_thread() { task_struct* thread_create(void *func) { task_struct* new_task = (task_struct*)page_malloc(0); initPT(&(new_task->page_table)); - //vc_identity_mapping(new_task->page_table); //for video program - for (uint64_t va = 0x3c000000; va <= 0x3f000000 - 4096; va += 4096) - map_pages(new_task->page_table, va, 1, va); new_task->context.fp = (unsigned long)new_task + PAGE_SIZE_4K - 16; new_task->context.lr = (unsigned long)func; new_task->context.sp = (unsigned long)new_task + PAGE_SIZE_4K - 16; // kernel stack pointer for the thread diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c new file mode 100644 index 000000000..66922a74a --- /dev/null +++ b/Lab7/lib/tmpfs.c @@ -0,0 +1,237 @@ +#include "tmpfs.h" +#include "allocator.h" +#include "mini_uart.h" +#include "cpio.h" +#include "utils.h" + + +struct mount _root_fs; +struct mount* rootfs = &_root_fs; + +int tmpfs_nodeInit(mount* mnt, vnode* root) { + root->mnt = mnt; + root->v_ops = (vnode_operations*)kmalloc(sizeof(vnode_operations)); + root->v_ops->lookup = tmpfs_lookup; + root->v_ops->create = tmpfs_creat; + root->v_ops->mkdir = tmpfs_mkdir; + root->f_ops=(file_operations*)kmalloc(sizeof(file_operations)); + root->f_ops->write = tmpfs_write; + root->f_ops->read = tmpfs_read; + root->f_ops->open = tmpfs_open; + root->f_ops->close = tmpfs_close; + root->internal = (void*)kmalloc(sizeof(Content)); + + Content* content = (Content*)(root->internal); + content->name = 0; + content->type = DIR_TYPE; + content->capacity = DIR_CAP; + content->size = 0; + content->data = (void*)kmalloc(DIR_CAP * 8); + + void* f = fbase_get(); + unsigned long size; + while (1) { //build tree + const char* fname = fname_get(f, &size); + char* fdata = fdata_get(f, &size); + int fmode = fmode_get(f); + if (compare_string(fname, "TRAILER!!!") == 0) + break; + + //insert file from root + vnode* dir_node = root; + content = (Content*)(dir_node->internal); + vnode** target = (vnode**)(content->data); + while (1) { //iterative search for a path name + char prefix[PREFIX_LEN]; + fname = slashIgnore(fname, prefix, PREFIX_LEN); + int idx = tmpfs_lookup(dir_node, 0, prefix); + if (idx >= 0) { // next level + dir_node = target[idx]; + content = (Content*)(dir_node->internal); + target = (vnode**)(content->data); + } else { //final level + if (fname != 0) { + uart_printf("tmpfs_nodeInit error!!\n"); + uart_printf("%s\n%s\n", prefix, fname); + while(1) {} + } + idx = tmpfs_creat(dir_node, 0, prefix); + vnode* new_node = target[idx]; + content = (Content*)(new_node->internal); + if (fmode == 1) { + content->type = DIR_TYPE; + content->capacity = DIR_CAP; + content->size = 0; + content->data = (void*)kmalloc(DIR_CAP * 8); + } else if (fmode == 2) { + content->type = FILE_TYPE; + content->capacity = size; + content->size = size; + content->data = fdata; + content->cache = 0; + } else { + uart_printf("unknown file type!!\n"); + while (1) {} + } + content = (Content*)(root->internal); + target = (vnode**)(content->data); + break; + } + } + f = next_fget(f); + } + return 0; +} + +int tmpfs_setup(filesystem* fs, mount* root) { + rootfs->root = (vnode*)kmalloc(sizeof(vnode)); + rootfs->fs = fs; + tmpfs_nodeInit(rootfs, rootfs->root); + return 0; +} + +void cache_init(Content* content) { + if (content->cache) + uart_printf("[ERROR][cache_init] cache already exist!\n"); + content->cache = (void*)page_malloc(0); + char* src = (char*)(content->data); + char* dst = (char*)(content->cache); + for (int i = 0; i < content->size; ++i) + dst[i] = src[i]; +} + +void tmpfs_dump(vnode* cur, int level){ + Content* content = (Content*)(cur->internal); + for (int i = 0; i < level; ++i) + uart_printf("\t"); + if (content->type == DIR_TYPE) { + uart_printf("%s\n", content->name); + vnode** childs = (vnode**)(content->data); + for (int i=0; i < content->size; ++i) + tmpfs_dump(childs[i], level + 1); + } else if (content->type == FILE_TYPE) + uart_printf("%s (%d bytes)\n", content->name, content->size); +} + +/* vops */ +int tmpfs_lookup(vnode* dir_node, vnode** target, const char* component_name) { + Content* content = (Content*)(dir_node->internal); + if (content->type != DIR_TYPE){ + uart_printf("[ERROR][tmpfs_lookup] Should be a directory!\n"); + while (1) {} + } + vnode** childs = (vnode**)(content->data); + + for (int i = 0; i < content->size; ++i) { + vnode* child = childs[i]; + Content* child_content = (Content*)(child->internal); + if (compare_string(child_content->name, component_name) == 0) { + if (target) + *target = child; + return i; + } + } + return -1; +} + +int tmpfs_creat(vnode* dir_node, vnode** target, const char* component_name) { + Content* content = (Content*)(dir_node->internal); + if (content->type != DIR_TYPE) { + uart_printf("[ERROR][tmpfs_creat] Parent should be a directory!\n"); + while (1) {} + } + vnode** childs = (vnode**)content->data; + + int idx =- 1; + if (content->capacity > content->size) + idx = content->size++; + else { + uart_printf("[ERROR][tmpfs_creat] Not enough space!\n"); + while (1) {} + } + + vnode* new_node = (vnode*)kmalloc(sizeof(vnode)); + new_node->mnt = dir_node->mnt; + new_node->v_ops = dir_node->v_ops; + new_node->f_ops = dir_node->f_ops; + new_node->internal = (Content*)kmalloc(sizeof(Content)); + + content = (Content*)new_node->internal; + content->name = (char*)kmalloc(PREFIX_LEN); + slashIgnore(component_name, content->name, PREFIX_LEN); + content->type = FILE_TYPE; + content->capacity = 0; + content->size = 0; + content->data = 0; + content->cache = 0; + childs[idx] = new_node; + if (target) + *target = new_node; + return idx; +} + +int tmpfs_mkdir(struct vnode* dir_node, struct vnode** target, const char* component_name) { + return 0; +} + +/* fops */ +int tmpfs_read(file* f, void* buf, size_t len) { + vnode* node = f->node; + Content* content = (Content*)(node->internal); + int size = content->size; + if (content->type == FILE_TYPE) { + if (!content->cache) + cache_init(content); + char* cache = (char*)(content->cache); + char* buffer = (char*)buf; + int ret = 0; + for (int i = f->f_pos; i < size; ++i) { + if (ret < len) + buffer[ret++] = cache[i]; + else + break; + } + f->f_pos += ret; + return ret; + } else if (content->type == DIR_TYPE) { + uart_printf("[ERROR][tmpfs_read] This is a directory!\n"); + return -1; + } else + return 0; +} + +int tmpfs_write(file* f, const void* buf, size_t len) { + vnode* node = f->node; + Content* content = (Content*)(node->internal); + if (content->type == FILE_TYPE) { + if (!content->cache) + cache_init(content); + char* cache = (char*)(content->cache); + if (f->f_pos + len > 4096) + uart_printf("[ERROR][tmpfs_write] Exceed max size of a file!\n"); + const char* buffer = (const char*)buf; + for (int i = 0; i < len; ++i) { + cache[f->f_pos] = buffer[i]; + f->f_pos += 1; + } + if (content->size < f->f_pos) + content->size = f->f_pos; + return len; + } else { + uart_printf("[ERROR][tmpfs_write] This is a directory!\n"); + return 0; + } +} + +int tmpfs_open(vnode* file_node, file** target) { + return SUCCESS; +} + +int tmpfs_close(file* file) { + if (!file) { + uart_printf("[ERROR][tmpfs_close] Already freed!\n"); + return FAIL; + } + //kfree((void*)file); + return SUCCESS; +} diff --git a/Lab7/lib/utils.c b/Lab7/lib/utils.c index 99d883e68..7b180a3e9 100644 --- a/Lab7/lib/utils.c +++ b/Lab7/lib/utils.c @@ -75,6 +75,19 @@ unsigned long getHexFromString(const char *str) { return value; } +unsigned long getHexFromString8(const char *str) { + unsigned long ret = 0; + for (int i = 0; i < 8; ++i) { + if (str[i] >= '0' && str[i] <= '9') + ret = ret * 16 + str[i] - '0'; + else if (str[i] >= 'a' && str[i] <= 'f') + ret = ret * 16 + str[i] - 'a' + 10; + else if (str[i] >= 'A' && str[i] <= 'F') + ret = ret * 16 + str[i] - 'A' + 10; + } + return ret; +} + // convert hexadecimal string into decimal unsigned long hexToDec(char *s) { unsigned long r = 0; @@ -93,4 +106,20 @@ void align_4(void* size) { if((*x)&3){ (*x) += 4-((*x)&3); } +} + +/* extract the substring starts from the beginning of the src + and ends with the first '/' and put it into dst */ +const char* slashIgnore(const char* src, char* dst, int size) { + for (int i = 0; i < size; ++i) { + if (src[i] == 0) { + dst[i] = 0; + return 0; + } else if (src[i] == '/') { + dst[i] = 0; + return src + i + 1; + } else + dst[i] = src[i]; + } + return 0; } \ No newline at end of file diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c new file mode 100644 index 000000000..74aa55110 --- /dev/null +++ b/Lab7/lib/vfs.c @@ -0,0 +1,88 @@ +#include "vfs.h" +#include "tmpfs.h" +#include "utils.h" +#include "mini_uart.h" +#include "allocator.h" + +char buffer[16]; + +int register_filesystem(filesystem* fs, const char* fs_name) { + if (compare_string(fs_name, "tmpfs") == 0) { + char* name = (char*)kmalloc(6); + for (int i = 0; i < 6; ++i) + name[i] = fs_name[i]; + fs->name = name; + fs->setup_mount = tmpfs_setup; + } + else { + uart_printf("[ERROR][register_filesystem] fs not supported!\n"); + while(1) {} + } + return 0; +} + +int vfs_open(const char* pathname, int flags, file** target) { + *target = kmalloc(sizeof(file)); + vnode* dir = rootfs->root; + vnode* file_node; + int ret = vfs_lookup(pathname, &file_node); + if (ret == FAIL) + return FAIL; + else if (ret == FILE_NOT_EXIST && !(flags & O_CREAT)) + return FAIL; + else if (ret == FILE_NOT_EXIST) + dir->v_ops->create(dir, &file_node, buffer); + (*target)->node = file_node; + (*target)->f_pos = 0; + (*target)->flags = flags; + (*target)->f_ops = dir->f_ops; + return (*target)->f_ops->open(file_node, target); +} + +int vfs_close(file* f) { + if (!f) { + uart_printf("[ERROR][tmpfs_close] Null pointer!\n"); + return f->f_ops->close(f); + } + kfree(f); + return SUCCESS; +} + +int vfs_read(file* f, void* buf, size_t len) { + return f->f_ops->read(f, buf, len); +} + +int vfs_write(file* f, const void* buf, size_t len) { + return f->f_ops->write(f, buf, len); +} + +int vfs_mkdir(const char* pathname); +int vfs_mount(const char* target, const char* filesystem); + +int vfs_lookup(const char* pathname, vnode** target) { + vnode* dir = rootfs->root; + char prefix[PREFIX_LEN]; + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); + while (1) { + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); + int idx = dir->v_ops->lookup(dir, target, prefix); + if (pathname) { + if (idx >= 0) + dir = *target; + else { + uart_printf("[ERROR][vfs_lookup] Something went wrong!\n"); + return FAIL; + } + } else { + if (idx >= 0) + return SUCCESS; // already exist + else { + for (int i = 0; i < PREFIX_LEN; ++i) + buffer[i] = prefix[i]; + return FILE_NOT_EXIST; + } + } + } + uart_printf("[ERROR][vfs_lookup] Should not reach here!\n"); + return FAIL; +} \ No newline at end of file From d834b3bcf9a066f03c1550afb24c3189e51171a9 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sat, 28 May 2022 23:53:53 +0800 Subject: [PATCH 13/25] [Lab7] vfs_mkdir & update vfs_open --- Lab7/include/tmpfs.h | 3 +- Lab7/include/vfs.h | 1 + Lab7/lib/shell.c | 17 ++++++++++-- Lab7/lib/tmpfs.c | 40 +++++++++++++++++++++++---- Lab7/lib/vfs.c | 65 ++++++++++++++++++++++++++++++++++++-------- 5 files changed, 104 insertions(+), 22 deletions(-) diff --git a/Lab7/include/tmpfs.h b/Lab7/include/tmpfs.h index 010a1b6a0..4e20f00de 100644 --- a/Lab7/include/tmpfs.h +++ b/Lab7/include/tmpfs.h @@ -22,8 +22,7 @@ void cache_init(Content* content); // vops int tmpfs_lookup(vnode* dir_node, vnode** target, const char* component_name); int tmpfs_creat(vnode* dir_node, vnode** target, const char* component_name); -/* TODO */ -int tmpfs_mkdir(struct vnode* dir_node, struct vnode** target, const char* component_name); +int tmpfs_mkdir(vnode* dir_node, vnode** target, const char* component_name); // fops int tmpfs_read(file* f, void* buf, size_t len); diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index c73d37b74..90364e6e6 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -68,6 +68,7 @@ int vfs_open(const char* pathname, int flags, file** target); int vfs_close(file* f); int vfs_read(file* f, void* buf, size_t len); int vfs_write(file* f, const void* buf, size_t len); +int vfs_create(vnode* dir_node, vnode** target, const char* component_name); int vfs_mkdir(const char* pathname); int vfs_mount(const char* target, const char* filesystem); int vfs_lookup(const char* pathname, vnode** target); diff --git a/Lab7/lib/shell.c b/Lab7/lib/shell.c index 53e6ab20d..9e8a5c25f 100644 --- a/Lab7/lib/shell.c +++ b/Lab7/lib/shell.c @@ -140,11 +140,11 @@ void parse_command() { else if (compare_string(buffer, "test_vm") == 0) { run_user_program("vm.img", NULL); } - else if (compare_string(buffer, "test_fs") == 0) { + else if (compare_string(buffer, "test_fs") == 0) { + file* f; + /* basic 1 */ char buffer1[17] = "This is fs_test!\n"; char buffer2[30]; - file* f; - vfs_open("/dir1/dummy1.txt", O_CREAT, &f); vfs_read(f, buffer2, 30); uart_printf("%s", buffer2); @@ -167,6 +167,17 @@ void parse_command() { buffer2[16] = '\0'; uart_printf("%s", buffer2); vfs_close(f); + + /* basic 2 */ + char buffer_mkdir[13] = "test mkdir!\n"; + vfs_open("/dir3/test.txt", O_CREAT, &f); + vfs_write(f, buffer_mkdir, 13); + vfs_close(f); + vfs_open("/dir3/test.txt", O_CREAT, &f); + vfs_read(f, buffer2, 13); + buffer2[17] = '\0'; + vfs_close(f); + uart_printf("%s\n", buffer2); } else if (compare_string(buffer, "help") == 0) { uart_send_string("help : print this help menu\n"); diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index 66922a74a..912b7d2b2 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -117,7 +117,7 @@ void tmpfs_dump(vnode* cur, int level){ int tmpfs_lookup(vnode* dir_node, vnode** target, const char* component_name) { Content* content = (Content*)(dir_node->internal); if (content->type != DIR_TYPE){ - uart_printf("[ERROR][tmpfs_lookup] Should be a directory!\n"); + uart_printf("[ERROR][tmpfs_lookup] %s should be a directory!\n", content->name); while (1) {} } vnode** childs = (vnode**)(content->data); @@ -141,7 +141,7 @@ int tmpfs_creat(vnode* dir_node, vnode** target, const char* component_name) { while (1) {} } vnode** childs = (vnode**)content->data; - + int idx =- 1; if (content->capacity > content->size) idx = content->size++; @@ -170,8 +170,39 @@ int tmpfs_creat(vnode* dir_node, vnode** target, const char* component_name) { return idx; } -int tmpfs_mkdir(struct vnode* dir_node, struct vnode** target, const char* component_name) { - return 0; +int tmpfs_mkdir(vnode* dir_node, vnode** target, const char* component_name) { + Content* content = (Content*)(dir_node->internal); + if (content->type != DIR_TYPE) { + uart_printf("[ERROR][tmpfs_mkdir] Parent should be a directory!\n"); + while (1) {} + } + vnode** childs = (vnode**)content->data; + + int idx = -1; + if (content->capacity > content->size) + idx = content->size++; + else { + uart_printf("[ERROR][tmpfs_mkdir] Not enough space!\n"); + while (1) {} + } + + vnode* new_node = (vnode*)kmalloc(sizeof(vnode)); + new_node->mnt = dir_node->mnt; + new_node->v_ops = dir_node->v_ops; + new_node->f_ops = dir_node->f_ops; + new_node->internal = (Content*)kmalloc(sizeof(Content)); + + content = (Content*)new_node->internal; + content->name = (char*)kmalloc(PREFIX_LEN); + slashIgnore(component_name, content->name, PREFIX_LEN); + content->type = DIR_TYPE; + content->capacity = DIR_CAP; + content->size = 0; + content->data = (void*)kmalloc(DIR_CAP * 8); + childs[idx] = new_node; + if (target) + *target = new_node; + return idx; } /* fops */ @@ -232,6 +263,5 @@ int tmpfs_close(file* file) { uart_printf("[ERROR][tmpfs_close] Already freed!\n"); return FAIL; } - //kfree((void*)file); return SUCCESS; } diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 74aa55110..30dcf9bbd 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -23,20 +23,33 @@ int register_filesystem(filesystem* fs, const char* fs_name) { int vfs_open(const char* pathname, int flags, file** target) { *target = kmalloc(sizeof(file)); - vnode* dir = rootfs->root; - vnode* file_node; - int ret = vfs_lookup(pathname, &file_node); - if (ret == FAIL) - return FAIL; - else if (ret == FILE_NOT_EXIST && !(flags & O_CREAT)) - return FAIL; - else if (ret == FILE_NOT_EXIST) - dir->v_ops->create(dir, &file_node, buffer); - (*target)->node = file_node; + vnode* dir = rootfs->root; + vnode* file_node; + char prefix[PREFIX_LEN]; + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '\n' + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); + while (1) { + int idx = dir->v_ops->lookup(dir, &file_node, prefix); + if (!pathname) { // file + if (idx == -1) { + if (!(flags & O_CREAT)) + return FAIL; + dir->v_ops->create(dir, &file_node, prefix); + } + break; + } + else { // dir + if (idx == -1) + dir->v_ops->mkdir(dir, &file_node, prefix); + } + dir = file_node; + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); + } + (*target)->node = file_node; (*target)->f_pos = 0; (*target)->flags = flags; (*target)->f_ops = dir->f_ops; - return (*target)->f_ops->open(file_node, target); + return (*target)->f_ops->open(file_node, target); } int vfs_close(file* f) { @@ -56,7 +69,35 @@ int vfs_write(file* f, const void* buf, size_t len) { return f->f_ops->write(f, buf, len); } -int vfs_mkdir(const char* pathname); +int vfs_create(vnode* dir_node, vnode** target, const char* component_name) { + return dir_node->v_ops->create(dir_node, target, component_name); +} + +int vfs_mkdir(const char* pathname) { + vnode* dir = rootfs->root; + vnode* target; + int flag = 0; + char prefix[PREFIX_LEN]; + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '\n' + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); + while (1) { + int idx = dir->v_ops->lookup(dir, &target, prefix); + if (idx == -1) { // dir not exists + flag = 1; + dir->v_ops->mkdir(dir, &target, prefix); + } + dir = target; + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); + if (compare_string(pathname, prefix) == 0) + break; + } + if (!flag) { + uart_printf("[ERROR][vfs_mkdir] Dir already exists!\n"); + return FAIL; + } + return SUCCESS; +} + int vfs_mount(const char* target, const char* filesystem); int vfs_lookup(const char* pathname, vnode** target) { From 12a44036ade07273d726236028c925206b3cd36c Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sun, 29 May 2022 13:05:58 +0800 Subject: [PATCH 14/25] [Lab7] mount --- Lab7/include/vfs.h | 2 +- Lab7/lib/shell.c | 7 +++++-- Lab7/lib/tmpfs.c | 4 ++++ Lab7/lib/vfs.c | 18 +++++++++++++++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index 90364e6e6..0237f6116 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -70,7 +70,7 @@ int vfs_read(file* f, void* buf, size_t len); int vfs_write(file* f, const void* buf, size_t len); int vfs_create(vnode* dir_node, vnode** target, const char* component_name); int vfs_mkdir(const char* pathname); -int vfs_mount(const char* target, const char* filesystem); +int vfs_mount(const char* target, const char* file_system); int vfs_lookup(const char* pathname, vnode** target); #endif \ No newline at end of file diff --git a/Lab7/lib/shell.c b/Lab7/lib/shell.c index 9e8a5c25f..45ae7619e 100644 --- a/Lab7/lib/shell.c +++ b/Lab7/lib/shell.c @@ -170,10 +170,13 @@ void parse_command() { /* basic 2 */ char buffer_mkdir[13] = "test mkdir!\n"; - vfs_open("/dir3/test.txt", O_CREAT, &f); + vfs_mkdir("/dir3-1/dir3-2"); + if (vfs_mount("/dir3-1/dir3-2", "tmpfs") == SUCCESS) + uart_printf("--- vfs_mount success ---\n"); + vfs_open("/dir3-1/dir3-2/test.txt", O_CREAT, &f); vfs_write(f, buffer_mkdir, 13); vfs_close(f); - vfs_open("/dir3/test.txt", O_CREAT, &f); + vfs_open("/dir3-1/dir3-2/test.txt", O_CREAT, &f); vfs_read(f, buffer2, 13); buffer2[17] = '\0'; vfs_close(f); diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index 912b7d2b2..97a49e472 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -7,6 +7,7 @@ struct mount _root_fs; struct mount* rootfs = &_root_fs; +static int initialized = 0; int tmpfs_nodeInit(mount* mnt, vnode* root) { root->mnt = mnt; @@ -28,6 +29,9 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { content->size = 0; content->data = (void*)kmalloc(DIR_CAP * 8); + if (initialized) + return 0; + initialized = 1; void* f = fbase_get(); unsigned long size; while (1) { //build tree diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 30dcf9bbd..3563863d3 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -98,7 +98,23 @@ int vfs_mkdir(const char* pathname) { return SUCCESS; } -int vfs_mount(const char* target, const char* filesystem); +int vfs_mount(const char* target, const char* file_system) { + if (compare_string(file_system, "tmpfs") == 0) { + vnode* node; + int ret = vfs_lookup(target, &node); + if (ret != SUCCESS) + return ret; + mount* mnt = kmalloc(sizeof(mount)); + filesystem* fs = kmalloc(sizeof(filesystem)); + register_filesystem(fs, "tmpfs"); + fs->setup_mount(fs, mnt); + } + else { + uart_printf("[ERROR][vfs_mount] Unsupported filesystem!\n"); + return FAIL; + } + return SUCCESS; +} int vfs_lookup(const char* pathname, vnode** target) { vnode* dir = rootfs->root; From 85fa7cb242e7f96eb608ad43788da16f56279a6a Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sun, 29 May 2022 14:59:21 +0800 Subject: [PATCH 15/25] [Lab7] fs syscalls --- Lab7/Makefile | 2 +- Lab7/archive/initramfs.cpio | Bin 1024 -> 4608 bytes Lab7/archive/rootfs/fs_test.img | Bin 0 -> 3552 bytes Lab7/include/exception.h | 9 ++++ Lab7/include/task.h | 2 + Lab7/include/vfs.h | 6 ++- Lab7/kernel/exception.c | 72 +++++++++++++++++++++++++++++ Lab7/lib/shell.c | 79 ++++++++++++++++---------------- Lab7/lib/task.c | 2 + Lab7/user/fs_test.c | 19 ++++++++ Lab7/user/include/system_call.h | 10 ++++ Lab7/user/lib/system_call.c | 49 ++++++++++++++++++++ 12 files changed, 209 insertions(+), 41 deletions(-) create mode 100755 Lab7/archive/rootfs/fs_test.img create mode 100644 Lab7/user/fs_test.c diff --git a/Lab7/Makefile b/Lab7/Makefile index 6ac0e3d50..535cec8ef 100644 --- a/Lab7/Makefile +++ b/Lab7/Makefile @@ -6,7 +6,7 @@ FLAGS = -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC INC = include LIB = lib CPIO = archive/initramfs.cpio -USER_PROG = timer_test +USER_PROG = fs_test all: kernel8.img $(CPIO) $(USER_PROG).img diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index 7c2dab2ec7b88c885e5752115f34f0d6ce887b6c..366455a713cfc84ec44d325063883715df57edf5 100644 GIT binary patch literal 4608 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 void enable_interrupt(); @@ -26,6 +27,14 @@ void sys_kill(int pid); void sys_signal(int SIGNAL, void (*handler)()); void sys_signal_kill(int pid, int SIGNAL); +int sys_open(const char *pathname, int flags); +int sys_close(int fd); +int sys_write(int fd, const void *buf, int count); +int sys_read(int fd, void *buf, int count); +int sys_mkdir(const char *pathname); +// you can ignore arguments other than target and filesystem +int sys_mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data); + /* helper functions */ extern void (*_handler)(); extern int _pid; diff --git a/Lab7/include/task.h b/Lab7/include/task.h index e92692954..e1f838874 100644 --- a/Lab7/include/task.h +++ b/Lab7/include/task.h @@ -2,6 +2,7 @@ #define _TASK_H #include +#include "vfs.h" #define TERMINATED 0 #define RUNNING 1 @@ -40,6 +41,7 @@ typedef struct task_struct { void *page_table; struct task_struct *prev; struct task_struct *next; + file* fd_table[FD_TABLE_SIZE]; } task_struct; typedef struct task_queue { diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index 0237f6116..6b0c295d9 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -42,18 +42,22 @@ struct vnode_operations { int (*mkdir)(struct vnode* dir_node, struct vnode** target, const char* component_name); }; +struct mode_t {}; + typedef struct mount mount; typedef struct filesystem filesystem; typedef struct vnode vnode; typedef struct vnode_operations vnode_operations; typedef struct file file; -typedef struct file_operations file_operations; +typedef struct file_operations file_operations; +typedef struct mode_t mode_t; #define DIR_TYPE 1 #define FILE_TYPE 2 #define DIR_CAP 16 #define PREFIX_LEN 16 #define O_CREAT 2 +#define FD_TABLE_SIZE 5 #define SUCCESS 0 #define FAIL 1 diff --git a/Lab7/kernel/exception.c b/Lab7/kernel/exception.c index 85052bd98..f456b090e 100644 --- a/Lab7/kernel/exception.c +++ b/Lab7/kernel/exception.c @@ -67,6 +67,24 @@ void lower_sync_handler(trap_frame *tf) { sys_signal_kill((int)regs[0], (int)regs[1]); thread_schedule(); break; + case 11: + regs[0] = sys_open((const char*)regs[0], (int)regs[1]); + break; + case 12: + regs[0] = sys_close((int)regs[0]); + break; + case 13: + regs[0] = sys_write((int)regs[0], (const void*)regs[1], (int)regs[2]); + break; + case 14: + regs[0] = sys_read((int)regs[0], (void*)regs[1], (int)regs[2]); + break; + case 15: + regs[0] = sys_mkdir((const char*)regs[0]); + break; + case 16: + regs[0] = sys_mount((const char*)regs[0], (const char*)regs[1], (const char*)regs[2], (unsigned long)regs[3], (const void*)regs[4]); + break; default: uart_printf("[ERROR][lower_sync_handler] unknown svc!\n"); } @@ -272,6 +290,60 @@ void sys_signal_kill(int pid, int SIGNAL) { user_sp = handler_task->user_fp; } +int sys_open(const char *pathname, int flags) { + task_struct* cur = get_current(); + for (int i = 0; i < FD_TABLE_SIZE; ++i) { + if (cur->fd_table[i] == 0 && (vfs_open(pathname, flags, &(cur->fd_table)[i]) == SUCCESS)) + return i; + } + return -1; +} + +int sys_close(int fd) { + if (fd < 0 || fd >= FD_TABLE_SIZE) { + uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); + } + task_struct* cur = get_current(); + if (cur->fd_table[fd] && (vfs_close(cur->fd_table[fd]) == SUCCESS)) { + cur->fd_table[fd] = 0; + return 0; + } + return -1; +} + +int sys_write(int fd, const void *buf, int count) { + if (fd < 0 || fd >= FD_TABLE_SIZE) { + uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); + } + task_struct* cur = get_current(); + if (cur->fd_table[fd] && (vfs_write(cur->fd_table[fd], buf, count) == SUCCESS)) + return 0; + return -1; +} + +int sys_read(int fd, void *buf, int count) { + if (fd < 0 || fd >= FD_TABLE_SIZE) { + uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); + } + task_struct* cur = get_current(); + if (cur->fd_table[fd] && (vfs_read(cur->fd_table[fd], buf, count) == SUCCESS)) + return 0; + return -1; +} + +int sys_mkdir(const char *pathname) { + if (vfs_mkdir(pathname) == SUCCESS) + return 0; + return -1; +} + +// you can ignore arguments other than target and filesystem +int sys_mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data) { + if (vfs_mount(target, filesystem) == SUCCESS) + return 0; + return -1; +} + /* helper functions */ void (*_handler)() = NULL; int _pid = 0; diff --git a/Lab7/lib/shell.c b/Lab7/lib/shell.c index 45ae7619e..ebbc1431a 100644 --- a/Lab7/lib/shell.c +++ b/Lab7/lib/shell.c @@ -140,47 +140,48 @@ void parse_command() { else if (compare_string(buffer, "test_vm") == 0) { run_user_program("vm.img", NULL); } - else if (compare_string(buffer, "test_fs") == 0) { - file* f; - /* basic 1 */ - char buffer1[17] = "This is fs_test!\n"; - char buffer2[30]; - vfs_open("/dir1/dummy1.txt", O_CREAT, &f); - vfs_read(f, buffer2, 30); - uart_printf("%s", buffer2); - vfs_close(f); - vfs_open("/dir1/dummy1.txt", O_CREAT, &f); - vfs_write(f, buffer1, 17); - vfs_close(f); - vfs_open("/dir1/dummy1.txt", O_CREAT, &f); - vfs_read(f, buffer2, 30); - buffer2[17] = '\0'; - uart_printf("%s", buffer2); - vfs_close(f); + else if (compare_string(buffer, "test_fs") == 0) { + run_user_program("fs_test.img", NULL); + // file* f; + // /* basic 1 */ + // char buffer1[17] = "This is fs_test!\n"; + // char buffer2[30]; + // vfs_open("/dir1/dummy1.txt", O_CREAT, &f); + // vfs_read(f, buffer2, 30); + // uart_printf("%s", buffer2); + // vfs_close(f); + // vfs_open("/dir1/dummy1.txt", O_CREAT, &f); + // vfs_write(f, buffer1, 17); + // vfs_close(f); + // vfs_open("/dir1/dummy1.txt", O_CREAT, &f); + // vfs_read(f, buffer2, 30); + // buffer2[17] = '\0'; + // uart_printf("%s", buffer2); + // vfs_close(f); - char buffer_n[16] = "test new file!\n"; - vfs_open("/new_file.txt", O_CREAT, &f); - vfs_write(f, buffer_n, 16); - vfs_close(f); - vfs_open("/new_file.txt", O_CREAT, &f); - vfs_read(f, buffer2, 30); - buffer2[16] = '\0'; - uart_printf("%s", buffer2); - vfs_close(f); + // char buffer_n[16] = "test new file!\n"; + // vfs_open("/new_file.txt", O_CREAT, &f); + // vfs_write(f, buffer_n, 16); + // vfs_close(f); + // vfs_open("/new_file.txt", O_CREAT, &f); + // vfs_read(f, buffer2, 30); + // buffer2[16] = '\0'; + // uart_printf("%s", buffer2); + // vfs_close(f); - /* basic 2 */ - char buffer_mkdir[13] = "test mkdir!\n"; - vfs_mkdir("/dir3-1/dir3-2"); - if (vfs_mount("/dir3-1/dir3-2", "tmpfs") == SUCCESS) - uart_printf("--- vfs_mount success ---\n"); - vfs_open("/dir3-1/dir3-2/test.txt", O_CREAT, &f); - vfs_write(f, buffer_mkdir, 13); - vfs_close(f); - vfs_open("/dir3-1/dir3-2/test.txt", O_CREAT, &f); - vfs_read(f, buffer2, 13); - buffer2[17] = '\0'; - vfs_close(f); - uart_printf("%s\n", buffer2); + // /* basic 2 */ + // char buffer_mkdir[13] = "test mkdir!\n"; + // vfs_mkdir("/dir3-1/dir3-2"); + // if (vfs_mount("/dir3-1/dir3-2", "tmpfs") == SUCCESS) + // uart_printf("--- vfs_mount success ---\n"); + // vfs_open("/dir3-1/dir3-2/test.txt", O_CREAT, &f); + // vfs_write(f, buffer_mkdir, 13); + // vfs_close(f); + // vfs_open("/dir3-1/dir3-2/test.txt", O_CREAT, &f); + // vfs_read(f, buffer2, 13); + // buffer2[17] = '\0'; + // vfs_close(f); + // uart_printf("%s\n", buffer2); } else if (compare_string(buffer, "help") == 0) { uart_send_string("help : print this help menu\n"); diff --git a/Lab7/lib/task.c b/Lab7/lib/task.c index da8544d72..8fffc8122 100644 --- a/Lab7/lib/task.c +++ b/Lab7/lib/task.c @@ -61,6 +61,8 @@ task_struct* thread_create(void *func) { new_task->state = RUNNING; new_task->id = task_cnt++; new_task->handler = NULL; + for (int i = 0; i < FD_TABLE_SIZE; ++i) + new_task->fd_table[i] = 0; debug_printf("[DEBUG][thread_create] id: %d\n", new_task->id); diff --git a/Lab7/user/fs_test.c b/Lab7/user/fs_test.c new file mode 100644 index 000000000..fc82c40e6 --- /dev/null +++ b/Lab7/user/fs_test.c @@ -0,0 +1,19 @@ +#include "system_call.h" + +void fs_test() { + char buffer_mkdir[10] = "test fs!\n"; + mkdir("/dir3-1/dir3-2"); + if (mount(0, "/dir3-1/dir3-2", "tmpfs", 0, 0) == -1) { + printf("[ERROR] mount fail\n"); + while (1) {} + } + int fd = open("/dir3-1/dir3-2/test.txt", O_CREAT); + write(fd, buffer_mkdir, 10); + close(fd); + fd = open("/dir3-1/dir3-2/test.txt", O_CREAT); + read(fd, buffer_mkdir, 10); + close(fd); + printf("%s\n", buffer_mkdir); + + exit(); +} \ No newline at end of file diff --git a/Lab7/user/include/system_call.h b/Lab7/user/include/system_call.h index 1175e7e2e..778487142 100644 --- a/Lab7/user/include/system_call.h +++ b/Lab7/user/include/system_call.h @@ -3,6 +3,8 @@ #include +#define O_CREAT 2 + /* helper functions for user programs, not the real system calls */ int get_pid(); size_t uart_read(char buf[], size_t size); @@ -13,6 +15,14 @@ void exit(); int mbox_call(unsigned char ch, unsigned int *mbox); void kill(int pid); +int open(const char *pathname, int flags); +int close(int fd); +int write(int fd, const void *buf, int count); +int read(int fd, void *buf, int count); +int mkdir(const char *pathname); +// you can ignore arguments other than target and filesystem +int mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data); + /* utility functions */ unsigned int printf(char* fmt,...); unsigned int vsprintf(char *dst,char* fmt, __builtin_va_list args); diff --git a/Lab7/user/lib/system_call.c b/Lab7/user/lib/system_call.c index 8b72e99ff..46aeda863 100644 --- a/Lab7/user/lib/system_call.c +++ b/Lab7/user/lib/system_call.c @@ -60,6 +60,55 @@ void kill(int pid) { asm volatile("svc 0\n"); } +int open(const char *pathname, int flags) { + unsigned long ret; + asm volatile("mov x8, 11\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int close(int fd) { + unsigned long ret; + asm volatile("mov x8, 12\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int write(int fd, const void *buf, int count) { + unsigned long ret; + asm volatile("mov x8, 13\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int read(int fd, void *buf, int count) { + unsigned long ret; + asm volatile("mov x8, 14\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +int mkdir(const char *pathname) { + unsigned long ret; + asm volatile("mov x8, 15\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + +// you can ignore arguments other than target and filesystem +int mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data) { + unsigned long ret; + asm volatile("mov x8, 16\n"); + asm volatile("svc 0\n"); + asm volatile("mov %0, x0\n":"=r"(ret):); + return ret; +} + /* utility functions */ unsigned int printf(char* fmt,...) { char dst[100]; From 250c03cde9b7037836cb0537262aebb9de49b4a5 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sun, 29 May 2022 23:49:49 +0800 Subject: [PATCH 16/25] [Lab7] basic 3 --- Lab7/archive/initramfs.cpio | Bin 4608 -> 4608 bytes Lab7/archive/rootfs/fs_test.img | Bin 3552 -> 3568 bytes Lab7/include/task.h | 1 + Lab7/include/vfs.h | 12 ++++++--- Lab7/kernel/exception.c | 15 ++++++++--- Lab7/lib/allocator.c | 2 +- Lab7/lib/task.c | 2 ++ Lab7/lib/tmpfs.c | 9 +++++++ Lab7/lib/vfs.c | 46 +++++++++++++++++++++++++------- Lab7/user/fs_test.c | 8 +++--- 10 files changed, 74 insertions(+), 21 deletions(-) diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index 366455a713cfc84ec44d325063883715df57edf5..874ae89d02c0c454c8693b164099fa67fe7b288f 100644 GIT binary patch delta 694 zcmZwFKTH!*90%~<(-zv^ak)rIYiuos1{m;qz0&sTpQLD885qDg5seIJFqY874le4A zkeI;bIXGxi5^%yrOeE347zPJo3~|Gu2^|<5Fj@qIJik{Pr@rLg=ly=a_wL=hJS%EN z7tVTE)=>Zb0rT)}=h!YcOfv}X0%MAqhWq9+j-#TSXL5zzuw zdhKQ8F!m3Tb+wVBK7NyF$FhBVo*B$q{lK={S(U%=ehO<^Y-(ouR%{XzomQSM-M$AK zF`x5=PX8;%%3Aq;83ipi`G1U%zx7>YHGbghVJkc=1-f4E3DJ)N4JqBj3cdovB9BV} zJ|VeIerZvCh8Z>fKnmRWhN|kUMRV4D#Iw_4MHTsd5bMh(nm@muc{qu>g^}Y2ArSZ)Z?|Sa$ zT}zd%Z9b-SbALzwqm>^*y#FJ_)1N}r;2J!HRp>tw!c!Mw0O~LYN8xoi0ZVWe&cY>F zfg5lQ?!wP7gv0E>VMs!VA`HR`)P*=F27lqDNDwwH!upYzaej&^dmPB!=!x`Z+}4bP zyx#HV_^#~1QNpVmiq6_HiS(tMX{Ta5uD)uI8>TT>Fl{B`HJtmHF61wxrX(Bp5S?=^ Jh;ONje*yl#23G(8 delta 647 zcmZwDO=uHQ5C`yi+SH`GE~`!4ijhVPA&2H;(~$1^0SP4Pp@$+;gjTFjD?-H8?4hFQ z9=(WNo(BsR>Ot`$s8#gPgNR6>AmX`)Kzs1uK`_-Kwc~$lE=nJ~{k@ra!|>KiddaCw zq*yB0{ibaf{L*nz^=~E>)3yfk!K&8$r-Ne5|22?JqCK}T3itqWS zkaN#B+^jq4%Ehjuq9r5BK`}2giV=JNgE@^URM8SAG)%>@F0Uwtbd-+0D_c}&aHA#f zD8`v}RP~@2E9hImUfZIhiG27ca~xuhUTe=;L#QJE|9o8##idXUk(Q>~9V#O}f|DVJ zknIjRh)3l)#FO%x+AF@wX?35Nk+0Ol(cO)Dd^E`1R+*Rw=fOt6D-PccyR6 ze`kLCoB2tLc?B-Ob@&ZNH<)`?nfqWFR^b>Ng${J!eRvzbgtKr7zJY{Ce}aAR3p@>p znQy=z_zdQm4{;T*9YR9K&^lb*;LE{JNvq)i3T=Lg679IN9fxH|d%eA>hVhjBb4yxY abXv!XwpH{?Ia$$P$P2rsrK1gETYms}miqkw diff --git a/Lab7/archive/rootfs/fs_test.img b/Lab7/archive/rootfs/fs_test.img index f77329621cc6cb589f810223773694e4b74c3af1..d426419a05b8cd369cb35650cf15d4ce5468ae07 100755 GIT binary patch delta 592 zcmX|-J!n%=6vxliM3eWDQ1q1~BsGOfo1wgmYOy1gnTBWN;8I9b9w>G(!i6fc9f(di>wy;f4Et=YM|Zao>HlL?aPt zKKl5od6FC=da7I}a=|Y3B9yi(M9)(`8dxQ|ttGj=&P()ATjNx^)#_27vuK~l^*L*U zs`UED&S_QS_knL+ww;+NpZzX!)u zox?_t+TZ~rs^0Llan_%Qs-lYWlwtW-km~Fh(azudA{|J2S=e8&cl8^*W%%NUut}}P zBOMcw_QWCLk)C*F`r@Gjk@M|=?knCvS`o##%Z$eRVf#IM&9ir4b9@u_2JCR#=B~r) zgUYaT{MbyXUtBR0YMI}eBi56l&gy=3v~YL(%!i%_6TWr#=MGPYyEz?7FKzr0`P3A7 z@mHh{Zh}W(4YZC$0(RHoUGOWo2{ynjFo}P#3tk0DMDkz^ ubiu61B^ky&Cea`qng{oeWkFx-Vkn?N{??Ny>*Z5kj&U&jRyFu@IQ0*-P3{8# delta 597 zcmY+=Ur19?90%~MXTxkyDKdZk8--g{9ajH0mpmgse;jye{J2Ca|^;o^I&;a-nZA$h)53K#Ry3z*+^ zs@T%6y~}EWzdJX2+Q%lI-frut(Me=Z<}!IakxC?!{mBtya_ZR=)5tuY$ZA+6`oF*3 z9M79kbH?P|`bVnF&DssM%yG@nIZbzD(Z9pfnqTc>zUr7qUFJp2-*Ea*#Am$@myWTD zabopwNvpf=JQiuPqPW+W@YXs`P`Zz~s$B~-A--9QjUGFWD540rx%`2LNL%f+*G`9# z4)6%lG}1e@G}edI+GY;v48L@R)F1xj3aWWtb3M?n^G*N& diff --git a/Lab7/include/task.h b/Lab7/include/task.h index e1f838874..8a44d16c6 100644 --- a/Lab7/include/task.h +++ b/Lab7/include/task.h @@ -42,6 +42,7 @@ typedef struct task_struct { struct task_struct *prev; struct task_struct *next; file* fd_table[FD_TABLE_SIZE]; + vnode* cur_dir; } task_struct; typedef struct task_queue { diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index 6b0c295d9..da298ab73 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -7,6 +7,7 @@ struct vnode { struct mount* mnt; struct vnode_operations* v_ops; struct file_operations* f_ops; + struct vnode* parent; void* internal; }; @@ -64,17 +65,20 @@ typedef struct mode_t mode_t; #define FILE_NOT_EXIST 2 extern struct mount* rootfs; +extern struct vnode* home_dir; // register the file system to the kernel. // you can also initialize memory pool of the file system here. int register_filesystem(filesystem* fs, const char* fs_name); -int vfs_open(const char* pathname, int flags, file** target); +int vfs_open(const char* pathname, int flags, file** target, vnode* root); int vfs_close(file* f); int vfs_read(file* f, void* buf, size_t len); int vfs_write(file* f, const void* buf, size_t len); int vfs_create(vnode* dir_node, vnode** target, const char* component_name); -int vfs_mkdir(const char* pathname); -int vfs_mount(const char* target, const char* file_system); -int vfs_lookup(const char* pathname, vnode** target); +int vfs_mkdir(const char* pathname, vnode* root); +int vfs_mount(const char* target, const char* file_system, vnode* root); +int vfs_lookup(const char* pathname, vnode** target, vnode* root); + +vnode* find_root(const char* pathname, vnode* cur_dir, char** new_pathname); #endif \ No newline at end of file diff --git a/Lab7/kernel/exception.c b/Lab7/kernel/exception.c index f456b090e..6fcb2b2a1 100644 --- a/Lab7/kernel/exception.c +++ b/Lab7/kernel/exception.c @@ -292,8 +292,11 @@ void sys_signal_kill(int pid, int SIGNAL) { int sys_open(const char *pathname, int flags) { task_struct* cur = get_current(); + char* new_path; + vnode* new_root; + new_root = find_root(pathname, cur->cur_dir, &new_path); for (int i = 0; i < FD_TABLE_SIZE; ++i) { - if (cur->fd_table[i] == 0 && (vfs_open(pathname, flags, &(cur->fd_table)[i]) == SUCCESS)) + if (cur->fd_table[i] == 0 && (vfs_open(pathname, flags, &(cur->fd_table)[i], new_root) == SUCCESS)) return i; } return -1; @@ -332,14 +335,20 @@ int sys_read(int fd, void *buf, int count) { } int sys_mkdir(const char *pathname) { - if (vfs_mkdir(pathname) == SUCCESS) + char* new_path; + vnode* new_root; + new_root = find_root(pathname, get_current()->cur_dir, &new_path); + if (vfs_mkdir(pathname, new_root) == SUCCESS) return 0; return -1; } // you can ignore arguments other than target and filesystem int sys_mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data) { - if (vfs_mount(target, filesystem) == SUCCESS) + char* new_path; + vnode* new_root; + new_root = find_root(target, get_current()->cur_dir, &new_path); + if (vfs_mount(new_path, filesystem, new_root) == SUCCESS) return 0; return -1; } diff --git a/Lab7/lib/allocator.c b/Lab7/lib/allocator.c index 3d2a02eb8..0f52c5dd1 100644 --- a/Lab7/lib/allocator.c +++ b/Lab7/lib/allocator.c @@ -8,7 +8,7 @@ /* record the usage of each slot */ const int slot_size = 4; const int slot[] = {32, 64, 128, 256}; -const uint64_t slot_max[] = {UINT32_MAX, UINT16_MAX - 1, UINT8_MAX, 15}; +const uint64_t slot_max[] = {UINT32_MAX, UINT16_MAX - (1 << 15), UINT8_MAX, 15}; const int slot_record_bits[] = {32, 15, 8, 4}; const uint64_t slot_masks[] = {UINT32_MAX, UINT16_MAX, UINT8_MAX, UINT8_MAX}; const int slot_shift_amout[] = {32, 16, 8, 0}; diff --git a/Lab7/lib/task.c b/Lab7/lib/task.c index 8fffc8122..293578a48 100644 --- a/Lab7/lib/task.c +++ b/Lab7/lib/task.c @@ -8,6 +8,7 @@ #include "cpio.h" #include "timer.h" #include "vm.h" +#include "vfs.h" task_queue run_queue = {"run", NULL, NULL}; @@ -61,6 +62,7 @@ task_struct* thread_create(void *func) { new_task->state = RUNNING; new_task->id = task_cnt++; new_task->handler = NULL; + new_task->cur_dir = home_dir; for (int i = 0; i < FD_TABLE_SIZE; ++i) new_task->fd_table[i] = 0; diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index 97a49e472..aba62a21c 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -21,6 +21,7 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { root->f_ops->open = tmpfs_open; root->f_ops->close = tmpfs_close; root->internal = (void*)kmalloc(sizeof(Content)); + root->parent = root; Content* content = (Content*)(root->internal); content->name = 0; @@ -61,8 +62,11 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { } idx = tmpfs_creat(dir_node, 0, prefix); vnode* new_node = target[idx]; + new_node->parent = dir_node; content = (Content*)(new_node->internal); if (fmode == 1) { + if (compare_string(content->name, "home") == 0) + home_dir = new_node; content->type = DIR_TYPE; content->capacity = DIR_CAP; content->size = 0; @@ -84,6 +88,10 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { } f = next_fget(f); } + if (!home_dir) { + uart_printf("[ERROR][tmpfs_nodeInit] Can't find home dir!\n"); + //while (1) {} + } return 0; } @@ -168,6 +176,7 @@ int tmpfs_creat(vnode* dir_node, vnode** target, const char* component_name) { content->size = 0; content->data = 0; content->cache = 0; + new_node->parent = dir_node; childs[idx] = new_node; if (target) *target = new_node; diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 3563863d3..3b557966e 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -5,10 +5,11 @@ #include "allocator.h" char buffer[16]; +struct vnode* home_dir = 0; int register_filesystem(filesystem* fs, const char* fs_name) { if (compare_string(fs_name, "tmpfs") == 0) { - char* name = (char*)kmalloc(6); + char* name = (char*)kmalloc(PREFIX_LEN); for (int i = 0; i < 6; ++i) name[i] = fs_name[i]; fs->name = name; @@ -21,9 +22,9 @@ int register_filesystem(filesystem* fs, const char* fs_name) { return 0; } -int vfs_open(const char* pathname, int flags, file** target) { +int vfs_open(const char* pathname, int flags, file** target, vnode* root) { *target = kmalloc(sizeof(file)); - vnode* dir = rootfs->root; + vnode* dir = root; vnode* file_node; char prefix[PREFIX_LEN]; pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '\n' @@ -73,8 +74,8 @@ int vfs_create(vnode* dir_node, vnode** target, const char* component_name) { return dir_node->v_ops->create(dir_node, target, component_name); } -int vfs_mkdir(const char* pathname) { - vnode* dir = rootfs->root; +int vfs_mkdir(const char* pathname, vnode* root) { + vnode* dir = root; vnode* target; int flag = 0; char prefix[PREFIX_LEN]; @@ -98,10 +99,10 @@ int vfs_mkdir(const char* pathname) { return SUCCESS; } -int vfs_mount(const char* target, const char* file_system) { +int vfs_mount(const char* target, const char* file_system, vnode* root) { if (compare_string(file_system, "tmpfs") == 0) { vnode* node; - int ret = vfs_lookup(target, &node); + int ret = vfs_lookup(target, &node, root); if (ret != SUCCESS) return ret; mount* mnt = kmalloc(sizeof(mount)); @@ -116,8 +117,8 @@ int vfs_mount(const char* target, const char* file_system) { return SUCCESS; } -int vfs_lookup(const char* pathname, vnode** target) { - vnode* dir = rootfs->root; +int vfs_lookup(const char* pathname, vnode** target, vnode* root) { + vnode* dir = root; char prefix[PREFIX_LEN]; pathname = slashIgnore(pathname, prefix, PREFIX_LEN); while (1) { @@ -142,4 +143,31 @@ int vfs_lookup(const char* pathname, vnode** target) { } uart_printf("[ERROR][vfs_lookup] Should not reach here!\n"); return FAIL; +} + +vnode* find_root(const char* pathname, vnode* cur_dir, char** new_pathname) { + int idx_src = 0; + vnode* ret; + if (pathname[0] == '/') { + ret = rootfs->root; + idx_src = 1; + } + else if (pathname[0] == '.') { + if (pathname[1] == '.') { + ret = cur_dir->parent; + idx_src = 3; + } + else { + ret = cur_dir; + idx_src = 2; + } + } + + *new_pathname = kmalloc(PREFIX_LEN); + (*new_pathname)[0] = '/'; + int idx_dst = 1; + while (idx_src < PREFIX_LEN && idx_dst < PREFIX_LEN) + (*new_pathname)[idx_dst++] = pathname[idx_src++]; + + return ret; } \ No newline at end of file diff --git a/Lab7/user/fs_test.c b/Lab7/user/fs_test.c index fc82c40e6..1f9cbc88b 100644 --- a/Lab7/user/fs_test.c +++ b/Lab7/user/fs_test.c @@ -2,15 +2,15 @@ void fs_test() { char buffer_mkdir[10] = "test fs!\n"; - mkdir("/dir3-1/dir3-2"); - if (mount(0, "/dir3-1/dir3-2", "tmpfs", 0, 0) == -1) { + mkdir("../home/d"); + if (mount(0, "d", "tmpfs", 0, 0) == -1) { printf("[ERROR] mount fail\n"); while (1) {} } - int fd = open("/dir3-1/dir3-2/test.txt", O_CREAT); + int fd = open("/home/d/t.txt", O_CREAT); write(fd, buffer_mkdir, 10); close(fd); - fd = open("/dir3-1/dir3-2/test.txt", O_CREAT); + fd = open("./d/t.txt", O_CREAT); read(fd, buffer_mkdir, 10); close(fd); printf("%s\n", buffer_mkdir); From 98680fe737197a864937088f36d96bb80950a738 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 30 May 2022 13:05:17 +0800 Subject: [PATCH 17/25] [Lab7] basic 4 --- Lab7/archive/initramfs.cpio | Bin 4608 -> 5120 bytes Lab7/archive/rootfs/fs_test.img | Bin 3568 -> 3680 bytes .../rootfs/{ => initramfs}/dir1/dummy1.txt | 0 .../rootfs/{ => initramfs}/dir2/dummy2.txt | 0 Lab7/include/vfs.h | 2 ++ Lab7/lib/tmpfs.c | 10 ++++++++++ Lab7/lib/vfs.c | 16 ++++++++++++++++ Lab7/user/fs_test.c | 4 ++++ 8 files changed, 32 insertions(+) rename Lab7/archive/rootfs/{ => initramfs}/dir1/dummy1.txt (100%) rename Lab7/archive/rootfs/{ => initramfs}/dir2/dummy2.txt (100%) diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index 874ae89d02c0c454c8693b164099fa67fe7b288f..05377190b4acaa72085e83d2268c89fc11bfe3de 100644 GIT binary patch delta 988 zcmZ{jUr19?9LLYypHg?d&Kyj!*eb&-xaQ`ZSw3vk%t%V64?+z#7^}gSV@*)#&wVKH zrP$#_6j-dMq>KWK6nY5i!H2?>9)kX0;)Bp*YDMbld*%{BJ#g;lp6~bf=bX#AT8*Y= z9mO86yT#Mg;BBVfHeI8eUfC~W=?OH55%AI{9lCHG{abyqmOdurmVs!~dQ3t{Ru`_N zf|4evO^?908HnovA>BeJxmx-h8s05_q6PCBQE7@rBx}`WI5Rficp6-HeJYI#*Kw)f z#srTN`dv>RtAh8Sl8!Qkm&$li6nw=WU3$0G5>-V!!d(tIGZ$hj&Z#IM-z8Sd+K z?ccsC`5c@KY{l$n4wJP?TSBC85ZR6p;U+M%ECe^Vg*ycI8M|S!mXEjn_zyE z)i{H>R~VBBbN5gn=OBe7JfXfP|EF%L)Xd5>=KJ8c2-lWUTyu!`Rf(VqYIqR zf!Dxga0Ilha{dvl2baNP;BI`-vtT`#0=vOMFa_qoJKz}j3j6@hgY%#TTPK|JLtrJC z02??z%*ij#J0ZMVh6paM@?LTDVYx_v81qj;a)tGd!g`Pym6!T(X%UXHhka2@`liMf zs@T?k3s0cQMZL~l{`}8?$NJ4-pOsiu+a}o=ji=qXW~a)|?c1D`cb(C`WOBeQE*_gK eOK(%eC5o80E8Jud1flVf}843@OqX5hHz)NzRb|-ft=f^}pUT0sSG-q=mGy z8AU`Brc6K=lr%xDT!8PhQ1lVeIiXWApg)F&XLpLUvo(!^`T!e{)TUc-D!$~iE8vcs z4C?2F>&+SNMZx2we>2mQ+IlTG%cbvoOqC#8vMsQ=y&0Ca$6KpwoUb52DW$n!nKF-l z`K*Xm3^%G9HNy&awP|jh^N^5{>_JAjSyYKFz+J54;@nhan|8Hr1+EjF7-HQ^)N-8_ z73hChN>;}<>bOpcNdC>aA1SemQ^qbr&^^$@hJM=6lhDI;^h?l_b>5SQ-U~fW#6HL_ z={ox%`=n3I=I~1QSgYfx`+mp1(t4>o-(PNg-g5JVWxDuriM>;r*`y;hHuID77n__v z_{Dh@oCi0+3h3VA+={CXgAp(d_JNnd444PU!EtaJEP}7Wd2khc3+~62EQ38Dan7@# z2P}dS&X4do_TC49@X;)|w#9FYE9sQ20<^0(6Ge=Ex6ympi1O6DDqC@s1FW~f&fYZi zI})|O8Pnj6p%^>nyvC*)Z7$KY502z=qp^d-cZP9Oube~wWuxqZYbP7s&PKPhvtM0N F=^w3UGVcHY diff --git a/Lab7/archive/rootfs/fs_test.img b/Lab7/archive/rootfs/fs_test.img index d426419a05b8cd369cb35650cf15d4ce5468ae07..2721e335fd3b4f210e761a487b4f148233e5d462 100755 GIT binary patch delta 818 zcmZvYPiPZC7{zC^TTQb~n$pxXCXyADY#_G&DOk0KL@ic4SkfK}Dy9&EfoRhjp-?4z zP|QW?G9n(Tq_?OQ6$&;eQp7_A3sO|PC{ZdD^dQ*A3Q5N|n^go|nEmbd-uvd8*>B#G zudzDz^mbJwIw53Shz0dVZ#JOcCFGh!v;`518)ciR_ppq@VjFAJC_v z;oB7> z##8~3h(oz4-4ZQ5AKp8R9{eP*3u}}{Y;HlL!?xzS6zXw&xrMw@PoRE4CvEPQnKENe zRQ%zcb6C?nLrXTv^Bk^^TM>t|8v}S^6>H8&IAv+$J0!N$63QVn!B4hWrfu?umQ~mx z(>`q41GGtY)3hvkT7NLsQFFsb;PO#9GZK-U^$ufY&l0S|&c{JrB~2uy?h zU=B=!dGH1}13m#?flJ^L=)z?PW2_Tw1ykU5#`ZFTd-OthS%C{eW5(=P~5Hh};D delta 687 zcmZvYPiPZC6vp3nw;HqCwA$1pCM5xDwuc}QbMQ|O8?~tDAr!?TJw&_+M(tHRbdM1P zUB-h4TUMx`(u*kAfQW}2daxkDn}6774n6b`&^A3ZeSWi9JUQ^@H}8Glo5zfoY9|M~ z_ddMrs^k#SBgHkH!Q@=lc}nzHBfFs@q|jH+_6)Y9-I#}-*67GHqDxXIH|sn{4d-Z) z>?yxSrgIH7FHJS?G&!dfd#b6@D=%%;Zu@nsb{+iZw@l}yp2TptYlC?m1}a7}^V))X_s92$Oy!CqCJ;;FbvUNH70vK) ze+79Rr+$9v!J~)+c7KHuk+gcym%)bie)*&4G+~VT{i${bv5yWq$I9xdkqR+n@(V zcbG%?tsIyK&wwRx1}uZKU=^%_i=YdB0++!y_!&&$7uLXYATe_VjDs$iXFkCNyrYBy lVQ2;1*x@_!S;vf!1oitnQ9j6b1$kWDA9$y>jS!wP`WF{f6Y&55 diff --git a/Lab7/archive/rootfs/dir1/dummy1.txt b/Lab7/archive/rootfs/initramfs/dir1/dummy1.txt similarity index 100% rename from Lab7/archive/rootfs/dir1/dummy1.txt rename to Lab7/archive/rootfs/initramfs/dir1/dummy1.txt diff --git a/Lab7/archive/rootfs/dir2/dummy2.txt b/Lab7/archive/rootfs/initramfs/dir2/dummy2.txt similarity index 100% rename from Lab7/archive/rootfs/dir2/dummy2.txt rename to Lab7/archive/rootfs/initramfs/dir2/dummy2.txt diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index da298ab73..b2962378b 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -66,6 +66,7 @@ typedef struct mode_t mode_t; extern struct mount* rootfs; extern struct vnode* home_dir; +extern struct mount* initramfs; // register the file system to the kernel. // you can also initialize memory pool of the file system here. @@ -80,5 +81,6 @@ int vfs_mount(const char* target, const char* file_system, vnode* root); int vfs_lookup(const char* pathname, vnode** target, vnode* root); vnode* find_root(const char* pathname, vnode* cur_dir, char** new_pathname); +int isReadOnly(vnode* node); #endif \ No newline at end of file diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index aba62a21c..e58f194cf 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -63,10 +63,20 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { idx = tmpfs_creat(dir_node, 0, prefix); vnode* new_node = target[idx]; new_node->parent = dir_node; + new_node->mnt = dir_node->mnt; content = (Content*)(new_node->internal); if (fmode == 1) { if (compare_string(content->name, "home") == 0) home_dir = new_node; + if (compare_string(content->name, "initramfs") == 0) { + mount* mnt = kmalloc(sizeof(mount)); + filesystem* fs = kmalloc(sizeof(filesystem)); + mnt->root = new_node; + new_node->mnt = mnt; + register_filesystem(fs, "tmpfs"); + fs->setup_mount(fs, mnt); + initramfs = mnt; + } content->type = DIR_TYPE; content->capacity = DIR_CAP; content->size = 0; diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 3b557966e..77789dbc9 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -6,6 +6,7 @@ char buffer[16]; struct vnode* home_dir = 0; +struct mount* initramfs = 0; int register_filesystem(filesystem* fs, const char* fs_name) { if (compare_string(fs_name, "tmpfs") == 0) { @@ -67,14 +68,21 @@ int vfs_read(file* f, void* buf, size_t len) { } int vfs_write(file* f, const void* buf, size_t len) { + if (isReadOnly(f->node)) { + return FAIL; + } return f->f_ops->write(f, buf, len); } int vfs_create(vnode* dir_node, vnode** target, const char* component_name) { + if (isReadOnly(dir_node)) + return FAIL; return dir_node->v_ops->create(dir_node, target, component_name); } int vfs_mkdir(const char* pathname, vnode* root) { + if (isReadOnly(root)) + return FAIL; vnode* dir = root; vnode* target; int flag = 0; @@ -106,6 +114,8 @@ int vfs_mount(const char* target, const char* file_system, vnode* root) { if (ret != SUCCESS) return ret; mount* mnt = kmalloc(sizeof(mount)); + mnt->root = node; + node->mnt = mnt; filesystem* fs = kmalloc(sizeof(filesystem)); register_filesystem(fs, "tmpfs"); fs->setup_mount(fs, mnt); @@ -170,4 +180,10 @@ vnode* find_root(const char* pathname, vnode* cur_dir, char** new_pathname) { (*new_pathname)[idx_dst++] = pathname[idx_src++]; return ret; +} + +int isReadOnly(vnode* node) { + if (node->mnt == initramfs) + return 1; + return 0; } \ No newline at end of file diff --git a/Lab7/user/fs_test.c b/Lab7/user/fs_test.c index 1f9cbc88b..6a8b4de2b 100644 --- a/Lab7/user/fs_test.c +++ b/Lab7/user/fs_test.c @@ -15,5 +15,9 @@ void fs_test() { close(fd); printf("%s\n", buffer_mkdir); + fd = open("/initramfs/t.txt", O_CREAT); + if (write(fd, buffer_mkdir, 10) != -1) + printf("[ERROR] Should fail!\n"); + exit(); } \ No newline at end of file From 01514e2f6eb737ce3ba9d6fcb2a7429fe9f962ce Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Sun, 5 Jun 2022 18:42:41 +0800 Subject: [PATCH 18/25] [Lab7] test program basic1&2 --- Lab7/archive/initramfs.cpio | Bin 5120 -> 409600 bytes Lab7/archive/rootfs/initramfs/vfs1.img | Bin 0 -> 404128 bytes Lab7/include/vfs.h | 4 +-- Lab7/kernel/exception.c | 38 +++++++++++++++++++------ Lab7/lib/cpio.c | 10 +++---- Lab7/lib/shell.c | 5 +++- Lab7/lib/tmpfs.c | 2 +- Lab7/lib/vfs.c | 10 +++---- 8 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 Lab7/archive/rootfs/initramfs/vfs1.img diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index 05377190b4acaa72085e83d2268c89fc11bfe3de..de2f265c71d5cd96eaced7e53bccdb6086f4938d 100644 GIT binary patch literal 409600 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�k9P6QSf}1{ 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 Pb9KgR-}Y8pw)ua_WA1}H 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ˊ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 z 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%0AvKj>jN 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 initPT(&(cur_task->page_table)); - load_program((char*)name, cur_task->page_table); + load_program(pruned_name, cur_task->page_table); for (int i = 0; i < 4; ++i) map_pages(cur_task->page_table, 0xffffffffb000 + i * 0x1000, 1, VA2PA(page_malloc(0))); _argv = (char**)argv; @@ -202,6 +205,17 @@ void sys_fork(trap_frame *tf) { //vc_identity_mapping for video program for (uint64_t va = 0x3c000000; va <= 0x3f000000 - 4096; va += 4096) map_pages(child->page_table, va, 1, va); + + for (int i = 0; i < FD_TABLE_SIZE; ++i) { + if (parent->fd_table[i] != 0) { + file* src_file = parent->fd_table[i]; + file* dst_file = kmalloc(sizeof(file)); + dst_file->node = src_file->node; + dst_file->f_pos = src_file->f_pos; + dst_file->f_ops = src_file->f_ops; + dst_file->flags = src_file->flags; + } + } /* set up the correct value for registers */ parent->context.sp = (unsigned long)tf; @@ -296,9 +310,10 @@ int sys_open(const char *pathname, int flags) { vnode* new_root; new_root = find_root(pathname, cur->cur_dir, &new_path); for (int i = 0; i < FD_TABLE_SIZE; ++i) { - if (cur->fd_table[i] == 0 && (vfs_open(pathname, flags, &(cur->fd_table)[i], new_root) == SUCCESS)) - return i; + if ((cur->fd_table)[i] == 0 && (vfs_open(pathname, flags, &(cur->fd_table)[i], new_root) == SUCCESS)) + return i; } + uart_printf("[sys_open fail]\n"); return -1; } @@ -307,10 +322,11 @@ int sys_close(int fd) { uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); } task_struct* cur = get_current(); - if (cur->fd_table[fd] && (vfs_close(cur->fd_table[fd]) == SUCCESS)) { - cur->fd_table[fd] = 0; + if ((cur->fd_table)[fd] && (vfs_close((cur->fd_table)[fd]) == SUCCESS)) { + (cur->fd_table)[fd] = 0; return 0; } + uart_printf("[sys_close fail]\n"); return -1; } @@ -319,8 +335,9 @@ int sys_write(int fd, const void *buf, int count) { uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); } task_struct* cur = get_current(); - if (cur->fd_table[fd] && (vfs_write(cur->fd_table[fd], buf, count) == SUCCESS)) - return 0; + if ((cur->fd_table)[fd]) + return vfs_write((cur->fd_table)[fd], buf, count); + uart_printf("[sys_write fail]\n"); return -1; } @@ -329,8 +346,9 @@ int sys_read(int fd, void *buf, int count) { uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); } task_struct* cur = get_current(); - if (cur->fd_table[fd] && (vfs_read(cur->fd_table[fd], buf, count) == SUCCESS)) - return 0; + if ((cur->fd_table)[fd]) + return vfs_read((cur->fd_table)[fd], buf, count); + uart_printf("[sys_read fail]\n"); return -1; } @@ -340,6 +358,7 @@ int sys_mkdir(const char *pathname) { new_root = find_root(pathname, get_current()->cur_dir, &new_path); if (vfs_mkdir(pathname, new_root) == SUCCESS) return 0; + uart_printf("[sys_mkdir fail]\n"); return -1; } @@ -350,6 +369,7 @@ int sys_mount(const char *src, const char *target, const char *filesystem, unsig new_root = find_root(target, get_current()->cur_dir, &new_path); if (vfs_mount(new_path, filesystem, new_root) == SUCCESS) return 0; + uart_printf("[sys_mount fail]\n"); return -1; } diff --git a/Lab7/lib/cpio.c b/Lab7/lib/cpio.c index 8b0c74580..4c5515a28 100644 --- a/Lab7/lib/cpio.c +++ b/Lab7/lib/cpio.c @@ -67,9 +67,8 @@ void cpio_cat(char *filename) { } uart_send_string("\r\n"); } - else { - uart_send_string("File not found!\n"); - } + else + uart_printf("File: %s not found!\n", filename); } void load_program(char *name, void *page_table) { @@ -101,9 +100,8 @@ void load_program(char *name, void *page_table) { debug_printf("[DEBUG][load_program] load program: %s\n", name); } - else { - uart_send_string("File not found!\n"); - } + else + uart_printf("File: %s not found!\n", name); } diff --git a/Lab7/lib/shell.c b/Lab7/lib/shell.c index ebbc1431a..c1b52f9a9 100644 --- a/Lab7/lib/shell.c +++ b/Lab7/lib/shell.c @@ -141,7 +141,10 @@ void parse_command() { run_user_program("vm.img", NULL); } else if (compare_string(buffer, "test_fs") == 0) { - run_user_program("fs_test.img", NULL); + run_user_program("initramfs/vfs1.img", NULL); + + // run_user_program("fs_test.img", NULL); + // file* f; // /* basic 1 */ // char buffer1[17] = "This is fs_test!\n"; diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index e58f194cf..89bd8613a 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -249,7 +249,7 @@ int tmpfs_read(file* f, void* buf, size_t len) { return ret; } else if (content->type == DIR_TYPE) { uart_printf("[ERROR][tmpfs_read] This is a directory!\n"); - return -1; + return 0; } else return 0; } diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 77789dbc9..4e96abe6a 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -28,14 +28,14 @@ int vfs_open(const char* pathname, int flags, file** target, vnode* root) { vnode* dir = root; vnode* file_node; char prefix[PREFIX_LEN]; - pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '\n' + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '/' pathname = slashIgnore(pathname, prefix, PREFIX_LEN); while (1) { int idx = dir->v_ops->lookup(dir, &file_node, prefix); if (!pathname) { // file if (idx == -1) { if (!(flags & O_CREAT)) - return FAIL; + return FAIL; dir->v_ops->create(dir, &file_node, prefix); } break; @@ -69,9 +69,9 @@ int vfs_read(file* f, void* buf, size_t len) { int vfs_write(file* f, const void* buf, size_t len) { if (isReadOnly(f->node)) { - return FAIL; + return 0; } - return f->f_ops->write(f, buf, len); + return f->f_ops->write(f, buf, len); } int vfs_create(vnode* dir_node, vnode** target, const char* component_name) { @@ -87,7 +87,7 @@ int vfs_mkdir(const char* pathname, vnode* root) { vnode* target; int flag = 0; char prefix[PREFIX_LEN]; - pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '\n' + pathname = slashIgnore(pathname, prefix, PREFIX_LEN); // rip off the leading '/' pathname = slashIgnore(pathname, prefix, PREFIX_LEN); while (1) { int idx = dir->v_ops->lookup(dir, &target, prefix); From 32021e8d4716c21cfbcf76f0e4331652d3820862 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 6 Jun 2022 00:37:17 +0800 Subject: [PATCH 19/25] [Lab7] refactor --- Lab7/.vscode/configurationCache.log | 1 + Lab7/.vscode/dryrun.log | 10 + Lab7/.vscode/targets.log | 462 ++++++++++++++++++++++++++++ Lab7/archive/initramfs.cpio | Bin 409600 -> 409600 bytes Lab7/include/exception.h | 1 + Lab7/include/tmpfs.h | 4 +- Lab7/include/vfs.h | 1 - Lab7/kernel/exception.c | 16 +- Lab7/kernel/kernel.c | 11 +- Lab7/lib/task.c | 2 +- Lab7/lib/tmpfs.c | 33 +- Lab7/lib/vfs.c | 20 +- 12 files changed, 519 insertions(+), 42 deletions(-) create mode 100644 Lab7/.vscode/configurationCache.log create mode 100644 Lab7/.vscode/dryrun.log create mode 100644 Lab7/.vscode/targets.log diff --git a/Lab7/.vscode/configurationCache.log b/Lab7/.vscode/configurationCache.log new file mode 100644 index 000000000..981a9560f --- /dev/null +++ b/Lab7/.vscode/configurationCache.log @@ -0,0 +1 @@ +{"buildTargets":["all","archive/initramfs.cpio","clean","fs_test.img","kernel8.img","on-board","qemu-debug","qemu-kernel","rd.o"],"launchTargets":["/home/littlelagi/OSC2022/Lab7>fs_test.elf()","/home/littlelagi/OSC2022/Lab7>kernel8.elf()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/OSC2022/Lab7/include","/home/littlelagi/OSC2022/Lab7/kernel","/home/littlelagi/OSC2022/Lab7/lib","/home/littlelagi/OSC2022/Lab7/user","/home/littlelagi/OSC2022/Lab7/user/include","/home/littlelagi/OSC2022/Lab7/user/lib"],"compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/OSC2022/Lab7/user/fs_test.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/user/fs_test.c","path":"/home/littlelagi/OSC2022/Lab7/user/fs_test.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/user/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tuser/linker.ld","user/fs_test.c","user/lib/system_call.c","-o","fs_test.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tuser/linker.ld user/fs_test.c user/lib/system_call.c -o fs_test.elf -Iuser/include","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/user/fs_test.c"}}],["/home/littlelagi/OSC2022/Lab7/user/lib/system_call.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/user/lib/system_call.c","path":"/home/littlelagi/OSC2022/Lab7/user/lib/system_call.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/user/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tuser/linker.ld","user/fs_test.c","user/lib/system_call.c","-o","fs_test.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tuser/linker.ld user/fs_test.c user/lib/system_call.c -o fs_test.elf -Iuser/include","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/user/lib/system_call.c"}}],["/home/littlelagi/OSC2022/Lab7/kernel/exception.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/kernel/exception.c","path":"/home/littlelagi/OSC2022/Lab7/kernel/exception.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/kernel/exception.c"}}],["/home/littlelagi/OSC2022/Lab7/kernel/kernel.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/kernel/kernel.c","path":"/home/littlelagi/OSC2022/Lab7/kernel/kernel.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/kernel/kernel.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/printf.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/printf.c","path":"/home/littlelagi/OSC2022/Lab7/lib/printf.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/printf.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/tmpfs.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/tmpfs.c","path":"/home/littlelagi/OSC2022/Lab7/lib/tmpfs.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/tmpfs.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/allocator.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/allocator.c","path":"/home/littlelagi/OSC2022/Lab7/lib/allocator.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/allocator.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/shell.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/shell.c","path":"/home/littlelagi/OSC2022/Lab7/lib/shell.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/shell.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/vfs.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/vfs.c","path":"/home/littlelagi/OSC2022/Lab7/lib/vfs.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/vfs.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/task.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/task.c","path":"/home/littlelagi/OSC2022/Lab7/lib/task.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/task.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/mini_uart.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/mini_uart.c","path":"/home/littlelagi/OSC2022/Lab7/lib/mini_uart.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/mini_uart.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/cpio.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/cpio.c","path":"/home/littlelagi/OSC2022/Lab7/lib/cpio.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/cpio.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/memory.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/memory.c","path":"/home/littlelagi/OSC2022/Lab7/lib/memory.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/memory.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/mail_box.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/mail_box.c","path":"/home/littlelagi/OSC2022/Lab7/lib/mail_box.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/mail_box.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/vm.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/vm.c","path":"/home/littlelagi/OSC2022/Lab7/lib/vm.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/vm.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/reboot.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/reboot.c","path":"/home/littlelagi/OSC2022/Lab7/lib/reboot.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/reboot.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/timer.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/timer.c","path":"/home/littlelagi/OSC2022/Lab7/lib/timer.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/timer.c"}}],["/home/littlelagi/OSC2022/Lab7/lib/utils.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/Lab7/lib/utils.c","path":"/home/littlelagi/OSC2022/Lab7/lib/utils.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":["/home/littlelagi/OSC2022/Lab7/include"],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/aarch64-linux-gnu-gcc","compilerArgs":["-O0","-Wall","-nostartfiles","-ffreestanding","-mgeneral-regs-only","-g","-fPIC","-Tkernel/linker.ld","kernel/boot.S","kernel/exception.c","kernel/kernel.c","lib/mm.S","lib/switch.S","lib/printf.c","lib/tmpfs.c","lib/allocator.c","lib/shell.c","lib/vfs.c","lib/task.c","lib/mini_uart.c","lib/cpio.c","lib/memory.c","lib/mail_box.c","lib/vm.c","lib/reboot.c","lib/timer.c","lib/utils.c","rd.o","-o","kernel8.elf"],"windowsSdkVersion":""},"compileCommand":{"command":"aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude","directory":"/home/littlelagi/OSC2022/Lab7","file":"/home/littlelagi/OSC2022/Lab7/lib/utils.c"}}]]}} \ No newline at end of file diff --git a/Lab7/.vscode/dryrun.log b/Lab7/.vscode/dryrun.log new file mode 100644 index 000000000..a4d3c17d2 --- /dev/null +++ b/Lab7/.vscode/dryrun.log @@ -0,0 +1,10 @@ +make --dry-run --always-make --keep-going --print-directory +make: Entering directory '/home/littlelagi/OSC2022/Lab7' +aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tuser/linker.ld user/fs_test.c user/lib/system_call.c -o fs_test.elf -Iuser/include +aarch64-linux-gnu-objcopy -O binary fs_test.elf fs_test.img +cd archive/rootfs && find . | cpio -o -H newc > ../initramfs.cpio +aarch64-linux-gnu-ld -r -b binary -o rd.o archive/initramfs.cpio +aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude +aarch64-linux-gnu-objcopy -O binary kernel8.elf kernel8.img +make: Leaving directory '/home/littlelagi/OSC2022/Lab7' + diff --git a/Lab7/.vscode/targets.log b/Lab7/.vscode/targets.log new file mode 100644 index 000000000..5e7b1f982 --- /dev/null +++ b/Lab7/.vscode/targets.log @@ -0,0 +1,462 @@ +make all --print-data-base --no-builtin-variables --no-builtin-rules --question +# GNU Make 4.2.1 +# Built for x86_64-pc-linux-gnu +# Copyright (C) 1988-2016 Free Software Foundation, Inc. +# License GPLv3+: GNU GPL version 3 or later +# This is free software: you are free to change and redistribute it. +# There is NO WARRANTY, to the extent permitted by law. + + +# Make data base, printed on Sun Jun 5 23:49:43 2022 + +# Variables + +# automatic + ../initramfs.cpio + +# Not a target: +Makefile: +# Implicit rule search has been done. +# Last modified 2022-05-29 14:36:28.045748705 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/printf.c: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/cpio.c: +# Implicit rule search has been done. +# Last modified 2022-06-05 18:43:05.87144869 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/switch.S: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/timer.c: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/tmpfs.c: +# Implicit rule search has been done. +# Last modified 2022-06-05 21:41:24.942031131 + +# File has been updated. +# Successfully updated. + +# Not a target: +kernel/boot.S: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.85006515 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/task.c: +# Implicit rule search has been done. +# Last modified 2022-06-05 21:40:54.298228048 +# File has been updated. +# Successfully updated. + +# Not a target: +.DEFAULT: +# Implicit rule search has not been done. +# Modification time never checked. +# File has not been updated. + +on-board: +# Phony target (prerequisite of .PHONY). +# Implicit rule search has not been done. +# File does not exist. +# File has not been updated. +# recipe to execute (from 'Makefile', line 42): + sudo screen /dev/ttyUSB0 115200 + +clean: +# Phony target (prerequisite of .PHONY). +# Implicit rule search has not been done. +# File does not exist. +# File has not been updated. +# recipe to execute (from 'Makefile', line 45): + rm -f *.elf *.img *.cpio *.o *.S *.s + +# Not a target: +lib/mail_box.c: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/memory.c: +# Implicit rule search has been done. +# Last modified 2022-05-25 19:00:38.831637795 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/mini_uart.c: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/reboot.c: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +# Not a target: +user/fs_test.c: +# Implicit rule search has been done. +# Last modified 2022-05-30 13:04:12.076517392 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/vm.c: +# Implicit rule search has been done. +# Last modified 2022-05-23 12:07:37.714952466 +# File has been updated. +# Successfully updated. + +# Not a target: +kernel/kernel.c: +# Implicit rule search has been done. +# Last modified 2022-06-05 21:31:25.254669387 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/mm.S: +# Implicit rule search has been done. +# Last modified 2022-05-21 14:19:00.854065099 +# File has been updated. +# Successfully updated. + +rd.o: archive/initramfs.cpio +# Implicit rule search has not been done. +# Last modified 2022-06-05 21:38:50.007772141 +# File has been updated. +# Successfully updated. +# recipe to execute (from 'Makefile', line 25): + aarch64-linux-gnu-ld -r -b binary -o rd.o $(CPIO) + +kernel8.img: kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o +# Implicit rule search has not been done. +# Last modified 2022-06-05 21:41:34.133969697 +# File has been updated. +# Successfully updated. +# recipe to execute (from 'Makefile', line 14): + $(ARMGNU)-gcc $(FLAGS) -Tkernel/linker.ld $^ -o kernel8.elf -I$(INC) + $(ARMGNU)-objcopy -O binary kernel8.elf kernel8.img + +# Not a target: +user/lib/system_call.c: +# Implicit rule search has been done. +# Last modified 2022-05-29 14:17:18.893532177 +# File has been updated. +# Successfully updated. + +qemu-debug: +# Implicit rule search has not been done. +# Modification time never checked. +# File has not been updated. +# recipe to execute (from 'Makefile', line 31): + aarch64-linux-gnu-objdump -d kernel8.elf > kernel8.S + qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -initrd archive/initramfs.cpio -d in_asm + +# Not a target: +lib/allocator.c: +# Implicit rule search has been done. +# Last modified 2022-05-29 22:39:37.108472581 +# File has been updated. +# Successfully updated. + +# Not a target: +lib/vfs.c: +# Implicit rule search has been done. +# Last modified 2022-06-05 21:41:07.974141693 +# File has been updated. +# Successfully updated. + +# files hash-table stats: +# Load=34/1024=3%, Rehash=0, Collisions=0/83=0% +# VPATH Search Paths + +# No 'vpath' search paths. + +# No general ('VPATH' variable) search path. + +# strcache buffers: 1 (0) / strings = 70 / storage = 734 B / avg = 10 B +# current buf: size = 8162 B / used = 734 B / count = 70 / avg = 10 B + +# strcache performance: lookups = 106 / hit rate = 33% +# hash-table stats: +# Load=70/8192=1%, Rehash=0, Collisions=4/106=4% +# Finished Make data base on Sun Jun 5 23:49:43 2022 + + diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index de2f265c71d5cd96eaced7e53bccdb6086f4938d..3e6d4bed1953cf28ca52bb4b4cf6ea247b6ac336 100644 GIT binary patch delta 535 zcmZo@kZfp>uZb&It*aSC3%cIzEA`mw_}C!YC-SPuI$KycSwhr8Npvj} zuS&6l)SDSNPhY3YrVQ6&X5{FI)fTa4AI5ecMi6EKVrC#_0b~<}(G?sJKtmwzLGyvw^bb00=3r}0 zjf_CnD$5$1JGod8v{ebJ$r$8uuv;BnU|x0t>&9l4_;hJKHUp?PEnxP!xjN&uZ+ojP HTQw5^O}}?M delta 525 zcmZo@kZfp>+#13B5!z!GK(ltwX3e7dhSn-Wx$8^Q^2T`)JG=n|X$z=lnH`eSQ0 z1*leMQtT5GHe>(-ln{2owA;`Ln~TAAyF;yYoLGnKNmnzNUs0SZzVT`uA5e#@iKBrL Q+@X&6<8pheEn77c0O<5}umAu6 diff --git a/Lab7/include/exception.h b/Lab7/include/exception.h index 8e410b04d..6fd1e6244 100644 --- a/Lab7/include/exception.h +++ b/Lab7/include/exception.h @@ -34,6 +34,7 @@ int sys_read(int fd, void *buf, int count); int sys_mkdir(const char *pathname); // you can ignore arguments other than target and filesystem int sys_mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data); +int sys_chdir(const char *path); /* helper functions */ extern void (*_handler)(); diff --git a/Lab7/include/tmpfs.h b/Lab7/include/tmpfs.h index 4e20f00de..6a00ee811 100644 --- a/Lab7/include/tmpfs.h +++ b/Lab7/include/tmpfs.h @@ -14,8 +14,8 @@ typedef struct { void* cache;// only for FILE_TYPE } Content; -int tmpfs_setup(filesystem* fs, mount* root); -int tmpfs_nodeInit(mount* mnt, vnode* root); +int tmpfs_setup(filesystem* fs, mount* mnt); +int tmpfs_nodeInit(vnode* root); void tmpfs_dump(vnode* cur, int level); void cache_init(Content* content); diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index 858d2089b..93d98c069 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -65,7 +65,6 @@ typedef struct mode_t mode_t; #define FILE_NOT_EXIST 2 extern struct mount* rootfs; -extern struct vnode* home_dir; extern struct mount* initramfs; // register the file system to the kernel. diff --git a/Lab7/kernel/exception.c b/Lab7/kernel/exception.c index d0536e271..47ef33f9f 100644 --- a/Lab7/kernel/exception.c +++ b/Lab7/kernel/exception.c @@ -86,6 +86,9 @@ void lower_sync_handler(trap_frame *tf) { case 16: regs[0] = sys_mount((const char*)regs[0], (const char*)regs[1], (const char*)regs[2], (unsigned long)regs[3], (const void*)regs[4]); break; + case 17: + regs[0] = sys_chdir((const char*)regs[0]); + break; default: uart_printf("[ERROR][lower_sync_handler] unknown svc!\n"); } @@ -310,7 +313,7 @@ int sys_open(const char *pathname, int flags) { vnode* new_root; new_root = find_root(pathname, cur->cur_dir, &new_path); for (int i = 0; i < FD_TABLE_SIZE; ++i) { - if ((cur->fd_table)[i] == 0 && (vfs_open(pathname, flags, &(cur->fd_table)[i], new_root) == SUCCESS)) + if ((cur->fd_table)[i] == 0 && (vfs_open(new_path, flags, &(cur->fd_table)[i], new_root) == SUCCESS)) return i; } uart_printf("[sys_open fail]\n"); @@ -356,7 +359,7 @@ int sys_mkdir(const char *pathname) { char* new_path; vnode* new_root; new_root = find_root(pathname, get_current()->cur_dir, &new_path); - if (vfs_mkdir(pathname, new_root) == SUCCESS) + if (vfs_mkdir(new_path, new_root) == SUCCESS) return 0; uart_printf("[sys_mkdir fail]\n"); return -1; @@ -373,6 +376,15 @@ int sys_mount(const char *src, const char *target, const char *filesystem, unsig return -1; } +int sys_chdir(const char *path) { + char* new_path; + vnode* node, *new_root = find_root(path, get_current()->cur_dir, &new_path); + if (vfs_lookup(new_path, &node, new_root) != SUCCESS) + return -1; + get_current()->cur_dir = node; + return 0; +} + /* helper functions */ void (*_handler)() = NULL; int _pid = 0; diff --git a/Lab7/kernel/kernel.c b/Lab7/kernel/kernel.c index 3e9dd772d..8cb0e8ad0 100644 --- a/Lab7/kernel/kernel.c +++ b/Lab7/kernel/kernel.c @@ -18,9 +18,14 @@ void kernel_main(void) { create_root_thread(); // setup tmpfs - filesystem* fs = kmalloc(sizeof(filesystem)); - register_filesystem(fs, "tmpfs"); - fs->setup_mount(fs, rootfs); + rootfs = kmalloc(sizeof(mount)); + rootfs->root = kmalloc(sizeof(vnode)); + rootfs->root->mnt = rootfs; + rootfs->fs = kmalloc(sizeof(filesystem)); + register_filesystem(rootfs->fs, "tmpfs"); + rootfs->fs->setup_mount(rootfs->fs, rootfs); + rootfs->root->parent = rootfs->root; + tmpfs_nodeInit(rootfs->root); //tmpfs_dump(rootfs->root, 0); shell(); diff --git a/Lab7/lib/task.c b/Lab7/lib/task.c index 293578a48..93cddef2b 100644 --- a/Lab7/lib/task.c +++ b/Lab7/lib/task.c @@ -62,7 +62,7 @@ task_struct* thread_create(void *func) { new_task->state = RUNNING; new_task->id = task_cnt++; new_task->handler = NULL; - new_task->cur_dir = home_dir; + new_task->cur_dir = rootfs->root; for (int i = 0; i < FD_TABLE_SIZE; ++i) new_task->fd_table[i] = 0; diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index 89bd8613a..bf1f25085 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -5,12 +5,9 @@ #include "utils.h" -struct mount _root_fs; -struct mount* rootfs = &_root_fs; -static int initialized = 0; +struct mount* rootfs = 0; -int tmpfs_nodeInit(mount* mnt, vnode* root) { - root->mnt = mnt; +int tmpfs_nodeInit(vnode* root) { root->v_ops = (vnode_operations*)kmalloc(sizeof(vnode_operations)); root->v_ops->lookup = tmpfs_lookup; root->v_ops->create = tmpfs_creat; @@ -21,8 +18,7 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { root->f_ops->open = tmpfs_open; root->f_ops->close = tmpfs_close; root->internal = (void*)kmalloc(sizeof(Content)); - root->parent = root; - + Content* content = (Content*)(root->internal); content->name = 0; content->type = DIR_TYPE; @@ -30,9 +26,6 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { content->size = 0; content->data = (void*)kmalloc(DIR_CAP * 8); - if (initialized) - return 0; - initialized = 1; void* f = fbase_get(); unsigned long size; while (1) { //build tree @@ -66,17 +59,6 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { new_node->mnt = dir_node->mnt; content = (Content*)(new_node->internal); if (fmode == 1) { - if (compare_string(content->name, "home") == 0) - home_dir = new_node; - if (compare_string(content->name, "initramfs") == 0) { - mount* mnt = kmalloc(sizeof(mount)); - filesystem* fs = kmalloc(sizeof(filesystem)); - mnt->root = new_node; - new_node->mnt = mnt; - register_filesystem(fs, "tmpfs"); - fs->setup_mount(fs, mnt); - initramfs = mnt; - } content->type = DIR_TYPE; content->capacity = DIR_CAP; content->size = 0; @@ -98,17 +80,10 @@ int tmpfs_nodeInit(mount* mnt, vnode* root) { } f = next_fget(f); } - if (!home_dir) { - uart_printf("[ERROR][tmpfs_nodeInit] Can't find home dir!\n"); - //while (1) {} - } return 0; } -int tmpfs_setup(filesystem* fs, mount* root) { - rootfs->root = (vnode*)kmalloc(sizeof(vnode)); - rootfs->fs = fs; - tmpfs_nodeInit(rootfs, rootfs->root); +int tmpfs_setup(filesystem* fs, mount* mnt) { return 0; } diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 4e96abe6a..4ed35b89f 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -5,7 +5,6 @@ #include "allocator.h" char buffer[16]; -struct vnode* home_dir = 0; struct mount* initramfs = 0; int register_filesystem(filesystem* fs, const char* fs_name) { @@ -77,6 +76,7 @@ int vfs_write(file* f, const void* buf, size_t len) { int vfs_create(vnode* dir_node, vnode** target, const char* component_name) { if (isReadOnly(dir_node)) return FAIL; + (*target)->parent = dir_node; return dir_node->v_ops->create(dir_node, target, component_name); } @@ -94,6 +94,7 @@ int vfs_mkdir(const char* pathname, vnode* root) { if (idx == -1) { // dir not exists flag = 1; dir->v_ops->mkdir(dir, &target, prefix); + target->parent = dir; } dir = target; pathname = slashIgnore(pathname, prefix, PREFIX_LEN); @@ -116,9 +117,20 @@ int vfs_mount(const char* target, const char* file_system, vnode* root) { mount* mnt = kmalloc(sizeof(mount)); mnt->root = node; node->mnt = mnt; - filesystem* fs = kmalloc(sizeof(filesystem)); - register_filesystem(fs, "tmpfs"); - fs->setup_mount(fs, mnt); + mnt->fs = kmalloc(sizeof(filesystem)); + register_filesystem(mnt->fs, "tmpfs"); + mnt->fs->setup_mount(mnt->fs, mnt); + + node->v_ops = (vnode_operations*)kmalloc(sizeof(vnode_operations)); + node->v_ops->lookup = tmpfs_lookup; + node->v_ops->create = tmpfs_creat; + node->v_ops->mkdir = tmpfs_mkdir; + node->f_ops=(file_operations*)kmalloc(sizeof(file_operations)); + node->f_ops->write = tmpfs_write; + node->f_ops->read = tmpfs_read; + node->f_ops->open = tmpfs_open; + node->f_ops->close = tmpfs_close; + node->internal = (void*)kmalloc(sizeof(Content)); } else { uart_printf("[ERROR][vfs_mount] Unsupported filesystem!\n"); From db95af4ba36775668c461fd2cb2e179006fb8146 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 6 Jun 2022 18:22:29 +0800 Subject: [PATCH 20/25] [Lab7] basic 3 --- Lab7/.vscode/dryrun.log | 1 + Lab7/.vscode/targets.log | 31 ++++++------ Lab7/archive/initramfs.cpio | Bin 409600 -> 404992 bytes Lab7/archive/rootfs/fs_test.img | Bin 3680 -> 0 bytes Lab7/archive/rootfs/initramfs/dir1/dummy1.txt | 3 -- Lab7/archive/rootfs/initramfs/dir2/dummy2.txt | 1 - Lab7/include/vfs.h | 2 +- Lab7/kernel/exception.c | 12 +++++ Lab7/kernel/kernel.c | 2 +- Lab7/lib/tmpfs.c | 45 ++++++++++-------- Lab7/lib/vfs.c | 11 ----- 11 files changed, 55 insertions(+), 53 deletions(-) delete mode 100755 Lab7/archive/rootfs/fs_test.img delete mode 100644 Lab7/archive/rootfs/initramfs/dir1/dummy1.txt delete mode 100644 Lab7/archive/rootfs/initramfs/dir2/dummy2.txt diff --git a/Lab7/.vscode/dryrun.log b/Lab7/.vscode/dryrun.log index a4d3c17d2..aa57c6a4d 100644 --- a/Lab7/.vscode/dryrun.log +++ b/Lab7/.vscode/dryrun.log @@ -2,6 +2,7 @@ make --dry-run --always-make --keep-going --print-directory make: Entering directory '/home/littlelagi/OSC2022/Lab7' aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tuser/linker.ld user/fs_test.c user/lib/system_call.c -o fs_test.elf -Iuser/include aarch64-linux-gnu-objcopy -O binary fs_test.elf fs_test.img + cd archive/rootfs && find . | cpio -o -H newc > ../initramfs.cpio aarch64-linux-gnu-ld -r -b binary -o rd.o archive/initramfs.cpio aarch64-linux-gnu-gcc -O0 -Wall -nostartfiles -ffreestanding -mgeneral-regs-only -g -fPIC -Tkernel/linker.ld kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o -o kernel8.elf -Iinclude diff --git a/Lab7/.vscode/targets.log b/Lab7/.vscode/targets.log index 5e7b1f982..54963baee 100644 --- a/Lab7/.vscode/targets.log +++ b/Lab7/.vscode/targets.log @@ -7,7 +7,7 @@ make all --print-data-base --no-builtin-variables --no-builtin-rules --question # There is NO WARRANTY, to the extent permitted by law. -# Make data base, printed on Sun Jun 5 23:49:43 2022 +# Make data base, printed on Mon Jun 6 11:09:57 2022 # Variables @@ -62,7 +62,7 @@ LC_NAME = lzh_TW # environment VSCODE_CWD = /home/littlelagi # environment -SSH_CONNECTION = 36.226.222.104 64138 140.113.193.201 55146 +SSH_CONNECTION = 36.226.221.135 52822 140.113.193.201 55146 # environment PATH = /home/littlelagi/.vscode-server/bin/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin # environment @@ -72,7 +72,7 @@ VSCODE_LOG_STACK = false # environment LC_NUMERIC = lzh_TW # environment -VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-32e8e41b-72e4-4960-b5ce-b7a2f952820c.sock +VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-a34a4a7a-c942-4afb-b2c4-d711fbbad62f.sock # makefile (from 'Makefile', line 7) LIB = lib # default @@ -116,7 +116,7 @@ MAKECMDGOALS := all # environment SHLVL = 0 # environment -XDG_SESSION_ID = 309 +XDG_SESSION_ID = 342 # environment USER = littlelagi # environment @@ -140,7 +140,7 @@ MAKEFLAGS = pqrR # environment MFLAGS = -pqrR # environment -SSH_CLIENT = 36.226.222.104 64138 55146 +SSH_CLIENT = 36.226.221.135 52822 55146 # automatic +D = $(patsubst %/,%,$(dir $+)) # environment @@ -225,7 +225,7 @@ all: kernel8.img archive/initramfs.cpio fs_test.img fs_test.img: user/fs_test.c user/lib/system_call.c # Implicit rule search has not been done. -# Last modified 2022-06-05 21:38:49.999772263 +# Last modified 2022-06-06 00:37:21.793042917 # File has been updated. # Successfully updated. # recipe to execute (from 'Makefile', line 18): @@ -243,7 +243,7 @@ qemu-kernel: # Not a target: kernel/exception.c: # Implicit rule search has been done. -# Last modified 2022-06-05 21:39:32.795125117 +# Last modified 2022-06-06 00:36:44.829916125 # File has been updated. # Successfully updated. @@ -256,13 +256,14 @@ lib/shell.c: archive/initramfs.cpio: fs_test.img # Implicit rule search has not been done. -# Last modified 2022-06-05 21:38:50.007772141 +# Last modified 2022-06-06 00:37:21.797042824 # File has been updated. # Successfully updated. # recipe to execute (from 'Makefile', line 22): cd archive/rootfs && find . | cpio -o -H newc > ../initramfs.cpio # Not a target: + Makefile: # Implicit rule search has been done. # Last modified 2022-05-29 14:36:28.045748705 @@ -300,8 +301,7 @@ lib/timer.c: # Not a target: lib/tmpfs.c: # Implicit rule search has been done. -# Last modified 2022-06-05 21:41:24.942031131 - +# Last modified 2022-06-06 00:18:26.010891705 # File has been updated. # Successfully updated. @@ -386,7 +386,7 @@ lib/vm.c: # Not a target: kernel/kernel.c: # Implicit rule search has been done. -# Last modified 2022-06-05 21:31:25.254669387 +# Last modified 2022-06-06 00:34:58.948598455 # File has been updated. # Successfully updated. @@ -399,7 +399,7 @@ lib/mm.S: rd.o: archive/initramfs.cpio # Implicit rule search has not been done. -# Last modified 2022-06-05 21:38:50.007772141 +# Last modified 2022-06-06 00:37:21.797042824 # File has been updated. # Successfully updated. # recipe to execute (from 'Makefile', line 25): @@ -407,7 +407,7 @@ rd.o: archive/initramfs.cpio kernel8.img: kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switch.S lib/printf.c lib/tmpfs.c lib/allocator.c lib/shell.c lib/vfs.c lib/task.c lib/mini_uart.c lib/cpio.c lib/memory.c lib/mail_box.c lib/vm.c lib/reboot.c lib/timer.c lib/utils.c rd.o # Implicit rule search has not been done. -# Last modified 2022-06-05 21:41:34.133969697 +# Last modified 2022-06-06 00:37:22.089036043 # File has been updated. # Successfully updated. # recipe to execute (from 'Makefile', line 14): @@ -417,6 +417,7 @@ kernel8.img: kernel/boot.S kernel/exception.c kernel/kernel.c lib/mm.S lib/switc # Not a target: user/lib/system_call.c: # Implicit rule search has been done. + # Last modified 2022-05-29 14:17:18.893532177 # File has been updated. # Successfully updated. @@ -439,7 +440,7 @@ lib/allocator.c: # Not a target: lib/vfs.c: # Implicit rule search has been done. -# Last modified 2022-06-05 21:41:07.974141693 +# Last modified 2022-06-06 00:34:52.04478362 # File has been updated. # Successfully updated. @@ -457,6 +458,6 @@ lib/vfs.c: # strcache performance: lookups = 106 / hit rate = 33% # hash-table stats: # Load=70/8192=1%, Rehash=0, Collisions=4/106=4% -# Finished Make data base on Sun Jun 5 23:49:43 2022 +# Finished Make data base on Mon Jun 6 11:09:57 2022 diff --git a/Lab7/archive/initramfs.cpio b/Lab7/archive/initramfs.cpio index 3e6d4bed1953cf28ca52bb4b4cf6ea247b6ac336..4059edf78f857e4cbe39e6d7d2d644e2e68ed556 100644 GIT binary patch delta 102 zcmZo@kZiakF+rEp*v!b%#l^(UdAgi6oBqU9@#!2kY^tmXp~)Nh<(N&4EvI+cuqm-w tx;VR8m^c68Z~w*52*gZ4%nZaVK+L-R7eCuqt?7qt+0?clv}HTa2mlH^Ain?r delta 3548 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 ODxv!{2L9PoFY^zAv%Tp6 diff --git a/Lab7/archive/rootfs/initramfs/dir1/dummy1.txt b/Lab7/archive/rootfs/initramfs/dir1/dummy1.txt deleted file mode 100644 index 9ac4701e6..000000000 --- a/Lab7/archive/rootfs/initramfs/dir1/dummy1.txt +++ /dev/null @@ -1,3 +0,0 @@ -This - is - dummy1 ! diff --git a/Lab7/archive/rootfs/initramfs/dir2/dummy2.txt b/Lab7/archive/rootfs/initramfs/dir2/dummy2.txt deleted file mode 100644 index 81ea3b3c0..000000000 --- a/Lab7/archive/rootfs/initramfs/dir2/dummy2.txt +++ /dev/null @@ -1 +0,0 @@ -dummy2 !! diff --git a/Lab7/include/vfs.h b/Lab7/include/vfs.h index 93d98c069..4d3a69b31 100644 --- a/Lab7/include/vfs.h +++ b/Lab7/include/vfs.h @@ -56,7 +56,7 @@ typedef struct mode_t mode_t; #define DIR_TYPE 1 #define FILE_TYPE 2 #define DIR_CAP 16 -#define PREFIX_LEN 16 +#define PREFIX_LEN 256 #define O_CREAT 00000100 #define FD_TABLE_SIZE 16 diff --git a/Lab7/kernel/exception.c b/Lab7/kernel/exception.c index 47ef33f9f..56090ed03 100644 --- a/Lab7/kernel/exception.c +++ b/Lab7/kernel/exception.c @@ -12,6 +12,7 @@ #include "mail_box.h" #include "vm.h" #include "allocator.h" +#include "tmpfs.h" void enable_interrupt() { asm volatile("msr DAIFClr, 0xf"); } @@ -308,6 +309,7 @@ void sys_signal_kill(int pid, int SIGNAL) { } int sys_open(const char *pathname, int flags) { + //uart_printf("sys_open: %s\n", pathname); task_struct* cur = get_current(); char* new_path; vnode* new_root; @@ -321,6 +323,7 @@ int sys_open(const char *pathname, int flags) { } int sys_close(int fd) { + //uart_printf("sys_close\n"); if (fd < 0 || fd >= FD_TABLE_SIZE) { uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); } @@ -334,6 +337,7 @@ int sys_close(int fd) { } int sys_write(int fd, const void *buf, int count) { + //uart_printf("sys_write\n"); if (fd < 0 || fd >= FD_TABLE_SIZE) { uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); } @@ -345,6 +349,7 @@ int sys_write(int fd, const void *buf, int count) { } int sys_read(int fd, void *buf, int count) { + //uart_printf("sys_read\n"); if (fd < 0 || fd >= FD_TABLE_SIZE) { uart_printf("[ERROR][sys_close] Invalid fd: %d\n", fd); } @@ -356,6 +361,7 @@ int sys_read(int fd, void *buf, int count) { } int sys_mkdir(const char *pathname) { + //uart_printf("sys_mkdir: %s\n", pathname); char* new_path; vnode* new_root; new_root = find_root(pathname, get_current()->cur_dir, &new_path); @@ -367,6 +373,7 @@ int sys_mkdir(const char *pathname) { // you can ignore arguments other than target and filesystem int sys_mount(const char *src, const char *target, const char *filesystem, unsigned long flags, const void *data) { + //uart_printf("sys_mount: %s\n", target); char* new_path; vnode* new_root; new_root = find_root(target, get_current()->cur_dir, &new_path); @@ -377,6 +384,11 @@ int sys_mount(const char *src, const char *target, const char *filesystem, unsig } int sys_chdir(const char *path) { + //uart_printf("sys_chdir: %s\n", path); + if (compare_string(path, "/") == 0) { + get_current()->cur_dir = rootfs->root; + return 0; + } char* new_path; vnode* node, *new_root = find_root(path, get_current()->cur_dir, &new_path); if (vfs_lookup(new_path, &node, new_root) != SUCCESS) diff --git a/Lab7/kernel/kernel.c b/Lab7/kernel/kernel.c index 8cb0e8ad0..f6f1842af 100644 --- a/Lab7/kernel/kernel.c +++ b/Lab7/kernel/kernel.c @@ -26,7 +26,7 @@ void kernel_main(void) { rootfs->fs->setup_mount(rootfs->fs, rootfs); rootfs->root->parent = rootfs->root; tmpfs_nodeInit(rootfs->root); - //tmpfs_dump(rootfs->root, 0); + tmpfs_dump(rootfs->root, 0); shell(); } diff --git a/Lab7/lib/tmpfs.c b/Lab7/lib/tmpfs.c index bf1f25085..b69144180 100644 --- a/Lab7/lib/tmpfs.c +++ b/Lab7/lib/tmpfs.c @@ -8,24 +8,6 @@ struct mount* rootfs = 0; int tmpfs_nodeInit(vnode* root) { - root->v_ops = (vnode_operations*)kmalloc(sizeof(vnode_operations)); - root->v_ops->lookup = tmpfs_lookup; - root->v_ops->create = tmpfs_creat; - root->v_ops->mkdir = tmpfs_mkdir; - root->f_ops=(file_operations*)kmalloc(sizeof(file_operations)); - root->f_ops->write = tmpfs_write; - root->f_ops->read = tmpfs_read; - root->f_ops->open = tmpfs_open; - root->f_ops->close = tmpfs_close; - root->internal = (void*)kmalloc(sizeof(Content)); - - Content* content = (Content*)(root->internal); - content->name = 0; - content->type = DIR_TYPE; - content->capacity = DIR_CAP; - content->size = 0; - content->data = (void*)kmalloc(DIR_CAP * 8); - void* f = fbase_get(); unsigned long size; while (1) { //build tree @@ -35,9 +17,8 @@ int tmpfs_nodeInit(vnode* root) { if (compare_string(fname, "TRAILER!!!") == 0) break; - //insert file from root - vnode* dir_node = root; - content = (Content*)(dir_node->internal); + vnode* dir_node = root; //insert file from root + Content* content = (Content*)(dir_node->internal); vnode** target = (vnode**)(content->data); while (1) { //iterative search for a path name char prefix[PREFIX_LEN]; @@ -84,6 +65,28 @@ int tmpfs_nodeInit(vnode* root) { } int tmpfs_setup(filesystem* fs, mount* mnt) { + vnode* root = mnt->root; + root->v_ops = (vnode_operations*)kmalloc(sizeof(vnode_operations)); + root->v_ops->lookup = tmpfs_lookup; + root->v_ops->create = tmpfs_creat; + root->v_ops->mkdir = tmpfs_mkdir; + root->f_ops=(file_operations*)kmalloc(sizeof(file_operations)); + root->f_ops->write = tmpfs_write; + root->f_ops->read = tmpfs_read; + root->f_ops->open = tmpfs_open; + root->f_ops->close = tmpfs_close; + char* name = 0; + if (root->internal) + name = ((Content*)(root->internal))->name; + root->internal = (void*)kmalloc(sizeof(Content)); + + Content* content = (Content*)(root->internal); + content->name = name; + content->type = DIR_TYPE; + content->capacity = DIR_CAP; + content->size = 0; + content->data = (void*)kmalloc(DIR_CAP * 8); + return 0; } diff --git a/Lab7/lib/vfs.c b/Lab7/lib/vfs.c index 4ed35b89f..976e27d4b 100644 --- a/Lab7/lib/vfs.c +++ b/Lab7/lib/vfs.c @@ -120,17 +120,6 @@ int vfs_mount(const char* target, const char* file_system, vnode* root) { mnt->fs = kmalloc(sizeof(filesystem)); register_filesystem(mnt->fs, "tmpfs"); mnt->fs->setup_mount(mnt->fs, mnt); - - node->v_ops = (vnode_operations*)kmalloc(sizeof(vnode_operations)); - node->v_ops->lookup = tmpfs_lookup; - node->v_ops->create = tmpfs_creat; - node->v_ops->mkdir = tmpfs_mkdir; - node->f_ops=(file_operations*)kmalloc(sizeof(file_operations)); - node->f_ops->write = tmpfs_write; - node->f_ops->read = tmpfs_read; - node->f_ops->open = tmpfs_open; - node->f_ops->close = tmpfs_close; - node->internal = (void*)kmalloc(sizeof(Content)); } else { uart_printf("[ERROR][vfs_mount] Unsupported filesystem!\n"); From 9150dc63ea9b797a6a157a35a1ed8c50a6d98d58 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 6 Jun 2022 23:51:41 +0800 Subject: [PATCH 21/25] [Final] test1 --- ssd_fuse_lab/.vscode/configurationCache.log | 1 + ssd_fuse_lab/.vscode/dryrun.log | 9 + ssd_fuse_lab/.vscode/settings.json | 3 + ssd_fuse_lab/.vscode/targets.log | 274 ++++++++++++ ssd_fuse_lab/Makefile | 24 + ssd_fuse_lab/make_ioctl | 2 + ssd_fuse_lab/make_ssd | 3 + ssd_fuse_lab/nand_0 | 1 + ssd_fuse_lab/nand_1 | 1 + ssd_fuse_lab/nand_10 | 0 ssd_fuse_lab/nand_11 | 0 ssd_fuse_lab/nand_12 | 0 ssd_fuse_lab/nand_2 | 1 + ssd_fuse_lab/nand_3 | 1 + ssd_fuse_lab/nand_4 | 1 + ssd_fuse_lab/nand_5 | 1 + ssd_fuse_lab/nand_6 | 1 + ssd_fuse_lab/nand_7 | 1 + ssd_fuse_lab/nand_8 | 1 + ssd_fuse_lab/nand_9 | 1 + ssd_fuse_lab/ssd_fuse.c | 459 ++++++++++++++++++++ ssd_fuse_lab/ssd_fuse_dut.c | 171 ++++++++ ssd_fuse_lab/ssd_fuse_header.h | 27 ++ ssd_fuse_lab/ssd_fuse_lab.docx | Bin 0 -> 266433 bytes ssd_fuse_lab/test.sh | 58 +++ 25 files changed, 1041 insertions(+) create mode 100644 ssd_fuse_lab/.vscode/configurationCache.log create mode 100644 ssd_fuse_lab/.vscode/dryrun.log create mode 100644 ssd_fuse_lab/.vscode/settings.json create mode 100644 ssd_fuse_lab/.vscode/targets.log create mode 100644 ssd_fuse_lab/Makefile create mode 100644 ssd_fuse_lab/make_ioctl create mode 100644 ssd_fuse_lab/make_ssd create mode 100644 ssd_fuse_lab/nand_0 create mode 100644 ssd_fuse_lab/nand_1 create mode 100644 ssd_fuse_lab/nand_10 create mode 100644 ssd_fuse_lab/nand_11 create mode 100644 ssd_fuse_lab/nand_12 create mode 100644 ssd_fuse_lab/nand_2 create mode 100644 ssd_fuse_lab/nand_3 create mode 100644 ssd_fuse_lab/nand_4 create mode 100644 ssd_fuse_lab/nand_5 create mode 100644 ssd_fuse_lab/nand_6 create mode 100644 ssd_fuse_lab/nand_7 create mode 100644 ssd_fuse_lab/nand_8 create mode 100644 ssd_fuse_lab/nand_9 create mode 100644 ssd_fuse_lab/ssd_fuse.c create mode 100644 ssd_fuse_lab/ssd_fuse_dut.c create mode 100644 ssd_fuse_lab/ssd_fuse_header.h create mode 100644 ssd_fuse_lab/ssd_fuse_lab.docx create mode 100755 ssd_fuse_lab/test.sh diff --git a/ssd_fuse_lab/.vscode/configurationCache.log b/ssd_fuse_lab/.vscode/configurationCache.log new file mode 100644 index 000000000..ae3bea385 --- /dev/null +++ b/ssd_fuse_lab/.vscode/configurationCache.log @@ -0,0 +1 @@ +{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/ssd_fuse_lab>ssd_fuse(-d,/tmp/ssd)","/home/littlelagi/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/ssd_fuse_lab","file":"/home/littlelagi/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/ssd_fuse_lab","file":"/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file diff --git a/ssd_fuse_lab/.vscode/dryrun.log b/ssd_fuse_lab/.vscode/dryrun.log new file mode 100644 index 000000000..877adeb0b --- /dev/null +++ b/ssd_fuse_lab/.vscode/dryrun.log @@ -0,0 +1,9 @@ +make --dry-run --always-make --keep-going --print-directory +make: Entering directory '/home/littlelagi/ssd_fuse_lab' +gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse +gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut +mkdir /tmp/ssd +./ssd_fuse -d /tmp/ssd + +make: Leaving directory '/home/littlelagi/ssd_fuse_lab' + diff --git a/ssd_fuse_lab/.vscode/settings.json b/ssd_fuse_lab/.vscode/settings.json new file mode 100644 index 000000000..65e1ec078 --- /dev/null +++ b/ssd_fuse_lab/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "makefile.extensionOutputFolder": "./.vscode" +} \ No newline at end of file diff --git a/ssd_fuse_lab/.vscode/targets.log b/ssd_fuse_lab/.vscode/targets.log new file mode 100644 index 000000000..14a896a08 --- /dev/null +++ b/ssd_fuse_lab/.vscode/targets.log @@ -0,0 +1,274 @@ +make all --print-data-base --no-builtin-variables --no-builtin-rules --question +# GNU Make 4.2.1 +# Built for x86_64-pc-linux-gnu +# Copyright (C) 1988-2016 Free Software Foundation, Inc. +# License GPLv3+: GNU GPL version 3 or later +# This is free software: you are free to change and redistribute it. +# There is NO WARRANTY, to the extent permitted by law. + + +# Make data base, printed on Mon Jun 6 19:01:49 2022 + +# Variables + +# automatic + /tmp/ssd/ssd_file diff --git a/ssd_fuse_lab/make_ioctl b/ssd_fuse_lab/make_ioctl new file mode 100644 index 000000000..210920a96 --- /dev/null +++ b/ssd_fuse_lab/make_ioctl @@ -0,0 +1,2 @@ +gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse + diff --git a/ssd_fuse_lab/make_ssd b/ssd_fuse_lab/make_ssd new file mode 100644 index 000000000..9cc4f4399 --- /dev/null +++ b/ssd_fuse_lab/make_ssd @@ -0,0 +1,3 @@ +gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse +gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut + diff --git a/ssd_fuse_lab/nand_0 b/ssd_fuse_lab/nand_0 new file mode 100644 index 000000000..3321fe7a2 --- /dev/null +++ b/ssd_fuse_lab/nand_0 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/nand_1 b/ssd_fuse_lab/nand_1 new file mode 100644 index 000000000..0abc9fde3 --- /dev/null +++ b/ssd_fuse_lab/nand_1 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/nand_10 b/ssd_fuse_lab/nand_10 new file mode 100644 index 000000000..e69de29bb diff --git a/ssd_fuse_lab/nand_11 b/ssd_fuse_lab/nand_11 new file mode 100644 index 000000000..e69de29bb diff --git a/ssd_fuse_lab/nand_12 b/ssd_fuse_lab/nand_12 new file mode 100644 index 000000000..e69de29bb diff --git a/ssd_fuse_lab/nand_2 b/ssd_fuse_lab/nand_2 new file mode 100644 index 000000000..5d9d03e07 --- /dev/null +++ b/ssd_fuse_lab/nand_2 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/nand_3 b/ssd_fuse_lab/nand_3 new file mode 100644 index 000000000..7a9331e77 --- /dev/null +++ b/ssd_fuse_lab/nand_3 @@ -0,0 +1 @@ +PvOHNItfKtM8SfAuXQfld4f73UmqHFZlfQIqAkIGrnzYePlD9gywkng8iNo3TBjV7u6yKPbCZVUzZR5mFwHeg1mnq2Bu0LklKUhqPh3jiMdsJJED3x0Tq9gyQaKDBiLX19d7k1Sgv60L1yF2FPNZiyT8ukoZiSJScJlwsY1g497VHcieTd2JHQM8RymKlnPqB0xfqboKszB8Q3mqJgEE6MnwSAodkkUAeK10X7QHB4jkhhxaT6dXw5uVOAE6J8J0NQ7NyUZzcoQ2A6QJjzXzBjA7hBcrmD6NsmPd99gaf6Fm8otiheQmLPKoRTjNqIK4xqGUXbL9W5FROrFSvdoKUWKH9tN5AfhKRb5pwqFA1lnWWUooiqD7muXMonuG2U31z1rNvvIJ6Yk5LjJiMNJDmqLwPoEBNa3d5Mc0HbgSQHy6xp4m0rxuBCrW3ltov9kJxXaCLZUjwnfpnocpaQL73l9DF5K30Ae1aQGg0GgkkChtSXTqzH4kuR3dloY2VPuDpAPpMiWzTg3jFXd0H0cDR24DoqzQAdOnhYn0y0DpIA0s1FuNnR42fbivrF1WU6KY2kqudYudYqR8Yv1QdrmsteTMSp4NxGI8tx3ZZPeWqTK6k8R16qOK4cutpec1o3KK2CGCmtW72fbsHzlxolOAwhwnnzspGTU4RvkgjOMeHVhif3aTvj64XIBSuctsR41DRHfDtqMfgTT4EFmtGTRAjTOabDk9VoPY1NxALMKmXX6BZL2NlLhfpd09cZ7KoZEiMUELSJE0TcMNHfxd4Ai5o4UiciOzZpW9qBl2WqzkdtDw3vgaylsymjpR8ZAt41aFXSWStbvbxy1ltForrCVHM0uBl058sFvTkzjB6suXiIUC8jfiK3gJwjK3qeaAhZJw4AVHnx79fzabJuOZGpyY1BvrUOaLAlxOFN6ts0Q5SlPCNj5LrkhGOwz4usKadua3fuZ0aABIV3gJhdEg7Q9CXUOc5G1l0b7THtjsdyIfiTpsnNxmkFsMPvoim1wgyclvnPz6ealldH0jIebOvp5eqakPKHlLIu6tJ3sjLHRxlSdhcProUVyz6jddYAMr6Fr6KzxVd3qmiQSkFKh4txBJGDDWIcvRdwU9c6qIFMHhbRzv3ZI44emVNJwKzAoFRUq0jbbb3FQZD4Z1NZY3D30pu2zyg39N9XNOL05AMYZdudqo8aSYixLcmbUtMAQaImMChfPgprLHPMKWPC4dXPtqsZl1ABqL8w1O2JbjYL4TAU2H8Lv5oT2HwrF03zqLG27Qmlgo1k0GhCceeIMlKt8qMQcljvz5fCshkNIrZDXtsEXTK6Z7cg3K1QJssnkQMTwSIMHF09ZOVwWlEYqhRqx6OadX6zTnlyJIyvcJjofNtFY0JK4TSrNQcOqOJ1uybRNdmBgrCNhwXo9mj4JyVf5kVoBz7QV6CLGXewtOr06VkQoesWNd0yFMwsQrnHEpByPu6akTJOEZQ0j4JZ4Je6MuSZoUsoXIGsmaHWzV9OkNM6fYoTtb03cIpX1mlddA3vorrixfK5eAC7OZ00xFb6ZpKiail1D0jPGQZmhOEnOaO0Jf7MKkUFKOAukWx3pDUsPkFop6rfwwi5ivlbSKW6ayatI0tibXV9gxGFSabTwPn5LyCxt18i9KnRXObWt1HQrlVnJp1PRsRTAfLSAZHRiSSe0FpKw3mWo1pztFZAHNaspm6cyIGXFkeQyx6hgwNLofR6OkajSNSWJOSvfJWw3Ke4LLqVe7RFhCzPKNIm4Dlqf0Ax5lvPrpkfhRM0T0AzP4HsIeZXtSTs8k5lIhDFeQgS758gcEpjWinvAZ3YT1JNCRaFioKuUvKasqxr08YRBfKDPFQbaEq0uraeWUXA3LUa3z60XwFULf8QN6uOID51dfOKVOxmlkCfr0dRIO6B861gJiX7WUh0znjnVDyoLKfKNUSzw8F0pg5LG03kYnHIFT9QtUdFaYxp27iyugnjg3FEbz5zt6BsAPcQvBNn5vhQ5JPfjw9JWSXEAbfyFj10VA4JONXkQBInffXUvf2Xsde96wmZSbLXvP2GPxaXIySa4gCc8q5KdvUWKUQcKy6VWvdUjxg3WIhqXeJ3kY3KK6drUSdhDL3BzUNFk9X5OU3Auz7zw7GW4XkMaPPRulX5NAlVpqUWShZjsO4tWRiNW9mpa44VTNCXGA5iDouBQxzSzBjJmyXXbQiqZNDGjxDKfGDRmhQ3SPPg5nNUcFvDrNs0gNWdm5FyFUZMhGpSEYo67CGk3HGpuxcGXY53yJABfHp245TPwiCq38vPG9CHKmYPtLBctqhmwmef7liU3KjZie8TTluL1gQ16QfUGxJoavtgh323c8Yotw66ryXMBrWvF07huyYZc7ymTZ4f1crT0XCcQmZAVfIavICcm2jMGBW7169hJiZKcE1qqWpisqVIKlvx9q5CtMNHYmBZz2BgMm72pvrp1f0BC7G6KEc0j5adJ8u0dIJ6TiX5dVUqv7y8549HYf4GxHmD4oA4z9yvEG0XHrkWzKp7O0FmWnLTFptTWYwriH7N0veD9Jd0BBxkUBHNdwjIzoKx4V3WMCwQDr9xCm9Lvf41buIUO2BXwKH7gyfMZ6acfGlkCwywPieul1iT1iANeJopvKsv4AWZiBH94IiNcETfwJZrjrroF9OUUaRziswA5WD2baZTLYn1gkZA3Dsj2rQDPudndZJHyxQV5cFrWkhvAUuJ5lIIoiy4LHmFgtBAEu75Rv4Uet6wWlZBbuA8a0YiIZl5zRR5iLIex36MNPxNobYqMRxf57YG93fNP45UZQKdUhjLrU13ZAHxwsiqt1hdU0frqkLexmA17nCDMPIpRvwyGVCNrzOIHjNrOJXQuIykSuEEM9foR9Tz7L5ALEj6Bw8M1bqX640u99dZJRTCQL8pghlSLJOIFO7xICvC8vOpXxqdqthXiFJwUMWsUcNq2mTJUVidvGaFmmqZiPpiczZxCLfNy8SUgS8sLC55Qzc8aGbP3eo9BTpc8DomgDaj8MsQXWQID0DpOGWAXslVfUgLzqwSUDpMQaS5bRUK6wJpvULBsaPbUmzFOCiUChexNS0Lhr6bm0gPYnrnac4WGdrO8TUZLw0FQ8Vh0xmVSONRm3k8dAKBwRu53NKJysRtJMjXJeaDkVtBVukOjb5ZF34QSw0XJCBKCdMIDjXYuh2WDSGVbeqGqLMUtYocxQ4PgjfqGB3uanAm3GscR4ZOPneDgBjlYMVCwfaf12B5nl0pOObKNEgqakDFxQ5zqsxJZzGwQcAxwobpz8ISnVz2w0Y7T8yS9arwEMkyQNpx44qV5n9SrAuKQWdGto36gpCy8C1E7EioKlkZBKQl4OZ0LAOw3QBWFgppf9TxY8dHdQWGTSfDhi8xXBkIpJpO3g42G0AVZM2ZcABQhvr5aphPQGDuUTda3cd3gm8HyrJgcGWddX5MlGdussg79R5YHngC0xGXnZfa7v4CMTCvSpEJjsCdM2tUmF4jbhm07jWJLu1xQhE0op6cnnH0ZnKrb3At1Wj2xiiExVcnsZOz13YSKbd7GISuPXejJobPXwONb1JNWsevmurVZgTwI593bWqBJh1rVdSLx2ERHRLnpgRml12SDcWu43cnGgfLRqs35bmXCMvpV4ed7xGfkHy2M6wemdNWEJkxxjeTTKvap9vhl2yXXpPpPADm5ZzHJUXeT0qfEXp6v7XlMSqgIc2LLv8yVA1KZTluqpy8dAkbCcKVwKixaT93ylMd65NlK9GHZ4Qp4pmYZnyQDqv2MdZYNoAuiajmbjv2JNiAZxlpczMZmFcvVKFWs0jdbwz9xwJ8CRhf3k4y5BK079v2F9nNcJ5FAd046Em090iCrtC1u2AiPBCGCFZsfSEZpfvN1kHk6J6bRXbvlA3pjTYROPskUoz6ZfwHqWt9lrCE3ZEWjFivmCZuC4ndBrTBRzNEigMyBs4ZtwJWjl2cDvv2iTd37gKi5pymRyJlCMQzU9HJszJKRqf1w81fFDoLXU5p3rUr768LhtlWQvRh1w7CrU4vcG09XYlPV2ibeHiE6fFQSAkiRFSo32qt36pNh0zErRrMi5gTOZr5CakB7FCb2P7YgWIUo2xGSPd9ikhGNth5I5Sb2gCIOmRxS5hzvzBUMaZsfq6hkAwdgn4z38uEgi3jqowjVCBV9vTUcnPyi4PeKS716Z1BBZ6upur5Z06zez3TuTiXkSDpjlyVKR4QEuKUludVYthCRgiDEjlsWIqNuBngzuZjuGrUQkUnpHP1IvNJBiZM5erKrGJHdeHypEBp8kUCdQSaUkEM1oWl9y8JCM4tRjBc6IphZVBDOKULMXlr1Jq933tmGP23WCKutSS3VQh4rygTNxn8GH18qFSzcZ9LQQYIwBqpjOKJOSsFRrs0A2o1BXFo9A13oZFF1ihFNje9T6ux6tB5xH7N2t2DqzJH4HLHIDp0TpA5hgWT7rvf95VB4LaT3yCQ4heuqZkUJHZSqfdwYjtfEXvEnrmX99rw2YzbpQ7xvbJy6gxjfANejHOtSJijegcFx33aC4G8cOlEh3bt8ZQqlh46zSaILDMmUnm7tUElDZs9WGU1KHC1pWQWdNO9Yf9jGmLHEY6iHrbilkqI652KyLpjVkspeWxEhZqMiJcXPCoU0guzJdoyMqb6htm0IVnQaGbu8a2KOGZC4Z36PaJJDOqUMQauqLeCnAZAeZR9yHiacegTB5EZxO4V4x2TuA3r1ik5joGkLRpRMjFCptNPyMjmaNt30fQadruQMOHUf3xTtBjDTByXL2Dqucg0m5o2gJ2e1Ut6BXywgQcMdbh71WqI9PTVFO9WlJNdomC7aNW2PRCoDNrwFicysqjauPnt2KPQ1mINYHLGJ1ki4ibHGUc60fpws0bpkphnieoJNQKbcgqXTAqfvmY1I4nfJ1knPZuL1sa2jO6nzMzAcXQiEy9weXVwb7J8pT6ccFfobWShWafMA3tlSlF2zuRfVrojA3mjzBe77k0ZvToLtr206i3vseof0y3sNLk08NsJ7vRC3w6BDPcIRv75AHU5JD8Vk4hPP6lgsmYQsRn7Zru4eBGqYW0XKdOYqwkOd8uDWtQYjjFYDobpMiH0U2VkYq \ No newline at end of file diff --git a/ssd_fuse_lab/nand_4 b/ssd_fuse_lab/nand_4 new file mode 100644 index 000000000..39d20d1cd --- /dev/null +++ b/ssd_fuse_lab/nand_4 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/nand_5 b/ssd_fuse_lab/nand_5 new file mode 100644 index 000000000..a381df91d --- /dev/null +++ b/ssd_fuse_lab/nand_5 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/nand_6 b/ssd_fuse_lab/nand_6 new file mode 100644 index 000000000..09f43ad24 --- /dev/null +++ b/ssd_fuse_lab/nand_6 @@ -0,0 +1 @@ +ttqOZgEU613Mbjh7T8acr9O9GTf8AxNnfSZXBuyDPDvK4nD0palKbu85CCkfF0apaIvk65dfWq4LbBQ3lXlzr0gSOnjYUU98Gn0s5syssuBUU5AN9lr4XQCpfcu7ZnjxCqwNBbsiCHYfjR8oBR1QZ15hjUOTjEwkiTiaLePxLkKQ7TtGxquF4tXAfWEFcY8h7blyIrnlh9JXMByfgKgo6xF41zTJt9DpTfKEIh6r6f926k3TcJCTgV7xRK2sXeValUJ3eCqcanfW1ZNxX48HvZ1GZxzPYYFljBzOwKLOdC2KNfxvL29hElquqZ6ZGvKCb8ijPzywqLJ12DGntixZbdkKRVuEA3wrG9OWCH8t92r4BZcA9DIeLnJXO4NpUb8AE1wsnk9oeRHFaOpx7hz9BgEJi15CvaxtFSGiW8Ro8BXU9StTrr129YZNpLnv2lbGDWR60YFJVjVIa3JDxF2QpT7J9zaVsFlNj95sCULurzoiAHvEikhMAtuwlBwOZPqAiLtTzHPg51o9lcadXAYpomhCMfIzfvIKCvIvILMuw6nxvnPRMg5LtWwtv8fElnEK54teprc7jS76LKrzIomtMEXnyKiROMAJJBRYFQcEsfYo0NeqVPbxAHTQ7vjkPgFwsrmZICRBaVOhlztTVWnMJcvJtgkdPGzk5KrIrK0rIxzX31jVBzbQMAFZVYZu3NkEcWzEucjOWatBJYTtwRIkRTIEyBuxX3DOHeEJ9VlKj93hK1NuHISrYsZS0qsVs8GXAC5QDKk0qadirmooQzHiWoA4e8cIxRKHu5ROtZ9azCQIGJVseYGQEgco4vyZx1UNSS4I8Svl23guSVW7Lgxw8Um8RbhKkSv6BMJgVleWsrd2KACWR5kN4shvY6veWlxJDGMXpQmXKVJmahu6XTHJuIW7PHzwREodpHhfzHst80romHrBHqhCNGDwpFANSGcG6BxSGhoxitTKHcpLytm4loukDYO63u5rbHY3y4lmnRlofgTdHBoHsitoBHGeBkccNWh6Uqo81z4FUtB2t87rpKZFKQ7v5rOTKJKzhcGzLfUiIbiru65pFiknsVGMzg0MOycjLlUf4hCkkC35L8DW5OWlM3G0r7QL5v3Sf3MtVh65gQRxXzznEuvmKpekDJNB3rB3TOYxiZzwnrJLBb4NDc1dDXu3sodDcekbPLKcMQRpzZZVXps9pnhF0jajyZXeSwidlVy7q4ebC9P6eEPJDjbOZCNZPz100g6Ui7paNbZ8LGf5B2jsO0wj946eONVRbty1pwB7MLHM5ZcHSoBOnNbwYYz2iXkdzNvezbOlbNrjQhSZJy62cZFWTeFtAU8uJIHQfMCi91CSithYuXbM8HFZwq6jfrZuhtS0rv74EnCrefnauyH1gCK7Gus90u2NTCVCFJ4cnBqL93Qqds8XKMgyEZM6ZIirDTX2kUEsZkquYQNt2b4tfteSe7uRcPR3iz964cZNSXxpphKRjhOLLcCBp4CU8UZ9gpLKRCInUdDfw7GgTK7OYzJV1aCHH4vnUVaPaGP0oCZvFTR1m9bwkoaffIU9YpzsQP4eglpzL0YLvSouMaueMtQGeHqJOBshIWUbc0IJBeRS1zWbFdEIgVFMYrw6lVVUSqFqKDNkELSOYJsLVyHOkBEtGsN8TN5LjsVD0ZrAv1QgJsQyPDVwMjDe1Z4M0TRHd38cMLOi6UcUu7Rb8AUuEUXCrqGTRKBbQ00ufAAUFmqjNAPu7K1WoA64ZURPh5yqqQSMCIfHMssLFqor2jk3bhB4I6oVGC6SZr3pXkn37gYfHhjgrQ5GINoYjlnubv4F2kz6eFValv6O8iTDBkJQK3MVh5ICMb2vkSxk6YlhUtyPBq1DueA8LNufgLTphHAycHlrM9MTCa4PrkJiTwVcx80smgEP86x3Yii2q7Sdlwzyk5Rzve1XXEXqNqCyqrMFzGLRPUrKuTpmYVed2FS0Q5fVOBOEjsp46b6yvfYlbi4vI67Vs2Zae6xdRedK030qhfPwPfjUSNemgHq08yPxGPrh3L1jBnYU0WitP4Jkcn3duwu6F4iwn68rv20J0CAQVuntbfddf52NExUWNHlEFKPmWwBUsGAWJdkcjravkaQJR2baSpXdcEfBJrrJMz8f8a5dpkcXypsMLh1cXcJJw2IQvJ7Yy5JeNxhyiHpgFAiSxP6Dgse7yLYGSB5c0kKCMKlXC870iMZ71XkLk1T7P1BQGfblsoRoIeem0X8fFuHBIuRdrAbY0wMoAhP4YMLF596GG8iuN8PbaoMqxukTIP5PPNKzL8141QmCFeKzJyYFlzJTgjCsPKhyresqOiRe9TdBW6qfH62GRs11Aovtpz7mpuyz4EUSrLEkkNZwlHpJOh5WvyeQDJcQBTxNbDw6SQcgz4Lzn95zGds7U8V1MmCSPDKmkEuCfSk4znEEAixJyiuHJUSRjKvIgFNaS5o9T5jXlnLSoDPUDoZmHNKZ8TCmoPJc4Ih4BemfG0dD3W2XfhhWvTtYpgRg56gfy6s4Dy03GulFU6vY1mAxHxmuw6nS0qSdqdSjtCRXdIMzvIkz5wsdSm5Fijb3cgjJt2P5Zfeil6LCdoxsI9nOhAlYHlsQDaPdIoHTZa9DNPJS10nLPOkM5Mh51KmErpEylOhfCLVQrO6whhunPkR49TryKD1n9bUZwohBseWFXrCnvAH1VxC4ugeutWKHJy0MOhsn1RUmuUWv4pS7i1Gu3Ya3cZAnVSGcVzvQWL8BcYNC8SzTCX9tZEEMVyAh94ueSgjleFsBNHuUoZsbZQ7Ebdh4vJy7ugXce7O31LcnrupKcWCLMBd5UZzl3YQ96WhQTPq6rlUe6wrL5IMlQFJXxLdkMtl8ySF3T915l27okPZyRwdPmZ21nrrcWTBTu3DroJ0dHBPDRFNAfXjl99Zp5RqIPnwwYugMlSTWmBaTdmfZ6XZ3yVYNc2axCL6vSnGVoUr8gnQyQ838NiKvZgcFNsALNI4QYjmSUI1WrBJeKl0RbO5rzYunBUkB4Z10VjxfdGNmsiXw9eiJiUzlTJdRW1sVhmy25eYGVbldrLC8IQKPY6okbK3ME4lrO1ZNnSMtnlc52lKIYLNONS4KfViMDw0n03aIeOXsnEZFvlyH2BtHUPCHuFpqzs32R1SMXskEixNv4qWflRoTMzAM8s3GafbocS82Gi1XrvTSP79X1ep4CFT5lrLZ9xzaxQmyVyrwTpgt1rSpDT0zpob1YXT22LEWxhoWsHyLWVSMVjaQjj6Ym71U68C28ATCSuosVbzktiZE6fkWDXvSmHVvIKZ5ZQpBBsj0tMPrvX27B0MwC9j1MaFfAzcxPTBBxFqYmEfNSaHJCNLg16KdLkdZv5SMqL9clFjjx5qUltQ7uuoOU6EvMGTCNdY5q3ybL6G9oObSgeqDOQHfjiy9iRAWsejru9R1MWxR20jYGpDvB3tgF280DQ5bK4QhT7dToYATie8UccK0j4bArPaPjUHBLIm5XP6gFQ85Y2dfnaC5NV3IBq2cQimw5KUxVIi24w7ViCKbEPJBvFfZAX2B4UDPuEJRK1d9MUsoywfQrj47K8S5qhNHAwmj5CLuP2s6Qrub65hbwRQVoTabyfO80KVfQBwsfjjDvBIXzf3qdNhjau86cTrWO03vU2w1kjwFplwfk4nrdHzSxSp9LFf6ChoDZ0ynU9tweA1pQPsl1fx09IZfobZq3GvYrts7z0P7iPTnbH8GnIDgtMuHkLf2dlaQyPSV81vEGa5XOr9hTwngwa13avr6cafXMPnHWPvsCTyGTWOZyZSviKDPNN6Sh3fxgyDPU5o74epH4c9LSSpGeb4rp8UDQWeCsSTAWbtnKP9FnMgsGtjRIlbmq9826eTiaK06TbdTIsYjoWry0ZVjOSWZwKTU0yU6mO5h0PANY0v8F1UxPs2q47QmsxgPy8loguMP8b76gp2s7y5ldeWQ1SAWCOlLN7cbqJ98R3T9dzXkc4YFsZGskWZNEsSyXKuJxvbn71cBR2acTfYsV8GSoPvZs0XtBeKxDAsg8hoxtLVE7kgAZGEEYBwVFFCvXK8DdWb2rugRDI7vSi8hEddSqRJdjHVCWsHMQBLsdfMN34OVOxnKBemDFeudbY8F0Ktyw9Rg5aXEY8QfGTBuk7w0E9wq9lM5AjPO8EUssGF7Ahe0CjQBIyyr5MGb5PP2WAKoKloFGZDT2nYNn4mUZvhqtVEh3smtfQYG4Hm7FR74OpzH4zTICqA82VGGhwcfsLcorj6VyqI7XhtkxL8YCNEIRi4jTrsOB02qsGw1xkROoNKRCrQeRm0BxqQTzoJmk7eFkJUUxLAMf2peSJ94RfjpFgj439pF9X7RLnRCrBLkKfxUkvxdahpvhvcUn0Q1rM0cm23wdL0TzT8BEfAPZJwahpA0OU1QuJh5BRJeVRxu7GwGqe14MkI02R8Z6DNtF63rwwip4h6RlLHCeNezlZA59CHWvJeC8ZYALJ4Pyt37bfGzB7sSLBSMDvhxSp8mD64A54Lqm23epg2zUi7xaUCT9wHMgFe6IPLYZOVlfw83j5PXFXmJtIoAqy23c42Z6LdQmNTjCw1dH6V3VfFTbq0dOhj8sBAJuQKIlGmbiBv1SXsNES1r0mjz9W3lmTs5gq91lcjWh8hpKt4glD5uULdDKLm8ouR0wV0EVJjQ7plNkvGvBEHxTonXGWnuqV608b1D7ogPsFNg3a5zJT77sjZuJJ9VYJMGJVD4HJKM97eRH5qralx1TNxr5RCQGn6p77xNCrOtkf7M7Y90eChfNszKhpzBAqkjv3HiRqMmvRq2GGBOsFuQikfPouUMIQdaD1qt3lRQlDrarfL6tg7CgxbO6rtOGpa61U8B9urgoevNVY27e79R5SyopxltdoMaxSZNJeZ3pIqNqV6dxXIKSuHelI4IXB5VCMHy1zB0Xp4UDo45ZXMO7Cfra1qYceGOP0wtNv0sKmTDtDAmLyFMbRW8mcJSWh4VG36u1AxI50QH17oCFLmVH6gTacZmmIspX6xbOJlE2eSfGzRE0Tttnc4cdnu7PggXb7R4bn7hdHeOZVQXZ6lcIN0EBQzWqKKf9X0UaOVTnzNSzn5QQIqLBETA \ No newline at end of file diff --git a/ssd_fuse_lab/nand_7 b/ssd_fuse_lab/nand_7 new file mode 100644 index 000000000..ccfd0aa62 --- /dev/null +++ b/ssd_fuse_lab/nand_7 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/nand_8 b/ssd_fuse_lab/nand_8 new file mode 100644 index 000000000..df316e06a --- /dev/null +++ b/ssd_fuse_lab/nand_8 @@ -0,0 +1 @@ +rS6XJgyrCaCSrn6d8vszQ95bT5Kqa5DnTKAhZ05wZ7SsplEpvDct6H26ydYaG34fJpM97mRzrZfE5DVU7zGZnMsY7dgQvWqPGZogMqsX4agc62tS9c0JY5nx8NO8Cbvi57XAXEIU225nReTzOBdtZZmIYtYJTWhPk6rIKvQEwHIYO1ZLVhSgjz62BbeXBs9tXD1lQjUAvZsMYW59gAz0MdNjBlSkXXalvrzVUY8o3OVqDQO7IEILacYP0n7TMMiMPX7O0QIw3MSunpjpyYgt37YxDyfxHZAYpbhuolrH2102oprEVaW8zCX0l6IwyxVwTZRGu5PSHjCzfHJR1ZwFypjpXYDAXxPW8fKNJUBu0eSWWMfVKRozBapgJp7I4U5msN8929lSFNlHkZmzsTolXJewk2ZA657yxPiBG3fqy3p3muUEwpqUdXgecV3ki3VCQXVqvD0ex612yp6irueCMNJ7UWxnEV7yBk3Td3xenYUdgxK07MLkBTMVXeZm69mUlz0E8cT5jB4sPWFFaORKxOwVyGWaAVxXeVGiVIDB5XgG1MsIHHfxBheoeuLCpOOZp9XIPwLAPnlvGBLK22VZAXnNgZBQKNj0Rp2RHVy6ET9KaJKoD9PfCQzonAC4uQxARPJ5fuX2YGDmWb1Gy6gx1O4xocjZpAWo2gIgjma1okm2DM2aAs5HlvQjYfXiya60Bm2VHLfqa9wQZI9FDcyaNUO1i75PTb3PM6WxHaK0MywOulkYs2GmzWoSnln43XNkiA7aCv92RvLoVfTTzglykHvFLiY502yjz7uOPJi1xBCE95rtFW1hrBBnJByEPr8ZOJYjaovBGZq9j3SvPpB8jE3sq4pvw9ZP13V7X3dvwX3R5hkFjFUQoZtBPB8qeEBZAIiGvGWKkD7X8dfZS2Y4zQCTl6m3mqs4cSZf0VKXNfccTbQTh3oEfUQi7D1CfHlJUo9m5KOeFSUs7clFX801q2IRHYqanxhLmVWo1WG9tBfljwy5CG2vnzzgY3xuFLjmW4oPnV4kHyYE8CKnYfocnGbxWEAwt57maq5jQxvmofeEqjQVYg5iakyFh7YPxnr5fJGryXyleSVT3ympl2OZIZPXLg41O16BkQy0gYtXRI9TRdBZvoDw8DnkLN2qC0OOuqypqN1rMmoyk2STLmyOVN6m555ZFgSmBA4LVz9tpMcMNWGxjWwZaWXIUZ7ckHayJltaHQeGNGRw1bMmoHQ2mbChCZUcYgoD7k7toSd1UkVghU734b3KHIUKGqQBuTa1VyBEVpZPWdwFGcUaG4Nj4Ngm4kY4s1tC73BXT4vBy6jod9gMC1raPf8NVh0FwblLe6Hj8uXk0u10MFuF9h7DSrIqcQDrg1Eb6dLWUHA2PVEmXd6xuKJajjpgbGW8ohvQi2zLnwvTkIFfvg9zK8qV55Uxxdt6FXGucwMk6zD00UmjgDwQSGHL7uzX7S8PKg0Y8PCOtJEEETgiWBAVjyiiTgR2o77tngPIiMAJ7hqPZAwOCZaT1d6Y4kJE71GbwNc0G84ee9LPI7kmtJ4o48tbFKrWhYVrQbbiHx3ylrxmnqDrzXgjGl4N5tEaH7nLsWsIXV2f2QG6vRvOmOVNtkaEZFZa4fMKG1ZsIsIUUe0RB26whsjDY4xc857Smx2cwGh6obgthxtRLsYzBjumlENcIT5FKwRN8H8upwBI6UKeHQXqO7FMB79rCtuMkIlwWVJVRvP6eTxccCHdjMtW3n51lEOF72MSwSHvAR2AX0rm1zNkASsB8MIjih8XXEMS284rCpx8NYMKPX9bfIgTyp7AU7iLTNPtiTLZWoeZB82DYjBn2lsbmGlk8FxWXrdIqhhbiEG3Yyh9UUmNf7iuLBonOdzZlPhSO3SURt7QbpUeikmmJYltnF1oS4fRIcLQ5aBG5PZAGwEi7Hdyx5LLfCVjHlsbOWY2h7Nz7b1rLv2BIuXhkx9AaS4HZYpTTc0yx19gR2iSKSLv5PpT7OWDGbXlF0YXiDuHIqkSzO2eNp2SYWaMOpbwFTrokyEe3PuupGlKfqBbghBVuRR05bCQn4FTs1VH4ATfoFEr7VxsNcWyU46btJEBI1ceB95uHZYiD9zpAVWjtKt1ZHU1CtUWbXcNCsFvt26uA5YQi5hnzlH9XBBFatYFTmgmEUjXAm7C4EVc4l0A0xQRj4Ya8zaqItqggBfIUdN8BFX3aIws6ihP4WmLVlVxL2SbecERagIu4b6LaZ1z6kjWmgxohsYlfFV63AmY5OrMgTstYGTpzQnLsibVWWMGlJ2Ju4DX3wCa3pRpccKM3oTOpS6BhlgqnCGGNkxhiA6ItcXSpG1sGHIyUaqAzg2qmgut75DIWkfosKUlSnvbcCr5oU8VyH5lAaTic4Ce9K77j1px9O8eywendVgTxTe6AaomHAw4nscNV6isyWzA0uUz66mC7WIg2ef7qTeaGyvl9RZsKHgMpHn9LLcbG9LEW9RUlYuyVPkRWFPPsLJqCFIMU5l2tPxuy6MBOsKtMpyR70x5gDuWUglL76vVDOYZuWM39q1nrhDsFUn4SgEHfz5lhNiVeFqatzLNhEDYha8uuU6e1Y47eQG39FdFsTynZ5EPjJurlMTiw6OA1stuv2o3pXIwAvAuxUQ71fG03bzHVi9binBbfxAfPhkWAj4lcSe4ay06KG1IqMvOArvIQ9PvJaO15Yi3qVwQ75qjw0DeCawGXwmXD2K5m5NjQTtkhwZWsOBNXH7TjTsEbnLEP5hH8q6xFUKQWWDOEmWGz8LXIGzJZiJZSOsUOrbSsd3ED0IAEA3ozJUp1112qKweQcWgfWJzg7Nd6268KvLXEpG6WUB8YajsFAzRSRf4NOFVssCFjLBI62JqCvuDQACDH8wYizZIhobT1oy6AXNVppRQ2XbRBdEkLczXJPR6fYwQm8R4QQChObp6JH2caKSjFVjIRwP1NC5wEhBlgzPmTAunNlsSpGiuwYFoLLXdwgHrzZzVQ5ffzWCoioQj5vhQdtbIq5mqoJbXOR1hocZGB8mlr3n5eJxyxttGopTXhIcWH5QREQiceQLYwt9NigG17MewMmv6Jv2ounypGO7rolxDb59aacYwaLkdw4iBaz2EQkJy1VtdlPoS8IDyqsmhjqSwwdQDt6Xrr1t8qedc1nYMTGdRBHnosje1KFoomntMOyoYUG2VTQD7CJLSxmKwfj5gLHynkI77eKzMO20OaE3tptRbJKirPtAgmCEn37sFnk0dneQ5mNlypLNXPjtJpKuODT4m8k5rHGNBxBs83YdcrMZC6gumjgxQgFvH4fnVtkCo8YLYKQPX0bDZdvBMcLZ8uTqzX9ypTF9P5D9hhcBGbB2xJ4QZKyrvkm8GBUd8FoyLF2edSIpw8oKA4RhpUBQjglGFudzmmW4M24uabiicN5od3ZElDucuGKyRjh3GcCfiTV6WQeib8D55jF8ELTK6cbifJEROarjmTMt32GQAWdXadQxGG3uuP0RGYT5aya9IAnzXg0YgIuSLcLlNqTZFAhR5WxzbucCtsj6flz4QUcWFAe2z52gpIK5oNczJ7HgAhPTOhTiHrlcATbCQGsiuvakcNa9tGTf7lDmmIcvuLBGp4qtP6hh2tshUoFeiPyge2MAUVB4HDFiQEWm43BEtMfzPQMB1XrOXLpjhb8mqtwpGHnpwtG4T9bYjAZsOOYbSuOHHjWhhHAnfz611hjRwdSsYHyzO0C7v21YB3Y4oPXjh3xpMvadrLpkuD6cBTednaP95Wenefyw3b5PDZ8SKTX0EKRUP2ohUVwEWXYmnV9KbtJJDma7eNEZiWDFzWef2c5rwI4JkVdRgavIv9pklo8ZUEJBKDUQm5hyTJPsOZwvL4jPOp8XsCRpZQvCu1q0LIxPjzvrtEcV20ePYXgU1c3PePCpDZVU4aNl10A70Ye2g2lf9vwjLPnkkyHlXBsWvsfhDn5lUPmnmQWZ4LTYQaDAQSIOBUDIHmW84BF6jYJmoZtauXY055OFHviMxijST63oi8I01ucfKovwVcgLmNabmINdO4txTX2AMHXNnzHZvPWE6xnPrN4kRwm4j0DWnYO1L4gpzsIl9CcB3OPyezbs6G90xW62xQwpBsHbhL4CG7MM2oPZC3ahV0oiJ1ppspR45XiqxaxOXbaYtkCA6hgPw1pWvsQtXu6hQaGSZnhRImYkjt9Z2PtLEk6ekXoOPeZNpWThwRdgptSYRuzP0Mplj0xJo7kp6JdWmW2pbBrcajqRNWUHljLalExSLWH12ZNX0JWwkJwPxEzj0dvBSNH8yZRNfnKEWPvkXHWZq1lb5vMdJU5RajCWTmngjNZwhfjcgjvPGqfsGfwGFYYJbWW7i4vxvfeEUHqQhcUCha0Fg3k5vFNsL4X7fzDv8uk7CMKvIAzOEhUdhpDcB5ASZI6ckRZJs5PImEYH9WZOCk6BrR7EcIsRFibd4rLerDFtxcH2wSslxM7eBb2jYUuetC6YoVvCOE26L0E7rWgbLnunz6wWJv9QQvWCl3hMpgdBzQeqzxTmRotSdSuVFC446YCziwPP2zQ2FE4rbmDaGlG3nhD3qOTkj9mjAY2vVZxgrhZZIcVDnqZdPExD3YWUm5kc75qstVJQyjNSsXfEX9Z9dzHwuO14aULYfvzXBeCJ3DqRME7Mg246hgiqUHTi5i7lDQuphnd4AVZSzfNzvsFJL7POL1c3o4MaeCflxNErIidD7P9G9V0oneMgF7xcmTT2U6oic7IOKEUwjglkt9AMJ5eH5urx1z681FsDNDbUjaSmyfzQBLBKZEgb7No310lQdOoZSwZM3NQOtTCE1kaU96vgnLh5V278E0SABy7EGHGVmVeyCNIfxHAqZYoaE7jNEivxxinSFE6AKuEuTJhnKfY9mzog6j8U43g54VozRqX8muYiqriwBWi5OY0TgngknU8ABYVuK5RSPjezf1Q3Iqyn9sQXCfrn9RNxJs4JCEZNwREbHzXieeJJxfA7L82ZbOn4s92GGabUuMg5pEAdNxAgdOdr2FVexmVsJ3bywXk02CUFIpUAHfwqPMB5rshazTEYOyFjs6rB2O20fUAjkK5CLiHTU4dGouc6QvhOHPa3d6M7N2mNY \ No newline at end of file diff --git a/ssd_fuse_lab/nand_9 b/ssd_fuse_lab/nand_9 new file mode 100644 index 000000000..85b2bb647 --- /dev/null +++ b/ssd_fuse_lab/nand_9 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/ssd_fuse_lab/ssd_fuse.c b/ssd_fuse_lab/ssd_fuse.c new file mode 100644 index 000000000..cb4914e67 --- /dev/null +++ b/ssd_fuse_lab/ssd_fuse.c @@ -0,0 +1,459 @@ +/* + FUSE ssd: FUSE ioctl example + Copyright (C) 2008 SUSE Linux Products GmbH + Copyright (C) 2008 Tejun Heo + This program can be distributed under the terms of the GNU GPLv2. + See the file COPYING. +*/ +#define FUSE_USE_VERSION 35 +#include +#include +#include +#include +#include +#include +#include +#include +#include "ssd_fuse_header.h" +#define SSD_NAME "ssd_file" +enum +{ + SSD_NONE, + SSD_ROOT, + SSD_FILE, +}; + + +static size_t physic_size; +static size_t logic_size; +static size_t host_write_size; +static size_t nand_write_size; + +typedef union pca_rule PCA_RULE; +union pca_rule +{ + unsigned int pca; + struct + { + unsigned int lba : 16; + unsigned int nand: 16; // the physical block this pca reside in + } fields; +}; + +PCA_RULE curr_pca; +static unsigned int get_next_pca(); + +unsigned int* L2P,* P2L,* valid_count, free_block_number; +/* + L2P: logic page number to physical page number + P2L: physical page number to logic page number + valid_count: records number of programmed pages in each block +*/ + +static int ssd_resize(size_t new_size) +{ + //set logic size to new_size + if (new_size > NAND_SIZE_KB * 1024) + { + return -ENOMEM; + } + else + { + logic_size = new_size; + return 0; + } + +} + +static int ssd_expand(size_t new_size) +{ + //logic must less logic limit + + if (new_size > logic_size) + { + return ssd_resize(new_size); + } + + return 0; +} + +static int nand_read(char* buf, int pca) +{ + char nand_name[100]; + FILE* fptr; + + PCA_RULE my_pca; + my_pca.pca = pca; + snprintf(nand_name, 100, "%s/nand_%d", NAND_LOCATION, my_pca.fields.nand); + + //read + if ( (fptr = fopen(nand_name, "r") )) + { + fseek( fptr, my_pca.fields.lba * 512, SEEK_SET ); + fread(buf, 1, 512, fptr); + fclose(fptr); + } + else + { + printf("open file fail at nand read pca = %d\n", pca); + return -EINVAL; + } + return 512; +} +static int nand_write(const char* buf, int pca) +{ + char nand_name[100]; + FILE* fptr; + + PCA_RULE my_pca; + my_pca.pca = pca; + snprintf(nand_name, 100, "%s/nand_%d", NAND_LOCATION, my_pca.fields.nand); + + //write + if ( (fptr = fopen(nand_name, "r+"))) + { + fseek( fptr, my_pca.fields.lba * 512, SEEK_SET ); + fwrite(buf, 1, 512, fptr); + fclose(fptr); + physic_size ++; + valid_count[my_pca.fields.nand]++; + } + else + { + printf("open file fail at nand (%s) write pca = %d, return %d\n", nand_name, pca, -EINVAL); + return -EINVAL; + } + + nand_write_size += 512; + return 512; +} + +static int nand_erase(int block_index) +{ + char nand_name[100]; + FILE* fptr; + snprintf(nand_name, 100, "%s/nand_%d", NAND_LOCATION, block_index); + fptr = fopen(nand_name, "w"); + if (fptr == NULL) + { + printf("erase nand_%d fail", block_index); + return 0; + } + fclose(fptr); + valid_count[block_index] = FREE_BLOCK; + return 1; +} + +static unsigned int get_next_block() +{ + for (int i = 0; i < PHYSICAL_NAND_NUM; i++) // iterate through all nand(block) from current nand + { + if (valid_count[(curr_pca.fields.nand + i) % PHYSICAL_NAND_NUM] == FREE_BLOCK) + { + curr_pca.fields.nand = (curr_pca.fields.nand + i) % PHYSICAL_NAND_NUM; // get a free nand(block) + curr_pca.fields.lba = 0; + free_block_number--; + valid_count[curr_pca.fields.nand] = 0; + return curr_pca.pca; + } + } + return OUT_OF_BLOCK; +} +static unsigned int get_next_pca() +{ + if (curr_pca.pca == INVALID_PCA) + { + //init + curr_pca.pca = 0; + valid_count[0] = 0; + free_block_number--; + return curr_pca.pca; + } + + if(curr_pca.fields.lba == 9) // current physical block is full + { + int temp = get_next_block(); + if (temp == OUT_OF_BLOCK) + { + return OUT_OF_BLOCK; + } + else if(temp == -EINVAL) + { + return -EINVAL; + } + else + { + return temp; + } + } + else + { + curr_pca.fields.lba += 1; + } + return curr_pca.pca; + +} + + +static int ftl_read( char* buf, size_t lba) +{ + nand_read(buf, L2P[lba]); +} + +static int ftl_write(const char* buf, size_t lba_rnage, size_t lba) +{ + unsigned int new_pca = get_next_pca(); + // GC + if (new_pca == OUT_OF_BLOCK) { + // for (int i = 0; i < PHYSICAL_NAND_NUM; ++i) { + // int isFull = 1; + // for (int j = 0; j < PAGE_PER_BLOCK; ++j) { + // if (P2L[PHYSICAL_NAND_NUM * PAGE_PER_BLOCK + j] != INVALID_LBA) { + // isFull = 0; + // break; + // } + // } + // if (isFull) + // nand_erase(i); + // } + } + nand_write(buf, new_pca); + L2P[lba] = new_pca; +} + + + +static int ssd_file_type(const char* path) +{ + if (strcmp(path, "/") == 0) + { + return SSD_ROOT; + } + if (strcmp(path, "/" SSD_NAME) == 0) + { + return SSD_FILE; + } + return SSD_NONE; +} +static int ssd_getattr(const char* path, struct stat* stbuf, + struct fuse_file_info* fi) +{ + (void) fi; + stbuf->st_uid = getuid(); + stbuf->st_gid = getgid(); + stbuf->st_atime = stbuf->st_mtime = time(NULL); + switch (ssd_file_type(path)) + { + case SSD_ROOT: + stbuf->st_mode = S_IFDIR | 0755; + stbuf->st_nlink = 2; + break; + case SSD_FILE: + stbuf->st_mode = S_IFREG | 0644; + stbuf->st_nlink = 1; + stbuf->st_size = logic_size; + break; + case SSD_NONE: + return -ENOENT; + } + return 0; +} +static int ssd_open(const char* path, struct fuse_file_info* fi) +{ + (void) fi; + if (ssd_file_type(path) != SSD_NONE) + { + return 0; + } + return -ENOENT; +} +static int ssd_do_read(char* buf, size_t size, off_t offset) +{ + int tmp_lba, tmp_lba_range, rst ; + char* tmp_buf; + + //off limit + if ((offset ) >= logic_size) + { + return 0; + } + if ( size > logic_size - offset) + { + //is valid data section + size = logic_size - offset; + } + tmp_lba = offset / 512; // start from which page + tmp_lba_range = (offset + size - 1) / 512 - (tmp_lba) + 1; // total page count + tmp_buf = calloc(tmp_lba_range * 512, sizeof(char)); // read data into this buffer + + for (int i = 0; i < tmp_lba_range; i++) { // read full pages + ftl_read(tmp_buf + i * 512, tmp_lba + i); + } + + memcpy(buf, tmp_buf + offset % 512, size); + + + free(tmp_buf); + return size; +} +static int ssd_read(const char* path, char* buf, size_t size, + off_t offset, struct fuse_file_info* fi) +{ + (void) fi; + if (ssd_file_type(path) != SSD_FILE) + { + return -EINVAL; + } + return ssd_do_read(buf, size, offset); +} +static int ssd_do_write(const char* buf, size_t size, off_t offset) +{ + int tmp_lba, tmp_lba_range, process_size; + int idx, curr_size, remain_size, rst; + char* tmp_buf; + + host_write_size += size; + if (ssd_expand(offset + size) != 0) + { + return -ENOMEM; + } + + tmp_lba = offset / 512; + tmp_lba_range = (offset + size - 1) / 512 - (tmp_lba) + 1; + + process_size = 0; + remain_size = size; + curr_size = 0; + size_t buf_idx = 0; + tmp_buf = calloc(512, sizeof(char)); + for (idx = 0; idx < tmp_lba_range; ++idx) { + if (idx == 0 || idx == tmp_lba_range - 1) { + nand_read(tmp_buf, L2P[tmp_lba + idx]); + size_t begin = 0, end = 512; + if (idx == 0) + begin = offset % 512; + if (idx == tmp_lba_range - 1) + end = (offset + size) % 512; + if (end == 0) + end = 512; + for (int i = begin; i < end; ++i) + tmp_buf[i] = buf[buf_idx++]; + ftl_write(tmp_buf, tmp_lba_range, tmp_lba + idx); + } + else { + ftl_write(buf + buf_idx, tmp_lba_range, tmp_lba + idx); + buf_idx += 512; + } + } + free(tmp_buf); + return size; +} +static int ssd_write(const char* path, const char* buf, size_t size, + off_t offset, struct fuse_file_info* fi) +{ + + (void) fi; + if (ssd_file_type(path) != SSD_FILE) + { + return -EINVAL; + } + return ssd_do_write(buf, size, offset); +} +static int ssd_truncate(const char* path, off_t size, + struct fuse_file_info* fi) +{ + (void) fi; + memset(L2P, INVALID_PCA, sizeof(int) * LOGICAL_NAND_NUM * PAGE_PER_BLOCK); + memset(P2L, INVALID_LBA, sizeof(int) * PHYSICAL_NAND_NUM * PAGE_PER_BLOCK); + memset(valid_count, FREE_BLOCK, sizeof(int) * PHYSICAL_NAND_NUM); + curr_pca.pca = INVALID_PCA; + free_block_number = PHYSICAL_NAND_NUM; + if (ssd_file_type(path) != SSD_FILE) + { + return -EINVAL; + } + + return ssd_resize(size); +} +static int ssd_readdir(const char* path, void* buf, fuse_fill_dir_t filler, + off_t offset, struct fuse_file_info* fi, + enum fuse_readdir_flags flags) +{ + (void) fi; + (void) offset; + (void) flags; + if (ssd_file_type(path) != SSD_ROOT) + { + return -ENOENT; + } + filler(buf, ".", NULL, 0, 0); + filler(buf, "..", NULL, 0, 0); + filler(buf, SSD_NAME, NULL, 0, 0); + return 0; +} +static int ssd_ioctl(const char* path, unsigned int cmd, void* arg, + struct fuse_file_info* fi, unsigned int flags, void* data) +{ + + if (ssd_file_type(path) != SSD_FILE) + { + return -EINVAL; + } + if (flags & FUSE_IOCTL_COMPAT) + { + return -ENOSYS; + } + switch (cmd) + { + case SSD_GET_LOGIC_SIZE: + *(size_t*)data = logic_size; + return 0; + case SSD_GET_PHYSIC_SIZE: + *(size_t*)data = physic_size; + return 0; + case SSD_GET_WA: + *(double*)data = (double)nand_write_size / (double)host_write_size; + return 0; + } + return -EINVAL; +} +static const struct fuse_operations ssd_oper = +{ + .getattr = ssd_getattr, + .readdir = ssd_readdir, + .truncate = ssd_truncate, + .open = ssd_open, + .read = ssd_read, + .write = ssd_write, + .ioctl = ssd_ioctl, +}; +int main(int argc, char* argv[]) +{ + int idx; + char nand_name[100]; + physic_size = 0; + logic_size = 0; + curr_pca.pca = INVALID_PCA; + free_block_number = PHYSICAL_NAND_NUM; + + L2P = malloc(LOGICAL_NAND_NUM * PAGE_PER_BLOCK * sizeof(int)); + memset(L2P, INVALID_PCA, sizeof(int) * LOGICAL_NAND_NUM * PAGE_PER_BLOCK); + P2L = malloc(PHYSICAL_NAND_NUM * PAGE_PER_BLOCK * sizeof(int)); + memset(P2L, INVALID_LBA, sizeof(int) * PHYSICAL_NAND_NUM * PAGE_PER_BLOCK); + valid_count = malloc(PHYSICAL_NAND_NUM * sizeof(int)); + memset(valid_count, FREE_BLOCK, sizeof(int) * PHYSICAL_NAND_NUM); + + //create nand file + for (idx = 0; idx < PHYSICAL_NAND_NUM; idx++) + { + FILE* fptr; + snprintf(nand_name, 100, "%s/nand_%d", NAND_LOCATION, idx); + fptr = fopen(nand_name, "w"); + if (fptr == NULL) + { + printf("open fail"); + } + fclose(fptr); + } + return fuse_main(argc, argv, &ssd_oper, NULL); +} diff --git a/ssd_fuse_lab/ssd_fuse_dut.c b/ssd_fuse_lab/ssd_fuse_dut.c new file mode 100644 index 000000000..28e61b23f --- /dev/null +++ b/ssd_fuse_lab/ssd_fuse_dut.c @@ -0,0 +1,171 @@ +/* + FUSE ssdlient: FUSE ioctl example client + Copyright (C) 2008 SUSE Linux Products GmbH + Copyright (C) 2008 Tejun Heo + This program can be distributed under the terms of the GNU GPLv2. + See the file COPYING. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ssd_fuse_header.h" +#include +const char* usage = + "Usage: ssd_fuse SSD_FILE COMMAND\n" + "\n" + "COMMANDS\n" + " l : get logic size \n" + " p : get physical size \n" + " r SIZE [OFF] : read SIZE bytes @ OFF (dfl 0) and output to stdout\n" + " w SIZE [OFF] : write SIZE bytes @ OFF (dfl 0) from random\n" + " W : write amplification factor\n" + "\n"; +static int do_rw(FILE* fd, int is_read, size_t size, off_t offset) +{ + char* buf; + int idx; + ssize_t ret; + buf = calloc(1, size); + + if (!buf) + { + fprintf(stderr, "failed to allocated %zu bytes\n", size); + return -1; + } + if (is_read) + { + printf("dut do read size %ld, off %d\n", size, (int)offset); + fseek( fd, offset, SEEK_SET ); + ret = fread( buf, 1, size, fd); + if (ret >= 0) + { + fwrite(buf, 1, ret, stdout); + } + } + else + { + for ( idx = 0; idx < size; idx++) + { + buf[idx] = '%'; + } + printf("\n"); + printf("dut do write size %ld, off %d\n", size, (int)offset); + fseek( fd, offset, SEEK_SET ); + printf("fseek \n"); + ret = fwrite(buf, 1, size, fd); + //arg.size = fread(arg.buf, 1, size, stdin); + fprintf(stderr, "Writing %zu bytes\n", size); + } + if (ret < 0) + { + perror("ioctl"); + } + + free(buf); + return ret; +} +int main(int argc, char** argv) +{ + size_t param[2] = { }; + size_t size; + char cmd; + char* path; + FILE* fptr; + int fd, i, rc; + + if (argc < 3) + { + goto usage; + } + path = argv[1]; + cmd = tolower(argv[2][0]); + cmd = argv[2][0]; + argc -= 3; + argv += 3; + for (i = 0; i < argc; i++) + { + char* endp; + param[i] = strtoul(argv[i], &endp, 0); + if (endp == argv[i] || *endp != '\0') + { + goto usage; + } + } + switch (cmd) + { + case 'l': + fd = open(path, O_RDWR); + if (fd < 0) + { + perror("open"); + return 1; + } + if (ioctl(fd, SSD_GET_LOGIC_SIZE, &size)) + { + perror("ioctl"); + goto error; + } + printf("%zu\n", size); + close(fd); + return 0; + case 'p': + fd = open(path, O_RDWR); + if (fd < 0) + { + perror("open"); + return 1; + } + if (ioctl(fd, SSD_GET_PHYSIC_SIZE, &size)) + { + perror("ioctl"); + goto error; + } + printf("%zu\n", size); + close(fd); + return 0; + case 'r': + case 'w': + if ( !(fptr = fopen(path, "r+"))) + { + perror("open"); + return 1; + } + rc = do_rw(fptr, cmd == 'r', param[0], param[1]); + if (rc < 0) + { + goto error; + } + fprintf(stderr, "transferred %d bytes \n", rc); + + fclose(fptr); + return 0; + case 'W': + fd = open(path, O_RDWR); + if (fd < 0) + { + perror("open"); + return 1; + } + double wa; + if (ioctl(fd, SSD_GET_WA, &wa)) + { + perror("ioctl"); + goto error; + } + printf("%f\n", wa); + close(fd); + return 0; + } +usage: + fprintf(stderr, "%s", usage); + return 1; +error: + + return 1; +} \ No newline at end of file diff --git a/ssd_fuse_lab/ssd_fuse_header.h b/ssd_fuse_lab/ssd_fuse_header.h new file mode 100644 index 000000000..bde99bbd0 --- /dev/null +++ b/ssd_fuse_lab/ssd_fuse_header.h @@ -0,0 +1,27 @@ +/* + FUSE-ioctl: ioctl support for FUSE + Copyright (C) 2008 SUSE Linux Products GmbH + Copyright (C) 2008 Tejun Heo + This program can be distributed under the terms of the GNU GPLv2. + See the file COPYING. +*/ +#include +#include +#include +#define PHYSICAL_NAND_NUM (13) +#define LOGICAL_NAND_NUM (10) +#define NAND_SIZE_KB (50) // LOGICAL_NAND_NUM * PAGE_PER_BLOCK * 512(page size) +#define INVALID_PCA (0xFFFFFFFF) +#define INVALID_LBA (0xFFFFFFFF) +#define FREE_BLOCK (0xFFFFFFFF) +#define OUT_OF_BLOCK (0xFFFF) +#define FULL_PCA (0xFFFFFFFE) +#define PAGE_PER_BLOCK (10) +#define NAND_LOCATION "/home/littlelagi/ssd_fuse_lab" + +enum +{ + SSD_GET_LOGIC_SIZE = _IOR('E', 0, size_t), + SSD_GET_PHYSIC_SIZE = _IOR('E', 1, size_t), + SSD_GET_WA = _IOR('E', 2, size_t), +}; diff --git a/ssd_fuse_lab/ssd_fuse_lab.docx b/ssd_fuse_lab/ssd_fuse_lab.docx new file mode 100644 index 0000000000000000000000000000000000000000..852071cbfbaacd622ed05584b6de6532bf562b8b GIT binary patch literal 266433 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 ${GOLDEN} 2> /dev/null + ;; + "test2") + cat /dev/urandom | tr -dc '[:alpha:][:digit:]' | head -c 51200 | tee ${SSD_FILE} > ${GOLDEN} 2> /dev/null + cat /dev/urandom | tr -dc '[:alpha:][:digit:]' | head -c 11264 > ${TEMP} + for i in $(seq 0 9) + do + dd if=${TEMP} skip=$(($i*1024)) of=${GOLDEN} oflag=seek_bytes seek=$(($i*5120)) bs=1024 count=1 conv=notrunc 2> /dev/null + dd if=${TEMP} skip=$(($i*1024)) of=${SSD_FILE} oflag=seek_bytes seek=$(($i*5120)) bs=1024 count=1 conv=notrunc 2> /dev/null + done + dd if=${TEMP} skip=10240 of=${GOLDEN} oflag=seek_bytes seek=0 bs=1024 count=1 conv=notrunc 2> /dev/null + dd if=${TEMP} skip=10240 of=${SSD_FILE} oflag=seek_bytes seek=0 bs=1024 count=1 conv=notrunc 2> /dev/null + ;; + *) + printf "Usage: sh test.sh test_pattern\n" + printf "\n" + printf "test_pattern\n" + printf "test1: Sequential write whole SSD size(51200bytes)\n" + printf " test basic SSD read & write\n" + printf "test2:\n" + printf " 1: Sequential write whole SSD size(51200bytes)\n" + printf " 2: Override 0, 1, 10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 60, 61, 70, 71, 80, 81, 90, 91 page \n" + printf " 2: Override 0, 1 page \n" + printf " test GC's result\n" + return + ;; +esac + +# check +diff ${GOLDEN} ${SSD_FILE} +if [ $? -eq 0 ] +then + echo "success!" +else + echo "fail!" +fi + +echo "WA:" +./ssd_fuse_dut /tmp/ssd/ssd_file W +rm -rf ${TEMP} ${GOLDEN} \ No newline at end of file From 523cddd9a05da10b71a6cfa18934d80d15c4d5c5 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Tue, 7 Jun 2022 15:07:51 +0800 Subject: [PATCH 22/25] [Final] GC --- ssd_fuse_lab/.vscode/configurationCache.log | 2 +- ssd_fuse_lab/.vscode/dryrun.log | 4 +-- ssd_fuse_lab/.vscode/targets.log | 32 ++++++++++----------- ssd_fuse_lab/ssd_fuse.c | 14 ++------- 4 files changed, 22 insertions(+), 30 deletions(-) diff --git a/ssd_fuse_lab/.vscode/configurationCache.log b/ssd_fuse_lab/.vscode/configurationCache.log index ae3bea385..57699e11e 100644 --- a/ssd_fuse_lab/.vscode/configurationCache.log +++ b/ssd_fuse_lab/.vscode/configurationCache.log @@ -1 +1 @@ -{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/ssd_fuse_lab>ssd_fuse(-d,/tmp/ssd)","/home/littlelagi/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/ssd_fuse_lab","file":"/home/littlelagi/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/ssd_fuse_lab","file":"/home/littlelagi/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file +{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse(-d,/tmp/ssd)","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/OSC2022/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file diff --git a/ssd_fuse_lab/.vscode/dryrun.log b/ssd_fuse_lab/.vscode/dryrun.log index 877adeb0b..490299327 100644 --- a/ssd_fuse_lab/.vscode/dryrun.log +++ b/ssd_fuse_lab/.vscode/dryrun.log @@ -1,9 +1,9 @@ make --dry-run --always-make --keep-going --print-directory -make: Entering directory '/home/littlelagi/ssd_fuse_lab' +make: Entering directory '/home/littlelagi/OSC2022/ssd_fuse_lab' gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut mkdir /tmp/ssd ./ssd_fuse -d /tmp/ssd -make: Leaving directory '/home/littlelagi/ssd_fuse_lab' +make: Leaving directory '/home/littlelagi/OSC2022/ssd_fuse_lab' diff --git a/ssd_fuse_lab/.vscode/targets.log b/ssd_fuse_lab/.vscode/targets.log index 14a896a08..6ca001c1d 100644 --- a/ssd_fuse_lab/.vscode/targets.log +++ b/ssd_fuse_lab/.vscode/targets.log @@ -7,7 +7,7 @@ make all --print-data-base --no-builtin-variables --no-builtin-rules --question # There is NO WARRANTY, to the extent permitted by law. -# Make data base, printed on Mon Jun 6 19:01:49 2022 +# Make data base, printed on Tue Jun 7 14:52:38 2022 # Variables @@ -34,7 +34,7 @@ VSCODE_LOG_NATIVE = false # default MAKE_VERSION := 4.2.1 # makefile -CURDIR := /home/littlelagi/ssd_fuse_lab +CURDIR := /home/littlelagi/OSC2022/ssd_fuse_lab # makefile SHELL = /bin/sh # environment @@ -60,7 +60,7 @@ LC_NAME = lzh_TW # environment VSCODE_CWD = /home/littlelagi # environment -SSH_CONNECTION = 36.226.221.135 52822 140.113.193.201 55146 +SSH_CONNECTION = 36.226.185.218 58944 140.113.193.201 55146 # environment PATH = /home/littlelagi/.vscode-server/bin/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin # environment @@ -70,7 +70,7 @@ VSCODE_LOG_STACK = false # environment LC_NUMERIC = lzh_TW # environment -VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-bb812af5-27b7-4f77-ae03-00489175bc79.sock +VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-83f3e396-c5b2-417c-ad2b-e7e48cbe9956.sock # default .FEATURES := target-specific order-only second-expansion else-if shortest-stem undefine oneshell archives jobserver output-sync check-symlink load # environment @@ -80,7 +80,7 @@ LS_COLORS = # environment VSCODE_PIPE_LOGGING = true # environment -PWD = /home/littlelagi/ssd_fuse_lab +PWD = /home/littlelagi/OSC2022/ssd_fuse_lab # default .LOADED := # automatic @@ -110,7 +110,7 @@ MAKECMDGOALS := all # environment SHLVL = 0 # environment -XDG_SESSION_ID = 342 +XDG_SESSION_ID = 390 # environment USER = littlelagi # environment @@ -132,7 +132,7 @@ MAKEFLAGS = pqrR # environment MFLAGS = -pqrR # environment -SSH_CLIENT = 36.226.221.135 52822 55146 +SSH_CLIENT = 36.226.185.218 58944 55146 # automatic +D = $(patsubst %/,%,$(dir $+)) # environment @@ -178,9 +178,9 @@ MOTD_SHOWN = pam # Directories -# . (device 66306, inode 19267656): 30 files, no impossibilities. +# . (device 66306, inode 19408395): 26 files, no impossibilities. -# 30 files, no impossibilities in 1 directories. +# 26 files, no impossibilities in 1 directories. # Implicit Rules @@ -220,6 +220,7 @@ all: ./ssd_fuse -d /tmp/ssd # Not a target: + .SUFFIXES: # Implicit rule search has not been done. # Modification time never checked. @@ -228,7 +229,7 @@ all: # Not a target: Makefile: # Implicit rule search has been done. -# Last modified 2022-06-01 16:41:50.524616918 +# Last modified 2022-06-06 23:50:39.196410918 # File has been updated. # Successfully updated. @@ -239,7 +240,6 @@ test: # recipe to execute (from 'Makefile', line 12): ./test.sh test1 ./test.sh test2 - # Not a target: .DEFAULT: @@ -263,12 +263,12 @@ clean: # No general ('VPATH' variable) search path. -# strcache buffers: 1 (0) / strings = 37 / storage = 330 B / avg = 8 B -# current buf: size = 8162 B / used = 330 B / count = 37 / avg = 8 B +# strcache buffers: 1 (0) / strings = 33 / storage = 294 B / avg = 8 B +# current buf: size = 8162 B / used = 294 B / count = 33 / avg = 8 B -# strcache performance: lookups = 46 / hit rate = 19% +# strcache performance: lookups = 42 / hit rate = 21% # hash-table stats: -# Load=37/8192=0%, Rehash=0, Collisions=1/46=2% -# Finished Make data base on Mon Jun 6 19:01:49 2022 +# Load=33/8192=0%, Rehash=0, Collisions=1/42=2% +# Finished Make data base on Tue Jun 7 14:52:38 2022 diff --git a/ssd_fuse_lab/ssd_fuse.c b/ssd_fuse_lab/ssd_fuse.c index cb4914e67..d82afefd7 100644 --- a/ssd_fuse_lab/ssd_fuse.c +++ b/ssd_fuse_lab/ssd_fuse.c @@ -205,19 +205,11 @@ static int ftl_write(const char* buf, size_t lba_rnage, size_t lba) unsigned int new_pca = get_next_pca(); // GC if (new_pca == OUT_OF_BLOCK) { - // for (int i = 0; i < PHYSICAL_NAND_NUM; ++i) { - // int isFull = 1; - // for (int j = 0; j < PAGE_PER_BLOCK; ++j) { - // if (P2L[PHYSICAL_NAND_NUM * PAGE_PER_BLOCK + j] != INVALID_LBA) { - // isFull = 0; - // break; - // } - // } - // if (isFull) - // nand_erase(i); - // } + nand_erase((curr_pca.fields.nand + 1) % PHYSICAL_NAND_NUM); + new_pca = get_next_pca(); } nand_write(buf, new_pca); + printf("%d\n", new_pca); L2P[lba] = new_pca; } From 07f82667541024c198aa24a28e20d6610675b43e Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Wed, 15 Jun 2022 00:23:51 +0800 Subject: [PATCH 23/25] [final] fix GC --- ssd_fuse_lab/.vscode/dryrun.log | 1 - ssd_fuse_lab/.vscode/targets.log | 21 ++++++----- ssd_fuse_lab/ssd_fuse.c | 62 ++++++++++++++++++++++++++------ ssd_fuse_lab/ssd_fuse_header.h | 2 ++ ssd_fuse_lab/test.sh | 8 ++--- 5 files changed, 68 insertions(+), 26 deletions(-) diff --git a/ssd_fuse_lab/.vscode/dryrun.log b/ssd_fuse_lab/.vscode/dryrun.log index 490299327..787e9e949 100644 --- a/ssd_fuse_lab/.vscode/dryrun.log +++ b/ssd_fuse_lab/.vscode/dryrun.log @@ -4,6 +4,5 @@ gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 - gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut mkdir /tmp/ssd ./ssd_fuse -d /tmp/ssd - make: Leaving directory '/home/littlelagi/OSC2022/ssd_fuse_lab' diff --git a/ssd_fuse_lab/.vscode/targets.log b/ssd_fuse_lab/.vscode/targets.log index 6ca001c1d..2f90b3080 100644 --- a/ssd_fuse_lab/.vscode/targets.log +++ b/ssd_fuse_lab/.vscode/targets.log @@ -5,9 +5,8 @@ make all --print-data-base --no-builtin-variables --no-builtin-rules --question # License GPLv3+: GNU GPL version 3 or later # This is free software: you are free to change and redistribute it. # There is NO WARRANTY, to the extent permitted by law. - -# Make data base, printed on Tue Jun 7 14:52:38 2022 +# Make data base, printed on Tue Jun 14 23:13:51 2022 # Variables @@ -40,7 +39,7 @@ SHELL = /bin/sh # environment VSCODE_NLS_CONFIG = {"locale":"en","availableLanguages":{}} # environment -_ = /home/littlelagi/.vscode-server/bin/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/node +_ = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/node # makefile (from 'Makefile', line 1) MAKEFILE_LIST := Makefile # 'override' directive @@ -60,17 +59,18 @@ LC_NAME = lzh_TW # environment VSCODE_CWD = /home/littlelagi # environment -SSH_CONNECTION = 36.226.185.218 58944 140.113.193.201 55146 +SSH_CONNECTION = 36.226.189.208 52951 140.113.193.201 55146 # environment -PATH = /home/littlelagi/.vscode-server/bin/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +PATH = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin # environment + XDG_RUNTIME_DIR = /run/user/1000 # environment VSCODE_LOG_STACK = false # environment LC_NUMERIC = lzh_TW # environment -VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-83f3e396-c5b2-417c-ad2b-e7e48cbe9956.sock +VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-77a2fffd-a319-42bf-837f-844f4baa894f.sock # default .FEATURES := target-specific order-only second-expansion else-if shortest-stem undefine oneshell archives jobserver output-sync check-symlink load # environment @@ -110,7 +110,7 @@ MAKECMDGOALS := all # environment SHLVL = 0 # environment -XDG_SESSION_ID = 390 +XDG_SESSION_ID = 760 # environment USER = littlelagi # environment @@ -132,11 +132,11 @@ MAKEFLAGS = pqrR # environment MFLAGS = -pqrR # environment -SSH_CLIENT = 36.226.185.218 58944 55146 +SSH_CLIENT = 36.226.189.208 52951 55146 # automatic +D = $(patsubst %/,%,$(dir $+)) # environment -BROWSER = /home/littlelagi/.vscode-server/bin/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/bin/helpers/browser.sh +BROWSER = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/bin/helpers/browser.sh # environment VSCODE_HANDLES_SIGPIPE = true # default @@ -220,7 +220,6 @@ all: ./ssd_fuse -d /tmp/ssd # Not a target: - .SUFFIXES: # Implicit rule search has not been done. # Modification time never checked. @@ -269,6 +268,6 @@ clean: # strcache performance: lookups = 42 / hit rate = 21% # hash-table stats: # Load=33/8192=0%, Rehash=0, Collisions=1/42=2% -# Finished Make data base on Tue Jun 7 14:52:38 2022 +# Finished Make data base on Tue Jun 14 23:13:51 2022 diff --git a/ssd_fuse_lab/ssd_fuse.c b/ssd_fuse_lab/ssd_fuse.c index d82afefd7..4fcff5518 100644 --- a/ssd_fuse_lab/ssd_fuse.c +++ b/ssd_fuse_lab/ssd_fuse.c @@ -42,8 +42,9 @@ union pca_rule PCA_RULE curr_pca; static unsigned int get_next_pca(); +void GC(); -unsigned int* L2P,* P2L,* valid_count, free_block_number; +unsigned int* L2P,* P2L,* valid_count, free_block_number,* pca_status; /* L2P: logic page number to physical page number P2L: physical page number to logic page number @@ -173,6 +174,10 @@ static unsigned int get_next_pca() if(curr_pca.fields.lba == 9) // current physical block is full { int temp = get_next_block(); + if (free_block_number == 1) { + GC(); + return curr_pca.pca; + } if (temp == OUT_OF_BLOCK) { return OUT_OF_BLOCK; @@ -202,15 +207,20 @@ static int ftl_read( char* buf, size_t lba) static int ftl_write(const char* buf, size_t lba_rnage, size_t lba) { - unsigned int new_pca = get_next_pca(); - // GC - if (new_pca == OUT_OF_BLOCK) { - nand_erase((curr_pca.fields.nand + 1) % PHYSICAL_NAND_NUM); - new_pca = get_next_pca(); - } - nand_write(buf, new_pca); - printf("%d\n", new_pca); - L2P[lba] = new_pca; + unsigned int pca = get_next_pca(); + nand_write(buf, pca); + if (L2P[lba] != INVALID_PCA) { + PCA_RULE old_pca; + old_pca.pca = L2P[lba]; + unsigned int old_pca_idx = old_pca.fields.nand * PAGE_PER_BLOCK + old_pca.fields.lba; + pca_status[old_pca_idx] = STALE_PCA; + } + PCA_RULE new_pca; + new_pca.pca = pca; + unsigned int new_pca_idx = new_pca.fields.nand * PAGE_PER_BLOCK + new_pca.fields.lba; + P2L[new_pca_idx] = lba; + L2P[lba] = pca; + pca_status[new_pca_idx] = VALID_PCA; } @@ -409,6 +419,36 @@ static int ssd_ioctl(const char* path, unsigned int cmd, void* arg, } return -EINVAL; } + +void GC() { + printf("-----------------------------------------\n"); + unsigned int min_valid_count = PAGE_PER_BLOCK, victim = 0; + for (int i = PHYSICAL_NAND_NUM - 1; i >= 0; --i) { + if (valid_count[i] < min_valid_count) { + min_valid_count = valid_count[i]; + victim = i; + } + } + if (valid_count[victim] != 0) { + for (int j = victim; j < victim + PAGE_PER_BLOCK; ++j) { + if (pca_status[j] == VALID_PCA) { + char *buffer[512]; + ftl_read(buffer, P2L[j]); + nand_write(buffer, curr_pca.pca); + L2P[P2L[j]] = curr_pca.pca; + P2L[curr_pca.fields.nand * PAGE_PER_BLOCK + curr_pca.fields.lba] = P2L[j]; + P2L[j] = INVALID_LBA; + pca_status[j] = STALE_PCA; + pca_status[curr_pca.fields.nand * PAGE_PER_BLOCK + curr_pca.fields.lba] = VALID_PCA; + valid_count[curr_pca.fields.nand] += 1; + curr_pca.fields.lba += 1; + } + } + } + valid_count[victim] = 0; + nand_erase(victim); +} + static const struct fuse_operations ssd_oper = { .getattr = ssd_getattr, @@ -434,6 +474,8 @@ int main(int argc, char* argv[]) memset(P2L, INVALID_LBA, sizeof(int) * PHYSICAL_NAND_NUM * PAGE_PER_BLOCK); valid_count = malloc(PHYSICAL_NAND_NUM * sizeof(int)); memset(valid_count, FREE_BLOCK, sizeof(int) * PHYSICAL_NAND_NUM); + pca_status = malloc(PHYSICAL_NAND_NUM * PAGE_PER_BLOCK * sizeof(int)); + memset(pca_status, INVALID_PCA, sizeof(int) * PHYSICAL_NAND_NUM * PAGE_PER_BLOCK); //create nand file for (idx = 0; idx < PHYSICAL_NAND_NUM; idx++) diff --git a/ssd_fuse_lab/ssd_fuse_header.h b/ssd_fuse_lab/ssd_fuse_header.h index bde99bbd0..3634df011 100644 --- a/ssd_fuse_lab/ssd_fuse_header.h +++ b/ssd_fuse_lab/ssd_fuse_header.h @@ -12,6 +12,8 @@ #define LOGICAL_NAND_NUM (10) #define NAND_SIZE_KB (50) // LOGICAL_NAND_NUM * PAGE_PER_BLOCK * 512(page size) #define INVALID_PCA (0xFFFFFFFF) +#define VALID_PCA (0xFFFFFFF0) +#define STALE_PCA (0xFFFFFF00) #define INVALID_LBA (0xFFFFFFFF) #define FREE_BLOCK (0xFFFFFFFF) #define OUT_OF_BLOCK (0xFFFF) diff --git a/ssd_fuse_lab/test.sh b/ssd_fuse_lab/test.sh index 594f76a40..a27bb6440 100755 --- a/ssd_fuse_lab/test.sh +++ b/ssd_fuse_lab/test.sh @@ -23,11 +23,11 @@ case "$1" in cat /dev/urandom | tr -dc '[:alpha:][:digit:]' | head -c 11264 > ${TEMP} for i in $(seq 0 9) do - dd if=${TEMP} skip=$(($i*1024)) of=${GOLDEN} oflag=seek_bytes seek=$(($i*5120)) bs=1024 count=1 conv=notrunc 2> /dev/null - dd if=${TEMP} skip=$(($i*1024)) of=${SSD_FILE} oflag=seek_bytes seek=$(($i*5120)) bs=1024 count=1 conv=notrunc 2> /dev/null + dd if=${TEMP} skip=$(($i*1024)) of=${GOLDEN} iflag=skip_bytes oflag=seek_bytes seek=$(($i*5120)) bs=1024 count=1 conv=notrunc 2> /dev/null + dd if=${TEMP} skip=$(($i*1024)) of=${SSD_FILE} iflag=skip_bytes oflag=seek_bytes seek=$(($i*5120)) bs=1024 count=1 conv=notrunc 2> /dev/null done - dd if=${TEMP} skip=10240 of=${GOLDEN} oflag=seek_bytes seek=0 bs=1024 count=1 conv=notrunc 2> /dev/null - dd if=${TEMP} skip=10240 of=${SSD_FILE} oflag=seek_bytes seek=0 bs=1024 count=1 conv=notrunc 2> /dev/null + dd if=${TEMP} skip=10240 of=${GOLDEN} iflag=skip_bytes oflag=seek_bytes seek=0 bs=1024 count=1 conv=notrunc 2> /dev/null + dd if=${TEMP} skip=10240 of=${SSD_FILE} iflag=skip_bytes oflag=seek_bytes seek=0 bs=1024 count=1 conv=notrunc 2> /dev/null ;; *) printf "Usage: sh test.sh test_pattern\n" From 339b2bd2daa1818b30b35f07650bb32b8178770e Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Wed, 15 Jun 2022 12:02:25 +0800 Subject: [PATCH 24/25] [final] fix GC --- ssd_fuse_lab/.vscode/configurationCache.log | 2 +- ssd_fuse_lab/.vscode/targets.log | 27 +++++++++++---------- ssd_fuse_lab/ssd_fuse.c | 12 ++++----- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/ssd_fuse_lab/.vscode/configurationCache.log b/ssd_fuse_lab/.vscode/configurationCache.log index 57699e11e..1b7b19e75 100644 --- a/ssd_fuse_lab/.vscode/configurationCache.log +++ b/ssd_fuse_lab/.vscode/configurationCache.log @@ -1 +1 @@ -{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse(-d,/tmp/ssd)","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/OSC2022/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file +{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/OSC2022/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file diff --git a/ssd_fuse_lab/.vscode/targets.log b/ssd_fuse_lab/.vscode/targets.log index 2f90b3080..b5af81feb 100644 --- a/ssd_fuse_lab/.vscode/targets.log +++ b/ssd_fuse_lab/.vscode/targets.log @@ -5,8 +5,9 @@ make all --print-data-base --no-builtin-variables --no-builtin-rules --question # License GPLv3+: GNU GPL version 3 or later # This is free software: you are free to change and redistribute it. # There is NO WARRANTY, to the extent permitted by law. + -# Make data base, printed on Tue Jun 14 23:13:51 2022 +# Make data base, printed on Wed Jun 15 11:08:34 2022 # Variables @@ -59,18 +60,17 @@ LC_NAME = lzh_TW # environment VSCODE_CWD = /home/littlelagi # environment -SSH_CONNECTION = 36.226.189.208 52951 140.113.193.201 55146 +SSH_CONNECTION = 36.226.221.67 58665 140.113.193.201 55146 # environment PATH = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin # environment - XDG_RUNTIME_DIR = /run/user/1000 # environment VSCODE_LOG_STACK = false # environment LC_NUMERIC = lzh_TW # environment -VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-77a2fffd-a319-42bf-837f-844f4baa894f.sock +VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-f1f70655-34ba-4d0e-a3bf-596f8f3e4fc1.sock # default .FEATURES := target-specific order-only second-expansion else-if shortest-stem undefine oneshell archives jobserver output-sync check-symlink load # environment @@ -110,7 +110,7 @@ MAKECMDGOALS := all # environment SHLVL = 0 # environment -XDG_SESSION_ID = 760 +XDG_SESSION_ID = 810 # environment USER = littlelagi # environment @@ -132,7 +132,7 @@ MAKEFLAGS = pqrR # environment MFLAGS = -pqrR # environment -SSH_CLIENT = 36.226.189.208 52951 55146 +SSH_CLIENT = 36.226.221.67 58665 55146 # automatic +D = $(patsubst %/,%,$(dir $+)) # environment @@ -178,9 +178,9 @@ MOTD_SHOWN = pam # Directories -# . (device 66306, inode 19408395): 26 files, no impossibilities. +# . (device 66306, inode 19408395): 24 files, no impossibilities. -# 26 files, no impossibilities in 1 directories. +# 24 files, no impossibilities in 1 directories. # Implicit Rules @@ -252,6 +252,7 @@ clean: # File has not been updated. # recipe to execute (from 'Makefile', line 8): fusermount -u /tmp/ssd + rm -rf /tmp/ssd ssd_fuse ssd_fuse_dut # files hash-table stats: @@ -262,12 +263,12 @@ clean: # No general ('VPATH' variable) search path. -# strcache buffers: 1 (0) / strings = 33 / storage = 294 B / avg = 8 B -# current buf: size = 8162 B / used = 294 B / count = 33 / avg = 8 B +# strcache buffers: 1 (0) / strings = 31 / storage = 272 B / avg = 8 B +# current buf: size = 8162 B / used = 272 B / count = 31 / avg = 8 B -# strcache performance: lookups = 42 / hit rate = 21% +# strcache performance: lookups = 40 / hit rate = 22% # hash-table stats: -# Load=33/8192=0%, Rehash=0, Collisions=1/42=2% -# Finished Make data base on Tue Jun 14 23:13:51 2022 +# Load=31/8192=0%, Rehash=0, Collisions=1/40=2% +# Finished Make data base on Wed Jun 15 11:08:34 2022 diff --git a/ssd_fuse_lab/ssd_fuse.c b/ssd_fuse_lab/ssd_fuse.c index 4fcff5518..134ff13a8 100644 --- a/ssd_fuse_lab/ssd_fuse.c +++ b/ssd_fuse_lab/ssd_fuse.c @@ -174,7 +174,7 @@ static unsigned int get_next_pca() if(curr_pca.fields.lba == 9) // current physical block is full { int temp = get_next_block(); - if (free_block_number == 1) { + if (free_block_number == 0) { GC(); return curr_pca.pca; } @@ -421,12 +421,12 @@ static int ssd_ioctl(const char* path, unsigned int cmd, void* arg, } void GC() { - printf("-----------------------------------------\n"); unsigned int min_valid_count = PAGE_PER_BLOCK, victim = 0; - for (int i = PHYSICAL_NAND_NUM - 1; i >= 0; --i) { - if (valid_count[i] < min_valid_count) { - min_valid_count = valid_count[i]; - victim = i; + for (int i = 1; i < PHYSICAL_NAND_NUM; ++i) { + int idx = (curr_pca.fields.nand + i) % PHYSICAL_NAND_NUM; + if (valid_count[idx] < min_valid_count) { + min_valid_count = valid_count[idx]; + victim = idx; } } if (valid_count[victim] != 0) { From b99f65cc42280b11b62ae44ffadf379d38048569 Mon Sep 17 00:00:00 2001 From: LittleLaGi Date: Mon, 20 Jun 2022 14:01:35 +0800 Subject: [PATCH 25/25] [final] pass new test_case --- ssd_fuse_lab/.vscode/configurationCache.log | 2 +- ssd_fuse_lab/.vscode/targets.log | 33 ++++++++++---------- ssd_fuse_lab/ssd_fuse.c | 27 ++++++++-------- ssd_fuse_lab/test_case | Bin 0 -> 811648 bytes ssd_fuse_lab/test_case_x86_64 | Bin 0 -> 805648 bytes 5 files changed, 30 insertions(+), 32 deletions(-) create mode 100755 ssd_fuse_lab/test_case create mode 100755 ssd_fuse_lab/test_case_x86_64 diff --git a/ssd_fuse_lab/.vscode/configurationCache.log b/ssd_fuse_lab/.vscode/configurationCache.log index 1b7b19e75..57699e11e 100644 --- a/ssd_fuse_lab/.vscode/configurationCache.log +++ b/ssd_fuse_lab/.vscode/configurationCache.log @@ -1 +1 @@ -{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/OSC2022/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file +{"buildTargets":["all","clean","test"],"launchTargets":["/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse()","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse(-d,/tmp/ssd)","/home/littlelagi/OSC2022/ssd_fuse_lab>ssd_fuse_dut()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/home/littlelagi/OSC2022/ssd_fuse_lab"],"compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"compilerPath":"/usr/bin/gcc","standard":"c11","windowsSdkVersion":""},"fileIndex":[["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c","scheme":"file"},"configuration":{"defines":["_FILE_OFFSET_BITS=64"],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse.c","-I/usr/include/fuse3","-lfuse3","-lpthread","-o","ssd_fuse"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse.c `pkg-config fuse3 --cflags --libs` -D_FILE_OFFSET_BITS=64 -o ssd_fuse","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse.c"}}],["/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c",{"uri":{"$mid":1,"fsPath":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","path":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c","scheme":"file"},"configuration":{"defines":[],"standard":"c11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/gcc","compilerArgs":["-Wall","ssd_fuse_dut.c","-o","ssd_fuse_dut"],"windowsSdkVersion":""},"compileCommand":{"command":"gcc -Wall ssd_fuse_dut.c -o ssd_fuse_dut","directory":"/home/littlelagi/OSC2022/ssd_fuse_lab","file":"/home/littlelagi/OSC2022/ssd_fuse_lab/ssd_fuse_dut.c"}}]]}} \ No newline at end of file diff --git a/ssd_fuse_lab/.vscode/targets.log b/ssd_fuse_lab/.vscode/targets.log index b5af81feb..eb83400c6 100644 --- a/ssd_fuse_lab/.vscode/targets.log +++ b/ssd_fuse_lab/.vscode/targets.log @@ -5,9 +5,8 @@ make all --print-data-base --no-builtin-variables --no-builtin-rules --question # License GPLv3+: GNU GPL version 3 or later # This is free software: you are free to change and redistribute it. # There is NO WARRANTY, to the extent permitted by law. - -# Make data base, printed on Wed Jun 15 11:08:34 2022 +# Make data base, printed on Sat Jun 18 14:26:28 2022 # Variables @@ -40,7 +39,7 @@ SHELL = /bin/sh # environment VSCODE_NLS_CONFIG = {"locale":"en","availableLanguages":{}} # environment -_ = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/node +_ = /home/littlelagi/.vscode-server/bin/30d9c6cd9483b2cc586687151bcbcd635f373630/node # makefile (from 'Makefile', line 1) MAKEFILE_LIST := Makefile # 'override' directive @@ -60,9 +59,10 @@ LC_NAME = lzh_TW # environment VSCODE_CWD = /home/littlelagi # environment -SSH_CONNECTION = 36.226.221.67 58665 140.113.193.201 55146 +SSH_CONNECTION = 36.226.217.200 60720 140.113.193.201 55146 # environment -PATH = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin + +PATH = /home/littlelagi/.vscode-server/bin/30d9c6cd9483b2cc586687151bcbcd635f373630/bin/remote-cli:/home/littlelagi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin # environment XDG_RUNTIME_DIR = /run/user/1000 # environment @@ -70,7 +70,7 @@ VSCODE_LOG_STACK = false # environment LC_NUMERIC = lzh_TW # environment -VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-f1f70655-34ba-4d0e-a3bf-596f8f3e4fc1.sock +VSCODE_IPC_HOOK_CLI = /run/user/1000/vscode-ipc-38722724-0c4d-43c8-9a86-8e860dcea433.sock # default .FEATURES := target-specific order-only second-expansion else-if shortest-stem undefine oneshell archives jobserver output-sync check-symlink load # environment @@ -110,7 +110,7 @@ MAKECMDGOALS := all # environment SHLVL = 0 # environment -XDG_SESSION_ID = 810 +XDG_SESSION_ID = 954 # environment USER = littlelagi # environment @@ -132,11 +132,11 @@ MAKEFLAGS = pqrR # environment MFLAGS = -pqrR # environment -SSH_CLIENT = 36.226.221.67 58665 55146 +SSH_CLIENT = 36.226.217.200 60720 55146 # automatic +D = $(patsubst %/,%,$(dir $+)) # environment -BROWSER = /home/littlelagi/.vscode-server/bin/4af164ea3a06f701fe3e89a2bcbb421d2026b68f/bin/helpers/browser.sh +BROWSER = /home/littlelagi/.vscode-server/bin/30d9c6cd9483b2cc586687151bcbcd635f373630/bin/helpers/browser.sh # environment VSCODE_HANDLES_SIGPIPE = true # default @@ -178,9 +178,9 @@ MOTD_SHOWN = pam # Directories -# . (device 66306, inode 19408395): 24 files, no impossibilities. +# . (device 66306, inode 19408395): 28 files, no impossibilities. -# 24 files, no impossibilities in 1 directories. +# 28 files, no impossibilities in 1 directories. # Implicit Rules @@ -252,7 +252,6 @@ clean: # File has not been updated. # recipe to execute (from 'Makefile', line 8): fusermount -u /tmp/ssd - rm -rf /tmp/ssd ssd_fuse ssd_fuse_dut # files hash-table stats: @@ -263,12 +262,12 @@ clean: # No general ('VPATH' variable) search path. -# strcache buffers: 1 (0) / strings = 31 / storage = 272 B / avg = 8 B -# current buf: size = 8162 B / used = 272 B / count = 31 / avg = 8 B +# strcache buffers: 1 (0) / strings = 35 / storage = 321 B / avg = 9 B +# current buf: size = 8162 B / used = 321 B / count = 35 / avg = 9 B -# strcache performance: lookups = 40 / hit rate = 22% +# strcache performance: lookups = 44 / hit rate = 20% # hash-table stats: -# Load=31/8192=0%, Rehash=0, Collisions=1/40=2% -# Finished Make data base on Wed Jun 15 11:08:34 2022 +# Load=35/8192=0%, Rehash=0, Collisions=1/44=2% +# Finished Make data base on Sat Jun 18 14:26:28 2022 diff --git a/ssd_fuse_lab/ssd_fuse.c b/ssd_fuse_lab/ssd_fuse.c index 134ff13a8..11054ac44 100644 --- a/ssd_fuse_lab/ssd_fuse.c +++ b/ssd_fuse_lab/ssd_fuse.c @@ -142,6 +142,7 @@ static int nand_erase(int block_index) } fclose(fptr); valid_count[block_index] = FREE_BLOCK; + free_block_number += 1; return 1; } @@ -202,18 +203,20 @@ static unsigned int get_next_pca() static int ftl_read( char* buf, size_t lba) { - nand_read(buf, L2P[lba]); + return nand_read(buf, L2P[lba]); } static int ftl_write(const char* buf, size_t lba_rnage, size_t lba) { unsigned int pca = get_next_pca(); - nand_write(buf, pca); + int ret = nand_write(buf, pca); if (L2P[lba] != INVALID_PCA) { PCA_RULE old_pca; old_pca.pca = L2P[lba]; unsigned int old_pca_idx = old_pca.fields.nand * PAGE_PER_BLOCK + old_pca.fields.lba; pca_status[old_pca_idx] = STALE_PCA; + P2L[old_pca_idx] = INVALID_LBA; + valid_count[old_pca.fields.nand] -= 1; } PCA_RULE new_pca; new_pca.pca = pca; @@ -221,6 +224,7 @@ static int ftl_write(const char* buf, size_t lba_rnage, size_t lba) P2L[new_pca_idx] = lba; L2P[lba] = pca; pca_status[new_pca_idx] = VALID_PCA; + return ret; } @@ -271,7 +275,7 @@ static int ssd_open(const char* path, struct fuse_file_info* fi) } static int ssd_do_read(char* buf, size_t size, off_t offset) { - int tmp_lba, tmp_lba_range, rst ; + int tmp_lba, tmp_lba_range; char* tmp_buf; //off limit @@ -310,8 +314,8 @@ static int ssd_read(const char* path, char* buf, size_t size, } static int ssd_do_write(const char* buf, size_t size, off_t offset) { - int tmp_lba, tmp_lba_range, process_size; - int idx, curr_size, remain_size, rst; + int tmp_lba, tmp_lba_range; + int idx; char* tmp_buf; host_write_size += size; @@ -323,9 +327,6 @@ static int ssd_do_write(const char* buf, size_t size, off_t offset) tmp_lba = offset / 512; tmp_lba_range = (offset + size - 1) / 512 - (tmp_lba) + 1; - process_size = 0; - remain_size = size; - curr_size = 0; size_t buf_idx = 0; tmp_buf = calloc(512, sizeof(char)); for (idx = 0; idx < tmp_lba_range; ++idx) { @@ -421,18 +422,18 @@ static int ssd_ioctl(const char* path, unsigned int cmd, void* arg, } void GC() { - unsigned int min_valid_count = PAGE_PER_BLOCK, victim = 0; + unsigned int min_valid_count = PAGE_PER_BLOCK + 1, victim = 0; for (int i = 1; i < PHYSICAL_NAND_NUM; ++i) { int idx = (curr_pca.fields.nand + i) % PHYSICAL_NAND_NUM; - if (valid_count[idx] < min_valid_count) { + if (valid_count[idx] < min_valid_count && valid_count[idx] != FREE_BLOCK) { min_valid_count = valid_count[idx]; victim = idx; } } if (valid_count[victim] != 0) { - for (int j = victim; j < victim + PAGE_PER_BLOCK; ++j) { + for (int j = victim * PAGE_PER_BLOCK; j < (victim + 1) * PAGE_PER_BLOCK; ++j) { if (pca_status[j] == VALID_PCA) { - char *buffer[512]; + char buffer[512]; ftl_read(buffer, P2L[j]); nand_write(buffer, curr_pca.pca); L2P[P2L[j]] = curr_pca.pca; @@ -440,12 +441,10 @@ void GC() { P2L[j] = INVALID_LBA; pca_status[j] = STALE_PCA; pca_status[curr_pca.fields.nand * PAGE_PER_BLOCK + curr_pca.fields.lba] = VALID_PCA; - valid_count[curr_pca.fields.nand] += 1; curr_pca.fields.lba += 1; } } } - valid_count[victim] = 0; nand_erase(victim); } diff --git a/ssd_fuse_lab/test_case b/ssd_fuse_lab/test_case new file mode 100755 index 0000000000000000000000000000000000000000..805b281334904bcd5da1b0ed64a8c82f5c23bdb7 GIT binary patch literal 811648 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

GlQ@JNopgGqXY$6EBCc6dCFFyNuH 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�FDuoZFRkqp4MvP?AScokEFy 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∓skgF+MJybFI;95w7?`K@qWY zd^U-M{_G{LP1S3uCuHG9hs)X6o=?;B%k|JL9GB20P^4~nM)ANQc<-At@{`9?niw7U z;Y5z+E1X*(GPc6(>PfX=GrK8$b91ItxN_ikkr#?>&^8N5$oIaQ$CSYTt@SM6rNw_H z_;WgRdJ>>hzisyXx~EzkHN0`wSagZtqj|p2Flz8oypi2FdN+@oJyY!R_0m%Pd|5{B zblLDEnUzbp%uZd-J6V73WI1%ER8h&NApy1iWZO+vFmDh?A%)1#$$G9xhD7=y4vZX+ zGq_UHwFo7J$OGR4fwR%>dltOwg`x%@3>h)?e}zO>`)sPMnX0I^fflVZpAmfmbDfk- zq@ut0S6r54<8QI1kPjre2?){u!LYfL2ZJT*NT-eyn5u}EQ?AwRP9n|OmMiiimXI4d zDM+>xhDG;J(Iv969GY1+N0ZUnx_+N5hbT|vS;ZzbKI?wSTl)S_@TBl6K6A-O6(6~b zH6Xq`74J?{l358Ny@#afawZ{(x^|0(Y~xh+FpGTb3)&d+tuI)0gyH5 zX_$4q+k5i*ulDQ7_Ukj{bx&UVYSzds!dv@whT$|BQNp_WUSR0Xt8~He-7;Ygpk3@j z6Q$5~aFg_SZGFRnd?6DRSMgGi7CJ{aujkmmph!T;KEu}GS=mSzyySE;;dQufjo_>8 zSaJ1>q%h~%82%z)KA<$`2qU2$l1O2^PQH6|&h7VpvWaD08R8q%O4!Crx%3fxe5KOp z$re6!x?~FEbb;Lt-RSO}+R9DV79c0wRS+)&9_>Q(-?x@U8bhIRDfrXfqIZ$2G;U3H zrLb)Q&jZgDzeVXr*>cSC6oSGBrI`1?)ZLr~I612%1~sa#T&vjyyX3ma>|hSMT)MzA z2AcDT2;o7zmD&{xd7(vT08_nZ8sFX0lv+6*?L{H{F_d6(e<_4NM5>Zk9=d^i%J{In ze}VAR^PwAq%A~)HmNE_)QizGC>|4wX4<)Nr-viVVEj%f^<6BB+B>VJ0>obyG1bHVed zoGOxjg66!p=t$JaDkmhegU|Z~i4tYSO{(|Rl;^mRA67GtHd*!fMXc9Pxlh<|(7RWQ z7ErD}C)@3-&%q_foF`|7hIsPG9V<;uQt!EQ4}BO*+_4ryUJfr={Q*Eh$dd_x3nBN0Sy{LJ zsinCD?SHyeU!I zU(0ht!Di22k5(e=lMqTE@}lr$_{$ai5`yFYjvWkVWMks;D&oH3H%UIbPvn@-1Jl2P z^Hoe_0UWIe2a)fqiHoFDR8DBqggY{^me6Oderii)4{F?GUz;FSx3FP4ofF&{xkIoh#&6r5BTxcxk8CgLEVvfb|nH7Tc zsFw$n!6XBF!aaXDY;<4KV5W~MrAL3u3MPHYW8~k$8;VDD@h9h7?9vamP zgXS1K(NZT%|0J6T9T~*N2foh*3x{pxs>suyBWpD1ocy{*Rx7aRUpxfuvN}Gq>d37( z}r-3`)Y_yv(#wX{P=1sc>t>G9C%Tu>$?K0Cn}U(#X+={izTt|^Kd zi^f4W6`xOji&WKdzFMq(mt~2*!DlEWLbifdJ$nq);a~0`Az(bHo@T70S#;o2>bvAq zoHS5HbY@71D#DQ1RcwZoyb%!^?>WUSg!)!klm1g_ykzQ>#>>Cls^rlUv$|HcD`6mt z9ye(*7Xz5=T!2G-ESFji+l4i=7r4U5=%%Og2y|h*I7^RUjMSeQUqKhOYA*~vDKp-; zH$|LgYiV|cm=MQ`Xcs!U;ZaduX4F}ZS#f4zzjvKBe<`XN&VD{LarOQcC=ZK|#c~bN z^H}0bgqP`V0!;WDWeT`Y+`)HS^fT6{dI;Wy$r1LBhz}pyMU5^X&ICy{vtuqTHczeJ7VGDT2sN|kvl?_MX3rp`3cqxo_pzU2 z@;sQ%s$?O+DjJ5N24GB&J^^ti&y_Qy`JxD~*1U)1@d}jJZ3Ed~h2uuy0 zA|RK4$zfDsY|CX1T5cf}uUoi+Sxxne$1!`MIu;@p4eL?_4oDPnI8paL8?i z$X*R(1LmLN?u_V$tKBJdmhC61b;21E)=_g|P!~w&=Ai4IW~A64oRqL|URiTBppTnFS3ebs&PI|VQL;P&(Dxk9g!i_Pt$+O^NoP#)+4&e~Z#b@BO zMXE8Qx>g{N-p%Sp`sCPD2ODZkx`g$C=%A_R`?%{ino@<;W}moDb)w?rz1%!cNfx1# z(849cACVL{H~A7XrHt$p>r0-%PlggN$i<}oJv0eSM&4^q#c((8o1rceAt~=Gbacp@ zZgLR5XSAlCakB4e(H%74H(vLnoyUL^et`#VI!)g%er2cW6Lu$*@UGw3OAh7aBZ^u) zOCAvlB(I;hUW+YfFhOI`ES@DFQUmkU{)P93XA>XE+n6~dy-MwYdRzRf)K)el|FyiQ zKI$9*3W>OnGufyx)pWZo(Et|(&95+_?X2ucThFq%z*3nbg zL54r7PWxBO>*MX$z3kUMKCBY^wNGBpuwQ>aS=GKsUU#)$|4d#B)1&eC?AKrMVeS17 zj+5>F4r-qe)wRUMNTynZ1bRHNf|1J%G4rfMn^JV6+hTd1CC}sC)&uBj;e<3l*KU5F zG;h*8YyYu_xv%>3zq9bXY)Fc1HYo*5#dct1U0lk#pqW|HOr71#V7r;M(oB_VrrSh$ zt#-TkpyTb=2ae!%UtTMDS?MQ~#6%k|b3q|I1vP}7cb4xi<2Uk1KSjM^(S-Y$p5a}T z?M*i#RSuB(OxB~rY4G&pv9!|c31sJ>opIxJDw<4&^DsasEAJ9JO_jgoTb{XPhR46T?6os9|9e8$63BXG8agET9YRM1v+OrYswukKT#8u6_v*ZlJ0)keX6JRu*WknFP|7 z{p~viza4MIzJ65q`Gi?X5Gq?Y9u!8pu==G4(Ie)c1VtdYNxnu9;QD*a5sdwlZls1b5%pa z_fGQ?@S}$O>q?seYkNt|KdKm;Ie)8=2$SHG6GN<$8WQhJ!hrd`pGcfyVNQJ6B;+#}9sVVy zJAF8wy0-`7<-@IOs2?B3E$&-}|K;RE@IM(BDN=@C7%w={s9t_yeBfAmTw!g!o{6ho zuC4N~rlS>-Z1$q$O{xNTnE#fIR18IA_rrF`lv#E3f}Gp2kK=_8Da&$?@b=msPU&VO zJrf1V^}G~+C&43Eani1h+;A%SguJu$@ZRwyT5LSOBhPmP2g7i0U7C{ zF+LT3mQ*0|ZlCrbG0f^e-u-KQKnERl4Xo1+Ut!HTOVL57zisCBGu=E^1uR9|2A}wT z{KU2o9Qd(1s*xE)hw&~gdT3;IUw+fz%fD2-co!em?1wX%E&Hs%gDK-U!Hu~}?0UF1 z3zpU=CrR`_`@Oc(6FZpAQaNB&)bPcqPgq%zPqJ~Xl7;y|oh0ObU|rE>+s?AGxdCgO zQy^O3SmS{2vTaGR&3M%}+85d59&@SjZRA6?(0wJ5gIPZ9!NkG|#adOL2Fy$4m+`%? zPh(Z?MlQ5~-f!O52#@h$?4@*5zvf54{H;ui4+CAI1mvq^;J>Fc0VV3809TZSI7#n7 zC13V7ca^=wzenS+tmJI-Z2JZxH$1>xS*#j*&1bClMZR+PY4MeP>o5Ayr}=jTHUGA4 z`+a?y{DT{+H2xyTOJiq4*k)n1i@iB}Z%P%1P&axgn|Yjk_)Cb@FW zXBHm0S}@<^awOTZHbSIqmCJwY$=5Q@W9fODjC+dCh||BtS}fWYuC(KkdeN_z9QHny zyW-H%{wQ~_l1v2%!mk0qa(Pe|C`*%A=JdXooSE8BuGjN`!gGqW!^cUe%YfsFfbFxp($qQh;FumS6JBNxjn-n@aq8VqMbn5Tt#v5Rys;F7> zzu_~Vmaczv{_VaJGXKt!)M!3eQ;Z(BHYta!jqempMONo3l{RmQt&@DBy@#@?sDxZvw+ALl%?;W>mvT>~P-LS6yHAfF~46yBiWQS{#X)S>r;v>rx-JVY}fSPmF z?H}ilM|-xm(IS=W{T??r2)C#%aiGVMu|1xkG7gQXEao;oR8Mx_9{RTSJ($_&j-%6k zo@V#CB`dSfGw9RqZRY)`b#uzyp)<;}LMOtgitGJE3^M%rNx7Qpz#li6`PSGg4`4{> z*d6eD&k|()&Fc4Ly@AClCLlS4+QR?w+Zn*uCF%Ft$}u@L-{2>SJ}Yz#2DVlf zjZ*4JRRMO;U^Pvon~&1--eA>8H?LXA2Q&6hnNJ@F2+2jHtUt-s!;Ji3W=qt}p2p0E z`q{Ip{8iMTwdizaxExy+Q8}TSdTT;bEexvhy+ zRsc+UffGjZAgw{ogKZH29**`j$E_H8YDXIH@Jf!%7uxu9rgKzzRyeNa?9mBgX%65? z4rZD6w*>fLPR0E>*P5dWRY}|rGQ&BDNVY23H7d=s4w&y23@7ZiPFKBEvAZSIq7f|? zdU$;NVuSf=Uit46hFWcL3%8kVk=y?T59GwI*@@?XAdQ)mkx zBkj?GZS;}c%3FzGat(D;AF2IJb~1Bl@Lw8w$5>=To6?&i|@y!QKj z?0fRDCLEv}`Le?>K7Jd6+vCe|X3a0#K0Z0{=QbV7Z*^@nKG}yyXy;aql1&b)*zw7s z6GRJOk4xHdRB`5SM6;%PAU=>DSt~zXVeoz_ePxX&4^y{FfD`)_Y(0(58T4(v^snEw zsbF$8{vCc-0{P`A;?PB+qE*3Tyh0o+WhT`rS;8Q_gSJC4L&XRsJQ=Rg>BJ2l5i8eQ zOYiTnC$aGt8R`n-!!)+YoB@Q01s;PiD3VBnOdaokk?oqdg%Q+LnVxs}fql5HRS_0o zA2~awp+zm*WR2d+OgdRR7~YeY*~7DKyq~~R&%u*3p23~Q!(x?XGT0fEI@&s;!j1-r z@OiYv$v>8`wdh(ENKm1@I}dK~dh7Z7z-9;k`YHVhy{q*A7CZX8A3f7g=)NvV%W4`{n9c{|8!a&aw#Xkz z+jqdoMp(ERBlCR&en3_-pIRw?tsllvNX082V(d(_^$fR+{CttRnIp&Ee1kPJZhK(} z2JA%_CU(XKEZlcv9AsU-IAgsEJ`REBh98AT5xGDk6rFF4vO((VfYiqZ>D0r4^zpra z7o>V(o!R@Qz+>a@A{Iyo4nw61hh($KSR9W0l?lHfb(_K__a_S>&BGv7Mj++ZQEr_C zr^vTrQH9+(&QLC6KL)#3(Lg44iv+tT{QaSP8~?%j&4iCuyVB~9&38L!T2IGlIp0b~ z6l@=;RsM;!T6E0uiuDT)1KS+)@1prCfvtV5x39O_pTiv6o!LEXE0stU9e(V!V5QCR zm+qLKq2`59_cTt&$~3gf9F`X}FB+gO{g!9j7qnGdt?@mDV23ersz2R0M_c)8IX3%L zk;n&+L^c;KR8MsC*K&|oSAPXk0;8+pxwf8F{O!nFbOpvU2u!#&ik7g*wyD25RLa)G zoAvTEyjPM2)U^_aiM?yXU~v$3QbXeG#;&HVyhr*M%~<69Mp&T@}BP zvDuwGmhObKj^IV)W9~hr`+J->+-3cgRyPDQT3wZHwUnE@l<~rFQT9JM9ub2NRP2O1pZTlw>~wFSm!_x9)K5{71{kr zq_JqB{RneOE;8|wybOqyA!g_qThVuQ=oDpCt{gI&g|=E#zlBI_c?xQ_*QXfhN@nXK z@w#M-4*q}ay?J0%)!FzzlLZ2zHz;acJ800v4R9-wpczQ;j-4PX2z6-)Sp*G9n#=$y z)xpVtx6@JHwzT%!+EU-z(qFau*0R*sB_I$`tHBLis)*ZMqk>yV&@#WzbI!e!35!eL ze&65k4+n0}y=OnqdCqg5^PJ~ANB9iR=q2I5;7LU*m$PtWPJpndP*bpkOywR376+vr zR3QALu4Vhu)2WH^S$=L2(U%;qSNF^*6-e|B16Im^xmG*ebVR9ZLWRU-D<==19ZTfn+B-+!x$ zs}$l+Ihe!=zgKO@Sus(Dmhp-YHQ2Fqb|I;?agP=AiMR8u+3z3f{NJ7;o(3}K7&Xa?W2K<8m|}?P!jap=~g*~ zPT^s!)+uNIVkif5k*x5oAdH!B_@+)^1DPtTT0$V zQ#d*<^;WiL*y>@@9ma&*kN84jY8vASLlM}xZ!3bc#Aw8^p z(2-{Gb3zZrlAc^=AVW?WP1q%glhrf{Ye+_$Ads0@D)2ND4>zlN#g?nDbKZj+Nxt(C zXJDfb&&LZyE0(szWB2o=PdUv9H;TIQ0S)UhrTeG?_w|8RCdr~|_ zqlB}HZu_SxXEAOLZ{53Zm!sO^_U$Pg!;9xGnyveGI223z_V<+;eY;lm?a?T==)N`O z%~~q`nfw6}QH_&#L4xSG6W`42+avg5kDb0{%l37rds%LmXVJa?O5Yl>D^RW4yJr{E zAnDoIcSXT!VQHbX8+)l}Qg`Pj-ayrgn^yq}$N;D5H!lnAgTKw`UI&8%)*_AZtaQo*-Uyty=UEPNoPe{$a>jncOqS_3%As;G@7)%1Djcz1SDSCpba zMe`w>f<8h<;tK5&3(zzZvNs(2WC3fvLY5X<7hfThN_kunl*B}Kc$LYGKmv=u0qf`O zpuL=`itR=jbaeY8Qui*pZOGclZv{_(Q_0QFD7}Qv<_vBC%RS|Z8K}@a9exG#cUI}+ z{>UFPqZw_(shzcfE|;tG1M zJg!;`DG&fK<4BDagioN*KwNeA=yviSq7KSBee5q;H}Adp!_rs&lFyArpVG8)>y1Es zm7oXEP}8N*{<8?Nb|V#gAz)Q_xXM;e(JnesGB5emXya(AXET>~5QSqRef=rM)&^i6 ze@d=20{g^k!%lftkJ!k6#~V6?B^ZZnII~P!*CV4*#L$mULV3xy*0~&N_9udcd(fd+ zFIW#(>@6>TF_2hrxMxyg$cA9a(_GX{?V`O@2#q^W1^29SL-j}84_mxdY$$HF18ZJ) z?kzEzjvZ_aJ(k0gfM`HK(6{z;S3U(*Efy&=$F4O@98!?GFENpNwc3M27|9k1Fi9R*91= z#JG^lhJiY8WgW?U{Nid7mz!>GWytKKa3Wf%k|ngTLyilVtPmVG+8*SCBZiAaCm6$t z7#+gHShbV+Pl%DaS1{?R>s303_b}!tTTv;^l-V~B9ooV8Sx)rs+%c~TQH>o;%wXc) zX8h6<>N$VhDFbOo^0yr2b7xWJOCz=p9QcZ}rtl}A#u>^WtxwT_V)VS-z`xGd|fT z>;xG%vmj|<#eqv-<(SsxKDDrmxA;t}nP)uTxH@nmu_qH-b6F*d1;AFFlxroVTzfq7 z7|q`apq5u~FU_BrJ>bI}c)x*!PSHt0o^rWZX-D#smq@u0Ya-O1w{W-VjoPUgy{39or($nU>s+F2K@YD$otM~m)o2y~9MsKn^#A$ce zgU}xaSP;R1jCrWR2lhcUlZ!;T%tp?x#fKb0_~Gy(Yaw|O{(Zt(VVJZjXnoe9c`ZO< zpF`7vCFAUHHpAi9Nb?lEGoXh4#8rhd3or)=*=Gr*24@Bg@p}sbxx^u`lSj7big08Xah zjyPcZH<|j=-UC8$J_*eK@`1wLgsTRKz@c%1~=*v0%|?k|(_%f-UBzJKbM zR7HE}=r^u6=gQ&xs=daq_aK>aU~+s4i? zZJ;JBg@pw@my1x?b52br*+YyjX8{;xX3-_Klc)kRG zOOuR0>fnR~ck1BkjN<0#3|}CYTZ1d`iasn5Ou1~X;A32QnTZuLIWPe}`{&PT4;u)H zgYWOFW%5{^;iq^#h!&pI@FZP@Vw_|pRnRAr557yMQbvm2CNsCyd$ZH$f#yy@DOF8v z@azGSfTtpTOzENL z6A^)#jWLk7tsSXOGakJW;U@!a2CDM$s|kvkGaRwf*fidlS| zbSoHj?<6p4sv53s)YP%3ioLFY9P-Uny$-$MtnjP6?~3X*10CEMqc3pU1ruk zpnrd?0{WOrfPMvO!0m_ddhlCh0wSBd(>1ekl5MRr{c8PF*XAA@01Mw+E^#r5$_AZS zl`%mseVsNYjkwhBb2GkphU%P0o5evmI$h+VlT|$7A_WoAPcLLTt4HZfVxR##fJIwS zOQRG zEXWic|7JN-SW~1}v7ZU=NtQ+2hF58Am&5}UE}NLR+ME2^hT z=d#98RPl}JatH{xT{J z%b1e0qC;t6AbTn*ap%E_igjO+9G96^gIvzSo!XzE#2n;n42A+KtbbNoua%E&%?ph{ zGe9!?NVrk&WA)Lo-VioHRJ@n$!Q>JJKV*_}ST}_k-lMrJ{<>H_LgH(xEmFhR1M6yfxigrJ zo)Hs=0u=z%uv#_Eh1GbrnES!X#C~ocV8m*N8D|2Qp6h`r4`g2rV8#NNUjj1$%oy(M z6lmlJEN)`_M|nwWp3$}l@;l4%fH?5K@F&JFG}Hw4-^&$U z2Hpf?GC{#R=zTl6`#cdXDR>*PX^gHQ6_!&E74r;8s^OZn0u=jdyfih9WVAOgxxN;l2Y5mu|g+l z`Pple6CeT%lBWZhm69k7EH#i~8<@!Z>H~@RF2H#3?+P&I{QTRBMBIs!tZv%H@ycLf zP$U*dDiRb{Bq{MoG>kF)rFWl~-s^vn1h6H$?vMw1yh08gW7W8si#?bh*9QATZ zethx}Chb$vSTa^kmP-e$&6ul`dmGd}6y+t4&HJ;86Mn^MfBZr<`g5fk-j1#aUH9Q- z(sjZIE_f!*2ik1V3qQgjvwsFS-TGBp&&fVlk(1BQh($g^@r&3vvq!@$Dtrx!h0m_% zuuH)%0;Ag<9Nmyw6zRk)1l~ab$&+N?b*@uCXqLn;gK#MtrU;*tNX(#9c2LAQCkY=a zf}TDUELQCp#pu?Sp8HS`+0@}(=eQ_Xf|$ZCP;Dxs;eroRjfH|V&Ro?s-feH(90F)_ znCs$0@?4wU!!BiddLiiTWs}Ub5P@nTIre{r@Q;y8~)@(b^@Pjt%bj;ghZ z(T46~%Kk6F=g_b*{b<u^rM*IX2}8NgPBec9M=&6>>@Hf2XsUxNjDu ze%48S5Y~AVhigyK9LRP89-JF}{AmB^oab4GkoL_h$w4VKWT*-&JXiHm_GSYdO__qGDYkz&yn+^=hk*|O z*=LF0{s{!3oLO!dl18wYf%@#|XUKQghwx8%M2zPw5hN5TE-HihLNi1q3Py5~DyJg; z?Q(19=&hTRMy#Dka3sxKhiRTV1zu^*?kvGvi!*O$U&_hyoygtG3v)2xF6MMG`*Z!@ zt`VAS4J$PMbBz&&K1c?${Be{5S@31g&r6B99S!3$Mt?{Fo1KtH_-c~1B^E3{#tYy za{SS^+4wkt03gw&^;L|OM}T}XjBcTlXsLSTl=0<4uEcx~w0dPlmUw+9?bV5{a5l$k zrl@Ul6(dJt6uU7JD5OClS5D0()(A|ZsEC+M!B@6<*1TJ=aJy{Ynxlzz1P5DQ7F*$l z(C5+5?D~*qONUs`l*db#!1o(%L4u_R{EsNO!r64);LOLye{N{KVsGF+b*6$3^K%-o zl2kb|Jh#CYjyRg<;&vq^q4z5du7&ssAjqYX7V8& zAPa%6)h>NAR<5-R@Uc48or>CCF8B;zlCd6BSS@;<;~ts`<-n|d^0Dus`ouZhm&Jsn zpza*NEh<1DqU`Rs`;8+a@Y0;msPM>+Roj25NwTcDGJeN0H9vAGc)V zxD5y^XcWH)ArD6_8~Gr}X!|}d(jN%4a=Obt_l6gNNkLRE7>hCv^%P;Ox@dr$+4+z9 zXzz!iXS*;5_p-(lF`S)KNwejQBrjLPKGWiHs>Q6x*&z2vZydn2Qx(|4`#Ii$I9xMJ zOl1ZTZ)`G;JENMTv%R(SM08yN^ub-1D=Xs>KtQUp8OS6H=_0N<1Gw?B9Ho)L&VyO< zlo4&E^Np34=UAQX$sA5LmU`#<)VhB|feOEDpYVBa7%L~{%Hh7Gmo56a&jCJx-jl|v ziL@4h?Ck>lI1+CPT^WG2;0|Ws`KJ&Us@%laZoXRYq`{#9fszS%tv_ZG9x`@7(75o` zu0sJomASWa@;L zR(R|)@Zv~9ohqbFz^(LYwLayyu?`fU0C}8NWX5m11N0O9=xaTbgRE$hZw@3kD_gX6 zGZcdK{R3jSj@ztv%Vfd|TqHZj%E1|`s%?e0;wKC>+NvF#G6X%C>o=j7hvBD{mwMY6 zEo;S(Z6kVnFddwQU+fGbYWOn7IN^exG_lx|EoYYChxH)r(+RRgcQc6OJ_y;%rq(ou z>qV|*2>norlevSLT`FJlSk;a-)31=Fkeoe-A3d=?dc%MZp~uwdVl(cQBVaPl6rK#$ z=1a`@L#h#|%$7Qb7)}zRuyCC;R~gk)#b-#=|7Qe|EzZDp2d(Z2n zs$+BS{9ZPc<}vxOcB=8o`hy)$$(q>>BmUI#a&zGtX~ebc4bcX899oyWbU-Tgy($)s z_UMfA^qj)9a5+{?#>73J{0DsRkZ#NV$5Q>4m8UPXJ|EFP({Ax ziz4sj%nNDE1XjHTz>{I!J`pAu=CPFeu>;!g`j7B%&UC6n5|1n-Z-v-uFQD(57+JlI zVZa0nCmU_Qm0>1KZaJHbr~cyeRC2(~O#NkjQL+pcZ2e~p6Y35^y0|R^yiFOeKm#ar zvxC>13#0R|%`y|W3rcXTR%$&lM{2)ctUh0`x@13CEmuCsv^@)yKHEWQIdcnXp5KSh z;O_>Fms^s{e(m;C$OLy^zcQP<6}}SQYLun2$zP!~q_OrAa6{x{=lp_v1b+^7@n?{O zKP~?W?)(IGAqRKL?x2%8?F%Jgy8o>$$-H#E1b;3fyDz|>Y+G>|>Ga?a_@Sg#n1UAQ zmjM{LNZUjprVwfR-dMxhQ=5=}gjI&Xe*iW67qLc^nu1)#(B@}2q_O5x*09OWD(5`H zgHxR!+=96|X%6o+i#yEKXE{GplmK>Q$rY2sJ7l)PzMGhUgj;;jaDI~JL9g>eCk!q! zImWr~4m8C6bxxsC97G!Q=c@`&lT{|tY{Y8jBS4#<;EF!Sgun~aJ;_ml;UAjAUw|1M zrI(qCHw=#q4uS^}b98S<$EUaX0%Nx?RaFb_NHvhyF->RcPq9=7ThfoibV;dm;SeuD|Qb zaPtRi=&nbdcB=K9+!Db#hW+;8*@f;Uq;P`tDBXvWdj~yufoPb~(FK9w&w@Xrz#lHL zR0|Bk(*3&d9q9~i^$Sl3S}&V}J~rC6P_O>oEAkl~iY1@*#!nxkBe}DQc|{IZiAnWc zxLspae_t82o)9=atKk$_*rU5!mNYt(@N}n(LK9RbFAyU4)U>@NFPx_}kHW-a77B1) z_EWHfwr-TLlHd~xtU9~U3b)%gP#lGYFpys65x6VF6kG(WU0m!-F9pUt(qi7o$+u#eH>E{DO{e z#EvJPElW$MUjrqbHytJ{z=ayG*E#+R{!$5dxmb=MVKEaU`g8MGJI0cH6VNgUpH^R6 zd+1omK1y(8$XT|EHC=7ahq`YV9`O6BD7}AzfeUX4wbvc(9~<9m=PN5@ycjCnT93}< zD_Jkr7H<6|o;jiXkB$7?vkJ3d8o!r2u*2)YH!mY>1?Hs3_BegSBI|peeS39YPRq|f#e5{@Kweya4Uf0gc z+Ie0aiZ271-s4P^oVM*=)FE9Q8WeftHD0ij7KqN5b>PQ*AjeG{zJyd=Cu@FG=*S`1 zw97)-ZuiMZf~+%@u0XVBsL}QtQureedACYFf%vdBf%w^U(lf-v+oQb04>RWpLJ7Vt zT~pTfbm$QbjD`Njs(46Nv^TG{uzO985&JV)FoWM^tUSN$*7Lg8WQBfitO^~nr``$; z-qRH~`Yv=q8p7dj-e8yK!UNp>eZfm0XCqB@Wr z>BO;Rv6r#j0ADUEi|m0f`VrCn)`#r$aM`9m`g*fJ(#srr6QguqDet~;z1W-}58_V_ zm0}r$`vHd-i!YOM5{HL}XTj>WXC9x`>mkyXiJg!~S37C3xtb`$?CG{1kvXFm7_bgy z4dl{$W3iVUxv*&lByI#p7E@AS`1Y<%8c)b?a_C+A6@t`wXC+5|vf~z7NmzbB4w`y* zm$h|Y|9dljsLEXW2jwz}n5B-&mIIL*`OFb!EJDpZ0pn2}zQQR-<(t#>dncT8AaG5a zmKZAw1V7kU^he*gIq>Wo(KQ2ugI;QTdH!3`-V2Py0^#TzW$YX966ko0zbRr7#lD(X z_;ZyHg=qMEL4LO4_T!J0vDiBnP*3Jx6227~u}8_8X{CNA#VW&1c`CugpO`7_^!HCY?3!Fn@Gg zS?FN1qeFU$Z~~+6Hb-|4HExfQuUYd9!~n4VAEJ&V9#G}r}!aEw`_61C2z3B2EWE*86OL}`J?71 zE~^eAJeeK+%xm1%djb}&ZrlSH6PLVg)^q?&GFZnkqu?v~k=^v!GsJ+mKTP%6GiJ@O z|3D@8{M2^t@7g`mXp`gha|e|t#&@cVEy91ae@g;YuKjcM<_Spow{Wb*Bjx&~>uw=L zb)8&tzb-%0d!n)UN8}Xg%{3OykU)Dtr1v;u@f68o<)%PQ&TT>OPIY$P6Qu`ZN3(R4 zoW?jgC8lKynnV|@lS_WTFPy9K=*=vQx7bgx#uNNzO*48EbO|}EbRDdBbQ@i_jjjs} zYHxdH{@ZGpvBjH;ZfBS+;KiMnxiEcDyL~M_eftGpo}XPJ3HtCk%ed{<;Q;(QDKwoE z6aFc;7S}w(#kcVVPYTGNfwVrC;~cpXQ(r)t@Pb+Y!>38dQK+mXDL+hTP2=Zb)Vy zxzeu9;s|(Q?wL3V8BR+EEt$=-$6j6_ouKl5K6=8#?l<4tx&!fFXV42 z3Kk8x6~;=BeF^cGpl@kc@#41Mv^Lt;@U7-0>$3p69c%@hgiob$-x^eLkCE3w8+jWl zZ(eyD$XmI!iRjO6vv;$R>3k&Z_xnD2>}`Bhj+O*3$Xf|-ewb`3({8Wp^SM*|{H4$5 zH`-@epU@(q9{U5-NwKJMM1`@+W4|sRD6w1$ zS+GYPhra5m^5-P^GhF^0%OC$Vb;47Qb}DtNG4vLSh+vGN5aX8u0^Hwn&vYwVv}numJJt-*f0Yx(lc-x zU(NVfscicD3+gEXeCiprdXqmxzc}&(4n8fub#Vb_U$^DFA3 zL2r+ad$}7|B5`Qni}EPv|JGv_aa~@3TRviFf3hmMN;ZwbXVJ_llIwPi2X|f&d8Adk zLQay1NAiMzwYVJ*I7R_;KaNr8pl+AqXAc1PjP`60CG02$(`m(Nv;uW`YSML>$V;XE zDh!+5LV0Pd$38DjZ?ULZvo?(=F#qHN4y=RsI9&30+UW;j8mArw($O*>2sc1Qa&gUw zy$GkLuxyly1rfa4olM2{2L*~B zHaix|u#%rz1c;4q_KkX!Ae(D+SPl3uXDRRs%FD8$%N3}I2cKY>UKEVq)lRa&n)faU zX5V!Ougvde`~lIm4VJv!dWo?zKgbHz?JVO$Cq{ZB7&z-~4+Vs+T-;0*0yV>a z7W953yr!C;qT4S(8v2tNl83dCLrkXi6P;mF#LsnGuhdtM`m3&1@&fp~?H5G1T~Io7 zUajo#lc=NoFtr)g^#t|dVnb^qQP?qvzH@=%=~;`n!_z+%eVd8>ZN(UVgdN=ZZw4uN zIt7KLCV@CjOnDp3u&+0FD@(25IM3Afo16*9ummiEJejK;nIjKfFK z?c~2*trXfL`Inu7+j3EkSc6xM*32fMc`XR6j?K{;KQU&RX4`I{YGNIr5z}Fn~)%v@CdA}srjDDv_RAFs> zg(>>Gw22xN5aKR4on#SKR=%0PY3#()5`1QuiUtzs~Nn^qm`rdc+Di2 zTZCLfA6VHf&ZcONcjt7Jk5yFN{z!4y8}-7F@qWPcU5^Nsq}PuJjHk=_CE2>=KoC7P zciX#Y23`Nse*g0EZu`>1R^*9aG;U>V3ET%z2kEUocztoYuQlGCF-$pqL)`u;i;k~| zAEcM^`lp{l`p5d?cd?8tuCXpz$F)^^T~LQ7X3!VDH<^s&);gK$5jmC@az1(6PMZr> z_L4XIr~PddQ4p7N&`CD#KWF8xw%ZCmHvbgpK!=)O`N{h-^(L!>pB4&(BC`E9jxpn* zmndxd2NHkPcQnclTw+01D!CQIzZ_mv+eGV}$g4>mOkBs&*qGGOteKD#C|+Ng2oI7w zF)u$zb`pLts4kEwAAnBc+eD$Ket_CaKHLO%ZPhYZ9a&ODDzzWH4GdCj!dpSk$daDZ z+niTtbN9eew`-F9wj$YmB&Cxagifm*D4q(f=hLBI`;3E(a%T~ZgLoTaqMjzwlp`X$ zZ_s*lqLU(qgD_47FQ5CPA>1eb?)b>=q4P@7QGtzH67;TxjZ3d*@?~7#x>RzKj3gbp zDo@CPtHZc)$%)4&>X78?=UAv|*+FYNd{H0~%FRj6U=_jTYt7_PN-RIIqT2?F9aS!_ zz+}NP0@M{NrKnfk$Ore7L>?A>JHWd_Y1p;>j<5c3=lV;z$*@nZgV0aS|C17@WvSha z*dIv5u{NhRoP!8u=OmwD4Zz+tTQM1Hi6!*<;91%RKl>5j!$CBgHOSKWLZ7P;iE_drVQsj3eO|tB52BxfX=+B45{w4=$GjljratP{jHpFCk zC6#k}5*;@hXP>Tu%RI=9Vs{VOm3puM=-aLM>UOjB`JVkF0-XL9_^pzyP~%yVm*{PkPX_Vu!6R%aoWN#-+k=54&wq?oJ<4cyQyziH&m^P87i$_On6z)KIWoN$lg^r3m zI5d?Ey%Op2gYTbS1!)0;>GH^lmOdexEk9ZYvJdihTcDlk&r zR#?V|LRQ|#NC3a&<6RVF-KnaGwj|yfN-U=tCy{X_6zK`KZO9!ZWpBtmMLUJsIbJ&j z+BsA^L$otMJ09)qzEdUtL^~g7C#jw7+IdAgFKDMz96OKkm(d4umK5>B-GnjUEA0<; zNjms0(sBwoU7aHNNjttQPf=N8g}sCi z)O{|HVK}y;0Fn2aiHXt#zRF%v+i)PHb!IZVPoI`R9>sx;pf$2j%DTu-3(APLB=GKRmRx)V4{)n89bbu#_{3f57 zfIb!73S#da)zAK^fLch80`)zTP7bf4-)SEZ!leqrRRaXV43N8iiQEl1E2|KGcOb}a zYHlW|M@oFzxL>L;T%?G)q_uDp)C7FUjrQb*RbBnjRIU*#P$WOIokwT3GjxpKQLa*> z1+#k@WJOIkrd8DSx~4y(|0QyS+waMx9yMGyl(Wm-iUKRXt*bf=m4|2kPqrsgdM4Ph zP@={~{iX~d`0=}uj|&c@zg2!So%|BHzaXKpGH2Aj*>V}>kX^EAbdE%}hKfF)HEdU= zhPaczz$Tr)Bag=hE0Q#?1tu@>TgOtPK2%Q=j|$rH?O`X(U}gNH8iviV9z*Wl5seJ|EFcfMrEOZz`}!uS8aVlKX|M zA8B@9swF>2u;%xZ4}Gj@@L%zbK2$i0OyDPf&le{p-pIYfxFIv=@41#7!dD!enaxHB%t)#j>-5HPCQx5p1;gbncfhV&Rl3Ssh56@s? z#597L2=$q?@q?b`cckuw{`i5c2EwoQ8{b}H|s>YC%?J2|K* ziI&PGi@0~@;~K?xFVUZO`_$*X%k<~Hqtxe$`}OCFGWGdzyK-Wk%1LZf&eEOAxzi&Y zVDa7g%DLC4oE2h0&=#DQLvyiq)hAq}32itz5I>^Q+7`4vROe*UGX)2qeoHh(zGQGR z=L*O9gExhIRV?qD93DE@B=Z5Ga~1XaiE_Mk%X(wque6i+$rK# zi78XWQZdu#WPiwqNK<+sQBxI(x*Ai5b=!jRIZ3V=-5HGkpl1_E5TQCA#qM;yvIG#S zPR9_AG&#^QF<*k2ZU~7~ySFLl-kr)>p*!|r-LWz0SgCxO3QR}`C)=4^W#Wm+AvYi(+B3h}A`n<1 zFvd`!9}{Kp#lZmr2+=rI|UAvV*h|4-l_fWc7SrPKm&{luzShPT}>;bZMY9l#-(Q^ zI`mFNclgF;DBr|39VyYQK9}y)pGza^^G=VjX%xFeecqj~Kkr_qKJWGE&wKAzpDRY` z&lTWEQXx5Ox(v&<+C-=92R_h9IV{XuopV``M_N^X2! z^(n`UrB5Y4-KX22$LT&rhdw4P)IB)2K=tjvv1grenAyM5r@_REPFfA|P28(GTlevf z%ldclQl=$=y+pxU0k8Y*V5gU$JjCeNy-qjcy;twL{iwQC@@-a~p!(A&cKcCvE1~=A zPdNjOzE$zRt5=QK?-)bL6OgB<(fO0lyQR&-4eoh%@1Df6(oxJt(v6Rck|rl-6rzeU zIl0U&RQ=c|AJsj&@Le@nb)0!!;)z{u7U`kfuQOVck5ET@8VHrbE=+B0Ruwg)Kq=M?ry!%D7jrPG-Sq>lDlIk6HU+9V|a6C?6-PJpk{0l z^EnH;t60ydRff?fhY)1)ZWD^+e-!3Qlo5oblO;soHg+HKrupHE@>WCo*^!@=H!tg` z_6(x|{%OIQO-kiwLLxZG>z`U-tryY6b6N&&qU};%vSvYj*G+moQke+lV7`Epu4eo! zk*vm{r8$Lo`XCF6+bKyJRQa5 zBRF>IFZugT#|3NtZq}?x%*Oiew(LOS*qri`_ZQr5{k`i!+Oe0MG~NH2FKvMvO|MB! z>v=gYgHDGw&W?^k9w0O~ccH{M|9IUF>qRcK#-@-W`R^n@r5^}wO_s}g*B{;C4b;5G z>iwp(T{&ZX%0J+{EAqM5RgRttw`N*X(YRy-yqq9XC+{Pd*vmIRyLV;#dIb493T+!X z7Ko@LrGHWC}r|UMi-NvITfx3lD z`T?U4s5GYGk4`f>DD9Ybe~Dx3D4>giLU7PC6=u>I6uonUtr+*@2^8Bl1ax!8f#}Of<5j&DMDwbvE^3oq( zT7Ki)JXaJy!?a2ZW%Y{bPmh!$m}VT5$RT=qH!NJ!$UQ*+{{O8%9SKbu_8a66dzP7Y?)0>zktc`{J4 zDbyUao=%=g-}W!h80FXu_5nXoFL2@u2T^#j74s5JsNk62pe#F2Yu1X!$S#SA$b}fZycw--3u8v0j2Ia(FoPCTg zUv&(x%oG4y1R$BhqjaymZr}BBcgnt#KmGe(_zl(j2%V$vVH@m1p8yCn+g6$i)r;-s z=E!beXx`kq$nH_$$!5Gs!&fdUksAg$^!!fpTm;(!KK-foOp+&vAG&nzRC8>hOf}Rn zUux*CD+TF?1H1bixGbMx#6D-pc6B-9FW!{b^<&$XQ7q$8*H^Y>6F22B*gsX`a%yhY zOw8ewZ1OWzm8tBE_6V|w)YV#}=p^{EfiL#;_$$YUVvBhZqe1x@VO_jv51E>PWC z<`Fpbe%J>G`L^Zz2@Mxz>&O;;#f zkMGodZM03p$5`|tLykT-V!|tMm6PiC_^DvJ3}6vyNqf~8Hrj+$@^@e8L%sXAyap4O zv46d`5~WHtUW1}1H>@yuHGl~s#4VMf&9&9oLLhTzG()Q>c00*SDfLXgDk-%R%SmDZ z@LIm>F;D_oyb;qVM`J=>Sq;IGC>9M97eO;k5b&x__QG5;6T4bQM*l&f;YF6A2T;=6 zYvd0pOkN9f?PnDlWHeS-oPNEAg3GO!qT2_`QKUAD`pqp^O~&X;W`|EQPlW6lG3@fC zx?)RYXLKA19MzPr*WLczofGP^Put1(Q+UjbMvorLx3rI)bg>HdE%H#qNXU_pqR}wr zRA~#0HdT=t^;IM`kJwZLT68^cPC2EMLw~l{?@0GQJZ*zu#sHYWj z7dWLqEA$II%ClF=gr@1B>`FW$3GBP@y`sbPnWmg9AZzle3 z+6RCCpzwDy-JtOIeqQ#*-`Fpu%%=#^?axHmpQ!q4guO>KAroQQ$aWD{_VJBHe*Ox= z9)+8Uu)p9Ndd=OP+>(b< zu>E!E>C?zr&3|e<3?+daqc5Z5NHB;5f;kr|9E(t6MHjo?>%&_bKtG;OF1jD3mU~&J zROvGDdluR44aYwGzLxbbz*L}=PFo8+lT-1`K>8Kr;FJf%RcB=4{mJ{w;!u?Zg8{p0 zn`|x(RP9#d;hO!82RW7@_evAd?(Jecd?J5#@F!yiSMomY#pA*YYnN78a%ueZ_@zZ+ zGwV~4ZsOTPV_#asIrxFJR zy&D20AGUy4vx-dbr-2eXXpDcKr@PV^zr{%uMyEO=r7254BXw;@&h?w|+%qHD_`VrB zL2W^bWxWEn>g3Y15l0eaTGNUGj4-~p1+6j`V$<1pG<{r76|`pMDeG0QNyga|@-eK- z2I+dE?R%<#b<<^r%iPS*;0L0Ff?cV-@Sf`neCF80-})9M$G=~MJsol|t;3%akHq2Y zZ(Uj~G)l)f{M&eT zOej)cE=y;BM{tn!<6}0LJc3JYIyUv)AO4#q=h!zPcZf}=Ey4KVZ}OpFEV2cRX3|0Q zwd}7d&LU842V#DZ zJ=SP@nfSr@b$P*f4MT51p--4#AD(mt%$&#<@F>fXXh^KVh*~VYa6)NJ@?KODYB=N^g>25v7j4DKy-ustW)osxO9 z4%eZ*$-E>=h;ZnB;JGCjop(aTY1Mb_jgMTx_0wGs_L`&dgH_G;6c5 za<|K|idK}d=mh>!u%?J|g|lW`pz;sxkd(4|0bpVd?sSS2Re5gr#snJolYty&4XSI& zU`f(ge26qSYNKLT_&CRLP>2-&x#NOZ+gK#y?V?1ES8UF3|BgVEc;^LbSj%}o2$pSraPE33xvUz=H?i%LS6H07AG+>0ANhKz1{YwrBV<7Kx=3 zrC1~D@z^i;Lh8XO4QZ8cbhp)!eCq>RA=P7q`zQtrZ9#a+MPi&dXtnz6J9(iOjMz^} z4P?9cj&29ETi*t>$m-VE#e(V92a19Qt=B4LhO3mrJ(VTTVV@hOUaWcx{n&D&jMfW_ zDw&*%?9FQ7LTCJ3mBE6pjXaeipt2F#wkhWLkHiioGmU}}t1f+V)DRBiofk^<+y8e%{!z2{g_Qx7;`#)$WQ%dj;n0piw%p;crNuyFi&glC^Ew$ucw(wMw z@Q~3xMnRpU%}|??p1J?0((35?gPIS8E@3j!X!{8z2pLk_qg|(@>9elS8sio*31}uN zShf%;SR&1eicY2C!~%(iT#vaKgWaL7{LEo>?E9cCbwd{7tZ;=kI14CYu#81wS5){> zFRrsJEd%sH$lq<~W|dnM8!RkK^ETIu!j^6nYgaM56TKW*Vdvbg!(~mMe1TG>o{08( z1m>!mf+p715vdfbz>=-jTBQtORCM~u%eQ9xK_gOh`Jhg}>Jq`HjS7ijIRYgJXBK}S zQp6&M$N@UFU^&W>pF;-)+s;s!r?KsL+azKdelETVs*Mz428GBIe0zp1F6W}Km+S(S zgmsPZo!5~YB%+sEqpz~YmJMh(KYw=zL}U4Om+#c;>ZgdR==M1zg&DFFz&iqOaF>Vu~Pfe@e$16-kA%Js^ykn82RmIVydEFF(|&wv1A&WSZVF)I&}$z#XMDp1s5(8BdanV;x@dFay6L<0l1Q!10@?m(5iVD zn>m86OFbWJpT9xc)U^y@<1^TxJJ#(VPU=5PQD{_4ajK+a*)Rm`4Bf}_!>@6f(WgY% z;O+W{&|}j=3g!JMU_q9~0uK&9ZIf**w&#>W#VfQM>$eEdnf-rD*9akz{!C1!`(&~~ z`WlD_pC>0~RYhWU5^YiX9xoQwWQ#>kh2ur#^uPfrVmjPesLq)#pc~wjA1aO=CBtb5j ztP1=QW=J+k)Y!|mxs%0RhsZEs@iSewvyWS~9~6#6NF(N$Rkc1yzC*9un?Pxyrg`@L zBCWDsav<~|TH9Se);t9}vpxVZ1cS13K<6NvyHsO6^qpENf?%J5KL+6#>ee)$eH<0C zuXv4_Zz_L)tH|q=Wy2^yERPSY0P}B@C5kNL83GC~%#H!%LLEe=IEgj#P1ydNsHY6f z&kjLvbzK;})g1%mI`iC}yqnf>axWEJR#80nY2L{9RFlY<0{A^#Fr?%0w0Ga`WS%xLe2pXhqc8DHu8iVz@vq%4R;;ImJSRTXuuJ0|Ke?x@1- zUGu?|lRQV){9N9t`AFqR%@5~|nva&64|8h%Vo23|?ZJD*UZSoyldb0O`|AG!(cJp4 z@7j`4|M)BM@P|us}(WxUZSq;v0M=UjJ34t{jU`$MEVWc)b&(UE%yA<~X6*b}Xv_%(r@ zS+6@=sn^CFRj*CFQ?Iqkk$NrXje4DyS+55CsMplJ>Xn9fM{XlARQ)!l>*vB$7`VLT zpl1cJvp`vm%$)4$@F;wCslR*qb4Qskv$8u|sO&Mivd5}g9(TBMq_Uq8NM%P#Wsi1% z_$Yo|w z$cMu#icbN3qvl_qyvRH(J(~OtY&TtZtC-ss;{-mYr;xG-K~*X|GL=9)ncUPYgJo_i zIVRXopE#hARIGZ-IG)oCnC|dOk019Ryvr2>N7;X%FqhwmUrBdk^hXIr$DY-~EDAUL zTJkK#Zeh(1dM?~UOx^smYJ$&QnG0thwB|5Z)a6;2#qa5!!0tfo6Y{Q1T*$5{2q_Ce zv7n?j^CZMr^lSdI%oYarKY3-32~j}u`E5Wv&U%nWsa3Sw|G~tF7n`y(^~sOh%(trY zpCo;J0xLYJv1#S5A|!bO*VJ(e41UIp=iaH}wll)w2X)E1g6SWr87NJ=II)x0%2ILy zD0j4g`Yv0TIpZ*TwY|)>Rq+mM2en#2=rya!#b~mxg+cyow~KWa5`JdC%Sg9_OYYp*xfR{ znCV(jXksKUn5ZY==uIU3u7lrXcy=LnTUdhZjP_a3>X4J&Zv?&X$bDPGBt1JDG$H&n z<90#eFqRQpp(&3A$JS!GJNj!Gen=1tf<*VpS*s!^e`94s;dc>5?a=n{`nVk1Qxe z~ONg*SA`S_am?O=)2c(G^%*mB>VOP^VRjZxAtR=RDXJZpdWtQx#} zJWHNJ%&-G5l!ffZ&>cqG@8m0ftP-#xRT7H+;ooJ$!MVQSwd8g_Ax#o8?J0H|;r={! zi%JGSe}@+hvGXahk32c|1EghK>OdRh?Cm{S9zpi$wGeS-dt4R|CVJ7we)dn9dt#|9 zRtKjq!cnAqDTM{Bx4Vu5u#c4Sf!cEFd8POkzS+4tC)8@jZ-iLG(1@TAoj^v=7~;~w zOsbqRSq>h{J8BJ!SMy%aJ8EFLTd0os`+~(uami%yj2sDLVDF z5c*Dgjv#~N@GO}&X$A(>b)&+EGE%4aKfsgR&EY|{s<77ES3c9tc9r^))lYO?-eXeV zZ+_oE;2Q{h1A%WK@C^jMfxtHq_yz*sK;Rn)d;@|1A3|VcXioFU*4A2is_JJq)OnOo zbz`gk@@({Ynwskxi$=7b<{LGC#C-maXe##AR};6^(^6MmTQs8fG~bA3o^aZKUd!xI z-Tneb*4E7(8E&a=tZka(shwS4?;Fu7|4%w!g*1j68ayhouX;{%!|eLmHPxZnO^xUI zJZI=ChFj~ZYQrJlJ{9*(^Y|xtruq8=x$>#*)W?tid!Ed^GT*;y{+VgyedE*Jsnt9- zkEgRcbwBP=xM%QO#B)K$bD{Gt?jjy>FLvA;ahrMSc&_0251wD~Tt$BFGtl`KcOs9t zhU1RK9mO+(=V+cwc;@k}Kzs8Zo}*CQ6<5ApKl#pl#NUmV>F=g<-2F`%pUimfduDpq@5}P}y5alFcYl6gl<%wmL)aZCz4-SZRefIra(o^S|MSEx zLq9~^h{rQH%a<+wLvnEOKRBmMxrYqEo#F8e&nsi|Bgb<>PT3$*drr&~H{UZtxjs*^ za?3oYq)MC^yejuH1Z2g>rqKiK;$jo(om^5sx`U@*m|1P?mFrQJS{=NhN|v&5wx^HuxvJ=ZHY%X5PRj~kVn=UL!{|3JAu z&&{eGd7g+9eoLOTC&v?2Zl0%2x%r-$a($jfPWu--`E)vP-mKhw&oj#Pd0uefzQuw2 zRtN5{sCM~0|4?q3=T+rKJlj<}eV#XzTjqJwfy2860*`i2mvVjH_mms)o&njuzO}Zl zxpn0HG3Sn~Z8*KAx@K10?8f@0GiG_3>g!wULcVe1d}n&**EKa(HP4#unN{67ua0Se zq&2PKkqxtF)|}oNs%{CLQRA8DpW+Xm=ew@1rLnHT7iwzqH8s?Vwq8|L-K^S{Djlzm zeCirQt+Q{alf1=ks`s68VX&ySfuP!!V$amZy7|p@HKDp%UrSv>Q;jcleRG{}cB79R zLbGdpGiNtew_JaQWUYQq!8O&5jZGn6ZC$9YWzOuzI=3cs>snfwrUrXvH-_pOs%T-& zbyf44T58?&u3J?l?a}qDno~Wyv1&H+oX7K8>Xj28{%tCyX2E)y1@+Gsn+Y z_01U3da^TnpD}nuqf<=U$$(2;OG{IWK;RcUx>FIJtexGd-MAm|Z0C7~XD!cPc<$n9 z=DB$4l*v=4R827bmtIye#Zxn@x`n!r^Y{i0rcNVAw0eU6Nf%D_Us&OpeDP(0>FI)< zmyzMtmXWQbsvD`=q#8rm92!j1T0IS6PeZMzp~=%Q+tV=J(=gu?@U+yxw(LKllgk;^ z4YR8$dqP!Z#buXK`epkjIK82|@tWr9n(H#_RN&v0lIM~MyHX825AyW#Y%A;k+*H0R z^*0_r&lsNLD|V$;D1c0Ye52P92mw_z*WlJo)crGjPz5JV}>-=wZVSKjO#&vhm3G z(Yy?m7w=IeZTno;C{h5{l5Oc`S4~5ybnTARfFT0V?O`<81KoSAN=_-`uF(}|2*}K zqxXD%%*meS1{N+2<2;S}rFEQ6qCo3)-oLJ+bVW$y^oFNqesxuKsBZpjne7^U!^in1 zO$`P;_2I^v^oNvDRn=HGuS(+8_oLxeRWbv$G*&k_*?ffxN!e0=*Oer)J1AyOzr}L_ z&*?Ruk<5vZW{(u=8|9gIswdP`)f5gjQ@4<3ZhdnLMc1G1mQVeQ8fP~Y^OxzYm^|cH zB$IJfsMuHA#Ozr*&X@KGOqx31iDqB%{qbyf8Z)z`2#^i95$(1}$OFTQk2VB&X+ z1rnkI$M2L=PGQ!b3wf{gjhIyEV|l1%XEn1E=#C?aH=Z7f z!wkX)8^?MMDmZfJ5kowOAA^pv8?J#~)!fuNTc-DF z;T!H*%UrcaKflU&7r!6v^}WFTc3t9JmGSQ8^Y3^PTeC z^tJmbKeJA5yuIru{>vXDKb{xYX;;48NBqC)^DXMIcigRCA-!9E5$PqqTej=JzdS}e zanH*r^AP7fGrqiQ3-B_xF7CCE=NA4kOPR z^4?6EA>_B#apiq~&s$#-o|)z);*KS6gU2IvbzFJh-*fVpglDE1Mcl)92J?I}9GK7! zaS!x-^d;e$>E0o37td2XN%DNuapiq~&-O0~&rGw0xDKi*NAO!_Y8e$(^&&~l48^Lj z^K*TfboAhHmd59glND}Vqq~r-Yiy`)xu&j)d9Gzhu4Z<_?9lbB zXG39@$F)B2Io!9*RXFdHaoD%2?JM7{$N#qLwtG%>1M5A8e9f$I<8@WDTdU^Gscvqj z6-CX(9+rcR)daHa4L5{NKfgK@5-CD$m0tcTx-iPqe4v2RS#{OTzQ&euCyb~);rzj+ z!h^J)KiE?`QUZ9XX=-T+H;XVp$qeSUp5be5she9RUm1b5O<@>^(;H?tUPsi1*{vZ@ zeM?*8n)bCd)YPonD^h%c zer7vBIvqBA-wq*+KG{zqkS(NBRqv-O&ZhV_=;4SXU?gcBfVej zN%w_(3T*V?@HEym)FEFG;GE_03y%0k)SfrkgTyIB+L_mf>RQ$OG|o3-^r)~%XB30D zZ@`o$nHGv>lj9ja!MtL!nNvMqz580~uAvXWGAEmKfSZvDXrO>n4QHPt4;pvEXzfCE(izu; zTR=DBOR0VN^@{_R>=iEctZqfbRHwv^<4#a@-78Z67;~CinnKWkFO1Y0o+;F$b+1SY zF8`kLJpDlR?*waRcgeu(>#o|pnp4^jy8l`a^at+04*rpPoD1gaUmsQ7carcGiOjfF zlDNxYXp2x>*kX{LwJS^huSN~_pU$0FH0@Ax%|7)KUthnOO;*DW)oFFx;m&6wTAx$h zc)d?$*_x(Dk|v}?_&S9fzmJafr(b>X5%KeL<7+4})ax?V>*>68+|2lH3)52!(vir7S~SYH0I^EN&q+IP}PzVvsguc)D^@tR^^(V4zee3gMomj$jMSvq{*_-2KFvPg8QB&J*M zq9W?4Cp;%RCj06Z-zmkuX5Xpl;))Ua6g7*${|4XbzR|^M))$da(E*~v6!ZltcJEZ5 z=BT7K#h#JS(Hhx`8aa2)$R?)enx;8(W-}Mp&1q`6Uh+l4RB`Dfe^6DoYD%%je9eT+ znIjdd^aq0%PpI+-0~b!BVV8X;T`SVV6jcdBMMY*eB8x!)C!a;tb4hxVF!36$gpVrr zEm%Nx_lATUr&t&o2f~t8u|KmLMYQD>qw?G*2g!h?LK=25;`^Yd`uGb9rHA*fQR7Vd zB;D82hcn^eu44!4+Au6uEpxjb!kR4k)ZC`JdY`%}MAXon*>c^NfzzRnUxg-WTA?fO zRpP7aW#q3hU>}O%jEJwEFDxj(zW9pX3zzSZjEq%-TNny7eeqpNp+=wdgkpx=fw^zI z3`&?0xi8+F+0-CZGYg`@u$s@RDT9s9NU=9O+@P;p?~F1WTy=AjHuTj?tzW+kE=-wJ zSr1)R!LOZO7DfHa?VF+W{H4ctdSX+hWY+VGDeFE%Mb%XX?mi)nGpR{m{STP0Lgal@ z*UkHqtX0jS!wPYz0D~5yQMAtp+-p@;>>J@zYY!2ErzzR+xwBbt&JhBoMr^;8I78)3 zJ_P#OyB`>tCg(fmQ`q*_gvzn*p&poL;+#;UoJo6pDjrh|HxFxb`n$s^ory6~70zK-rJWj=AJx!#cPDHk> z)Ng9zb&U)_ErIumnu?ZeCOas9Q%`Ev<2|Y6PaubVlJBSZewy!2zBluYVTM^8&tLvL z-!Jfu1)f=AriZl4U+qb4d=39?v}HSCZ{YtX;cxY%Zhf2ZcL+}sZWG=`_Oo{>P^kc!Og|x&ZA@=?%>|k9iLFf!M&-TL-@|` zO>G_8n=%jUO|2f*n<_ej@FROudE81d|7g-2)0>)pTyJXQ@x7@rzTVXG;lvw4oWkDJ zts{tY5_z0VoFeilCeA73acXa>;570$oiccmXHdpS@)$+h(R`oSn_6`-=`Za~&Ao&? zaR12n{K@3S_jJB*;`@TJq4F%_SD`~ zFOPLOai>uRPhdJ>JoVr0P3<9%r%3-4>7OF~B+@>`Gl{fM@k}D^t2~XQ-@|ho>CYhT zQ#==w{tePUK>7zr{{ZRFBJBe_XOZ>+p0h~%7|&&-eS@c!^oNo50iH3W-$?p9NPh?E z?;w2vY46}EAnhGI1*BchGlsMqd8U)ThvyE`M_PeL7+A~$&esFe8+aD*+{6jf8I`d?Vr02`?bLXD(rcuO@ss;mZkMPWTwY|6lg*2fnBJ|Ns9hNs=T< zlC&g^{3k6*jLoKDZNvP@hGCdlGb~AxBuSFABuSDaNs=T<(vl=0Ns=T{jwblPKRkD)z=_RZP!p*@%OWZENWFHU=L+KbbkM|(2u5ww@5y?}MdzXNyT zF4|}>PkRB&xS4fWO#2wx$Iw28_VToEW*KJFK8E&O+GA*sp*@E7&9_lcdot}2w1?AP zz%mrD3pl^TXKY%`+ zsJoRq`WMhYrW^C5|8Dw6^rW5so9Q3khk4RJpZ?|Po1V!$=|BAmhM%P0Q%v(TkMRti z#dCO`dC{Isdj##}X)l<;yk}w-W;0LPBWN#Ad%<)bi}rll^J&kgJ(>3Mv=>aHjrPT~ z=h2==dmioKwC|qEw6xEreGKjCw5QXaPJ6)=`p}+7doJzCw1?9kPJ1}*i)qiLJ(>0h z+RM|vn|0XDI_zd0a%qpCy*%v&EaPU@VK(ivX`fAd1nmVZLq5wmoAx}~(`iqqJ)QP~ z$El}1m-b}ZV`wi=dwJT+)4q5F+v#4~Ml;=gOh1Nc#xkD=c>Hn9e?05-5RW^7<(*W%8U><#&U@iT+Vjum6qZFpmw-%Ps zw+*(@FB8Y;Hy#ZzlfDhGlDp;4w-vU~ zuP+YMZ!9Wc4t*P8HGMl_5B-KB3=`-ZhWYeuigol&#eVvYKxs^;ZyhYBZ#=fsFAL=` zn!e>Qi@pu9ioWf!i++Pq43p_w6^rN_jZO6Hg_0OX-;$V0-x^p--#BcgUj~lSZyYLO zE`1wg4gI>H2(sy01QY3784KteiS_jDjsx@?i87c$-+EX{Hhs%u41EjeJLWm+ zX45u@e1UwCoJYOwvF64U+!h%XoeM!g3s8IZz(653@eV|BZbgy9?O&Q5<={(g%wVvCXiVzM0rY zzf2sX-*{BQJo+}lTKaXxKKczuDNLhpEi9vN8aB{34F~Br3S}{qz74RFzDd|gzZ?|B zB>GmtLi%>XYWjA<9{LSM2~44Hbu6K8D{P@(UmT|2SX96q`o?29edDp6ep&Eg0)4|U zpT148j=rhbPrnf;jp_7_#v=MgV-x*);Sl{sqa0?@w;@*1w>@^zZ!n5sGJP9kE`1wg z4Sl;{Fa3t0B&O202A0w{4qNG$fur;rhkBSn-+EX<-vsQSUp9(hB7G}k0evH}p1$32 zfPNzpjy(E?V=;YWu$g}8D4^dMl*erPMj)TQ$=FT5T$KNw=?_qc{GaHL{QV^Ie@^ze;j>FViH+_?_nZC)`Oy6W|rf)Jf z(>EEL=^KN^^bNLmHdMIlH5-2Aiw5u=^y?P z!}JedPtrepBT4`8%_RN9KPTxQzKx`R_*W$T!*}vpS7{nlItP`YuN#K#_wnyKo_Y9q z>9Yyyc2WU;=tF+Kkp&xEBs9_C{?)?qvL!}lir5QaKvig=_V3nMTA z)3F@uupPc-^g&akVg#mRIkv<17VT(iRxnSbA`2rh0rRmO>#!ZZcj$wrNW}Z>@;yvv@*GILEPwL30rTn}p^aQbSaZxS#{P3?PY16!I>-e~+q^Q4|Dw=Qn zrv!dTmNh=WE7iy(!7{Yc;4@_xgqrwQDCOP!kuM zWScPXecHemX}xdN@`3f>FuuP(h!3x`d-m$d+q!(?#s4jwp4nmc;j4Ykm#;;2w@2V{ zQZiVlz<2w?>|0`#@bDqFJSjQ$$?zW*x|+AXasCyyi7Ec|_U0D&Z5MCg*5++cmZq1l zWmFPRZgfhE*aYXJ;K0uaYiIL8Q}3F5UB}llE}^acMv$NOQN@<)(J%1fOW-?nf2<9B zvF_vt%bHte@9Y7CviSZY^UKovq5e79TmyY#-$=^#3 z%IuSCpI8s(Cy<$ga{a%b3^dy+X&3&B>FH_{*7UDQzkx&fz2#rd-<$qV3vC_!i;$v8 zn9t_nM~;7b*OB9gk#zTwQ~%&S_)cQpPeI#*<)=75v!lGFh9kI&b)2NpGG7&f^s}-+%g8!Run%DR>!e z|M`D`w;hAm+14$1oo(D(XWIvCKjh_pqNJqQCrf`iM4V{X5rXf!aQNh)bE2V;frxvK z950RKBaa-Pj|hxl+?zb;{QVyvtyL?qB!6+7wR6mnG#!sQ2WAeiqkI%6$(B)erNAlL zD(rWB{tE~DR*wICVsrLyPr7^S``3@-|3(!3^ff+>d(pWpK(*tat5dLNz1iQgzMTmYC0~D z{(3t7&ffolDoYl|N4C8GbkpZ4)8U)vv;F(AjjDc!k8X3nj( zdiTtu=9s z4S87q*08m5rtr59R|Ks`V0}tt})ycu-`A3dVe-~tyH*Dh)PhB09 z#{Tz?9M8ve-5uo3A$k(1lo2;YHCv1w8wStuW0^K2H^qHXJDv2ASFKU;nKlRti%NBP>sCI;r- zCN9z6nh=%PHm-e&tyhZurQxF@rEPptY}+=8zNFUi_J>DOC;P8|A)=zA68H*fd`kU# zk+DfBQOQxwPwo@$P@iif8v4ikG}M51dz6zmOmU~@J|F(?S^K!#N=m~9G<6%Cdu`o% zDRu3EJ2XpZVn$srH6&Kiic5rTyloB78#LjSQ%_eF5 z;Ivj+3P1O>;}$JcH}m=Y2XT!>wMqKZg!bnk_mT;Z%IMW0JfUYsH+_|=gl*c`HZ2>4 zwaYwlrV6v)uZQsvgL;M!tj4dF{C7~Zuf+2R(Q(aMCZ^QYkMaCZihs+x&!*4EA=iJ! zrKiLHa~xl@_Q}5H$q~Nj*3En|NlCug$RuAvQfsTP=ZkC|Ti5 z{S_K--a-SB+;+`BMT=WB5S5^T_-GBZkMqU*-v~&FN@$(v4M!&?wDu+PPC$zP0qb!s zFfb=2p=VY~qW_oof$`=8vTjd_UsuY{vo2<=% zl=hvX656(lk7uFOH|SNztWx|Bd~z0XT#Wcycgsm{-?K-GdNHfOYI?JY=WEgJBK_Y% z4BRMSKvrO7A`_$SzDB+*yF(Bslfm4Z=ERrJ^&Y{1f!uVcC-?I4UAFNEpLcWZi(J$} zY5v7Rv;C8k!!|ya@hH{(vi`{NXOW6?VePAMH*B~Sif=l?XW{(4hi<5bRXpCpbpiJ= zFK^hgF5`Qdmkm!P<8U?>FfXg?PljvwC&nAITD`No^$+7n(UV`Y`M=rK#DC_svv1%h zYxds~J{`WpIE?V34C5ew#T8fBo*wvBYT)$iT?G1X|6{+e?4I2%yAQ{P-u8|XmmGbv z`GtkuX~}Nipi64KTmo-}d6o7B*y?|*(sW#J+sp#9Oi8nM0_~UOHJfk)sZ8#G*u#G} zD*rt<{5>>1U+wchU);E#;lG`@=r{%|~ zC#QDio)jJN$38i|BIvp4u^!X&==GfTKQ3LpKfNvJyRqBA9)0?R?%{9pwQCdG zye;SW*p{{qHvhmA>MnNB!)O9ut$_pV3Gto}&NSRhAjjU)`pe?qu(kiRrTtryWpK8U z{~7StN7@z+ZfTxa$gECI_~%akC%0zZMs=^hzJ7>#{-N1F`#(Kw+r((@z)+X}H3%_- zldaeOWoyF_tsU$hT`5V{qF=uF+Sz{chqdtUI8@gRRc~t^o4}jGLF?x4WQ%q!i_OA^ znB~ch7MQua-hs!oUGNW!;@>Cj`3Y5jazoS!(d%Su(6adFd9pRsoKL*@&3sP`v(ENL zxPPhH0=9Yo)aF)j=erP7uo1XKYgj8bp}p-Pwrp-E|06U@Y#tjMs)5e*t=TRyRAalu znuT@@-6J-#b^V6dg_>9M_`(_z3w;c4lh&zcPsg8DN{0bHLP+u-&78gAhXDU=;p~%u!1b{Gc7ITA&EA=VYCGqFntHQA2lnoR`eg9ey#GxW{uU2w?Ej*; zUG?$zbG5MA?r7&aw|all`xnAJK50IDt()8F+TYK8?9@|xU_Z_gIRk9|fm0OknPi_l z?dY_{MJYp^9<@*d?LL9_#*dxXxJ7_{f4u>pme@qx9pc2?GX@OEVyYhLcH*g%+r$4W zz7u10eapA+FF5M+aX*!lH)jd_k>-Bv4y7l7m?TrlYqSxO1ursCg4V*Lm*S35T z#fLTaD;GYu@weGT{?B{(DcW__+*zDx_V=vD^>#+j%s)TUA18AjpiidV9-*fHxBd3U zS`%&{WlQtNN3`pB`ym{gpsM{w-##U?Um~`NifR$nBJkPUt^VgLFkMZq$!)%&<~IB~ zTd_Y*=WLS`kN&4kq511>T+YcZ#hxSHw8`wvdHWQ_+n@aV5WlJEfAaob&KwJ$i8Im3 zp8uoA4>iZaAO94~f8u<8a{X-nCl)nSJ6A1#)$YIlhTZ?nE^k8gKhYkzBq@B+{Vji9 zet)-<3-FKovwjV@7mT+U|G2-`F(ojgf85`?oqY5^uiqc$&wlUhzae(qKRjEZ+TCX> zMElA4+k}7KF;BDyHv69@2-=$dIryA6olbH551a+ORMG~V{8J*G^HNariT$-#AO0E{ z=%1p-iO<_>^TXq|2~oZpN;;n#c8#xWecw$n@txC$1ka3d?s(d~ZCqTlB;N93FsWm_ zf1q{SHc?5uV`i0Yc&j8Kwz&-^#kLMKdpAj?F20%l@odvI3p6%s(SkR(c$19jqvE3C zW0;qXw2o?)*e)TeHE)~PXlx4xVxwc5H?udvLM)oUiZ}IpW^+5&A^f*nMpk+^ZVKO< z4VW8T3H@Wlir)E~VuRC{X?PsT_>0B7-)7*g1OH~{@&ANVF7%%!IL^Oudz^n=)Bf4&KNfHOyas!Y?D?s9VzR>fdXpSG z?mNmpWdEFcu2<*fspkJzeQh4LdwKIBM>xa&!M~dSsrve7P$aPb2hZ0Vx0}S;>q9q- z^$(xeKBwsG&4cakmAkw;FaK)!ZJNL8>&?TPIr)$0|5tte^KbG$*gmJ|>n%Ue@|nXK zF~Q|j+vl(Po}AZl+pR;EzkGiEJqqvZ&hS*PFYj?|U-FKBVGI}6&z-k7Y}0zfUV7W7 zu=(3`q566Ky)0~+Q_a7ye%^dXFmN|U;vS5`y%>%AFb4NyEFQo(Jc#jl2ovxyCc^$n z=1H)BEORm*LmnQ-6g+{ccoNg_6sF^8%)m34iDxkj&tW#6#~i$Xxp)!t@Dk?ZWh}re zScq4#2(Mu=UWfh5&Tn8T-o!Gzh2?k~EAS3h;$5u5d&tN8Sd9;`1|MQAKEgVDjP>{g z8?X_Z@F_OqGi<@<*orT(4PRnAzQPWCjh*-gyYMY`<2&rZ_t=Xcun#|CKYqdi{EUP6 z1&8n}3h)~a;|Px8cN~KqTL}L#vj}-6isCF3!`Uc~b5H{3q9o2kDV&eexBz8vAfN^*bU>m-~c6@~$_!>L$4R+yM?8bN4gYU5yKVTnz#D4sQ1Na#S@e2;& zR}|nk9L5nG#qT(V;~0U{&;S3?=l}Ha-`AA=zZoLY94!!qXtYEOV$ljWBMz<625k|K zTabW6B%vMJqXUxB5uMN(U2rS9A_b}VPd)w}Jk~JWiQ%{lBXIil|9|xL&vS487TKwt z8OAih{zkvQGw(A}x$0d0uPe?e_V4(s$0*JzJ0vazivJrGwhYC&TnLHFkmCPF!H-{r z=kRnny#@a7Zh;~k|Ni*DGsB8_{|jpQ<8*oYs|3mN=Sx!HcJ1nwTyKCJC|*@J26}oUq<4+$RrO(@ zuQx(ojZA0Uu6^Cd8o;*5u=4)=;%pXybTcAf5(M&1Bv*U(rxpr2Bl^{^AvP*!Byr*xx-~ zaqHdb-N&-OnY?0udwIp4Pp`Pk;6CT>Jne5V_xW(!>~A=)*na30`PVW5NX$q^a>O5w5XE=Dfb)+rTX+PDtyDskb zaUaj#tMJNg-T>LKkm16PLDw^V9j8xWug_l_kY{o?sE|BJche|_BwX^*?#5r zbKBf{JC?Y|K-;(7bBP^y+;)2%xb60uj)hn3Idk^~cmFPIzYLzAyR7c(%N;(|cCvP_ zxWl$Rz2Yv9J56E3w!gW@pWtn0+bY$YIcd{JIpcPGPIboJ?Pk-uqn} zJqNbT?sl{N!JWq5gLB7i+1=^g^G+mfUinwfLGFADJ14p8XUpo9zjF?9pM!X>Bl&mE zJGLFX;=Y#L^ICHzaF^T0-E|7y*50@~jcw0Vc*UOIRBt3`*!B^(&8Bsi)5hKB$2~{6 z$IE}^e3j0;y;9iu%YA*iujjvWzH*QMS>6MY?rU$LQ*Xx)ueg6ZxW_v89N2@2-Q~7% zcb#nBp~l_1RHiXrxt)PjZzO2gjzMmlP3tbFjl0i}jl0_*`1oqa(^PoHrgx8Xwr;6j zBk3MnZCZESeV**ONrhMJ8Y0yjA#FPcZyS4VQ{fd`uT*b@v}JdD=YA=fxdARl8l&xYOGcWykgT@ zANRTN>g+Y;mEPU}X|Efv6gF(fUa#1)dc_@%^D4;m#dn|s~w{tfSLo5F_e zykpzaecW)yt-dv?!7Fxr^GaI=Y<>EB6{Oo9>D0U1)~;K;;tty~c*Xr&#FoJ;?mGAJ zDoOkM%`0|Y<`sAT?)2`pVHgv8@2A&i*v7pQ#y~yPMyNKg-?g-d!7E`5c>O}P*}QC? zq1qb!MVt3{_I^wlyb{KM&CBK)s?F;cL3lKYGQEm7(gauho0SrnASn#j7Bj!S-GIJIpI~thQ<0 zWwAPYY_Hfdx%0MZ-Q#ropmu9>+wC#kbC9>LRQrpK$7`NM-u4bYr&-_N>D<@9&C8x+x1Y_+>TNx| zV%y2;ywZ{Zcigs{J8tuI$8FfX2C#Jvem+yE^NKCA`&`@k-nMBqZvxWlY?}tx)eli; z+cbDOJ9h-vH4IT_=aJy)B0|(%AEM5dxlSSVq1MOhLame4hgvVI54CPqA8P%qKGZr| zeW>-c`cUg?^`X|+mc6j`4c>;K)-%*PhFZT+>lSLgLakG%^$E2uwvL6Zi?s!>kJW`* zC#w&&URED!-K;*;`dNLbb+r0W>uL3&*464mt#7F3&Zeyeuh=y1xUH8vZtLTY+j_X; zw*2n6Ew?*v%j=HYa=PQTJocOf*99-9jR!BQ)derF)derJ)derN)derR)derV)djDE z)djDIx2@gvu;W=b1n*bfL)7&MQI{5?u4jn4ULor2@5JE8O%GAmCq$k7trFa~Ux>Pl z5OsD<7Th;8MBRW8by*?mZVOSD9inbvh`O8*b%R3G4GvK^Bt%_qh`QTD)C~<$XXowU z?PBNX;5s`;2iMuTHMq{swZV0EP7kiL^LlVyOo+PJ5Ou9W)Y)}Q@cit&9$aVFB*ArU zLe$yyWAJqGA?j`kQI`;+E-^%1Qi!^CA?n(PsOu1-E;&S9#}IY)-bC=aojx7}zE2ap zUH-2f4}z~l+`lV_vEO**8gGF7-yXK-z$^B*s&W4gwc$|XZe1ADc*U*vuI=sI8T{Pa zxzmKIxAS|bdOOF5s<-oesCqlshpM;peW-dn=ZC7d^L}u>Eo1QWY3pnCq1M;xL#?mX zn^5x)wZ1lOsP(n_Q0r^;q1M;xL#?mXhgx4-mQd?!^`X|+>O-xs)!SnPudmgcQ1zkK z*QO1%zE&Sf+R7`|9$aVZ6I^HO6kL}SqRy7jT~Avc zcif&|cibM|9q+}s_3?_WzdLU8cgJnm9k*@jj@$g*ac}yr)Z6RHD_+0gdYeAD&YNd& zy*qDvO?t(hw_ESc+pTlw?bh40wK33}De2Y)FH7+2%H|tf*E&R(^ z3mdNCET{V%xW7-a>u0aH-$}T_t0cpn;cCvX{Wjh!cX|WlmCkTgXW0GB$=#MUooRwU zAM%>q>+~*OC0WH8zRDSH>I{2>?mAWWDoJ;F3!9(29#=bk3)?n@t*iT-xa;jcKX$zF zN*!;2wCh%{)bj?&`p&RjAA03lZ-8v*3}5FA+clJ||7Qj-+UEihDdr z^(smC+~XcUdpOhBIm|2eKCV~n*yt7a{E_ZelJ4=euTyX5DX+N4;r?DFnduDMxy374 z-T>*Ix83uD9jCqG9IOn?iTVdCS?sZ^c*L(l;y6%7bTJE2o zzxP;F*tPNL z_f7-b`SkvFdVf28d<*OY|IP2Q7j}Jq`uG-j?h5;C==AaJ^zrTV@$K~S?SJw&=0AOp z^z{Dr-@m`r2`r-jzyHbajhuemz=p5qZ2$Vs@W1Q(IsbocXKz)`WS}@o;(V0F#i)Qv zxC%93>wX>V`$YB~A$zaizRP3pquO!DjwSZp7`wi)@3YwTjJ;=VpQGC67xtYG`yPjV zH^aVfF#`8sH15YZJcNmO6nU76>39auVGdrze7u51cpXde7FOV0$a_zm_CuJX?Z_==)9N}@E%;$l?5 zWe7tRT#f3eg?hLa5x4>I!3in|w9>fGp z!ef|%Covt*U>2UoT)cz@comEB2A1J%yo>koA=YCPw%`kVg>Ud3_Tonzz%MAk5gbPm zUW8|%IL<{WT!6B;7!`0C!f++3q8e(T4jLc=H=-G$5Q8|xBMHgqf>fj-9sMu>*%*wW zxC{5-K0JVj@CY8m6L<>G;5od2m+%T+!y9-D?;sx^;$v*YXZQkN;TwF1AMg`?!Eg8- zXB1^y;2fNX(zp;8<5Gm-DpW^pG{E&}g64?E&4@=kbV65jM=$h6CbBUYLva^IVGPD$ z0wy63Q!yPgF&lF+9}BS4@ zc5pUI;5?MZg}4|Ma2djIC9Xyd)J8ot#0_YIW{5%z;t-D{bU;UR#;r&}5A;R`Zo^>Q zf#J9ZWAFgR<6%s~W0-;`F&)of7UtkZ%*QKOgx9eQEAbxI;3KTZMr_9C*oLpL6W?MF ze!zbGj6?Vh_78QQjZ(M>6>%l1qb?$F6Qa=?3229o=!)*>i9X0g4svk^?!qYChp~7N z6YvNg!&FSiGk6Yju>gzkI^M(zyo-E%fVEhUP52yN;%n^2_t=M@a1g)ZFn-4wXY-oC zIXDkxa4{<43RJ~4sDo?K2sfcQTH z3v)0JuV4|D;4Q4g`&f%luo+)q2foD*_!+;!{>9+4xcE317vN%ChAUAGwNM`sxDk

u1G^)48TAP!7z-#D2%~4 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 literal 0 HcmV?d00001 diff --git a/ssd_fuse_lab/test_case_x86_64 b/ssd_fuse_lab/test_case_x86_64 new file mode 100755 index 0000000000000000000000000000000000000000..d622742e986d271d34ee4d40dcff29923ab6ed0e GIT binary patch literal 805648 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ë#PpddKcs2|{wQ)UOV0iG3AxXk(+U#$lUD5@ zqe5q$%can8N`(CjauP>@!)^yx8An0It{<-|nxq|+@TKC#LzP{~gdZ)AJe1=-D!ijM zC%1#&zLCg<-434bYzNO!GN#(WBz}rbuKAKH50&eQ#xa4P!&#ci0Zx7zjbj2Q^~Mn< z;+*`>I8G2p9x9`NalB6)c_>G9iR+QHgO#L$q$HNfbvU|Kg@vytBIeL$(Vx;=NKH&a z=~zQ&zR<}-(YXhNTb24p#&Ljz0jk_gYjBzy!5Z~ zI@@?P8ZZ5;ybf!KpJ_H;`d4|aQKIVFDqdo@inrUXVp2i*h z-&Oisews=l|2~+!ujwM*Ch#_)sXuR{c^lny8gGPHT-wx!Hw8wk-_VF=PiSPbrl5+%r1les*DSmsU^fKpRs=k*9rog|S2@V>H*3xa zre5O?qurZ0o8aHz`;GFwO$U#&b~O%(Gp5jp??WTM7k0`LlZuZgMlBG^7St|qP_|1C zDheqxfey>(pjU=lPDy!RC zWhLu_@HhS~9wXnXeapegE;E{2AzmwL89>=guGL;6KbEK;*M98qnk&P-(1=|Syi4=1 z9lpciJIy~1h!;X8B>tVRMDnG4zasQkD)hrTdYoSw^Cm_Jjc5stY>~unO-TA$9db6@ z9|Y`!5<+g)(!w+nbNqTfEKJN7Cg<1AcW|8vICA8BweLB+WFMV)Z5FT1wVNGY zj31TP7vl9r?H3NO=kSVGEe1)#hptZ}|1HV=yY}CX;6KwTjg(RC_;+jHb$DH4yf%r~ zrrJ#ouZxXWlXx}NHaWc19yn(!aE2y4*UOUBWXYEdhm)x60*~W|VWgLJ&GI>*izghdHBlypBO5>M_|FT+^5$*i1 zFF>wjDyL4uH-+rcCI7%&rC{7B&8*_ zOB`O;7_ar>wZ3+}!|P(>^|^R`Ui-Pj>qNZBJKnOMfkQ%NsHW@Dg+52U*N)m94zFM11wHYWQEiDaEo1aWd}I2- ziji+f&TrJd;fP*tQbq||F|why!QpkD@%li#KB(m`al3qa8?Wu+wY_$`!%OVaK~KD; z>O|OhOO?eJr6v02ijlAL82@_h>yGGe5nWstiT|S7MGmju8L#)n>;2mI9bU7H*JtAO zS?y;IuX{8-@xFNq4)F#=E@QXpc};SDt@brXbQ$Z4tEyk`)Y948AoMU^a@+dIb+zjp zUV9l$Nvu!B>(km#9bTJdpylj)WlIbW@e2I`4nk65|0OBaN}9E`wT|S%CMUT^edNO0 zg$}Pt#%ry3t*w=t=wqXd@y2VLcx|g?#oP9hb$!T*_m#u7L!7<~ad4;apF-b1Yyas; zZkMhK3a$X zSNg`+Npf|yb#`)-uNDGUi}UK*)p2K8dK}*<&W*K=apxb9acn$TInYsPm3<{cJr1-M zto4NQSg+0MP5V^Y#S`-N%JGDT_Rire$5S6I^wdWRCl)WQ>{K7kuaD$&Q+toZp^JpNiL551(JrfgOq<$9Irz8>^d6(Blu|e{7;Z>Sh$oJ6`UTG4;f9 zRLok@T8^T*Of=25zNmE2p@-NDP|-rC=`$sk;uqS2U zDo>HgV1Ofo{{3PZTthu0gCFP&o@F!#6(j2V)c1c>*pS=0&h}dv%botLKI&WHxJ-3k;E(R9nE9P z1Rgf=MiWn_EbuFWri;pK`YlA7ekYNpR}g9XR3c4}vldQft&@|rSV|ScNh!|S2uatl zCfZY3@0NHfP(J*Nzm5z0g?g76a=HEYN$e9RUlMNi1is{D`Y2v@CrXS@NlbsM-|%Kc zrV)`@jmXqlMI)M#nMP!0H8N8tRFepQyGzOG7s)vp`Mk8?Rt__1c@cd9nJ1QHe_;lH52+?&dlk6JOEjWnTUJl%PJtp&70o7XzR0OmTo7T^fT^bQ zq?3}VjqPV@551}Y`;FVJX}N{eTA@H`p%&VjzcHl7`9JUNO0o_rfT`93N< zSGbX7Zi12(2ZA^RW`}b+_>rk%Mddp6+^nA4 zI~@_8yE!h~9{FrZi)Su)9tV9z&{u5Z+1bXEAt!k9ZSds#sPHUFrr1?JQ_yShj2b*Y zg5G7&`=*VjqH>*jZdT9josS657r4zMHJ)eK~+_KWG^62qp<51peX1|>V6Ng`U!(-X!cF7$R~r-H#VV({Dm#Y>_1 zUpAhK&UNa!Sv|Ms91)(Ql1WQZ-}ko0Q|OZko2G4CXAtcTeP=@7#Wte3Hln!-QN9hL zd^-_s_xSUFo^A!E)^{f0nSx$}=jR5`_0YQndgt1BDk|5h=VtZX&QS9R#-E3uN}?_W zo_o^b*$F&*K_654du2<9?%%uEcy>{E@@??s`>60NPo~(lzNetq;JL%#`62W!hTb_g zo{GwK>bY4xw|6-rJpb`u?ZflCw0LHNX94t`4t*Eecy_h%L=i>%$+y9i@1w%=;FC!d zyW*LGUW4a$gXag(+W@_9*mx=`*Qw`b_1xa|i1556nYtA6`E6P}v%s?_^!0^4nd)o# z%(L;7)9cnoz73vy9~GW|d!jvfrl8m0`I*7;RrUpzk#36Sbw5&+ay!a{Aud$hX0h z@1w%ATQbG2c&4D&;JMAvMi);>JHN{eSEcpd|N zr$XOA8&Au|Q%?6=8~HYP@_kfzzV&Dl#jbd!px5BZAy3hX-Mj{R>!J6bHlB*gb?UiU zJ-1s&gy$*A)WzkKrHkRR{ycK2FEo6EFEp~z7aAAwg>IGwn|`i@e-Tyr{te9Yxi6o8hF`{g{XF@dXA>BrENurcfu_a;3-TKojl*73zpxyRRohRb^W z$R%*T9%??JygsMAcEicu(6|FqWCWN#Y6%dmhrCb7_H&Zo4O@GI;}19~RO`vZWk1!( zRnD|XJC+un(?_jxrbD_a9lQLNkaYqnj_6CsHGztFY{kEnf2yoqb8Urh>#Tn@?yy^~ zkBmS3&g^6^RoFO2LY;)O*Y{%R3QH=i#xfR;^lp~zV}h1o9OKT8Z~S8Jvq>W%ec@mB zJB(Zmh#x}T7ING{she+~ZoFvY%|^$~Mv?!1Pfo z+nZinq@||HA+M0)$`%x~$&IO>Zm6W9UCK8ZLDyVj?Q;^^$=FKy#!4aq^H_XSO0lw- zJux)y(8S>QL$q$Te9Qikkqwl`2T=F_vG*Cf)dn#m$*hD zfRc*|`9IIhoZWMF&)E%_Q2hSMFMH;lGq-o1_dPRnX5KUN8cKW{xzb4OBPCx%@RZb} zPA`Mk*TBQuDC+~{`H`i3g}q#~{1D-I@{5+0Emwy6y=YUd7h}{$$=3=MJ1i*Qa0D$& z(d83{b~v__uPzA_=6ZT1C0!PjZ+EG$m@@7zttmNXY)x4oKF_qzDP9kGzXWdgf`hkE z%KOOaLnUuS@RY1a9bW?Pd%@FNDEobs@u8)>g?-=)HhCe?Q}TjUKEd`m8Y{M3802eL zv}LK0?XwjMc6FzG!x6KpTd;i%LpK~t%2!9;gt0-sl!}i1O3*?EdN}1t`=;V`kmpWt z*N76|M6NB6CoF;GAO|r#CF@YBonW>ROuUK0T9E0H@IIaS(cZH7dAqz2>M42NG9PKL zIX)^Y_FM$@0Y%$a#kynz-quNbQ+N5iM}88>aV7 zg1t6W;NzN-E`5AU`?2D+0Br|kwg>Xx5Ba}`oM7!G<&PMilC{8K2kNp1Jnl!?@1cyt zR`RF4Yw>2gyb$Us*=(7Ql7CcI?70Za-?nJ$QVmaZDV`^56nay4CI1KnZR)Da--LEF zY?b_jk}=63B!3|_E7?f-!+ss|?=;At_Ibs1sQGrt>{ZBrALJi^{9#Qe<&PMik~(0p z9d&sXJnlo;0hDpbO8&GrF5YC97eYNHn=JED@{h`jJr_aw+ZJtIYPkF@QRq$GmHZu38U%dJV_7 zGD;IJleXb9&5ujzpK+P93YYmSaS5|mYNnx3GcBf?X|L2wd!=UDD>c(zshRdl&B|Ws zabxYSL{<@{$vKe7EWxB-%$JCo-LNREX2Jd{WdC`S$^LV68;pmlmY>Cypw5!{@h$V| z0;InJq>3}GO+Mv(MHExdC-Oq3p1)S6p6-RP!u$mSkolvYa5GQTIi`K*t%h9FbHnUA zza(>B7?Cp|;QC(w*>~22gU;s%_MQLpIo)3GQ()h@eqp%ggyzOrpa0|bo%P=htG?2g zzPIoEdU#1nKd&3M^m9dDm?qozVq?BdWWZty`%xplV#ue!JT0o zTjFWMufntc>^n=sxwFwv8+%Cuo+rz`^B1MP!PACcg=hcSclLZUjJpt?TvHja?+mxu z47X)9+GB>tHQKyJ+Gk=lSXs*s*mnvmQ!K11>(HS6+kky1R!|4*J0q-B<$ArP)ho;i zENxwBA2wj$Ibh!zT;E6gYqX|?d5Fn&miB)G_MI@WiLf$N>z5oK4A^&~eU55WIbh$3 z205l}t8C8)>^leSJIxldXnrDXVpaPSZcRI2-&r<(z`oPkc2>48AXcuSPI0*TaJL zxc_yg$sRXiKUS|fd`TydDwvm#{Z{9nC5@U&yL4 zp(VHE))nP$E^=()GcWdM6-O)hhU`rg7QLGH!r?rT{@jX z3R~abGs*USY%Z!7oe2|Mab&Xqv8cANl{$$MibicM%H4uOgC*7>Px5b5g0#PL)ogdw z1yWs(?M2rODMU${wMeXCQnA!tX;kj*1XIM5qN7s3#K zjCKq=IeKm-^%1Cwd{Xa&;$bG-pAwbHA+-k-4?h{BZ3mUDfYZG9@;d=;r0dkd?5InbT(E#9b4n;mnFL+D`ZgWa(D=_Od*{Ip;b0xZfl}o&OYl2jC;L ziyx=24Zez1tn|aB1@O1S?^y}|Lmu!Z>Ru=68xFeWEemH}2flbhIPgLJ*Ee6q!4D%R znamZzUNM-OMpot!|HUT!;|=(eR`_G*M})%nW2Z=kKPZJiD1|>Lg+C~TKd4^d zf3t-O;d=$JMaDlMa+{Hpz#nIP0Dt%d{x8zEm*o+EoEifB;S>1(iM|8y3H*OSUmJW9 z|5}MZ{1X2~LHtF1j|2bW;@J3ip&BN0NZ?-t{HGHCdx`%-6aI+?{7EbP6NC7JQuu>X z_=8gTgHrf|>IMGKTd0u4pNzjx!RohudopcMX~6#k$T{-6~8pn8G-^A;*3@h9W&5xLFCN#Kt& zW`I9@0{_kQ?PYnyAE(v;fA|Fc|4rWk_yqnxqpuAU$jcZ*j%O zzXR1UnP&oj7x14#{O>0I3rzT@81N^p@W;EI!XK2vAC$r$l)@jB!XH#G@W0tYg(UuD zJV4|&BPW4B&e#F|@Cp1k(YKf75r3T81N`9=`2U{11Mms_e@b5)d=mc}i9h@j{{=z( zMSYJ0|6*rs{M%6t(}tbE-wFJ`M*Qz0{tuY&Pc`6ATH%kKF%|xx6#k$T{-6~8pcMX~ zdV&A*7Ahq1C*$uDxy{H);EywgfIoZ!|BdwRWqHIOrxpQ!_yqo|={o?Q!2c)owZSLx zUm@{_U*i8j5PwnMLg+C~TKPZJis9xazyoCx${K@z`L~b*368PgxDc}#Ez`udMy)2LT zvr)@JsyX2k{s6Jr4Z0d?_~mAE6p1^HSh{6Y#%{ z_w!xJ?2`Hwb{V5&*XLR005{1OQ420F)8{C?x<;ApzWj zN?J}pY!25U{r#7GzeVIWBO`%7&I|+o@Cp3a)3=w!5&!?CkNb}b{C`8=0r&*|Kcue> zK8b&o#28g{s8v~s$nu;1^izE{9h&fcM$%0CisUK;3uu%$4;OM zeozX2Pzruf3Vu)ueo!I!?dN|iR7mPS8Gn<=ZAMN4f1Hs9{NWS$V{>rPF(~3 z@Cp3?i@pQ!3H*ORUmJW9f3L(Jeu@9QApWAh$AN$Gjj{1RjB1$7U4j2t;QtlkKa2R! zHQ}FOz@N0jA3KLC{6Q)FK`Hz}Df~ex{6X~s|K}}KNa9b%_Y=9z$VuRjGvI(fd;<1RN)Uw;SWmT4@%(=O5qQx7x>?7p+XXWGQN+1};2mZxh zw8J0M{28LT{eQ^46;_~B4B-;fpWr}AK=iUeoPb{^igq%$rPGhWMi6rZbRldEoD zLec2W^OJdU+^9|Z6u6pD9sUp(=&<|~Cl8VA%?hOUB*yU(Tf^X%#db5|I5mB~|3PdR z<6P3g*?w*5qnz{CXRpDvSRhc_=)>W;XWH;;8fC+wPelO~yE2UgYS|N$aO}I?oMw$3=Df=@n6{~RZti%|(xlk;B zU}3Ft-uH|$k;iwd8qwMB$M8;NQr;0d_P8nEa!8Mz-qdTxr8y7ka~pFBcy&s>Q|(=msjEckiy}c zp29j(+evLFwGS5}=qbb@n}8_1JnRU@Gd8(rFZTYz9?6E)N7^qS`Es`VNL)>qc`jvk zOG$m7)b~mKn$)jJac{Z8zmURVrJlmIq;`JqhR@bFGS>Oy3Auab6Za8QBseRdV8b^8$!mO_zC8Gq-9|KPL5KQokehJ5ta0-=zMV6!(iP z{0Aum4b5egG^#@Yi zue9)=q;Ocgr|@}Fjiee$wcsMl$D#0+<(v20MD*oc7eeG}y3FHy%n1q~6Cxmj6EPMe2X}ey@nWoa=&!TuqmG)H1hPQokVe3sQd~ z^(Rs^#xMLAsTWDTNa{6GuaWuy7g_!XxEEP|to?+Md^y*Nk+_;J^L&W8KSb)6q<%^2 zNm5Ue;^y9k|0cDC)D}{&lX{)h0bC?M2XHTvAMF|Q{?&-S+@s2;%RC-tZV!`soYdo_ zo+9-Wspm*NM`|mnt)$){^#-YfxXAJk;+{qMYvcy$x;+8Y+{e`Sk(xnj2B}*~-AXE- zR6eOZQhB6uNac{qB$Wv&8AOU`-^Y7+&%@9%Qe~v3lbTMdgj5Ns8%fT{$%M`{GA z5u`L+GU(HA(e(Yk(f_A7eHrLaQk*rKEN?MmEoPcIq~?&CMrs5Zp4Bmn6$e3YNE!X%;fgy`=6XHI>v9~mU(s9dJUZN~7F<9PrndZApa}TL|NPV5u*Gb(>>Sj{ck-Co5Wuz`6bvCK9Ne#wD zls6c+jO8WB^6-|X@ca(be1~biMe19mZYOm+sV|fIGO017#*q39sn3u)i_}@92H_&g z8-!cN^5SKA@xk&IFwFv{xtrA8q^6LXLdr$TMQSvu(WG)o<&rv+)S0Bxa1rID;g+#H zhb+$#EbjrPd4Or|B6Sz3uaWv1DJLl>scT7HOKK#kk)(!`8cr$|7g1g+ZW+qUa@J&r z&QoB_3Z|(bbtkDiNlhj-nN%UELQ>a|x`x!Hq%I|uO)8sI3NE6&6x<4y=bMz^%cz;0 z0NIK8OvaqgH1kQ7k}4%NiPR)g<4KJtbv3E0NnJwf5>i>DvPdQ4BFbY+Vkj@3<;5Gz zD`%Q=ruinRZ<4x=)NQ10B6Sm~t4Li%>S9tClNv^97^x&&M0rWLWhl?V@*KwU+)U$U zn%SgglbT3sBB^nt#*w;`)Rm+zB6Sg|Gf165DiIe^ULtOV%FCkkLho#hIge@Pk-CG_ z9i+ZW>Z_!_MCwbVzCh{=q%I_NA*s_zolYtN7g1gUZUxIjf9NRnWng=KN2&h&&1IUo zOf!qrEK*+~^%YWMNsT4-c~YMzbpfdhNS#LNG*a=ni1OlbD_EZPOjc>Qe%{YC_cP5* zQZq?SAT@zh0jUB~qezV+bv~){Nev}6l#~M(QJw?0LglT=S^+?>(EGQbJ?sw-IO4?q z&gXSHVVa8lX)o2P7GA{J6k+9SA%x&Jf0!HXF6s7`im2=f3+({JkMtPSCsUhw153v z7|bW#{`IqA3;_S2{pG1{{~E5w(!Lqf(w_$V*UQ3z*PrJQ{-?VAYlQCT>wljH``6sq z_@CxHrLKh^DDEmTP2|7oy)y&yLJr@H;Cg$hahKMnS;IkE9S)$Ly`R7m3g zX|R7C5gY$g-Tu`=g(Uu;2K(1@W8;6S+rL_$=scod1NHvjaB^6=6ijV<&*#Uc5sK#5+k4XD0*f$N>%L;qp z0ee|A_Hk@42JB@A>}And4A{%6=V8EJcEDcNU=KWCFN@LUfW7R1y)4HIzDWc2vV8j* zu$TRW_Of@ZGug{V>>v9jb9ilfR#9zwHov*%_sZ4Zz~{=?k!oK7k9kt?E6G`3 zx7ahm&+C*X#Lk&}hKlVHaTwrgT36qR96HNft@WLrl=XGr@wi$MId!h)^j+=rx$tq^ zHLe<0JMJaUP4`{xb9L2RQ&8jT!j1U3nWes~OMR|mr8U=-;^r~jbj(eBFk^*=;}nv9 z@~70eqS0$L@9;zkF&wRWEP&RAXKBMH z`Azd9mD1;zP8_~WVwi9yRBFQ~_#;s@OR_Xk#F&#LocR*}#VNDyhXNF|3&+(VoC%%6 znewr4AWBAoDCt0ybfRm(AqebFQQXinQQXi9QQS~Z%B%?pLveIa932!#2gT7radc1| z9TZ0gngauIt$G@eaV-f@qXio$!1r-W;skMZE@==C-th{a#o0Ys46?!1xnu*2D;m93 zTl!^ag@DZ=t}f|Jh!?&o3Bs9~D4e^KgmZtga2BMjQ~3yV$4liXP8PmNNy3?yD4fy+ z;mnB_&U}Y(ZlE6G2Ypnk`G`_frM60m^OX|A5$G03$0b{V39_x3B3quBAB!k=cM9kJ z4&f}oW(`6MPN2Z;01*Y!L4kBoARQD)2L;kWfpkzHodxYm?OdZfwCX|vd_Qg%N~c6T z6hkMAM`Y-9@xTndQ#?LH%f!Ppv_d>uLp|+Mk-4kBsL3VbI>+Iv`B;9XPzecCBGi@J zUX7(V@gRQ_An|o?B`* zV#n{wTXHuRahvhAw>UOJBjUPbnG-9?-6W_q(viD4JmQB>a9jXY0OKww1{`)4 zaL`$72g?YfgD^VmE#OSy_79Tt038ZXR7cfgj-ehiq!QfK6L_t?rw0?v_#S10e>Gyv zcKR~K8oA+v4;k)@Z>xL&_#@9aZCT(BM_kPzZm+)YMyI#wM%V&eez7At4(?T#OZWP# z;CegqwCe96iMJhu7euLcnucFisg_leip!)_?152M$IBL8cJT5#F0<=-*~H7syzId? z){S+%?1Z;*124O=+e^zvUa)=7L2O>(#>O#jY~I>SX^EnWZd$e#p z#QP5Rgl}&B2SaZf<@fH>yiMBZI`<_NDFrp#9&uK;71cU5SMH{w+F_o!WbOk0U`g#6 zgKjA3*^l(7B=%p|iz~|pCw)=@#rQaF_okii73>U*%iXLko0tRMH`HMhnK+kpMA4zu z0jRl>j1RnUR&0G3(y#jP6gddj2MkE44++Pm4++$V zA^oop?fhs{w&hXVhm*z6T?T&a^`SkwK9JeQgut`-mNi!UklwHQ@HjaL*9W{AQy&tK zOCJ)c59$4{5AX7TnO^9_$>Qg027c`Ip*6ZbklDt>z#p?>>%-uF)rW`4LAX97NqtB< zE`3O%J`C=EeRyS9@ATnh@#8e`W3LZQ(e;7MHYNogJ0rF}4C+^X@Q{OWeMpx2kbGSF zkW76T)c^Xh@$}y5!^z_3S_41!`rwbQ4`jA6Iq<#HV(UX%zv@F7ISAK>6sZp>$E6Q2 zDV*1t*8lqOx1qh$hm*z6NCQ9i`cN5NAINNDN?;*gwquPS`fS$1ZS{UJog9SgL#ot= z)Z@|zOtH-C#HGLAFIM9XxHsd6lf}<)13&iq5Eoq^$ZTV3;NFbb`jFDE?L!GU2-k-+ zsSjz#r4MKt=5<2P`&%D=GNgC%#+Ry>$Ge%}<^ze%?jzs`C>?AKIhp1DS0c9QY#g zilq;U{i+Wm$U(S1pv|B@q#u_)VCrFBC*Gs`TOaPiXjjKSnm(K?eqO=bn9ffWeQ1rU z4`jA6J%C-9V(LRezv_cV4#M>TJtFmC$Z_cdrY7fgVxFzP_2Fxn9ntZRrVl5JpN%wc zQS)O_^r0!LK9JeQA%Sy{SFH9SzF+mB2XoUA`hYPe^&#W9^Z`p3^ExpP-{1P+1jjo5 z(e&YD@$)yV_UQaX(FcE2eIT=q8G&@<6-yr+{i+WKH6d=67en;=vHXsXeezrju;s{H$zkJYfS2==eG@{hC^G09)qi*&)(AeQ|5*Iwieau6>681^DI z^6$GBM{D^T>@uRtzn}S74U3A{@{hC+G09)qhjhWVAeQ|5*FNM8au6>681^AH^6$He zBy0H_>@cFrzn}S74GW6c@{hC!G09)qgLJ``AeQ|5*B;~zau6>681^7G^6$HeWo!8x z>@K3pzn}S74U37`@{hFtFv(xpe{{iiAeQ|5*Z$)Tau6>681^4F^6$HaCTsZ{>@1?n zzn}S74GW3b@{hFlFv(xpdvw88AeQ|5*WTj|au6>681^1E^6$HaXKVQz>?)$lzn}S7 z4U34_@{hFdFv(xpcXVN9E0+BG*S_Noau6px%3oGNX1RGx8|^i0 z-~Zzx>@`gCSN0lRc+z6Yzwd^#mhvYD;qs4RuVEwqzI#!zmVbnuhK>CDnUB@z9eeTo zN7!eW@sZR-_LxkHriv@KmQT- z7$*5EdyFo;X~&X(-%V#(%AXvB%Rh!ahK>CDZlcm!{tlj2 zU0g|vA^*NxRyY#V_7V zvazr58bd+~Yh_;{?wR-KxG5*XrsCoy{}MJ8m)A)5sz>0$rlMjY_UEXmz!u>+=)4Sj zbCh+^2&JBv&Ahx^s?F{KF`FB8%zlBF9oTlGv7I(3n@hFEW4P701$IAMxf=&`Uf&)g zayO1YiKRT)%W6LkW`R99J|EnZ16+wMA3}R`+yU-sOTm3VBKGItz7Qh8C$5U+ zz8qV*FlMr&aMl2b5vUK!O(du31hO5#NFXTy4>yR+s>3+L|*moV7!aHbYGlm-x!u>b; zKxZt!g(_9wQpebL1L*7Lv&wdA7pBt`Vq>&%*{u$E`c5L+@+ZW~*xF2%=DD{&OZuWJ zDR3e8@WK8fa;Fg#iE7bg3{@L*hkuN>BSWiBL!7`r`Mq)Q{AtPuUEe2vrY+^upuTMm z%E#J{A*Ot=INzu8Nfs-HR`TiVk{%OlWNR~R<%0sHe1<6boXzz=lYB5V?I-zMqShLN z^0BrvfPCb0^Lp5GgGKW`mCGEllBeY2M&@iQ#S_}sB_*nogj@^*zKG`s1xxv)Yt;@u zKi}p0oJl@-b?hhkELUrRLHStQ0mOWMu(;i)a%vDOZdT7vUzaphm1O(;pg<{~!Rq;G z%zx zFv|y1ul*#S@hl5-DM9&IucOD54;F{}R6fha%9)jX`nsfZR7tka4+@m>NmKIqc}BQ= zur$(7@_B+~8RcWW&K*-eSiJ31`Me`mwyfmS*Cj1fCE3ac1xop(D*1fO?|V({8NmlatC)d|Z@?o3XKk{i% zYk9%`$9f$%rhM2#_N9E1#mb$PeEPbi$HdxPl;;NpO8F!y`J9auX8CZ;(m(RKgk>3@ zAM172nDXHWvoGaSDpuC4v~`cgg(V&%(9K7C!%R8^8~`-TFgd=iv=8u5;3mJi>Z`$sl|tk)@H%7-%? zeJP(yz?TzqZ;|tFeO=PCVht?H^MeAVeBzaSuH*WissG`eQ~$_kJj*i52jgvv@3>>i zhckqIDWBzH#m-7TeO=NyswCUz2L(#`IFx*T&hbmhF;osP|4u3e~cIU^g(8Cm@3 z+3|fWYMj3niyCJ9*j?-_4S0X@1Z}~Vz*wm(-;!cuU@X#{V37AURU2y zcJcOKCB?zL{O`XO?p6EX=X%|}T(7$mXS!(kWz`>=-Bo}8?E3nJPa$*B@%%Slzz{i!GPs43nj{ z`{gq))A}6v%*HPxv_5w_xaRsCi!`jyF_Ped33|=C&hi4|?)aNH#T&i~hx`-CNqSa& z2Y^`sVD1Mn_ge$w2QZt~zqvqPW-It)$>UopHE$`|3R^#0^Mc*_S$zQOXT1j^;ND&z zXx~=9z_>%bAG63{JTwc2R)?)j*zWXbWlC4ddHyF5K~xoW7wcmuf|#~^g!n*2HS@Ri zL55rO+2Gs6YS*~n&icq3>s|F7Snr~^)Oy!w&ewk(X+qB%@yz&yc;1H`QD6v9+f^+) zJmXIc&#lI3T@#)snBiiTVZa{GcpXoyPYFB+bIv>1KN8O&pAgR+Y(#wyh6Fzrk@ zF*KK`scSJvoQymYvz5A^V1{}6T)0HD5^U=0vB+KNXM&C=)|0NGe*P1Ez8TN-Pl)F> zYZqhUVpVY`b*dEOIG4AIZ2$!3A5Nk308!`Crh;FDc%IEUVAJzH=o8|Z zha63K;w_*08MeE16#Yy-F+3kOP8*x>Ji!caP#H$i&tx4>tgi?>pEu19Q$N!_A)Zah z(S)b%DvF(crkog_H=lXsg%Q$Ckdfrn$A)fij(S#@b#4~Jn z;wX5gofw{vLvYsmd4d@hs|=&ynWp23^#*}wBc4Vxp2?pO&sOAU!qawD!R~nu6WhUz&*`X&b^CdO8D^*qqu@D2 z#}o7A0?(i0?b@uL@t+XSKO;vIp0=~%cKV4as^gzQ(w1v#GCK18=mazTxA+1h>ibcK zjwj}~1)evX=C`Szj!%f^4CH9S({>iy4o~gG@O%!>fwg{~P=@p8ioR%ym}MSOh0HD9 z-!&ai%tsT?6XD!2g&Jl4`B#5C{`u!`GmYhboL@DDgq|nPKbLBAw$!v=%!4XRwHceP z_X}d?rc&*`O>x@8cSF4R@&i^Z2OBZ_-lR@aeG?yatjE!ee$1DjsXgoe2jOzoCZ^9{GbtrBl;^x8Y zT;|u7J&7U>V2bls4<5z&t$wF>Lq2l<9Db8o{&Zw>FaY9Cy&r|{RhgIF&U%?c zM5$%Bqardu@M1{zJOXY?arO=3W)jrN8l%7 zr$m0g(hGfY#nzWJpg>hwhx3C6^dnq91Txx)O7TFQYWnbX>ceW2KGb*2X;AIQ`u&R@ z@UJfzb#T-5O=v~5YVKcMzql-AecdAW#`SeqxwqASfc2*C-F0|=tA2?p9)T|8kGV3X zJlE-HuWzp~e?P=fJj*jhj1(1Pl%Mfb`-1SE4I=p6$PA!gBK`Ry!iLBQD!f31|1L7z z>D@Y_eoR)1OBi&%Wzcd46<7xO7&Ox=NL!W;cyZ+U5&(l{ta4?2ciHFgtH{B{ zlh1@R>bnoVh~F;!-asY?o9bWQv#I{YJv-{__cYf3YtLKtAM6R#zqaQH?tN7MwEHN~ z-s1EgtX#Iq{b%?U`sG)Gei>nFm-)+`pc_H2L+hG@*6Ik`DWu64xQtM^pnX+%Rf_v| z^6(y9{=!212)YD0gbRnZV3jsCf3iP}VJU8oFQe`czhNPkaIk@WEMP2t`R1-f6atRu3rfc<~$_2&tD{rPzm z{VDp-=+Cuw`lD-rzFw~DkB*P@ADp54(f{d?MbnSpEB$afwwaYe_D}r4^dQDB2YK{+ zqZ4P**K|0S?BfW>xujz&oQhKPJnR9R*iA3n;ZD?^UAqp))wklF6FsZ@R)&5Jo#pQB z>~YyYK95d3lVg>lv^x2qY-Yxz>X6Rw+}Y_wK8x|>tVQ3i#*Yj^K5>z`q9BW$ooR=o zWIj}8ZqQF-J+%?}D5oqxA48Y?TX~tm%Y7)DgOP2^c9iEiz3)~c4&v>}&*UYCmpnt1 zp)LP3jz_%ye3aoo@j76`cu2{a+l~f1UyL7|%Z`>OI4~_WPjA>@{25Qh|-k{L|IPl4~Nx_*z$Ek z98s zctueIi!ZQY?{;hGv@n!#Pi8|Rnu753&-!zB_iRv&ylAg;cY8OSFK-0>1!4Y~$}bwD zZg+`8mQ(%|$}BlwdHzCAf$}^}&rId{8^$C^>S6zlv>)x6j5KA_3+mtAbLUL-&F>-d z2Z;Nk>X%=EU-Zk)+}-FGM#H-U!R(r^2W{0g->5gO#tN(c`JhK{PgVOmUH9wt*+)i$ z-R)U;3W5Lz=l*s4@w~dPcGa|6%HbXk@RS^!-eWoQ&xJJZ)-%IHZc>;yD0{0ODD!{T zza+rnj$>mzx_5?o12d&ZjW@i3f-wL2K|kx`tbKSX$4j}}!AOb2nY%?>`Y+sI6#?L5 zybJh+=W%)pl;_v<%v7G=f_u+=4+MuM9isE@1BhFkOAb^btGV~|QjlAbr9qJQ!K(|> z4LX`2#q&yiAXg4@)z*-Yvdi!BzT-hX#(59q%>60@MP-Q8=!Ustp)p>6*!aU<{wh^E zQuX+iQWVvM#?vULC|CqMB`BMI9kS`(12g7s;T?gS%I;r+34M@ckhmNl8OmY;6UT(0ml7M0H2!;k<{U4q{n zRHtlyJ}!%Ap!s?kuNH5hE!$K7w)<7Exf4T+TkzUa2^^eD8t9;)J1a%%W1g~AG7Ba= z=Be<@ypDN1O)|rX%-nwkdZPYB?pWRn9`-ZL4cHCjVqyx^*Ir7uf{>iqdKYBXO_R(DNNb~jTweHlgYcQ|XbBHZf` zIfZ(hmBPfdvutYCq54iwHhxpH4;kwVz_ak1nzavXX5%+Cd!I2}J&)dfDd^+fXScoT ztxJ6{xyrvHUaQ&&0G&Mz&YrbBo66sF{jKMi{4>_y=}ShnQ(ZN6w>auF?;<2|jjFpP ztDh1STm?Kv%NCovLaW4(jUj;P?)ZYa)7}RruN(WUhs3D*l1(gBn zkf1bB%+FbSe_r7TU*48Xc}YJY~#K=n5J!Y z=Hlh1&RMe&ZxotyLjyDrSw2MF^|q(ZE5OyERegvC0~ECSGhz*_9WBL-L~$=st9n$d z+qNfZRWD#I8u5~~s(9EM1a5(;gjV%qEb!xInpX9qu()X-q*WydQ?B;GTGePQUm-MI zt19FBt+#y$@Drwp?HQ;qj4K0KFvQhHrfDN5WNNvr7~f_w13N!c)aV+RBx@t5jzZuW zpGPR)7DJ(DiqP2%J%^!U(m$B?W07?cLoZ?|rmPKVUlXAd8Jf;ebGgrnP`h$}#ZVMU zXlqe`)4LBc*yzk%3zYfZ#`akoIaC|DUmJOMrZ#d)jyCd$HgW;pX7^w(r9E%p$D__( z0ZTC8|4P2I)|HP6m!GEP&hl%y-`b|-&TZ0izth_Cw_v@vtZ*qx#tlsM??$v)exzZ2 zwPhJH0CWEg_|~>yz(+6%W@bpWK?fkv#G4~sJ%AlwG03`WBlif%GoTOnvO(MK&~i^h z1Z?-_UQ3mdsa>efW)bmiC=w&?w2vrrd{#xY%~53cs4+X>fx$D>n93``t#us&z~ox> z7vLSpju6Ps{G2wj3s~O>U=QQhjo&da-VUZWXd~erqrLAyIV9e6Xv>n>TY=u=AoQfb z-N>zgE)TfoXt}pTF;1gsS{}uGjH?Hdg$`rX=J|3@U=>ssoE!r@_)5nHzj%q?c`@;` zj~IrZT|_f}jD<>_7l9u}O~enl@co;-1Hbbmepg8RZit3oypCVI0Y6NED*WQ3;dc!9 zaWR|t9Sh7rBLGgi!2`ZRv%xPx;&*OL{Olu!;b#}oj2~m6Qs+kCcSPa`Wm5PJ0eWiVffiaG~>rusMOgJ_d!Fen*4&p+%dLCGopN;&*j4{08ax4Km<2D2N|gTU-1% zJjDAY6cD4sv7iKg9|1pXv0{VYV2R(bnE2U848zYZq8UHNLZya9;Pr+;&+k6@5*TSrR(^m8}LgH;)l_uHGbnn`-dry zxN&U%FbksEKfJO}NU+6kh{W&onE2U848zYZq8UHNLZwcRz^_~4hxKaJf8dQ`%IOln z3nhMEh=$(~9ls$4{DuVa!`qG>exm&YZUB(&9~L5n{v8H>@wWJ7Nc>KViJyJMF#PNy zn(<>SR0_Ya{^OX$5Az2KKfKXS!4wG8VCDr9Kg<-_&o5-?_+=RI!zR>fJcGAwTm0Dm z0X5=>_K!0#>^}|xKWy<~^ZaTOzo9YlvyT{tpIt;VevE}m4UNFBN8)!Vh#zKDreG3` z_?<8D8x;*dO~+3&;HL%g!)(u1%lVmcJ{Q|Rpho<PnTLuOQV~GZsJOYbx(S#|lxJzW!0_ zbCep(m;MI};#Z6n@q7*$s>i4Q!GgpUV-rQ*E9o!w6(p9{$UF4=3KD9@CdhEfkFOx9 zW^5Ag=>FuIvB^e%O3hfTh=jsZ75BmVAhpcFT%TY#a+5jQgd=xZf)S2aK3)Kpv?32FN%AduYXfeoUiW?6zA(TY-V1$fb;bi3ySmg z*9nUA^%Dd&Fki1N8oNF= zTyL|RhL6C{E}~ig2IlMS^lxCk-ctYUrr{&>&n}`_{|4sk<%^uf#C}+NI51z27vh2W z`hod+Y0oh*UoY%A2IlLdkFN*j>+Qxj1M~Hk;~Tqa_=xe1T}1QvW?;VFPX7kx>n-)q zZW=y9|Lh`~_3!`GeElxWp>w{T^Yfgqe}^un)Q`cnoKLPDn*wuh*gJ~(`esBE^Yx4` z=Ie)HF8=6x%-4Tb5XkyVf$0n~+{Hpo<+OetO z@lEslwPVxl!o_@l?btzf;bQ*3cI;s5a3>fL>jAZ6(~U9keUe;H@fFDRfZDM`Y{KPw zK<(HJ(--!k^?-I*2;b=RcI0Twxu*k7<#7jg&HA_2ZrJFG&!+Gdw6<&_N3@#UxQ#UeGWbbIn3{;GJy_E z)%pFDHWH>C`?ZmCFu^n}N37BGx24&J-zI_MATaCXXH@5dKq!pa-CIpD zu4N2-NQD9}W$6@1MGpAN1Alo%wdekLTvD9tj`Sb6YSRbb(6f&^0LenIWs|_Af)@4p z7CdW_7u3>`2|-%dqbv*)cqwhXDfN1 zd0-P^XYOW{(P)mL($$;qhStOoE^yGxK@L9+iyMl}^-Gi�`l6+lCw@njMx%*Z&pQ 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

R4Uf>j_lQ7UPpEM;6aAySuF8I0?YusP4zipc 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%0AM`X@b&iX*JlJ|0>J43P6m4dPeblkw|mibkI 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�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

-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 ABLDyZ literal 0 HcmV?d00001

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 z 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