From ad08ad87ea39e7f9057aad5c8ea5674d7a9b8c33 Mon Sep 17 00:00:00 2001 From: "Reyes, Amy" Date: Wed, 22 Jun 2022 14:24:59 -0700 Subject: [PATCH] doc: Update vUART tutorial - Update overview, dependencies and constraints - Update to match Configurator UI instead of manually editing XML files - Remove architectural details and instead point to high-level design documentation Signed-off-by: Reyes, Amy --- .../images/configurator-vuartconn01.png | Bin 0 -> 60945 bytes .../images/configurator-vuartconn02.png | Bin 0 -> 6909 bytes .../images/configurator-vuartconn03.png | Bin 0 -> 18694 bytes doc/tutorials/vuart_configuration.rst | 428 ++++-------------- 4 files changed, 99 insertions(+), 329 deletions(-) create mode 100644 doc/tutorials/images/configurator-vuartconn01.png create mode 100644 doc/tutorials/images/configurator-vuartconn02.png create mode 100644 doc/tutorials/images/configurator-vuartconn03.png diff --git a/doc/tutorials/images/configurator-vuartconn01.png b/doc/tutorials/images/configurator-vuartconn01.png new file mode 100644 index 0000000000000000000000000000000000000000..f7458f333c9f239c170c5c32de78ed6ee16a1d77 GIT binary patch literal 60945 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�-$-axqQGPD`DDh8W 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/configurator-vuartconn03.png b/doc/tutorials/images/configurator-vuartconn03.png new file mode 100644 index 0000000000000000000000000000000000000000..051d5b8bc02964d34b0a2d51181ada542839d9bf GIT binary patch literal 18694 zcmce-1yo$ywkSwKa0~7lf_ouFVZq&<;6-7<-CcqQceg+Y1b26Lx8UyXP3}4O{P+KV zuiqctJ(^MMT6^!grq4B(%nDJE6GuTLK!k#VLXngZQG$Yk4tQ-V!^6H_d(-<_U%wD+ zBsA@zppY>C{J()pNyCGJf=w_}(Qwd^l>vdREtw3AtPLSdE|xa0&`?mk0xmWN;4csd zGDC=onH3+!Nn!?>#MDf}%?_gMCZ_^+`vT@Rq7dLG<8=YOBCv!w z7?8PGT3FeGT=*#dg%|YN{_~ibg6v-)4qx~v1pg2u(~wml6SlU4ka01wGJ;uHSjf1z znIJ|6Y=!`11~N7lHdbcV*AF`*D;o&F0%B()`}>dLm7JZCF-S>7>~CVPcYGA44h}XT zW@cw+XC`L=leL`*Gb=YYH!}+xGaDP@D+HsxtCfR+3!|0&hks)bf!KrX%xoOYtgXoY zU^Fnac68vQcxCl387yu7L2G6Ix1L@##_VEX!_3OW@<*nB0UCk-fwOV6v-lTrBQP_> z0%8fVa;H+st8Qgw|Do}p@?vTE4+(n*QKwfi{#M9; z3T?0AY6D?bg4kO-+JPaWPOof!_#=%CNZ1Zy;9za1Vr^~lZ%Zlsn`JUK023=2jk=kY zk+riu?SJS15ixLp@KL;4jg66olaY;0g%tn-aDX_t8CkeMEG&P4%32$l8N2@PpzNSO zK&<~0=&R2d88{gHx4=eVkg>I$rNOJfW|jsf5M~=I6AH3_)Cdx`wy?H)CH%@A;9p$G z%7P@V>>UiOzz|6hK8jbFnas?LKoA21PBvBpAfo|*o0Aa;U^imq<^XUp8XH55*w}%_ zKqFSJfA<%$20Q+-?4SOBdAX4__!Y z*$j<1joDba|9JDi90Vj`X8&qB*T3UK8Djf)%fgK8Up@gc0RQoIJ__(3BSVZR{(fxs zpXuZOg!140olPOHNdIq){}*+8Yhwpz13QSI$*b=ETjyf_ub8(taQbgp2Xk@)0o;a+ zoSYm0Mg!ohDSwl{SY-(U-0(l)d znJNBX2=jmBmw$2jzYFufMArXz!Z80CFaPo|=Kt0C{`KxZjIFPR{MVz`0sBw$pH%UB z^G~vYSiS1W?lqNkwU#+SK?&hViU_K>q#Z3g`cRrA-=0}lH_Ape9u18gmJBsWbI!ZG z?fUu#F8Cmt)c340wmn~|RUFS3rZ z)05V!&8qUPN}&a2%RWft0q=$2UoVL<-*U{fFj$(WqyOCgdFG;=@9^pIXXL-$zh1gh znM&P%eE17q2>xv5TY$pfuuO_E?-Bp%*7b2eMgqR|E}iuB>BRGax#Gy$=zR0bc6rj;k>)Sd+IG6EaM~u#PTdH61j*oa>?x+QBRJC@7wvwqy>P3um?_PICd_U7OAzC&$w z-F*&AAO@|BRB_wSH#=_JLB4REfJgjXiFhuB!V4E+O?9gL7FS&X=KF#5o+R#W#FINr zM%@tgU+WbdLwZeVJSR>5r*kZP&>t9@AGL58HQTY(bq2B3^?E1b)mf~^Jr+jN>S!WE z6w>5Z9zJd}>-IE>4%R(gF9MzSZ@=7USm$MAlaanm6+-=*ABw}mUUO(zUH|@I7xnP(g*_ZVB zRSnoEz%)>O+)*o~kHsw1I`gx8516oubv3$evK8($+mE zPRrGvj(NcMpI?5@6;&RtHpVWloN*3uQZG6kgLg`g*r(NPhpT7bfanGX`j}~&XfpJH z17}YUNqD4utrkY?ZO_Z@2r$q)iBFHua6sp6cHeAW&JypSY4v6lpNwb0$m7Lsu9vkR zaca}(@IiN@dMl%{waZy5{@4p zj6pQl8kTC+6tq4ebxjPCvQ{Uo{Je9qiy1XJq0l)n$OQKZn#AK)@!p-Me)~LL#xfb9 zZC4~ooWv801A8O#vlT^d?RoO(YHyDTiHVdbYwgMzla|Ry*U?#8)YF=HW>#6Fzvg7B zM!6jaRFuFKJAWdyo-V7rzysD7H73YHxMrD$)8Fx|J5FEoe*enNK@P3E`=i4R%Gq(_ z@%9hBJBrV>N9&O{9zNFI2ZLF34$jWmW*`b**88BIy0e)@?mBmR6CStv3+oke8zUd; zjO9L*+0{1nmPd#jG0%`CmyWdT1#gB6!|X!sYfw#T_}sMIG$&bDJ(3XqwBN3DG$|E5 z3Ne{g(n{)$=^j*6J<0(V%F=Ee)h-P;I1)lh7#pk}FFy_wbFI-cY(Zx}dV3sKX2Sl? zcxdV1v8s=FczH;?ytx`*S%Gc)-N*9e|K_;iDBWVd4#%fALwB_C#0yso)LlmE9u(!d zo*Rx9b(+lVvcHD)b$J(6Fg#!$87B-OeYrCR25@(V_8juXswqBm z_2oT4Yd^Wx2EpE#{rtG~30}TzwLNGjL%+Y{u0*RmT$Tsb=B3O_P}7!GEiv`s_>L^| z_HyU+LA#{o(2m68&=$(;r7KrO9Sh(&g3;5{ixB8vQtyExoQsL<;B2$|Ti1Blv?ESJIa77osvZ<%@`$~rKs&(~bHW5EJL z6RWt5gML1R3MO zFvD@G3sq4?T^iGLR1}42?b)eSf$9VqhAwLUCj_g;13n^dugLZcZ98)|d`V-h()v5A z(z<)M()#D4!?{~HuhXLwLq}I%ZMaz(kSHh?hT|y*PcG9kx1_|UV2`;fhr2{<#j*DY z3n%e>6^(!33_8{Ia1GAoa_u3R-x_B1KJf&DfHb$Dz_($5jsGS&>f%J;4$bLMpxxA( z+RK|ntv2omaCPqZg-WtM^nNv8P=;NzReN=BrOATc5Y0ZqII7y30;p zJ~}@Q2j3n?c@1cI%%M4HvM1Ad8)JzQ=KX7<>|WYDP&`a~un=o`gdxs$%S z9l@n5&QSCVJcuKg4(z}BqW1QiWWEGt3`6Q_=%8K~SL;QY(FgL<#(i_YaT-KKZ;QK$ z`6(H**HC*&c^xCu0s#c3Y1}8G2i=C~1-0x3_AXEoh02@foG_}>ea4eX!}SS#x#M5u z%HB)o%~g2fewi)Zn2YYDTxV?}VFsnY9S8#pPLd^e8L?&PO_&XBFI8L}%uEW5 zje6?cgIYa*C#IR5=wEEh#=ewh3xlshKbF)Rau7Nn=H!FE)^%jZ#zsO( zf~r&H;o(6fJ861yXmmdXI+y+drNQD&zGj*>KCY<3F+9}+i!6r8nHt#i_;!7qCRqkH zbGEx`dk-ouEt} z&BDnEy5qB36;&jQ?YCQ(;rS@)%FZbZt?zU|6i!9x+018Zo=`l%X5oYj%ZG)X_-(ie zh>r8u%&N)F`xj zLWPnd#ug81{YkGrR9I?2aI0Yy|^T0d@x#NckTzq1Da;(VH+!wcR2{UR7@|i|!kFJLTPC+X* zu}~#CFGP3zT%z3{DPtrjl98eI90rx3!TA%FgF@xnYAa#xDB6OXND>vkvd^d21oN(nXX+|_Y1!g{e?O7&j($G)-8$=7O zxIPi7T-gvzmFcNy395eMN~pXEGj>_g!pYYC^S`IqO>^{ebg?5w3Y~9aLV$Y?K@KdR z=#mdgxjE6Zy!D}c0xxh*s~`A>)mvSdNuQ=XwI3oI>+cJAY#$IM#Gu(9Z$`g%V_sfe zWg7!_YRjPL)pWWG1srg_?PrHorZ}MMXL8!wpvLIr%IWC|tSOv+ z+-QDo_;TCPoY{GzrfEN|x|4{8issK)yV~L_*wfoH;?4P`N2cW_-P(TAvi9sk?=c0< z^Hh21A>VtmYu?JOF$j+kEqbTQ=4x8~qV0r~BHJT|7Q36b$sPLTIX07RYE}Mwm#rd^ z>Q><6Y2)g~h4;&gi_?V=8(kLFT`j2xT5#dFGS8dVU4GB6N8Ug|%_9{kud79q`h#uy zJ1=Xv;$jS>0MnD*90Rd8q#ifJkB_*mo0hdJJuQ6hv@}d``YsO0!Zu%*;+Sy1Bx`j- zzdQ*nxu5V2WwgS_&Wo`CM;fiYc~l*h>#FNQdr2Fk53HLB%UYAhpHZKWcvd^M9qf*m zxZeT}pd=`j!>_JmWD60*b1rYLbBgM_ENo1ZbjuaaAXv_iz7#mUChjl z+{`~>F0j= zFb*W-v^G3jQj<}mPOY&p-t((>@$f<=<&iWs49J&GM3>H+Z-OAH#dd^Z|L8M6-Bccp z2@ld}Hpl1pCZ`^)8eg1jFNO?`5z6k|pd(VxRY9Qb3%Hb(bP+x=WEf2*$TFnx5JruT zZd>x0T3WU34TA@3(pBO%l~t8*V)RTmW{Brx5ihoxd0Q0PT z0RDN!JHOkXO0+BRQYT?Pt+vrD)>s=}ReapU#>#%L;JjcV%HuC)R zAo&r@J~hkcSiwW}i7vOoY1xe;8zF&F_miy|48bq24dVesdmS!uYQMw9#^9|mToxeC z=HVWuc8v$OTWs=A9_NiJykzbl*glS_wXAcqojI;Qr=~bIBOw&Sl?O9|RPES5)C`?n z`;0i8j#s29fdhVbNZc-$c+*>=Dzj6W0zuHt%R^}^GRpQyP&_xs{xYF~NVw4w1@ldo z^sT-t;E$5+>N4i}*SbNgCUrl)1keL5`eg7YkH$xB%EJ_kY}pG=JaS9q~$@pGM_&)ht#qJb#*~m5<};$cHrqsQStVTcT(d;{dnC3 z@UDq$0r1+KBkLd>iDsfiIGr7Ud$|eZnqi`!R@r$MI)%kiPy6;JEsjBh!qjq;(H^$* zEv_nZPQ)9D)FW)CxB}sHo#}-@ubRwR$B&f$mscq0qb=960l|%X`hf7B$y_E?0im)Z0+vp3pF2tikcBN&eDj#V-(7} z;*}N|5H?d_hvnl!np%^Y^UDlfS-J!&yoPjptVmZS7AC#GZ$-@Wz=MuYQ|@pOaj-zI4220wsRdzHabFZIY?)>|6704 z2<8EHzL`K>Fu>m+oa#eLK~60;i{}jTc?t840KVMeq9l*}4u;St9@|8j z^#>%+w#9oK$7_b4(aN?2KuS&Sdvr{Ll^Dc)!|FApZJHdJ?j}?EZzYh=mx+1i_)2X% z{RUl3lBsV-li#BquXF@`N^xM5)Uqz9Z%Rh1m0P=AbM!bdMH34S6H3KqjMb+hqOfAz z&cObnvF>KeV7c7u@_PzjPE={m(p7tzEtpWMxoHLeKxnHe*Lm8i6O0UZ;co~vl`bz2V^c$j6QIvsIKNgfQ$ z)~1^>H#%LhycE;Zx+m}RkRTYi1RjVD8Y^BRuC>G-@@A}^6DItARDO^}{pG%+sWq!D zJWXF(GVbIeV5SEhu@y^iOa*lNj%h871Q}V1D1N!ciG)Setga)+HL>&aZ@ghm8Z(&q z@?FygXO^utKgIM$@jBy>>IWcK`O~C|O1D(!A&iQvp6t=7A#+@`6p*NW%^{mwnriS1 zfA4FoYo}c5J)b8EAZh6C3v*2L&M-bGAQiGyHz0p@3Xe5`wMk4gkm!-1q`17f#OP14 zSQ(+N9ugkQ24X3o!b3H&tv}jH<$;Dycesqm(pZ|4 z!R77#Vn)TZRFFXR9v%b#U~?=)Q7UEMMy8bC!;Vy3%z=FxI~NLU`S7~Q#4gz!yin}n z@abkey-NIbyc?G=XhE}g`|2OeW1FD1=B#mAmmXf5X*{JdP+~TH%S*C^dH^$AL6^&C z=@8ZP%T*gMeyO5-#i`+*dTfzbBLXp5B;18Ul7Uys`UD=-2p1+uj*k#4lMf$`%Em&{ zd+cPGv)&%L?*ou#jvtY}T^VkUi&{ z!S@RyK4J19Ic8(%Jg_20KUQ=bOY_r45)*IDPCnkDd9FK)PkTlfF&XEK_-AziT7Tlg zX$ixs*rQa=@xr@bJ#KTg_FNm=9*9l+yjF0a3QDl;`nauIBb?$-Ig5g&k(l;3BaV?- zT&aBpv8G}G*pI_D&OAC#8@q=j7CniBOF2aI)xiNKhycQY{)>7^m}# zaW~Tw5)qDi8;wg5IJt@&Q?8YL9CN9(UCD9#YX)dc1R`BrSQw0G_%n^9=yC-1*sz^2 z9*{%AQEKf(;&5(BTSx{apUEgI3wrOdtvtyIF7g%02IeS#XU135L|rfi2E_r**1`fC zLlKL3keI~o@b3D?At{1EIjH>L4dbAOOWMYV&MFw8F4pzhO%gVFXX35;I)9#&Lcg$J>YY>@|1G-{bRkxRZLP$hk9~STgj&r-3Tdqj;+mi20hU2t(_d zvl(taNV@rX>pbv0SMmi6T2T?~ZnO*c;#JhqkhKLxdWnHCO9Y&QaDz zw4c56Dn#KR`Q0`KFX@j`rZ{Sc20GfZ>GQU5pJB0!P7RQoNQJHCTwmh2vGM@;mQA)8!~2S=#N#A9rLn5+v!jv zD45=;B#?xKH9OcPkAze_kG@9|4+-kUL(H=UG4p$4V0xw_h?H-s{>-%ZJy9bB%}Cnko6d{Fd*vHMeK zOHJivME9@yWnR6jo&9hFg-IEaN-PzX^%RB}BO^Zr?QW2!Sigji4V&OjIke2K^mitw zO*NUQ3X@*e@U1JXd6f5r>tpSnY4{S#3W~n7#ngm{hC9!k=c(H)`Rt@+og$Pvo|@4@0P@bK zDZ9I5)N(aoQ;qHzS}Qi_-nlCGxIlG1UzAUS@00Mr79E0=(OpJkc>BPxXkOR_v@t+= z685At9e3+Ts@q$Q>8_bWC^FHKs{R3ZCfHPLO(* zR@S7Sa}%-hC|X}9JvF!WYC^|Ltw2J`Mb5q>ruo0@5aaW^q2dy@0ZVsy%V5a_74_e5 z4402+R_N#kU+N;LWqaF?((s1#RSnbjh>W_=H3Ooow?0|J)?$v-+^|^R**%uq^F9sX zOPR#M_SNjGiW-#1Q*S&urso!pt! z$lJLrwM;|WXEBi<=a~9rujtn&@}3c$oPVr$C6+ZomoIa?Ih7k^+-50hSCgCB{R0O~ z%F`a3>h?W-R-&LVBDQ&>M0+Ci;xTH`_EiCr>Qe!ODFw~BQT6nR`ow%A&#}34I!C*q{ZET$LLR+j*Qh zah3{vEzOD<`>i+&BT+?<#o8utCNMTMs%sC~O2r!+ZdeF<8= zh?`OIxj>je<^G>3Fr>{Y^yhx17=D3 zg_owycLVZjtUAu=gM*8*zj=znpfxuxC2s@pePEZ<={_mdlS~E;&Ayzn5MnwJCBsA0 zV%9RY_g5nif1P`7ZWF$j22`PzAIj9hnxNjDOB16Qrwe0b0(T`xb7=64*muPNFP*r8>D z`~%sd&|0T?T|K*952x@;@+#P@n#ljpcVBXPFW5}Dq+9@1e9_0#_(f+)j3(ks_^F$DE+0kj@^Nc(p zvFhAAuh`iYyC#~1?*-@mggo9J6CfIz+>PZ%own(R2C6#Fl`TG*Ge5HQz^; zI!!NA-uO^BU$q77$&vC4@uD*1w=jmkB-(1*QzVk(Y3AdBuNlghL1NA2&uZmvlMTwJ`fSHw@)blp%-Nj$je@~hKD?E`xit#t=)8EP9E}>)bsimS!8qFrH zjZ{)TUexEfg+~IGRYuE%$J@3Ub6T>oyi1+h(}}kCBKhNzk-qyzhBNJfT z1AezCZ*SAq{>W|R#9L1&FOAd_B8OUwVly8vZ4)qBVeo_=9;o{60nMKC_fA9YaK6c^ z+z2d6odx~^k6UuR3p%89cE*nOH9Ndys2{#7yqN}gi_ucg3iJRDILjZ}5Z)Fe_^9#?S$)fntPD>vuQTjMEY+M3l}`K^ z57XQ(2C*d0|F|`z&EnrZiHLV(0j;0qjI6E+-90KWdvK(pqN=2~D&(n1vM2JcxzNw` zr+vM-)kjQd=se|IBJP>MpB{*e!?JZ?zQYyg>%cRn(1`ouw>i+wP{>!vVEPQ9`c)CC ziwS5ghfl?=5x=s(ZquT$V-xIIlfG-q^6%4NhK7blj*0}hT(f)#O|)zEJa1JtQo-hU zSXZ<)&k6$*D{3+64HwgwWz{c<+f~Kp5-S$`)E%yX{4lEu=5}bvESdkha+p_I6n#gZ zuqK5(NjjLr<=d|_G}MD%qP_IV!{wU`sPF89iQ?0=OzMn?FWbQLlL-RsJ&*@JY_`Pk zYMTDL1EDQ;f}+}T+tQ5IBPw6$xR66$FlO^>_Nw=T(9bAj6K-ql;1$0T+Rx9<4uScx z14h1{ByGtWsseg8cP51uR+x@U&6JpSLlEsZ+a#4%=u$qX(6YkLS8w3;tizfYADCHM zX4Mq=Jx;i7%l+*7qN?BkaxfYXSEEZwO=>j47M1$?JPr?SvM7N&ycYV=K1os4hXlJa zA+Ocsz0NZh4wLpsJpIn^+LrHo=XbI2eE4Dyi}-kWh7J^Mdmnb%^hC3nhN3%76cNqs zwi1X9doz?>222z_D+(TT7^i^?xu@`RTZ)pmx24_|UfUY8hqk}n_H$DkvdV6I?pSHU zR*h4YHCStMi(A1=!>g=xn^sEDt-%n_N(V1zhjl7DU;)DqdG4{0UJioUpMEzsdH2#n zrNMq+%0>4dAEYj8O3xf&+-d9gQYN1@OVM^74{;)~CWV}>6W+~E z(-$eZyZ&~Wz57Xsg7dZ7cCpO6eLBiQh(5EID`9x+&M+cx!Zg&c!1!y^kfIgo@s`9y z9|vH2J4O(yTTD0u&GHbK>0-{9oda`tzZi8k7NeE1c!sqKoIuk!ojXhd5ZIgOj0khB zezMF-Cq3j3{AmOG(o_e-n6SOy&2_PqezK7f^mbj7kN@MqM&s;xm>{%X;~n&)z9w`J z@~wq2vX7iK#p-bzx8{mkEK1{YigX_~G)Zi<(M%VydP}e)7Xw5~7lBm6mhm+kVtcn{ z#ZMSfs3)Sy)!75p$|&qMeQDiOov$9#8xeNi3(SCnE4?f!BN zUQ)N*6#qiHlimJKqr~MWCvtJffx33@Ntw1p(+NCU8lk@mvjDeE=;J{BDX}X z=?dKol4IdYdmJr?$_yv#kCtzM;7Eh-Iz#7>K@Gl2pVAHLucnBgbRpYGJ7am;#;it@ zppo3dak}kFw=)alnOnsQx*&^y*kHNnYhFD8nb&;`1euR0Q!4TXBZp!ZYH*^}!$TR| z{xjQl9ni$#h3yvQ`t19HlVb-c@5CB_6Zi$iaTD##quM>e?@*cQ%L$~{sBFS6)7(zQ6#6RNpNUs(l2zr3 zE;@~QiG~Uoo9z!Wfz_xp$B_#rgs`2l)~6-GP6SXH8pUII_TG#~`Q_K8u+>J6k5Hnv zGS^Bv!&F=0@y!Pn6y+&NDiu+-Q`Qas_>~S69POj|fDpJ|P!X0RnXg0{d)D7NbW2rR zv@esy2+J1oo|duGWmMAX#!R2tSStA@hp@3V=bf@Vu5dO@=QwgVK>C-tc)uxP1Jbdt zTe@GtR)+b*0tgSU!hZ9+Sd(|sNf4YpJX&p~Ne+sGSAoidWH@TJvl}&O$uhf)qi|EI1cM;^8(nM%H@-7{JpaYu zoxAe^dp4XjGQ;VOYd3o|*JNblSOnSTEF)~v3!LH2wl!kjaf3XMg|`KX#u7$s0b)G! zm5tD{S7REVzotY)OHqe(L+OOdfF!YOOc6tKqKAEk_j;_LB=p%+$?-qLO{`sSHP|FS zb#HQm;EUvpnM@%k?ajR7xrKRNu#<$kRzBZInp2E_ZM?hx71%x^7qdcD+Ui8mqryBc z6EyXk`#Rj$xUaCBH_C!jiY}c3Jx~KErY1dRYlCKjP5itMI+p>(NW#>PKIQ1CSE+uR%VoI#?Vr1qQgCl^><89A>#iwa)z+_kr=NXEWRbvoXotTMQh zJOUEC{N@To{O*2lios>_!((rY&i7<2dpi1G`Fd$i^+@LRO+&+zmf~~kY_=46Hr*9w zyFT9wvdsv@bV|)x4;*MxLdBR^c_*CwHfRBiYj0+5#B8;&uB$V%oNYNEZZIe)q9!?Q z<{Ot1XqeZA=ZDOfaLuP$UiD|CZt19e1pSv`g)>Qbdut*~eT@a2iYI4E0@ca*sW2-7rii^yrxB7!DaJ!ayA=C|5+SUikzTH$%v&_Sk2!nuNJ&$LS_ zdJ-ss+R7ElvQPC6Qj_c|SjhKF_=aPAnG`!Bm17z_VU0iR_)sW(IiEcr+^#A@STr!}mX>YrYnQ)%>2}M<$~(oyH!Byr=*6L5?o#W+zB@IIO=L(=N@ zgbu6_nV>!!ICsCJPb4TDu13nXN=5x_Qu(8^*~W}FU>VMz`p)&`atW>DhQ1=<3Q|#x zEb1iJei$A#x*aL0Gcc8N?k?2w4g|ERY_SRV0^AhJuXUYz(XU5L8y}V(V6S9;(&snz zNW02H^FHy6I3Y(D8o`Sz`@~x?$SK+DvmLO^OKX-Jo{6IM5~m|j`1ZpMPQ8QnWhgcl zDRf`sOqP8!f?@tt2&}W`;?#o)d&I51{65dHoB6V=DLlM=d{|tZV@43V^0j>v(gUHV zaZNtS0}j&EINLt9@sDi*R&)IkFq3cJZJ?iWzflPiqh@hA_(Yrw=9SiT{S%1pHiULn`Qh@^{z1>Id#AsnXUZy^)nr@s!f|rOK0Z$Sz z$K}^ukTbi-k}OyVEvw2pZ((G(LD^Tm8_;Qs)rwL{9+@({X*gE3#Lw(8Fg~FXN}#DY zApx4|U2r5+jA5K(WD3P8F-qC-bDZ?-0_d|r?=j%32IG&>XPNoLgl%=4`~VQJ(Bfm9 zX@B{FgMblIFg~FvbLYsQryNW`Y;dIfWj?#q;BE@nxzCT?EIq!*HE~kQfNIA6tE0GI zJq~m;N%M;2;6(hC4zOLuE+7tccU!vqYiIhGLw9&s%|iM}mMlqT*oX$Bw3;f5W}7)j z%psb**Ee!3IYWlqTsRY1FhvGr;SlE0hwzY3&3NGBpDp@KLlSSc%1Yb)iL699RE6Rf9G zXVZfw8>*8I5vUlIo2_+tj!Y}#V{HrRJa^uLgtV(FR%L_4zcC79Epif%n*Em)Rk|}) ztmH)2h>v;622MsU4Quu_TQAT_2I+t(ux~e(dAZ`Ytr2BSlPNV)@2*kQH+JVos`PjV zdS`ITw~nMw&(9@)2kwV{(b!%X_~6cUTB*c!!gPaybX`tum^Gv;6Hhzr+wx}0O!N}v z+Lo#GSKkJV%7m5`#rHhKycnZ#gESdrialhSZ!*+SNUv*gxxtuf4cgkz@My^PG+By< zdj_j6Z!2{Lp@%>cg_z;g6GoM9u2F*(&(bsRgcY%d?s4}ceu{Hm_~(Kj2Ok8wSL5Hg zt}@HnD5)xNe9cqJtH7sPw>{N(^N~vufk2b*R-2@x2z zq{y;M{>DfdpFN$4i#%cd_e}R}xrg!BmJr>R^IPa8V)ikoUUObt-JRmloFtZ53XI`t zDsu)Qp=mJ3p5k=B+kMXGus69e1|H`N!(yExxwMy5m~PGKJ%RLQ*V@0_iW6PL+K+v@ zlAnl3oa`Q|FUS@LPfyUY0e;6h$kMOw^rJ9si+)=NkAYgg=c@=+>c+Z3&KcId!2Tx% zCB>dk54Nb^va=|imy=O6VS9Uh`bmj+{rwp6yQLsUkt{ID-~OVr)RH z4WXJ2cT!Tw3VXVPAujjR@>@R(e#LW^7dM5dWTn1VItnGP_$}|}*quocFb|Ed>rhtI zHw3CAlsE|zBQlo?PcJnKmKjM<+T9Gx06(#32uho<;>sF`o?%VAraS&-UwHM(sulnD zud}#Lda3|7ozRg^xLy3>e1=guJHv0!B~de>6g|OmY;#_IPU(r2)Ip~lGTB*OelNRX zGe;n?dU`n%=YWKd^hM_8zc+)xhukrgfH_!fz;{Y%h76&}iY_qg1f7qNsw_EAlvS@* zo8JLUO%fDMEITG9<`w_i%XXHmcnFNX`#}df#||CYwH5A~g#0 znN?ZY0y0bLq}+6QtsRzJ7*ueMifX;|=~wZ$LlI^jMQS9R_zCadv_Y~QOEtf)9&yeq zM{Q0|ZOy}Jm6Dgj2(ZMte@3M9o*mk2ls2c)B_fPTbmw-JFk2OkJ6X!ECP>EQ;~5>tLFoZu{Bh1k+2Y#IoScWn+o-JMVL6|8q*#4amV(&n_2(Joq; z5B?-tX~M5=@X5|#D&eqCR{t!&*Drgxh;&H9N$Dg_sF>{|!bF6%<-Z&UL}PC$ z4bi7W5Lv+VnUcZ}A9!z;yh=Xc@A zI7!)+_3;Y93cVfiNMl8k>u0#mNNVAnm;LCdM7t1(Fbd2O+`QW@*4;cgY(H4HyIb-L zRV+m^!r5+Qa1qFeG8W!|MyDf^r!41FX12Q_vNFSsO{#mpNvLbA+ zJ!UCX0GM0|JXU6ZaXpW8r`j9av|}QmZ2CIr9;L2qb7hsBXN@9firrc9FrOge87$Jalbn57h*Qb93 zP@u~s3&<@F$Eo7lUH>LQeJ#DXbY>%Qh-Q8G{?nn{dQt4Mx;y;R$&khxVvviZ>=xb$ z*N~LC(_VyXe(9ILYWtGPBdS@r#gxE*XHe+9Z-7j zDT}Usf2*3IW2OS17eqX$D>S#2y8Gx6CaW_6^5p~x|@TyH5#<)xTd2+4A)50 z_2B$~X$c3!cd9fsJ{r_Ed#yEk)@oX3$aPDN+7I=>@MWd)Gf=5aOqjo*aiqU=K-C{* zCL<>3)S4MeE5Nu+qNQi1n{{AK5%EZd_2&mo#cNc+o&?oUpuM>9)xVabS?8 zrx%YXELsl`zfJcN=9SICP4vod@t0!TWNZcG+rb}aH0V7&(E7}Ij_q$lj}Wu#q$C{~ zNgj|Yy@AV2;cn0)O>fUV`IkntV`DhV-X-!Q7?bKYqARc@F}OV4xe$A^_lFo3)HQuQ z>>>lx!VUif&^l?ICSt{)AhQrneNX03ynjn?t`^+A)p=rX@F}?8s5fz^(~5KB^!Bu& zBnzNl(|GE}x0x6R9);Z_MEK40MPEw?9kyHOb!t4`&hG~j0B9A)p8Q(-MH}$JYze0O z)|13zg;#0-@hjRD8xF_B7${LH3PE)eY`+t|L%XSBL%90NdJt+?AhHHwrU# zIAnCEJ-~0=sC#RedQ?v)gQH)9Ojy#_UmqCRTHrgtOZa*&E7p^X#Zfh(eN2TN^=)SU z^)~^y4zo%uDHgYnUTLu#$WPsYy8r}+mbU|RbiW|bmr?J|;3An8INR& zmv5{CCXLvYQ`9@o_qDd;6IfeI`~tD38JLDT4Oya3XxA$iv{JNj7>wy5fvOBYOR^R| z4`E{mCSegrY&kYrNr?P*~8kHM!o-QtkW!|e7%aUBTYBz0P(e>1L9EG+R0A%W?o zThSo%_Wri3hrzs(@w`3|qwxE8-<#^1iQiTFT*;>{NM_e=MSb-8#u2JrcFWe&l?ju!FO<|31|SiYuB%l= zai5XdRX8e#PP!~_DvSm!TB;1WD~S=aepl5cX=(O`8Vaa2qh~IUR;0KYZ*jBYGh*SY z{c0!(Mf^dMIxi+`#xWQg_I-#Rtg6Z#@$6BWsU%sm=-o1 zoK5BZ>j@Q=fu^^lx;*uOa!H0S5KWNL|92S=+b6VA6jR`v~N=k;z3ffZHx zF3z>_kf{(oK5DBeOZzVhmoNKG>$e$P*bSFpd(>1%B7yL;CSSw4$)$-&+jYwYS_a`8sy=4B)V zVIYU%M@@dBNy{^pLW0y_Ekhfe?-u}?7i1}m*Uxq~F78hoi03Tj&MzM061Ff&4hq%wthU{u!iG6nQ;Pt7 zqEG^3fV0#a%8u`mhWqr*%#SI>&cAE$S+&wPaj{}{9CwWM)k?4)i1Ps75>NWCNXGD4 zczACwc$1!QH#tD3jY9!J4|phf-%YLZOWQ&!e<26sw8ORN@V&GpU$U0Id}Lqh z?Q=<+D5^ALaEu8Tl{h%se8_wF{$A)YUYahY00!zN^TzuP=c5(z2=^>&?Rtd!4_yY9 zwlhz6goYGN?y`i$R00w0lpOy;;1o`wff!15Y$K3_alHZp&;=RX2^4Sd zOO*ad%-J1dL%8o?WrGD^%kd+V`4MBljzOLR^WznMx=)0?&qWF*ouq6!=!;!Nq!FlFgd*dB|BeFW zA&0A*+aW^P<+2}$5EL$k>GVF=t#HD#LQ)-~n?FM9 zaHwkGhgexw^f2^c^PRzkm|;)SZqw`~gAd8@tazjAHS@OkD7)Aad6<-J_$yrQ=$yGj zoOiPnOWuAT(#;48)mgnP;0l!?CAt%STV+|O*ss3@PJz(_3nl$NjGn}kCis5dYP7Nb zC2QQNd+ci}p)X&8RiPb1{bmj0?a#};rXbiK@1i#Z zeZbT19jzkcL_83a}<)4IQsuTrO^LHoi)Uz(y7X1ltfHSY;4bg zCiFa|CcBurYSg3OWsAqrYSuIvZ?TaLUDSGA}Bkl>qIO& z$&xy}^CFk8WSVka0Y>4F6)uduv-ul#{mNyMD&F-YtiNx&uV98|W8^@nT>_)d+tY^s zYsaLayTMy3QvYkuy7{Hb*5Br<$@|LdcWYkFtCp0Ou0M>VCiB0xkW)j3N!Q6|E|)`u zI*&xl_CXh?|G8T2y{qTn#~F?c%MUlktv{S&_PA(g!yOi*39qeYolJ@Q{F@uLI)2ZM z=t-bmua7>mG#+5Fiq+%fVPSglmF>zJul#s1TOeLJCT`vG7`@V_t$yxQ>%sG~0wlViN-@gx6Hj9Xg zeR#;fPk#M%XA`NzSzC+VUJYNg>eX!7Rj>dGt-dVm$80kywl{|585r(evMVqURID{Qss zTt9!a*?%YBo;>{ubO-a1*Pq4n6>GM3&R(@@{jSgp878MJoS}hMG56mi&V^^wlxLs4 zbn&8NY3WyBVqUeXq_lM6{Q3Wp60@G`k{&~M!vVHsXwb9!bU49vN{k5`*FHmPt zM8t_rsizI3dh-*eK$AkDC+9v*PDKZ$i3&1&``>-%d{tsqV>h!k1bWOt-0}yr%}%d4 znshK}zopr0A@583IG5A literal 0 HcmV?d00001 diff --git a/doc/tutorials/vuart_configuration.rst b/doc/tutorials/vuart_configuration.rst index 6cd8f01d2..ca00c098a 100644 --- a/doc/tutorials/vuart_configuration.rst +++ b/doc/tutorials/vuart_configuration.rst @@ -3,386 +3,156 @@ Enable vUART Configurations ########################### -Introduction +About vUART ============ -The virtual universal asynchronous receiver/transmitter (vUART) supports -two functions: one is the console, the other is communication. vUART -only works on a single function. +A virtual universal asynchronous receiver/transmitter (vUART) can be a console +port or a communication port. -Only two vUART configurations are added to the predefined scenarios, -but you can customize the scenarios to enable more using the :ref:`ACRN -Configurator `. +A vUART can exchange data between the hypervisor and a VM +or between two VMs. Typical use cases of a vUART include: -Console Enable List -=================== +* Access the console of a VM from the hypervisor or another VM. A VM console, + when enabled by the OS in that VM, typically provides logs and a shell to + log in and execute commands. (vUART console) -+-----------------+-----------------------+--------------------+----------------+----------------+ -| Scenarios | vm0 | vm1 | vm2 | vm3 | -+=================+=======================+====================+================+================+ -| Hybrid | Pre-launched (Zephyr) | Service VM | Post-launched | | -| | (vUART enable) | (vUART enable) | | | -+-----------------+-----------------------+--------------------+----------------+----------------+ -| Shared | Service VM | Post-launched | Post-launched | Post-launched | -| | (vUART enable) | | (vUART enable) | | -+-----------------+-----------------------+--------------------+----------------+----------------+ -| Partitioned | Pre-launched | Pre-launched RTVM | Post-launched | | -| | (vUART enable) | (vUART enable) | RTVM | | -+-----------------+-----------------------+--------------------+----------------+----------------+ +* Exchange user-specific, low-speed data between two VMs. (vUART communication) -.. _how-to-configure-a-console-port: +To the VMs, the vUARTs are presented in a 8250-compatible manner. -How to Configure a Console Port -=============================== +To exchange high-speed (for example, megabytes or gigabytes per second) data +between two VMs, you can use the inter-VM shared memory feature +(IVSHMEM) instead. -To enable the console port for a VM, change only the ``port_base`` and -``irq``. If the IRQ number is already in use in your system (``cat -/proc/interrupt``), choose another IRQ number. If you set the ``.irq =0``, -the vUART will work in polling mode. +Dependencies and Constraints +============================= -- ``COM1_BASE (0x3F8) + COM1_IRQ(4)`` -- ``COM2_BASE (0x2F8) + COM2_IRQ(3)`` -- ``COM3_BASE (0x3E8) + COM3_IRQ(6)`` -- ``COM4_BASE (0x2E8) + COM4_IRQ(7)`` +Consider the following dependencies and constraints: -Example: +* The OSes of the VMs need an 8250-compatible serial driver. -.. code-block:: none +* To access the hypervisor shell, you must have a physical UART. - .vuart[0] = { - .type = VUART_LEGACY_PIO, - .addr.port_base = COM1_BASE, - .irq = COM1_IRQ, - }, +* Although a vUART is available to all kinds of VMs, you should not + enable a vUART to access the console of or exchange data with a real-time VM. + Exchanging data via a vUART imposes a performance + penalty that could delay the response of asynchronous events in real-time VMs. -.. _how-to-configure-a-communication-port: +* A VM can have one console vUART and multiple communication vUARTs. -How to Configure a Communication Port -===================================== +* A single vUART connection cannot support both console and communication. -To enable the communication port, configure ``vuart[1]`` in the two VMs that want to communicate. +Configuration Overview +====================== -The port_base and IRQ should differ from the ``vuart[0]`` in the same VM. +The :ref:`acrn_configurator_tool` lets you configure vUART connections. The +following documentation is a general overview of the configuration process. -``t_vuart.vm_id`` is the target VM's vm_id, start from 0. (0 means VM0) +To configure access to the console of a VM from the hypervisor, go to the **VM +Basic Parameters > Console virtual UART type**, and select a COM port. -``t_vuart.vuart_id`` is the target vUART index in the target VM. Start -from ``1``. (``1`` means ``vuart[1]``) - -Example: - -.. code-block:: none - - /* VM0 */ - ... - /* VM1 */ - .vuart[1] = { - .type = VUART_LEGACY_PIO, - .addr.port_base = COM2_BASE, - .irq = COM2_IRQ, - .t_vuart.vm_id = 2U, - .t_vuart.vuart_id = 1U, - }, - ... - /* VM2 */ - .vuart[1] = { - .type = VUART_LEGACY_PIO, - .addr.port_base = COM2_BASE, - .irq = COM2_IRQ, - .t_vuart.vm_id = 1U, - .t_vuart.vuart_id = 1U, - }, - -Communication vUART Enable List -=============================== - -+-----------------+-----------------------+--------------------+---------------------+----------------+ -| Scenarios | vm0 | vm1 | vm2 | vm3 | -+=================+=======================+====================+=====================+================+ -| Hybrid | Pre-launched (Zephyr) | Service VM | Post-launched | | -| | (vUART enable COM2) | (vUART enable COM2)| | | -+-----------------+-----------------------+--------------------+---------------------+----------------+ -| Shared | Service VM | Post-launched | Post-launched RTVM | Post-launched | -| | (vUART enable COM2) | | (vUART enable COM2) | | -+-----------------+-----------------------+--------------------+---------------------+----------------+ -| Partitioned | Pre-launched | Pre-launched RTVM | | | -+-----------------+-----------------------+--------------------+---------------------+----------------+ - -Launch Script -============= - -- ``-s 1:0,lpc -l com1,stdio`` - This option is only needed for WaaG and VxWorks (and also when using - OVMF). They depend on the ACPI table, and only ``acrn-dm`` can provide - the ACPI table for UART. - -- ``-B " ....,console=ttyS0, ..."`` - Add this to the kernel-based system. - -Test the Communication Port -=========================== - -After you have configured the communication port in hypervisor, you can -access the corresponding port. For example, in Linux OS: - -1. With ``echo`` and ``cat`` - - On VM1: ``# cat /dev/ttyS1`` - - On VM2: ``# echo "test test" > /dev/ttyS1`` - - You can find the message from VM1 ``/dev/ttyS1``. - - If you are not sure which one is the communication port, you can run - ``dmesg | grep ttyS`` under the Linux shell to check the base address. - If it matches what you have set in the ``vm_configuration.c`` file, it - is the correct port. - - -#. With Minicom - - Run ``minicom -D /dev/ttyS1`` on both VM1 and VM2 and enter ``test`` - in VM1's Minicom. The message should appear in VM2's Minicom. Disable - flow control in Minicom. - - -#. Limitations - - - The msg cannot be longer than 256 bytes. - - This cannot be used to transfer files because flow control is - not supported so data may be lost. - -vUART Design -============ - -**Console vUART** - -.. figure:: images/vuart-config-1.png +.. image:: images/configurator-vuartconn02.png :align: center - :name: console-vuart + :class: drop-shadow -**Communication vUART (between VM0 and VM1)** +To configure communication between two VMs, go to the **Hypervisor Global +Settings > Basic Parameters > InterVM Virtual UART Connection**. Click **+** +to add the first vUART connection. -.. figure:: images/vuart-config-2.png +.. image:: images/configurator-vuartconn03.png :align: center - :name: communication-vuart + :class: drop-shadow -COM Port Configurations for Post-Launched VMs -============================================= +For the connection: -For a post-launched VM, the ``acrn-dm`` cmdline also provides a COM port configuration: +#. Select the two VMs to connect. - ``-s 1:0,lpc -l com1,stdio`` +#. Select the vUART type, either Legacy or PCI. -This adds ``com1 (0x3f8)`` and ``com2 (0x2f8)`` modules in the post-launched VM, including the ACPI info for these two ports. +#. If you select Legacy, the tool displays a virtual I/O address field for each + VM. If you select PCI, the tool displays a virtual Board:Device.Function + (BDF) address field for each VM. In both cases, you can enter an address or + leave it blank. If the field is blank, the tool provides an address when the + configuration is saved. -**Data Flows** +To add another connection, click **+** on the right side of an existing +connection. Or click **-** to delete a connection. -Three different data flows exist based on how the post-launched VM is -started, as shown in the diagram below: - -* Figure 1 data flow: The post-launched VM is started with the vUART - enabled in the hypervisor configuration file only. -* Figure 2 data flow: The post-launched VM is started with the - ``acrn-dm`` cmdline of ``-s 1:0,lpc -l com1,stdio`` only. -* Figure 3 data flow: The post-launched VM is started with both vUART - enabled and the ``acrn-dm`` cmdline of ``-s 1:0,lpc -l com1,stdio``. - -.. figure:: images/vuart-config-post-launch.png +.. image:: images/configurator-vuartconn01.png :align: center - :name: Post-Launched VMs + :class: drop-shadow -.. note:: - For operating systems such as VxWorks and Windows that depend on the - ACPI table to probe the UART driver, adding the vUART configuration in - the hypervisor is not sufficient. We recommend that you use - the configuration in the figure 3 data flow. This may be refined in the - future. +Example Configuration +===================== -Use PCI-vUART -############# +The following steps show how to configure and verify a vUART +connection between two VMs. The example extends the information provided in the +:ref:`gsg`. -PCI Interface of ACRN vUART -=========================== +#. In the ACRN Configurator, create a shared scenario with a Service VM and one + post-launched User VM. -When you set :ref:`vuart[0] and vuart[1] `, the ACRN -hypervisor emulates virtual legacy serial devices (I/O port and IRQ) for -VMs. So ``vuart[0]`` and ``vuart[1]`` are legacy vUARTs. ACRN -hypervisor can also emulate virtual PCI serial devices (BDF, MMIO -registers and MSIX capability). These virtual PCI serial devices are -called PCI-vUART, and have an advantage in device enumeration for the -guest OS. It is easy to add new PCI-vUART ports to a VM. +#. Go to **Hypervisor Global Settings > Basic Parameters > InterVM Virtual UART + Connection**. -.. _index-of-vuart: + a. Click **+** to add a vUART connection. -Index of vUART -============== + #. Select the Service VM (ACRN_Service_VM) and the post-launched User VM + (POST_STD_VM1). -ACRN hypervisor supports PCI-vUARTs and legacy vUARTs as ACRN vUARTs. -Each vUART port has its own ``vuart_idx``. ACRN hypervisor supports up -to 8 vUARTs for each VM, from ``vuart_idx=0`` to ``vuart_idx=7``. -Suppose we use vUART0 for a port with ``vuart_idx=0``, vUART1 for -``vuart_idx=1``, and so on. + #. For the vUART type, this example uses ``Legacy``. -Pay attention to these points: + #. For the virtual I/O address, this example uses ``0x2f8``. -* vUART0 is the console port, vUART1-vUART7 are inter-VM communication ports. -* Each communication port must set the connection to another communication vUART port of another VM. -* When legacy ``vuart[0]`` is available, it is vUART0. A PCI-vUART can't - be vUART0 unless ``vuart[0]`` is not set. -* When legacy ``vuart[1]`` is available, it is vUART1. A PCI-vUART can't - be vUART1 unless ``vuart[1]`` is not set. + .. image:: images/configurator-vuartconn01.png + :align: center + :class: drop-shadow -Setup ACRN vUART Using Configuration Tools -========================================== +#. Save the scenario and launch script. -When you set up ACRN VM configurations with PCI-vUART, it is better to -use the ACRN configuration tools because of all the PCI resources required: BDF number, -address and size of mmio registers, and address and size of MSIX entry -tables. These settings can't conflict with another PCI device. Furthermore, -whether PCI-vUART can use ``vuart_idx=0`` and ``vuart_idx=1`` depends on legacy -vUART settings. Configuration tools will override your settings in -:ref:`How to Configure a Console Port ` -and :ref:`How to Configure a Communication Port -`. +#. Build ACRN, copy all the necessary files from the development computer to the + target system, and launch the Service VM and post-launched User VM. -You can configure both Legacy vUART and PCI-vUART in :ref:`scenario -configurations `. For -example, if VM0 has a legacy vUART0 and a PCI-vUART1, VM1 has no legacy -vUART but has a PCI-vUART0 and a PCI-vUART1, VM0's PCI-vUART1 and VM1's -PCI-vUART1 are connected to each other. You should configure then like this: +#. To verify the connection: -.. code-block:: none + a. In the Service VM, check the communication port via the ``dmesg | grep + tty`` command. In this example, we know the port is ``ttyS1`` because the + I/O address matches the address in the ACRN Configurator. - - - VUART_LEGACY_PIO /* vuart[0] is console port */ - COM1_BASE /* vuart[0] is used */ - COM1_IRQ - - - VUART_LEGACY_PIO - INVALID_COM_BASE /* vuart[1] is not used */ - - - INVALID_PCI_BASE /* PCI-vUART0 can't be used, because vuart[0] */ - - - PCI_VUART /* PCI-vUART1 is communication port, connect to vUART1 of VM1 */ - 1 - 1 - - + .. code-block:: console + :emphasize-lines: 7 - - - VUART_LEGACY_PIO - INVALID_COM_BASE /* vuart[0] is not used */ - - - VUART_LEGACY_PIO - INVALID_COM_BASE /* vuart[1] is not used */ - - - PCI_VUART /* PCI-vUART0 is console port */ - - - PCI_VUART /* PCI-vUART1 is communication port, connect to vUART1 of VM0 */ - 0 - 1 - - + root@10239146120sos-dom0:~# dmesg |grep tty + [ 0.000000] Command line: root=/dev/nvme0n1p2 idle=halt rw rootwait console=ttyS0 console=tty0 earlyprintk=serial,ttyS0,115200 cons_timer_check consoleblank=0 no_timer_check quiet loglevel=3 i915.nuclear_pageflip=1 nokaslr i915.force_probe=* i915.enable_guc=0x7 maxcpus=16 hugepagesz=1G hugepages=26 hugepagesz=2M hugepages=388 root=PARTUUID=25302f3f-5c45-4ba4-a811-3de2b64ae6f6 + [ 0.038630] Kernel command line: root=/dev/nvme0n1p2 idle=halt rw rootwait console=ttyS0 console=tty0 earlyprintk=serial,ttyS0,115200 cons_timer_check consoleblank=0 no_timer_check quiet loglevel=3 i915.nuclear_pageflip=1 nokaslr i915.force_probe=* i915.enable_guc=0x7 maxcpus=16 hugepagesz=1G hugepages=26 hugepagesz=2M hugepages=388 root=PARTUUID=25302f3f-5c45-4ba4-a811-3de2b64ae6f6 + [ 0.105303] printk: console [tty0] enabled + [ 0.105319] printk: console [ttyS0] enabled + [ 1.391979] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A + [ 1.649819] serial8250: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A + [ 3.394543] systemd[1]: Created slice system-serial\x2dgetty.slice. -The ACRN vUART related XML fields: + #. Test vUART communication: - - ``id`` in ````, value of ``vuart_idx``, ``id=0`` is for - legacy ``vuart[0]`` configuration, ``id=1`` is for ``vuart[1]``. - - ``type`` in ````, type is always ``VUART_LEGACY_PIO`` - for legacy vUART. - - ``base`` in ````, if using the legacy vUART port, set - ``COM1_BASE`` for ``vuart[0]``, set ``COM2_BASE`` for ``vuart[1]``. - ``INVALID_COM_BASE`` means do not use the legacy vUART port. - - ``irq`` in ````, if you use the legacy vUART port, set - ``COM1_IRQ`` for ``vuart[0]``, set ``COM2_IRQ`` for ``vuart[1]``. - - ``id`` in ```` and ````, - ``vuart_idx`` for PCI-vUART - - ``base`` in ```` and ````, - ``PCI_VUART`` means use this PCI-vUART, ``INVALID_PCI_BASE`` means do - not use this PCI-VUART. - - ``target_vm_id`` and ``target_uart_id``, connection settings for this - vUART port. + In the Service VM, run the following command to write ``acrn`` to the + communication port: -Run the command to build ACRN with this XML configuration file:: + .. code-block:: console - make BOARD= SCENARIO= + root@10239146120sos-dom0:~/kino# echo "acrn" > /dev/ttyS1 -The configuration tools will test your settings, and check :ref:`vUART -Rules ` for compilation issue. After compiling, you can find -the generated sources under -``build/hypervisor/configs/scenarios//pci_dev.c``, -based on the XML settings, something like: + In the User VM, read the communication port to confirm that ``acrn`` was + received: -.. code-block:: none + .. code-block:: console - struct acrn_vm_pci_dev_config vm0_pci_devs[] = { - { - .emu_type = PCI_DEV_TYPE_HVEMUL, - .vbdf.bits = {.b = 0x00U, .d = 0x05U, .f = 0x00U}, - .vdev_ops = &vmcs9900_ops, - .vbar_base[0] = 0x80003000, - .vbar_base[1] = 0x80004000, - .vuart_idx = 1, /* PCI-vUART1 of VM0 */ - .t_vuart.vm_id = 1U, /* connected to VM1's vUART1 */ - .t_vuart.vuart_id = 1U, - }, - } + $ root@intel-corei7-64:~# cat /dev/ttyS1 + acrn -This struct shows a PCI-vUART with ``vuart_idx=1``, ``BDF 00:05.0``, it's -a PCI-vUART1 of -VM0, and it is connected to VM1's vUART1 port. When VM0 wants to communicate -with VM1, it can use ``/dev/ttyS*``, the character device file of -VM0's PCI-vUART1. Usually, legacy ``vuart[0]`` is ``ttyS0`` in VM, and -``vuart[1]`` is ``ttyS1``. So we hope PCI-vUART0 is ``ttyS0``, -PCI-VUART1 is ``ttyS1`` and so on through -PCI-vUART7 is ``ttyS7``, but that is not true. We can use BDF to identify -PCI-vUART in VM. +Learn More +========== -If you run ``dmesg | grep tty`` at a VM shell, you may see: +For details on ACRN vUART high-level design, see: -.. code-block:: none - - [ 1.276891] 0000:00:05.0: ttyS4 at MMIO 0xa1414000 (irq = 124, base_baud = 115200) is a 16550A - -We know for VM0 guest OS, ``ttyS4`` has BDF 00:05.0 and is PCI-vUART1. -VM0 can communicate with VM1 by reading from or writing to ``/dev/ttyS4``. - -If VM0 and VM1 are pre-launched VMs, or Service VM, ACRN hypervisor will -create PCI-vUART virtual devices automatically. For post-launched VMs, -created by ``acrn-dm``, an additional ``acrn-dm`` option is needed -to create a PCI-vUART virtual device: - -.. code-block:: none - - -s ,uart,vuart_idx: - -Kernel Config for Legacy vUART -============================== - -When ACRN hypervisor passthroughs a local APIC to a VM, there is IRQ -injection issue for legacy vUART. The kernel driver must work in -polling mode to avoid the problem. The VM kernel should have these config -symbols set: - -.. code-block:: none - - CONFIG_SERIAL_8250_EXTENDED=y - CONFIG_SERIAL_8250_DETECT_IRQ=y - -Kernel Cmdline for PCI-vUART Console -==================================== - -When an ACRN VM does not have a legacy ``vuart[0]`` but has a -PCI-vUART0, you can use PCI-vUART0 for VM serial input/output. Check -which TTY has the BDF of PCI-vUART0; usually it is not ``/dev/ttyS0``. -For example, if ``/dev/ttyS4`` is PCI-vUART0, you must set -``console=/dev/ttyS4`` in the kernel cmdline. +* :ref:`hv-console-shell-uart` +* :ref:`vuart_virtualization` +* :ref:`uart_virtualization` \ No newline at end of file