From 79a2a202b29423eb34a38021f8268467deb318e3 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Wed, 13 Nov 2019 09:11:05 +0100 Subject: [PATCH] Make println! raw and an info! having the timestamp. --- 01_wait_forever/Makefile | 2 +- 01_wait_forever/kernel | Bin 66080 -> 66080 bytes 02_runtime_init/Makefile | 2 +- 02_runtime_init/kernel | Bin 68512 -> 68608 bytes 02_runtime_init/kernel8.img | Bin 328 -> 328 bytes 03_hacky_hello_world/Makefile | 2 +- 03_hacky_hello_world/kernel | Bin 79080 -> 79192 bytes 03_hacky_hello_world/kernel8.img | Bin 6624 -> 6624 bytes 04_zero_overhead_abstraction/Makefile | 2 +- 04_zero_overhead_abstraction/kernel | Bin 78872 -> 78984 bytes 04_zero_overhead_abstraction/kernel8.img | Bin 6600 -> 6600 bytes 05_safe_globals/Makefile | 2 +- 05_safe_globals/kernel | Bin 79440 -> 79552 bytes 05_safe_globals/kernel8.img | Bin 6824 -> 6824 bytes 06_drivers_gpio_uart/Makefile | 2 +- 06_drivers_gpio_uart/kernel | Bin 83472 -> 83584 bytes 06_drivers_gpio_uart/kernel8.img | Bin 8064 -> 8064 bytes 07_uart_chainloader/README.md | 2 +- 07_uart_chainloader/kernel | Bin 85304 -> 85408 bytes 07_uart_chainloader/kernel8.img | Bin 8968 -> 8968 bytes 08_timestamps/README.md | 31 ++++++++++------------- 08_timestamps/kernel | Bin 90016 -> 90144 bytes 08_timestamps/kernel8.img | Bin 13080 -> 13080 bytes 08_timestamps/src/main.rs | 10 ++++---- 08_timestamps/src/print.rs | 10 ++++++++ 09_hw_debug_JTAG/kernel | Bin 90016 -> 90144 bytes 09_hw_debug_JTAG/kernel8.img | Bin 13080 -> 13080 bytes 09_hw_debug_JTAG/src/main.rs | 10 ++++---- 09_hw_debug_JTAG/src/print.rs | 10 ++++++++ 10_privilege_level/README.md | 26 +++++++++---------- 10_privilege_level/kernel | Bin 93784 -> 93896 bytes 10_privilege_level/kernel8.img | Bin 15672 -> 15672 bytes 10_privilege_level/src/arch/aarch64.rs | 10 ++++---- 10_privilege_level/src/main.rs | 16 ++++++------ 10_privilege_level/src/print.rs | 10 ++++++++ 11_virtual_memory/README.md | 16 ++++++------ 11_virtual_memory/kernel | Bin 146944 -> 147056 bytes 11_virtual_memory/kernel8.img | Bin 65560 -> 65560 bytes 11_virtual_memory/src/arch/aarch64.rs | 10 ++++---- 11_virtual_memory/src/main.rs | 18 ++++++------- 11_virtual_memory/src/memory.rs | 4 +-- 11_virtual_memory/src/print.rs | 10 ++++++++ 42 files changed, 121 insertions(+), 84 deletions(-) diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index addfbba0..df1de73d 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -47,7 +47,7 @@ CONTAINER_UTILS = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work -DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -kernel $(OUTPUT) +DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) $(QEMU_MISC_ARGS) -kernel .PHONY: all doc qemu clippy clean readelf objdump nm diff --git a/01_wait_forever/kernel b/01_wait_forever/kernel index d30e38322c96baf6d103e6b68ff85ca081d01ab8..c83ecbe7e192336d55e663a1ce7a39f18a8e13c2 100755 GIT binary patch delta 87 zcmZ3`!m^-+rC|!A%~Tae5pG=u5MTsij;Ya%eg+n0x#`(?C0V-3>7{xG4B4qgd8s*i aD58c8DiuJf_~MepqLPV??#mSz85sfmDHwnN delta 81 zcmZ3`!m^-+rC|!A&D0P^5k{G*ij3k@GZ-BWjPpy9O!EtJbd%Fd^$ZwPDu6_GYEfQl Yjvk7XAwzs|Nn%mS#76h!3XF`50P|TG*Z=?k diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index addfbba0..df1de73d 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -47,7 +47,7 @@ CONTAINER_UTILS = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work -DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -kernel $(OUTPUT) +DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) $(QEMU_MISC_ARGS) -kernel .PHONY: all doc qemu clippy clean readelf objdump nm diff --git a/02_runtime_init/kernel b/02_runtime_init/kernel index 6a6530a4c48a6d712dc7f3c8f92c0481917ed2d9..64add528f443421ac206d6dd1bd9b8d00ddf8c3a 100644 GIT binary patch delta 1497 zcmah|O-K}B82;XIHGgn1DV9wo4G}9F=bPF2gFq9c=nxT6)S+c&_FElXN8Md5x~xLr z#e-J%2@z=#bP4R#RS(@dNf1GYy7hxmo;+#a%r{%Ej5M(CGw<_0^S;mf&CW87O)tgf zyM_Mx*Qd62A->oKEv*Qld4c`VTGhfpe{5kLrmr+1^spVZzh5+Xg*qW~XzW4(cjv@p|Lba^Nzv}`04Um9Vx(?7ruL;mh*8pNnE1;cy+Ou>< zVA=%jV1PH64?zHAgeu>gf9)_H1OfdD`8cOhAN}G#ea@eBoGt-0B@;mjSgbU4omv1b zf#0k9N~3-$LAM2X2~X%s6(o|+s<@F)q4Y>Na66DfBZU~7dxC?;;Ub4y910v}IXvdD z%Hb`Cj~q5R#A!!0>)FfUGKYx(N-x;{&FrM-LOW7uXPVh;V*LJPXBqG7%bTV`{am20 zLKmR&a2_4Nf8~AXn`$^;Qtnz)mQ5zkI75@7ggWoAFhcSk$%z#uj5;%75M=*Oi4@6^ zY_v9ooUuIV5>t8ACaz`$26Vr-s`@rC8^)sIN0~mafzFaaNJg?$0~?BInwB#dw5aTW z)hJSqB9#bIi{PY?EA4d}Ii{@KE984tnv9x^qlD}b{8QpjC(5U^ZyWmV5F}4pcw}TK zr>DXf>5PqzyE&3i+mmjt=z0aQETEfAUi&wT*Y3@FSyn37f>u~U`N={tZIdC_OHX>Y zT`z;uH!r1pW9GQ!xz32|4XME$)`xY|Hf&8(6e*ihO&bsTVvYZ$Fy@$cJ-5iTM710T zn-~*W)(l%3M3y(^l|)I-I*zU@w&dv8HdDGvvJ8nqG)u<>i;|ejO^u3%sbO7J4NaG@ zrkR?g$w7zzH;@l*kghKjt$Y#r9_dOg9HY59z)hBJ+a}JWnA5DBQ8fCh4mu8JiEI(Y zksVpn&8&_G7iI=%dp&$^T#fP1vxY$rZES$kuuaVd=w(-55+aG(T1^CIxTy zkbq(8t=>F%=|MqH){A=apdM9v6I4)pD7{#n-PvFhwqPLdoB7^1-@Ny-o7zfzmB#Cn z!bb1f)aD=PX&!?k&8u*FOhD-V7#jP45UR6v9leM(&dtOd>rlHAW4Y#CnA@MY_YSQ* z-$dU(Z_ZSVATpbwE#wFO@PD@?#Owx!E$hEm&E9h zWP%*KWSuETZwIad+UZc;p}$!AVylLHN4mzE5(Gdk{%Ba-55|Kapr4_Bf5?mUGHZ!$ z3-AcG>BAVixy0t+TYLtMuubBsU0_}1W*u&~F0K87wp`|t5|5B_E7vm7>vL!W1?apq6Ibiw(m zQmWYH60xT<*-8?l8&1)4^2s(l-;*(iN&R^v~BC~{2uN>RTq5yjRG$1v=S>JrON(Y0PU zOy4HpP*u*z*tQ(QR&~vGH8X`Quizz#L5Sw)uB&H6q8m2Gswr8jVG$E6M3<8|na|&x zPl^&&Oao(C!;Qt&X-{D}i1%1^E>Y%RarfldL#Sk6K!7d%>gYh9lcP-6v zWmA=8-EhrRW9cld^})uzTAaTq-3+Gad_SCm*YrU@oSEF}^8XDH`pVv*-5<{WWBvm1 CJWjv> diff --git a/02_runtime_init/kernel8.img b/02_runtime_init/kernel8.img index 7c705efdf67dfbccb30973ed73acf0cddf6db0c5..39f1d43238c44abdb2f3d71db6f319d71e22f7b5 100755 GIT binary patch delta 69 zcmV-L0J{Ik0>}c8903lI9UB|~0058z0058xzypy&Km?J&0f15v005LA03g(nI4lJ2 b|Nobfgjo*hlF}fbu=1d2*Ybb`>XGYR-k}=J delta 68 zcmX@Xbb@Ju3?utQS?P%(Itok-3{w;s6s|BZFiZflComjfp6KMjGVvf|Ll84iZemL$ XA4m5kh8ep)F}%6=$)WVy#MiL^en}S! diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index 829c277e..c488eb59 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -47,7 +47,7 @@ CONTAINER_UTILS = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work -DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -kernel $(OUTPUT) +DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) $(QEMU_MISC_ARGS) -kernel .PHONY: all doc qemu clippy clean readelf objdump nm diff --git a/03_hacky_hello_world/kernel b/03_hacky_hello_world/kernel index 219cdaef907b777b40a05c29bd4c01352473915c..3bed3f75468722375d265288a5ff0ce884703e80 100755 GIT binary patch delta 4532 zcmbVOeQcFi89(Q?K*esowS{sS&~_APDcqgU_akCP!45FYK$cA;EbP2rw4oFzWkW+O zi@5LyE_5L|(@cRsOfXDG6O_!q#{Q8+mxyytGd0wyd>A93Thy`C=Y8LEF!#+ROKj5n z-1ql8=lT7fbDneFd;Lb^Z*Df8=*2Hj_5EX}U1D_dqnVkG&aQ@c5Nbl{-;X@pUYa-6 zh)!aJ&R=~WO?IDdpZsG3n*8=fRl-Yg+g^lDq6T!~QwW{7z7$RNooUm$0T19c`nL^u zJ?__w8*wK-t@k(L4fw8py%8^+zpzfi2CVNi;+5rtkgyAN{R*MA|Nb*V?fUbLcvZ*c znHim-H(vT>*QxV&P7l3%=g6#^7x^swRtx@)#`ExsK4M(w-fayC4V7|47@p{@^YAr% z^rAl>Z^9+Y_0bOemWiL$FD}3fXB~!u=jq2guuSnkEx-QH0-1_}P z0k?i{6>#HsJ6h9N>vx~=Yw?Z7?`6Q#b+?Af2A>PlQ`{PQ(BPZ(mBr9rALeD+a+>DX zs@Zb90&eV~qXl<6v+NihE8xwgyzT6G+jg(b&fKj-R=D5TyOk5j3U?X&6;r+yc*fuZ zdTJ4r^QOK8T~@L7{&!CEVPDEdQA=MhxcnG;H|+(B+qKw}C;xgDTJ7vxcD8?X80&7%cVk;&J>SR`-pRwwJj~>wO;4p$D-CJF66)%x z71*JtQ+g6^$#kD>=F7P}>eQ`WpfB>UF%LWPus;vq$U@~?MxeJKa7v$n43+O0dP{*m zr>~^+R7PWTVRo&(i+S>&nb}thv#)5{4YS`h^sNH@d#zIXeM5IHs7-!DPo}hWe!f7T z(w9=&I^S5So&9%xJEcD`&W|+J(jV#WhjGUyob@V3+nQ_XIR-!8Qj0%e@P8HXQT;rm ztF#$fwAW6n=&6+Mv}y%`&0V3q0biRm-HE+H~kO}H8dR>DR_O^)bL6Hw+nr}fJYkl zfZBIqTKZ}lGIW*&1m4cP;%j+m(wAWHy(8RIxHmsEN7&+vvT_mX%ckKk{1==E^rq_i#5zR_OPQ$SBl!|*cD#k=M@;OR7bO$g)UZw9yR zw$|W}!2vGA&z-A<#olrsyaKHN`SrDBxD_AP)2Y?3K^vr+wpT^g+6ciRTn_YK3~e`N zvynch2bSZHjRppDTxM%zQ$Xa$+K= zFZHPv*w;r^;Fhw(LYYwb=ZplL#VPeznYq%5Vktc3bJwF$imshFFg`}zAr;eDxUQej zm^+HbgLMsY)Du-{`oYqV>`|oOB!v0#$*r=J1W}{3f`YSRHabXp(=xF4pm*Z-Z)kdoMVk zB2-b#h3^g4(Qvb^&az4;`<^4901L?Ujb7Zd%!}iQDCtp;`@XNjdWn3!zaO_fsOaw9 zyGC4*AB+rZvY6i84}R}G9j|%%0X$7uF5g9B8!G0>o^koy*zh=X(~#hCD10IvN<0Fs zHHg&c-qETX`-&?^D#k+Lh02qXE6#ZU4M<{NR!Mbaw{Dmn9r>qzbqCVU~OL(!gi zPq^u@D)2=Tx{$*O9oMz)pf2f1mwArk`O>Ej zqj`Csn1E*GwO8w8&{tRE`T7HfTL$GmH98!^D!P8)1&+fxNrdzR@Cm2a$uBZW^SE<( zba))b#!`hL^(l=RbG(4)XR3J71m{9Vf_p-Qf(9Wml@gYOq3iO1gf4|5T^T13V=s1; zOJiEijaI4Sdy=@sk+6W05XpU+m->krSX$~f*vkJug)q%fCxhPd2wt~1;eO(VG*ST( zLIx46&w+6@HjdIY(VeUC#ugSbPk4SvsV4)U>qS-EtzUfvKlFs>LK8*zIL&75N z=t~4n`$2-&l!;J``eEYvJczlHDfMKBQdZZ_v1YTl}3Y5M} zac7y*B!HKc@VNBDD0K8KhTHX{40k-?xKMrw=YX&i>H^CA}Wl71YU6t^W!*R z%JCG9JmNc5YL?4mjKE2g4%`ZY_>%fUf1hEmC5V(8Diyd)aT+D5WOq4(? delta 4513 zcmbtXeT-Dq6~A|OkQG5@fpvEfmR(qZU1YeQ@7~u+gz8#I)F{>lE6MUcVRb)XcUHH= zX4*;&wv9+abE)9u(6ivt%gFPn$a;eTAd+_j>&?Y9WEqwKTk70ESp-yvG7nTYBZa3b6zhE|3aTnfc9;o8?O?@d|QoUymLZuQ$q!4+l=~xP; z!|BqPP778-Ydfu?tb+T}1tY6FLlJ7^xYcX%{nkFu$Kp@sxXshzPr;WG!j0Jg<(&C> zMj#vD6G%4s+z2adKspbgGZ^j7aT{QMZol*zgmCFfVkEbJ75Fl`a5?+a^eo5o@E=Xb zawy3~gL`mS_4brX+%%WulC|<~#9fW+ONm(t?Jg7!8ZX6X3V3&pKT*J!=lFpFZdE+i z)~w>ex#_VkLY6q0#DmXDLqWaSv=o;+A$4?nxp|{bc}TKv*{9?mFNC%7e^tP({I?6Z zm4Ci~Tlq5u6=RwFL1c+7nR?U?YLoM_f+{(_)tmvn)oWju+(Fw*N%|58;%O?z8sgJpAvnE;G+B#~lMz$Sq012J6j@{*dL2tka$5Cp~zL zxzvLz=6nxsAJ{afS@kPvPhiwvzz>_g6;O*mU6;k#UP$U^*$KaqE$?N^zp`bKc`@1A z-Ii!7q28|Mh&|>^Lf;3sVv>RNd@|3V$8_|KKmWgb6+#Cgy>XUf@QV4L+ zyq?hC&gqi{`dNefAi&Yg*UN^&U)7)H#%Bx0CybZSujcee1^SdZl+eG)=_B3EsXlH_ zB=oG%YBPP%TuA8O=eu_n=yy!tN*JF%r!@3K(zc)ayr1LS=QraQa{OBhoAJNr_@x4F zug&>$o9+LZ*$*PIq?u?-I})Qi3;4C>4Ct*c1Ul(o8-Fy{{G91n1@yUj>7{~fxO#qx z_M6Q><1ZSoAC`yA-o$uM8mfd26iV}mISTaF$8!33fwrX?Ehv08FTr;U_yvO@Xmx+8 z6r>rrjM@v=(GHl?&31;pA>V?TPH=n4*t6YeI#xq{Z-vVwp>4;CJgFJ8 zIia7=X?r?%<|0SU-qrZ7Q86_g)~Eb%eXwh~M$p62EajPZaIt+}6|uK8dMUQp3oGD%552@PB?xI)cs zOw}i;+AWxL1@nT~4FqG<8EP3`v_vK94{NP6bP|ds51u?k@{mnVq%E9kf-S0BqOLiy z7T?rx9IB-hOmL4-!G};VF&Wk5#KiREqZ7N*9(>Gtw7caBv-)3 zY!o=hu%^=Nl)Pdv%eV5xTiDT7U@L8D$<4Mw+}m!`HTwqfFsA0MLF{Z)ELL$O0$({g za6{dyG%6A8q$lKL-=RK$q{Z!Tc%kPzz9f=pLLJv{S`9&fD$zPrMrbNJshtzmkFM0PH({TI%E(yZXC%t zqJi{7cgQ@q0dHwYLbM|ViQ|wc-=Rb4?xb^gJXV*FPL9+g7>Gy+Mm)}?azj6kkJ4EQOemMZhzKEt%OqsNvLybi2bv_Y4YFwEVsd(_KI})kM#hJy z#~&RT50e5q*{w%uwhkw`K^2)VLItvP7|7W7%*PvWpTRY}xRP8_p%>{;DkqGg>F%lF zWeq>1a7FowvWSNsgTqOy?rYz7A{ECf08)p9NSAq#hVK&LD_%o`vH|K+2l9j*uE!K@w#S5G*U{4y^*AY2-yD zHiW`IM(+}QOGQZL)4F%@!d9%gt& zMLGns@QKjy3JYRxo?&?1eL9R>Mk3#XtawE1Fw!{o6!e3J7njsjx*m)}6iY397&q?J zU>MSAgyv_CR$2<_DpyMGYSYcJUZ|N5w;S^!!2?ighB@x*&?@$vDCVwYTyI`p+W r%$ppaUNAF1d-KDO7Bp>sDeyYH-CPj()_G5?&VDU^Z@$?laL>O1n6q95 diff --git a/03_hacky_hello_world/kernel8.img b/03_hacky_hello_world/kernel8.img index f03410b4cd1e7f8eb4e3e995be5ce496fd361299..e8af69759faedb6671b50e71d0485207ec888bde 100755 GIT binary patch delta 289 zcmaE0{J?mEjEE^C!<66u|BK5jFkfY0;9vlOjTRzIq8nKlrZ6%vYt;pv;<0lMkz2TTw!2v`1zE9L1eNEi;nn-|Np0h1z%3Oq%eQO zrv(|;KQ*wv+HA~vmY;F%WJXbSO#`S?Ar6K)oPi;O2_j+wl{c6iDEgeSWwWK2CnJ-g r@#Gfqvk=O9a-W10YYotcqLY2aO+kWBBw`rDCOb-sGbT-rlxzn81F}!w delta 261 zcmaE0{J?mEj0_he!<66u|BK5jFkfY0;9!6Nho8bs3?ds1M3@-YPhQ9(%s69nB$G0u za4rMG6b5F7Eu0Jt6J97YOw>HcFu9-EkxH@*MMkY7`h0u1x;GqQl5E z*_6ed@$KYV7G*|mkV#Bm7$$FH(GpLCs$$^izQizN*C&QI_dYq4e%ox!dX}GY{$xf` zbxjMXb6}2w(FIHpmJL+iVsfD9bH)RkEyX+;nG8%Pw}_vGP}YOrgk diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index 829c277e..c488eb59 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -47,7 +47,7 @@ CONTAINER_UTILS = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work -DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -kernel $(OUTPUT) +DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) $(QEMU_MISC_ARGS) -kernel .PHONY: all doc qemu clippy clean readelf objdump nm diff --git a/04_zero_overhead_abstraction/kernel b/04_zero_overhead_abstraction/kernel index 1914791bf1f2c275fabe96cc6e4b1d48b5f48925..d7385d48cea8024f13c9b3ec87c49dd425702ecc 100755 GIT binary patch delta 4367 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 AzyJUM delta 487 zcmZvYKS%;m9LK-!PQw}s>MrlJ=pv#dA;To9C5b3#leU7Aa1bmaNT?;D!J);+JE&1; zauaN7x|V9NsHnyWgD7cg5G3+?=N+{4;Jx3U@9+2dz4xxdSK(ZbXN*ACpgqu_Di|`I zA0!gpP%Jmw8*CAvuK|%&O?)&>(+i*|@(sgF0}Y2wVZcbe6~z_LxfL9!yNzjb{w4M1Fa_lGxaw>VtEquUo^}k zD`|+UPw*VxLsdM$PaPFG6%JmiK=JaUYiO%shb*mmq@DDYw0Xlld+bWkIL6wA>ybs+h zB6PAi(OQ}8E}SUBq0N({^(U?#MwKh-$p&aIZZ%%jcN(CtcxZZBCGnr`0q7~r+gy*1 zf?j|5kEo*ERIb*c%0s84I@kz}=-P|F?fBuz8^@lybmLIN_0#7X;H}2OpFdJRm*ZXX5**Py-7t5083J6diWD)BPq}Q0S zzscC|HTXLQKUC%SPim?a+Dpd_Y_yS+J`~VNwQr%0ILpF9FE0d3oos{R zGHk-h72nhCnItX8&l}>SWIr9FrdYXlv(ZKd=Z3I!4(rj>bgq}nrT+zAmFB#FKB(H& zniQ`?$6K?cjpl|PO$k7GcjfqcgXdk92{yQ04Irb*fYE ztwPq1CkKQ))nJT(2Eqnp}x(c6d z@b|0mMuUIF%q5cql1WoJm9a^T_bESF4XipX1mg0aG%$~XBPDK{$ zjC33N!~18_{mRqyI%epj)=WA-6343&=^Fj>56skGttJw0gSodVdcB%TgSju8D<2x# zGMn3{I=l4hcXXpBV`tLP`Zc{?R9{HwAE(9(2v=p`W%XP_|J=}ftLQW8l%_{7re_pT zao)_xUo#=gDm>5Yx2o`bxYSqSXSJPVSmbzWR)>F6Kj9Gi zXen(n)AL8h-U74fjhX7+OjJ^_?za9l`;>N)7kj`cZ~a7u|K1FO5i?+ZW$-6Vb9^uD zG=#1yvJ{%hI_*0#m;WGl8FP;tJg;(#!GEGWy$q&QMT^oct!1IR)5|EKvuYxt&+1|) z#`DhO#`kSCmC${M6}G4WiNCg{NE{*htgJcU_IJjx}veH>EHt-T{zGfEc)PY*|BK5YBZPT^%) zwbOvJhl}q;Tcr04(Y4lPrfHWgkx>+4 z&z3|o*LA(1mLXSN=z~ws^~kPWJ9axf-7&6#u^Jdpv0}bfz1at)#{4a-B35fLxJ{u? z9h?NByDfC7H>iGxVQmu)sN~WO2$8n$vT#uK^}`n}A)?UcBqWh11KShoNIx`NoJ9e5 zu`LMJJ*fA1x*rx>A`Y2{V>`B`h&d(ddOs|%Vn22w>C;$5k?+M=%`fXy=f*MdIrC@` z$be8bSl+$+nLTBPaVD_jj>{;sdjVaP^e138O;bER(4L`+r$5 ziMZE-y3q%V+Ji8NxQLkaV`fWC2GREYBi`@`+7s;w_8wG!Ujd(OjF}rdI=7yWxt>Gn z2!^GL18Vz3`VnD{AK1PgwZjMYk8Jm&9Xp4%9~k=T&Y@6I0xP#j5yn&pPJQCDAl8a$ z6HwyDIx0?G>N=6jS?Gm6W|RDz%w*4Dwk{*%f;cvnwr&|)y+**cJjeH4U2#f9 zOhYDA9fd7Tn0wlE5KEW&5%cW9^rTp!Zws4a-2Qx(h;gGs!!|K^T)Bhhy Ku8oQaX#Wo`^?UsQ delta 4457 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 T?!brUJ<^%}2wbF&JFw!vmz|co diff --git a/05_safe_globals/kernel8.img b/05_safe_globals/kernel8.img index bbd2853cc83a692573d700ad1f02ca5e968ef8a8..817b14957ae23c6d0f21ad22e9a1bdb66dce5013 100755 GIT binary patch delta 425 zcmZ2sy25mVj6fv=!xRMug)0mU4nJ*~7(^zjC^8+8p6IU1Xf-ic0mSUrWmKEER|3Sm zF3Tt}@vFLeHzP#T0p|E?|C<>v{?lgosSXljX4t~Xz%b#3GQ&j8i42p^v&iu|N>6;H z&+zkqJ@ZP%1JaX!vq&<2o-E3$paC@RfiuHIki-jahMyb^3>!EON=8Gx1H(BeA7~92m@q-)AtVC>jBa3ouq>eR9xNQ2 zrN#9bnGB65`$(LHP}Y;fB&8T@CKpOtf&|t`#z=;-FfeEUO|FoH=m$m$7$i+rlxhb6 D@S1j; delta 464 zcmZ2sy25mV3`Yzj!xRMug)0+v6qy>NCi<%~+Dt4}05PZQN^39yC7BpZIT;u>XfQMc zX);PqWCXGmfztP78KoxvRp;r28gPI){@P{}CJiRhsVodrK&l=*W|#<4`G}ceV%_FK z7Jo+R|ILgS|7kP)bYlP-%*?O_Xz+v=$_x`V1;r+NGs6;D&a{$)u_5S1 zJw!3X1&P;Z4K#GFc~ISG>$rP={@X@3d; diff --git a/06_drivers_gpio_uart/Makefile b/06_drivers_gpio_uart/Makefile index 829c277e..c488eb59 100644 --- a/06_drivers_gpio_uart/Makefile +++ b/06_drivers_gpio_uart/Makefile @@ -47,7 +47,7 @@ CONTAINER_UTILS = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm DOCKER_ARG_CURDIR = -v $(shell pwd):/work -w /work -DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) -kernel $(OUTPUT) +DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) $(QEMU_MISC_ARGS) -kernel .PHONY: all doc qemu clippy clean readelf objdump nm diff --git a/06_drivers_gpio_uart/kernel b/06_drivers_gpio_uart/kernel index 5b430568fdf3b6d55b6dc254d764074783f342a1..968f61f72fa19dff1325fa8616ce9bac10f94d77 100755 GIT binary patch delta 4314 zcmbtXU5s5-6+UaGrBf(yhXT`Sp?09OGab0y|33)RDR8YN1O}@}6;t;2#QZ zqL?W`P!bJ{3E3uyQjGzM8YVo9eNs$JOso-z3Go3#^+EoO6nW4GqwCzW?_g(c(Zus` z&fM=?``c@;z1G@$9{^H^5%#qCBj*9DWnO9}kzJE<6zEMzAF|z7g)~zhgy`3?@lpHum5< zN$zjGlf*Ba+6c2<@OE$m(AR(I>Llsvg5=GlGJCnJvU@SiAq^iaJU0NdK)0ToB+%8B zjIFQCNK}(+s^L$cQ{lCU|2FKs681qeoVXGmTfhChYV@OV^l-E~eBOfJ3_k&QDD-ZD z+vs>tr4s4nv#TogJ0p&PYCS71sPOTHxh=2@`ah40fUfRj@?&Ru@oYG~71www()%Ob zo}?KD2BB~L^Koro-%t^QahAWF8$LA%_x4|ZVKv+Dq8IHoo(!i3ag9%g!$Z&)Mu&j( zKZ0Bt%@3A1{GD)Y2%hP`5a}|C&t6u|)OO^i;I_ebSP|y7Va(UHKH=xvU>)qNpwCpF zW;l%o{fAbT9(E-^jWW^SWF`y@BmLz_k6qr@uM8dxw<8T-tK^Rk13};C%Mr)ohzFL8 zcqW`G=^saWQ%t4ye9h2%^?$mvgq{gIOZvq)`pqTuiEy~2f7YTQd3?>8-u^NiE9qZH z`mVKS(yxS9uEvnP7T_ARdOcdLTX&|_p8_rEw<3Mr68f*fmGt)BYS-FydxP%}b0z(U ziz=GL(U|hBM}?P4`sQ=WUtP(2OV&3QPM7o@ktQ+us6-|i<{zabf0;+k&_ zgXHKE{6t*J$tC!)@F2?d@5fUhrzZ08dfT;Y z(z|Eslyrt^XPAXa4V!0$SE*!~lPOo+cy<XbwFol>Yb%KD|Z%F9fW7< zx+7|m%}44g+4s3yMS5r|5C0Ufq1Q`BtV|Wg-e8DnqZONhl<<^ORaj5Fpfp_;n=m2a z(pfPr3wdy6ytNA?DP`+oO8UI1T(vW@oRo?3t#u~@)(PaDK)MVJ-3l(5ICH{IUUZtH z;}l}q6f^ZDSU9X;TTgq=@B@Wc9Tw(qfGvC2eN)ZpeBb0$UNnzTy`O5sgi1x~vYZQR z8XeSivN@|uj1s<8>s=wO&7v_=O`d0135FVOv2<`ZmPgtmc5t#eo=@%bGtKeo=EOa9 zM-Lphdt8gf?fFQ9G9n!f8f}R(6df(v2IUT)%^+w4qcvf2Eacq!f*9e64lnG)Ysq&F zjA*6uObVLO+?iB5)mThbUL2g3t>9u*1+o=%^;d$RZ`UVKj4f5*0eE@PAO4EhXsxB~dD{|E7@hJQI1r3{jF>hbNIP zybyer5uZx#^Tl-th8d;}WmZbYq}7a6>o}XlqC$HaXICh^Qp#(N(w8bHKp>R&{O# z&s^pSXOvonMOf6^q0?MaMY+H%kj&sQsbx5@6J*V4?=8)++*QFcuF4j+ru!YMS!{VKP4SXLSeg^xMW$Q1L(3pmpl{jl5r1f~wYIP1?9$b#NH1`EIO~q`Ud*+mJG&97iI*s8n z4ErXwL4~aud!nRvm1y;E7Tz0yE5bWBLapXAr_1}HW{%UWXw1E|Yhmmr*aYW4jsM(~ l58lg@=fhVTFx<6?hT{zw8T>S@F6Ud;wk#H3@yfpV``>xW)GGi0 delta 4123 zcma)9ZERQN6~CtyDd5Y6Ik6yRokd$Jf1dXjL@Z!M7N_{K1dOph_ul79U7@A6$o8e8 zo6*cEn7GI6gTuW!SmH2QXtwNw?2BfLiyD_WW0tXHiHn#FvY44=%g+CQpNnh#li8&A z_MYE4zjL1Rc5fg4_JTuCE;!T=>A`_#2jBo4eD?eBQ+Q(P z??grl$+9N%FPU zHA(K9J=Fs<9q>|cy|BFdT|_%NAbCHj)ZXZ*^!A6t2*d2`(O#GVI=(nbpra$%v7%BV zk?o&LD)S>3R`N8;p9#CJf)Thj{NgHjdc_BeD(fer^nq3QMns+vt5= z6-$JZl?yBOT7FpsUcI=I@0>k+HEe_K)h+(cWMcK)D8|B>Yw(Oeitz3T*G`Uy-hNoV z;%q$I<0~tmKY9^M!X5pvzdO0K^7eL&u0G?_;Z#42gq;IG;CR?PfSztfteMS!MAbUr zd&3I@@M8B{$kfc@Pp+&y)qyMwZY`{b&Tx1w=6reU7G7BkSHMu~@9w)6G-K*Wjz_~7 zVRCoq9YnYHMfjb0a2alI!ecEMl5Z@o9ai>};ou-_>wYX+A6PXPelnbDT0axv7w5sx zg{9XbT!&Wo*(afGZo+kFZ^SmN;pfA?Cj7$~+K!9n`aTw3Xu`)M+@H>cPlPuShF^uh zT?^~Ge;u_hxMHr>Yk{sqlHWy`%!A(!4&m+ZBHWQca?j@~>#-Q(nOMt>(X1}}bxW%n zzZbJP1(m^(a1!aDH=JtVO@=c~-`8E(1Ur&6wqE2;Hiur++P*EqH_wCXbMKfJa$U)X z=gCimgGkr?;}$(6x6FgT9A0k5^hg!jcUrfQu7@kS*ThLW9WAbm0nS#c?^L&sTes~V z$8i~EDqU1%sy_K|qWn-S;&Yu9%b6&z`)+3>?+b6P$7sKTEKR!8aaii&-5YSAmc#Dq zHWes7buYc7QtpbrYvrB6A-w%agzG*UimpD6@+7Xez9@eRtJ&@-Plc06M_jBpKegnUQFkU!vz8cXS~P^cUh)Q&OJB$JfwWS zb>&O67t6L{))S7u3)aP zMv}tP;jlzNUvHL|x#dby!E;iIPv<5)FX8eTPU!vzCLY++N(o7tv<*2vK0W!+`2AIy zWYZ~Q&8s%;6hu2AYbX3Pf8Yu}ziW=ec9y&yTRY*rSi%VfYrAUt@V>&26dG1*e zgH&qoxKl*X%$H>m^{G~pYi+f$gezu*Wj6e41N6`Mf(faObGcEhG`MDPSX8xYc=q4~ zpPU#K+jeZf4UZ$dQ$l#DJW-O#I+%9kiQ7BAw;_Z!n0=QC<2Auh%PhCvvLf?N(p)si zOm!ZL2U3z~t(l>i2dg>%j1=_$F&M?A^g1gDhQWz63PUhh^HS+-#%b9g6@_A!OQJZz zEubZ_mY6DrjJ4XwNi8Mzk-#OdMTv`4k-`;%)dc5H#CaKJYKr<8Z3^`ngJ3Zc=VkEH zxXgLN4dL8*R#GNsu%UTTQimIlHDVBLx~qzz9m5;~Ud7Ok0NaXEInsB_U48LI*1+}( z-@6_rQ(aP}oD+pmx-_1I-c9gmT4DhTsTEiF`c#DqKi>ocsZ=;O5=W}=MWJ#RKHLPm zQk4!}3U>@8_`-HH9JvA3q&Tp+cMNJ}8FS2s-`@aVN;8}p zUs%R)$f@-ztRKQzm4q0Dv^YvcXNrc$hv2c46_!)!Wk#*_l$D`pGw_s`l9xtHe7y=v zsR(W}ths|ai=P8IRhlylSr1pKWTnq|uBk4V5$mtbiM}n= delta 150 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 delta 4337 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 delta 151 zcmeBh>u{T}kkN4CqJBn3!_7uao7ou!H$UT)W0YcGaQOM1fkA{r#bML7j ($crate::print!("\n")); -- ($($arg:tt)*) => ({ -- $crate::print::_print(format_args_nl!($($arg)*)); ++ ++/// Prints am info, with newline. ++#[macro_export] ++macro_rules! info { + ($string:expr) => ({ + #[allow(unused_imports)] + use crate::interface::time::Timer; @@ -490,8 +487,8 @@ diff -uNr 07_uart_chainloader/src/print.rs 08_timestamps/src/print.rs + timestamp_subsec_us modulo 1_000, + $($arg)* + )); - }) - } ++ }) ++} diff -uNr 07_uart_chainloader/src/relocate.rs 08_timestamps/src/relocate.rs --- 07_uart_chainloader/src/relocate.rs diff --git a/08_timestamps/kernel b/08_timestamps/kernel index 5473032450c2fb10e3f2f5f053682be6e1bac446..8f87a370ab2611a38ee0758049410e9ccc1556a2 100755 GIT binary patch delta 4857 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 IZ~*4~7rQq|{Qv*} delta 4762 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 diff --git a/08_timestamps/kernel8.img b/08_timestamps/kernel8.img index 8e20b91621ee8e0324e5a362019353daf2672cb6..058dc35cb0537b6eeae889d2d0496cd7ab803354 100755 GIT binary patch delta 144 zcmbP{HY07qLdJ^|7hPt&w7HD2oSpIF=64*&Sfn^q99BMJW?c1vnPb&MX3karSr|kZ z7#w~IFik$kE6=28zWF_`A2Z*}NtYDnZ}_wzoUo1@Fo-@=Vs$S7#L19H<}2 u$Yf|dd5OVU2xUEaouL$K4I=}C=;T}jQ;;BwQ4C|)9@_^f_G&Z1tx3it26R!4%821 uWHK ! { use core::time::Duration; use interface::time::Timer; - println!("Booting on: {}", bsp::board_name()); - println!( + info!("Booting on: {}", bsp::board_name()); + info!( "Architectural timer resolution: {} ns", arch::timer().resolution().as_nanos() ); - println!("Drivers loaded:"); + info!("Drivers loaded:"); for (i, driver) in bsp::device_drivers().iter().enumerate() { - println!(" {}. {}", i + 1, driver.compatible()); + info!(" {}. {}", i + 1, driver.compatible()); } // Test a failing timer case. arch::timer().spin_for(Duration::from_nanos(1)); loop { - println!("Spinning for 1 second"); + info!("Spinning for 1 second"); arch::timer().spin_for(Duration::from_secs(1)); } } diff --git a/08_timestamps/src/print.rs b/08_timestamps/src/print.rs index 082e5cb0..6e8a45b5 100644 --- a/08_timestamps/src/print.rs +++ b/08_timestamps/src/print.rs @@ -22,9 +22,19 @@ macro_rules! print { } /// Prints with a newline. +/// +/// Carbon copy from https://doc.rust-lang.org/src/std/macros.rs.html #[macro_export] macro_rules! println { () => ($crate::print!("\n")); + ($($arg:tt)*) => ({ + $crate::print::_print(format_args_nl!($($arg)*)); + }) +} + +/// Prints am info, with newline. +#[macro_export] +macro_rules! info { ($string:expr) => ({ #[allow(unused_imports)] use crate::interface::time::Timer; diff --git a/09_hw_debug_JTAG/kernel b/09_hw_debug_JTAG/kernel index 5473032450c2fb10e3f2f5f053682be6e1bac446..8f87a370ab2611a38ee0758049410e9ccc1556a2 100755 GIT binary patch delta 4857 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 IZ~*4~7rQq|{Qv*} delta 4762 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 diff --git a/09_hw_debug_JTAG/kernel8.img b/09_hw_debug_JTAG/kernel8.img index 8e20b91621ee8e0324e5a362019353daf2672cb6..058dc35cb0537b6eeae889d2d0496cd7ab803354 100755 GIT binary patch delta 144 zcmbP{HY07qLdJ^|7hPt&w7HD2oSpIF=64*&Sfn^q99BMJW?c1vnPb&MX3karSr|kZ z7#w~IFik$kE6=28zWF_`A2Z*}NtYDnZ}_wzoUo1@Fo-@=Vs$S7#L19H<}2 u$Yf|dd5OVU2xUEaouL$K4I=}C=;T}jQ;;BwQ4C|)9@_^f_G&Z1tx3it26R!4%821 uWHK ! { use core::time::Duration; use interface::time::Timer; - println!("Booting on: {}", bsp::board_name()); - println!( + info!("Booting on: {}", bsp::board_name()); + info!( "Architectural timer resolution: {} ns", arch::timer().resolution().as_nanos() ); - println!("Drivers loaded:"); + info!("Drivers loaded:"); for (i, driver) in bsp::device_drivers().iter().enumerate() { - println!(" {}. {}", i + 1, driver.compatible()); + info!(" {}. {}", i + 1, driver.compatible()); } // Test a failing timer case. arch::timer().spin_for(Duration::from_nanos(1)); loop { - println!("Spinning for 1 second"); + info!("Spinning for 1 second"); arch::timer().spin_for(Duration::from_secs(1)); } } diff --git a/09_hw_debug_JTAG/src/print.rs b/09_hw_debug_JTAG/src/print.rs index 082e5cb0..6e8a45b5 100644 --- a/09_hw_debug_JTAG/src/print.rs +++ b/09_hw_debug_JTAG/src/print.rs @@ -22,9 +22,19 @@ macro_rules! print { } /// Prints with a newline. +/// +/// Carbon copy from https://doc.rust-lang.org/src/std/macros.rs.html #[macro_export] macro_rules! println { () => ($crate::print!("\n")); + ($($arg:tt)*) => ({ + $crate::print::_print(format_args_nl!($($arg)*)); + }) +} + +/// Prints am info, with newline. +#[macro_export] +macro_rules! info { ($string:expr) => ({ #[allow(unused_imports)] use crate::interface::time::Timer; diff --git a/10_privilege_level/README.md b/10_privilege_level/README.md index e254ab0b..6163c30b 100644 --- a/10_privilege_level/README.md +++ b/10_privilege_level/README.md @@ -359,16 +359,16 @@ diff -uNr 09_hw_debug_JTAG/src/arch/aarch64.rs 10_privilege_level/src/arch/aarch + exception, + exception::{Debug, SError, FIQ, IRQ}, + }; -+ use crate::println; ++ use crate::info; + + let to_mask_str = |x: bool| -> &'static str { + if x { "Masked" } else { "Unmasked" } + }; + -+ println!(" Debug: {}", to_mask_str(exception::is_masked::())); -+ println!(" SError: {}", to_mask_str(exception::is_masked::())); -+ println!(" IRQ: {}", to_mask_str(exception::is_masked::())); -+ println!(" FIQ: {}", to_mask_str(exception::is_masked::())); ++ info!(" Debug: {}", to_mask_str(exception::is_masked::())); ++ info!(" SError: {}", to_mask_str(exception::is_masked::())); ++ info!(" IRQ: {}", to_mask_str(exception::is_masked::())); ++ info!(" FIQ: {}", to_mask_str(exception::is_masked::())); + } +} @@ -382,30 +382,30 @@ diff -uNr 09_hw_debug_JTAG/src/main.rs 10_privilege_level/src/main.rs - use interface::time::Timer; + use interface::{console::All, time::Timer}; - println!("Booting on: {}", bsp::board_name()); + info!("Booting on: {}", bsp::board_name()); + -+ println!( ++ info!( + "Current privilege level: {}", + arch::state::current_privilege_level() + ); -+ println!("Exception handling state:"); ++ info!("Exception handling state:"); + arch::state::print_exception_state(); + - println!( + info!( "Architectural timer resolution: {} ns", arch::timer().resolution().as_nanos() @@ -76,11 +84,12 @@ - println!(" {}. {}", i + 1, driver.compatible()); + info!(" {}. {}", i + 1, driver.compatible()); } - // Test a failing timer case. - arch::timer().spin_for(Duration::from_nanos(1)); -+ println!("Timer test, spinning for 1 second"); ++ info!("Timer test, spinning for 1 second"); + arch::timer().spin_for(Duration::from_secs(1)); -+ println!("Echoing input now"); ++ info!("Echoing input now"); loop { -- println!("Spinning for 1 second"); +- info!("Spinning for 1 second"); - arch::timer().spin_for(Duration::from_secs(1)); + let c = bsp::console().read_char(); + bsp::console().write_char(c); diff --git a/10_privilege_level/kernel b/10_privilege_level/kernel index e315cffde349d2338c3b724a422142e35b29e54d..54a7ced7c9e38424e6d8a5fb96e250b2f7e24d43 100755 GIT binary patch delta 5083 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 delta 5187 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 Cey|Au diff --git a/10_privilege_level/kernel8.img b/10_privilege_level/kernel8.img index 3f2d3ab9388b64b46cbbb273fbf4d3bf44576e33..4ba3e68a3b12a949efc12f6b8e382775f98d776f 100755 GIT binary patch delta 150 zcmdl{wWDgnO-9CvxArqKZ=S_Cp94r)arLt@GHyP_U&bQEq2jRe5i{ee2h1F+9x`*T zdc(pX!ocA0^DpD%C=q$az|B=6%*=c*CtXsQzv0t@jO(8oSYK`K7SEMs%$fYtM4ho< zv!dxjRwhH^$w#ctLMZFW=d7hzYZw_AL?`!JnSumWY+@M0CO6uMGbT-*X)_-HFnTp- delta 150 zcmdl{wWDgnO-99uxArqCZ=S_Cp94r)arLt@DsDc-U&bQEz~JzciHSjkL&ag`BWA`` z512VtJ!Ixw^@?S3l!!bd9@_@;<>Vn1(Sc8s59nl zRy1A6%4A?V`H0n72xUF_oV65d6(a+K=;U52Q;?vFO$=km &'static str { if x { "Masked" } else { "Unmasked" } }; - println!(" Debug: {}", to_mask_str(exception::is_masked::())); - println!(" SError: {}", to_mask_str(exception::is_masked::())); - println!(" IRQ: {}", to_mask_str(exception::is_masked::())); - println!(" FIQ: {}", to_mask_str(exception::is_masked::())); + info!(" Debug: {}", to_mask_str(exception::is_masked::())); + info!(" SError: {}", to_mask_str(exception::is_masked::())); + info!(" IRQ: {}", to_mask_str(exception::is_masked::())); + info!(" FIQ: {}", to_mask_str(exception::is_masked::())); } } diff --git a/10_privilege_level/src/main.rs b/10_privilege_level/src/main.rs index 2259e30d..1e79195d 100644 --- a/10_privilege_level/src/main.rs +++ b/10_privilege_level/src/main.rs @@ -65,29 +65,29 @@ fn kernel_main() -> ! { use core::time::Duration; use interface::{console::All, time::Timer}; - println!("Booting on: {}", bsp::board_name()); + info!("Booting on: {}", bsp::board_name()); - println!( + info!( "Current privilege level: {}", arch::state::current_privilege_level() ); - println!("Exception handling state:"); + info!("Exception handling state:"); arch::state::print_exception_state(); - println!( + info!( "Architectural timer resolution: {} ns", arch::timer().resolution().as_nanos() ); - println!("Drivers loaded:"); + info!("Drivers loaded:"); for (i, driver) in bsp::device_drivers().iter().enumerate() { - println!(" {}. {}", i + 1, driver.compatible()); + info!(" {}. {}", i + 1, driver.compatible()); } - println!("Timer test, spinning for 1 second"); + info!("Timer test, spinning for 1 second"); arch::timer().spin_for(Duration::from_secs(1)); - println!("Echoing input now"); + info!("Echoing input now"); loop { let c = bsp::console().read_char(); bsp::console().write_char(c); diff --git a/10_privilege_level/src/print.rs b/10_privilege_level/src/print.rs index 082e5cb0..6e8a45b5 100644 --- a/10_privilege_level/src/print.rs +++ b/10_privilege_level/src/print.rs @@ -22,9 +22,19 @@ macro_rules! print { } /// Prints with a newline. +/// +/// Carbon copy from https://doc.rust-lang.org/src/std/macros.rs.html #[macro_export] macro_rules! println { () => ($crate::print!("\n")); + ($($arg:tt)*) => ({ + $crate::print::_print(format_args_nl!($($arg)*)); + }) +} + +/// Prints am info, with newline. +#[macro_export] +macro_rules! info { ($string:expr) => ({ #[allow(unused_imports)] use crate::interface::time::Timer; diff --git a/11_virtual_memory/README.md b/11_virtual_memory/README.md index 15ad14d1..43876bc1 100644 --- a/11_virtual_memory/README.md +++ b/11_virtual_memory/README.md @@ -603,7 +603,7 @@ diff -uNr 10_privilege_level/src/arch/aarch64.rs 11_virtual_memory/src/arch/aarc //-------------------------------------------------------------------------------------------------- // Implementation of the kernel's architecture abstraction code @@ -136,3 +138,8 @@ - println!(" FIQ: {}", to_mask_str(exception::is_masked::())); + info!(" FIQ: {}", to_mask_str(exception::is_masked::())); } } + @@ -846,16 +846,16 @@ diff -uNr 10_privilege_level/src/main.rs 11_virtual_memory/src/main.rs panic!("Error loading driver: {}", i.compatible()) @@ -67,6 +80,9 @@ - println!("Booting on: {}", bsp::board_name()); + info!("Booting on: {}", bsp::board_name()); -+ println!("MMU online. Special regions:"); ++ info!("MMU online. Special regions:"); + bsp::virt_mem_layout().print_layout(); + - println!( + info!( "Current privilege level: {}", arch::state::current_privilege_level() @@ -87,6 +103,13 @@ - println!("Timer test, spinning for 1 second"); + info!("Timer test, spinning for 1 second"); arch::timer().spin_for(Duration::from_secs(1)); + let remapped_uart = unsafe { bsp::driver::PL011Uart::new(0x1FFF_1000) }; @@ -865,7 +865,7 @@ diff -uNr 10_privilege_level/src/main.rs 11_virtual_memory/src/main.rs + ) + .unwrap(); + - println!("Echoing input now"); + info!("Echoing input now"); loop { let c = bsp::console().read_char(); @@ -1013,10 +1013,10 @@ diff -uNr 10_privilege_level/src/memory.rs 11_virtual_memory/src/memory.rs + + /// Print the memory layout. + pub fn print_layout(&self) { -+ use crate::println; ++ use crate::info; + + for i in self.inner.iter() { -+ println!("{}", i); ++ info!("{}", i); + } + } +} diff --git a/11_virtual_memory/kernel b/11_virtual_memory/kernel index 93712ebb083072ce4ba41a9536439ac8f6b77fe0..a9a29379b8eb789e2d1d97941b415686a6f0c81d 100755 GIT binary patch delta 6195 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 delta 6054 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 diff --git a/11_virtual_memory/src/arch/aarch64.rs b/11_virtual_memory/src/arch/aarch64.rs index 6f0ee250..04cf801b 100644 --- a/11_virtual_memory/src/arch/aarch64.rs +++ b/11_virtual_memory/src/arch/aarch64.rs @@ -126,16 +126,16 @@ pub mod state { exception, exception::{Debug, SError, FIQ, IRQ}, }; - use crate::println; + use crate::info; let to_mask_str = |x: bool| -> &'static str { if x { "Masked" } else { "Unmasked" } }; - println!(" Debug: {}", to_mask_str(exception::is_masked::())); - println!(" SError: {}", to_mask_str(exception::is_masked::())); - println!(" IRQ: {}", to_mask_str(exception::is_masked::())); - println!(" FIQ: {}", to_mask_str(exception::is_masked::())); + info!(" Debug: {}", to_mask_str(exception::is_masked::())); + info!(" SError: {}", to_mask_str(exception::is_masked::())); + info!(" IRQ: {}", to_mask_str(exception::is_masked::())); + info!(" FIQ: {}", to_mask_str(exception::is_masked::())); } } diff --git a/11_virtual_memory/src/main.rs b/11_virtual_memory/src/main.rs index c87cdeca..eb027bdc 100644 --- a/11_virtual_memory/src/main.rs +++ b/11_virtual_memory/src/main.rs @@ -78,29 +78,29 @@ fn kernel_main() -> ! { use core::time::Duration; use interface::{console::All, time::Timer}; - println!("Booting on: {}", bsp::board_name()); + info!("Booting on: {}", bsp::board_name()); - println!("MMU online. Special regions:"); + info!("MMU online. Special regions:"); bsp::virt_mem_layout().print_layout(); - println!( + info!( "Current privilege level: {}", arch::state::current_privilege_level() ); - println!("Exception handling state:"); + info!("Exception handling state:"); arch::state::print_exception_state(); - println!( + info!( "Architectural timer resolution: {} ns", arch::timer().resolution().as_nanos() ); - println!("Drivers loaded:"); + info!("Drivers loaded:"); for (i, driver) in bsp::device_drivers().iter().enumerate() { - println!(" {}. {}", i + 1, driver.compatible()); + info!(" {}. {}", i + 1, driver.compatible()); } - println!("Timer test, spinning for 1 second"); + info!("Timer test, spinning for 1 second"); arch::timer().spin_for(Duration::from_secs(1)); let remapped_uart = unsafe { bsp::driver::PL011Uart::new(0x1FFF_1000) }; @@ -110,7 +110,7 @@ fn kernel_main() -> ! { ) .unwrap(); - println!("Echoing input now"); + info!("Echoing input now"); loop { let c = bsp::console().read_char(); bsp::console().write_char(c); diff --git a/11_virtual_memory/src/memory.rs b/11_virtual_memory/src/memory.rs index 70b1b702..a05e5392 100644 --- a/11_virtual_memory/src/memory.rs +++ b/11_virtual_memory/src/memory.rs @@ -138,10 +138,10 @@ impl KernelVirtualLayout<{ NUM_SPECIAL_RANGES } /// Print the memory layout. pub fn print_layout(&self) { - use crate::println; + use crate::info; for i in self.inner.iter() { - println!("{}", i); + info!("{}", i); } } } diff --git a/11_virtual_memory/src/print.rs b/11_virtual_memory/src/print.rs index 082e5cb0..6e8a45b5 100644 --- a/11_virtual_memory/src/print.rs +++ b/11_virtual_memory/src/print.rs @@ -22,9 +22,19 @@ macro_rules! print { } /// Prints with a newline. +/// +/// Carbon copy from https://doc.rust-lang.org/src/std/macros.rs.html #[macro_export] macro_rules! println { () => ($crate::print!("\n")); + ($($arg:tt)*) => ({ + $crate::print::_print(format_args_nl!($($arg)*)); + }) +} + +/// Prints am info, with newline. +#[macro_export] +macro_rules! info { ($string:expr) => ({ #[allow(unused_imports)] use crate::interface::time::Timer;