From 2c136dae2d91a7a23932c0f5f0e929175872242b Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 31 Aug 2023 17:54:12 +0300 Subject: [PATCH] Update README.md --- README.md | 38 ++++++++++++++++++++------------------ assets/banan-os.png | Bin 0 -> 11586 bytes 2 files changed, 20 insertions(+), 18 deletions(-) create mode 100644 assets/banan-os.png diff --git a/README.md b/README.md index cfbc5b20..e5da495f 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,53 @@ -![lines](https://img.shields.io/tokei/lines/github/bananymous/banan-os) ![license](https://img.shields.io/github/license/bananymous/banan-os) # banan-os -This is my hobby operating system written in C++. Currently runs on x86 based architectures (32 and 64 bit). Currently this operating system supports ext2 filesystem, ata drives (pio mode), vesa/vbe graphics mode and multithreaded processing. -![ss](https://user-images.githubusercontent.com/68776844/230458915-a0c3f1b4-e747-401a-bc0c-07a62d18927c.png) +This is my hobby operating system written in C++. Currently supports only x86_64 architecture. We have a read-only ext2 filesystem, read-write ramfs, IDE disk drivers in ATA PIO mode, userspace processes, executable loading from ELF format, linear VBE graphics and multithreaded processing on single core. + +![screenshot from qemu running banan-os](assets/banan-os.png) + +## Code structure + +Each major component and library has its own subdirectory (kernel, userspace, libc, ...). Each directory contains directory *include*, which has **all** of the header files of the component. Every header is included by its absolute path. ## Building -> **_NOTE:_** I will be using ninja in these build instructions but you may use any other buildsystem cmake supports. If you want to use ninja, you can either define a environment variable 'CMAKE_GENERATOR=Ninja' or pass '-G Ninja' to all commands invoking cmake. + +There does not exist a complete list of needed packages for building. From the top of my head I can say that *cmake*, *ninja*, *make*, *grub*, *rsync* and emulator (*qemu* or *bochs*) are needed. Create the build directory and cofigure cmake ```sh mkdir build cd build -cmake .. +cmake -G Ninja .. ``` -  - -> **_NOTE:_** The following step has to be done only once. This might take a long time since we are compiling binutils and gcc. - To build the toolchain for this os. You can run the following command. +> ***NOTE:*** The following step has to be done only once. This might take a long time since we are compiling binutils and gcc. ```sh ninja toolchain -cmake --fresh .. # We need to reconfigure cmake to use the new compiler +cmake -G Ninja --fresh .. # We need to reconfigure cmake to use the new compiler ninja libstdc++ ``` -  - -To build the os itself you can run either of the following commands. You will need root access since we need to mount the disk image to install grub. +To build the os itself you can run either of the following commands. You will need root access since the sysroot has "proper" permissions. ```sh ninja qemu ninja bochs ``` -  - You can also build the kernel or disk image without running it: ```sh ninja kernel ninja image ``` -  - -If you have corrupted your disk image or want to create new one, you can either manually delete _banan-os.img_ and cmake will automatically create you a new one or you can run the following command. +If you have corrupted your disk image or want to create new one, you can either manually delete *banan-os.img* and cmake will automatically create you a new one or you can run the following command. ```sh ninja image-full ``` + +> ***NOTE*** ```ninja clean``` has to be ran with root permissions, since it deletes the root filesystem. + +### Contributing + +Currently I don't accept contributions to this repository unless explicitly told otherwise. This is a learning project for me and I want to do everything myself. Feel free to fork/clone this repo and tinker with it yourself. \ No newline at end of file diff --git a/assets/banan-os.png b/assets/banan-os.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8322689b2aea4bf59e95a8a45e01965db46809 GIT binary patch literal 11586 zcmeHteLR!<|No^DDL360a&yWl-Ki56a#Ko0quhjwkxFQ$+>e=4qFbp%xlP%`Fh%5M zo6<=oCYp(Cq|7!fwi%mkzxO)ldrs$bKA-RJuiqcP$K&(Q^RS! z=2C=5DR*R3Hz<)~B&)G!>9P^3Y_E7E&^GRV2?Y7wyOQijl8n`}!}H@d;spB##m`mr z59lXM4U}G7byWwJkX3%H_LhyX*kzOUlB&hd{(N>%~Px&wzg&5mJt4=hF~+2QfiN5Zun6StIRZN|{xCjGhzHo~J1t zoi4Vyif>@VvT_AY`m%MT@mD&mvGKiFL3|yLEa_;?MiufBMD_J){Ha02J^;!wM`K*3 zFWQ*&?S-g~CYs?>i(rgr_sV@qJu%X+Et#F$s5^3PBp<2x%F0T?+YQ7*{h9t0_QM-C z+S38`Uq@@?)+7-ljy;f~?`%R6xPr^2=#w*i<3^tf#+&t*)0iI2d>K0*zuY&*PzsQ; zif&!(vg4*6dbmJ9$4cpOSddPa&NZ*Tv17uv-Z|#mbCphO(Wl!9;!Yj*+dCWTlP3di zSZ9lBei(g^+#m)-L;ggw;iGVAr=4ck1un0}d{k0;9)4C>3bW2Rf=Mm}{BLCX&^5+tJn z5mv6rp7`3rPPH1_2MhhQ-7|nGR3KHy%8ToWCi8OzE^>jq13-`kV9E;p6m#;H{%4=) zzFZI_Mub!>1ouIa)Kjv3(QKRmC7+BsB=r$me`}PoJ8)JY2r#M-|K(zYGm1PtRI8-| zK~A0xYF#ZRlpH3n{5T}J^|(9XOFHB1{=)p}gIUhJ2f zf)8#kI2WuqFJgM)D?o-w7IVg?09-T)T#A*kRO%`6iA?<>z^8{*Rc&056FhKfK^Y3e ztquWnh-xaFJf!>tki!B&u;1^OdY8cF(jcn$Dg`j^bJ%<auLY{m|RK&%~ha7Jq z9YWdMBFltCxHv}#=DQzIXdmDe6Qu1-#1nCKFA_a?9oFGVo;ZOP(mXpi5F4^UjoaTu z1h6>9p>|IJ+Ty_TbDl+v(f#yfKiiecWb!><$dL8rwv6+$};n-z46|n*XkotttPO&2F>e9UxL< zX!Q7R%Uf(u{7UzY+k_d^q2zxjG&rkKLLrjr2+BRc%wGjvM^U)%fsk?$PB0YNCP)fF zTK>Y3N@}RYWi|wLGa2?308qzy2LDp{=V$>NV1R&KfIyg1Ku9?(_v#HNh0`w z;ezLCRef*K5R_A0X}>(p)sZ_Yt`?aST9M5qqM_1&ciXzSN1q?B^d9v^nG@aw&xR7O z_V-&Gcr}^;8T3*MADWE#2eQaR;84FDz7 zIBRx?X>0?k{MB8D1RIwCHMcI?sHt=ge>Rg4M);Z;{^Jr`7a@>I<4f zPpLxC^5;LH?NYt1Pn!y3KEO;$CzXnKU9#Q@lGrQ|S${?I;-wS z4#Kzgr3RD8?i;n_D%m0eEjTRfQ5#J0JZh{&_okw{}ZVS z&qcpU8h=bUV0Q6pfzCo_Z^Y46Zsq4`OY9aP18;Uu`}0G>-J~K+R_l>jvH9MrHQ4 z`XHMJKsF1lt+S#w|KKuLM0?vF!cqbMH7i9~L)1B**$c z)!esqmvikQEGJ(d>UYn5I=bHG#M<#&hVH^uU3_lJ-S0X5YAh*_u&)U=yR4UZU^zUKR(C@UC~@!upaQ4% z5loh?J!}-d?$0;`XtxRtJ&oZ^2&LU&CSV}_Pjb=>;vwiDz?gA~=nKnrTOWKpRvL>D zQi~ZIwl?dg?f9~QgxYPOWdlL`f*OBJ|3zj?g5NX|lR)6t?+Lfd`uT>amA0buHI)@~ z!2hkdd2@kPpuy{qBS%yhf)77B`Xd({SvMk(ySJajAR`ads&y?PxPKKrLg+tMJ51+G z$`>o%U+U`EGF37&=k&GNP#8ypyx0;{AWMOw{P_QV{IN*YEJk-GEZT^8`AdW3QV9`x z?+ckl#WcJ`W4LA~EpQLp_#n`~PBm|?y{4f50Qzulgl?DzcB zX7tpfYb#}QpfJ_j%4y|^H#OaYEL9!|)C;WehEdbsif?J%Lby>5gQ~iv#=|ivn;1%~ zp70R*mLt!j=@o>l6RrG3Ibw$-q<;Zh6g@m%Euq#f^mqJ9ICe)DWl1zW9YHh0lf}WF z_MUHp>-C`Rn+fS1XX9zW!RuPITUA2e45zBf=*kfj%D4K*?K;?=X8=f_!vXnq}Bj3qcyV=tbzG_M`|^c<1zV zMNR-&erqGfs}o%Gg$+f=l!W)- zr~0%EK)DG0@Jj>oHj=9@z=veX5*G5X>zv96PXyvg!@IMf^m)CY$f@3zfSxMo-p0fT zv-bL-6FG0CKn#vRK_Q7E3_o8J{uTjKhX-Z3oh=pFR?SpyMy_k`;2ymtjOwjhbQt4& zY1$BK+zNPBbqc_xt6!^p!6$rWtyZmr#1E=6B*Poed&hC#(FRaQD_vFz%nQ7wYc>E)~gPMSvDG^;* zHQgG_3+JG92*>`}kXK!wLsIPQ^>Ta-c|%O^cwMz5a+UtJIcHw;SqRbJ(FhlCz9j#Um$REs_7Wf znebtWzN;);uU9p%6UiH0Y-gTLtEI4-9otN5=R*Byo7IE1Tt{x{(h2mT za8Thnzz#F*D&Vvct==Ox-T zIukP%V?_ETW7E-7jL1^XrsCAEq_s$3N_2a0>2*4t$ej-(F6~#a;Lcwx=%sg4=}VV! znoDejA|)ub^<&yA0Z4zEq@6zdeU!X9*(XxwI;LrVXVP6&7i!#dwhQ}qRIELLye{vk zxUFxZzSpT%Ua;|L`P&X|FFhxpdT>3||3Ec6iD8=bM(S@1w}0|Z4nY}boj|+n zMl#7J9JxABM1vK|ENl^-=NcfWdFU8ayDx5A&XxGvFLB89XMjt;lY=#L0DMu{p`2B9 z(A{2}=l4z1O^g(G+!wm~MfECbZ`2-?r7yka0=jb?FA=R&!~i?&`w(xL;d<1urG!|O zQ7#s@>GMCi?&dEAn9#R7%w||Rm3($EU z?(K>(8YmD%*Nu`2^2^jT;lDoMkqTI|ppDNzrp@i_o*O`W#O3~ax*ps6ErTo` zz?0v`U*<|C&tEf&0e!T2u*N>b>e8}tgm%=#Aa3BavB)+Z*X3c+B^DlHxAml?@_>_OF2Li|_h3;oe?eLXUJ2CaN-Z{r^G3{#y@!v8cWzi>GLSuvr`9FatxqW@@}diX8M?nU;%kjLj^IV3R;n$7 z!b+oBz5#7`x9N-q5QD_;4ayJV;PBnc<@C<8Mx6ojiDR@SO8dnfW|K1;YP_Wg6Mn9H?~19J zoLh6z3C_J-a$L2AK&ojhx41DKAAaPoKyA(6q`6QCyL}--f2nZoUiV8HCA5_LE$=PDkt8l+1Zn)+iqkgKg4~K zAIv!7`PGZdm5?@Di_!#9AgBwgHTOw%K3n`eq9>7h<8gCADGM<3hSdI2_;A+JcEjQL}~LB25Hk7us02CoiBKcrAQG^QG>^$ca=`4+T6A7N=30J9ho%##6+q|I1Ro53~`ZC=osIU*+ z-wYxYj4YKexeq@Pw%i;j?|oRJ>1ePosqF^LCo`WJIkSRCWL;7XNI4Cd2>1zc4U@pFz=BsY zs^3%#=b}5!;8@C~-+7`a%3iysfV|B0mn531`=7&tzc(q&)Lb+@=bBrsEd-@?fYJpo z#?Xq$wEG;EDST?P&qx2OD++H>NXQbA!JUMG_Oh+~Et>SM4z!u)HYXmd zBCT}ZN#6gt!`$(hBL+$3DolXW^gS3b?TNVURuM{DYB1+_0#QE)p2q9e=iGK~{rQ?z zL~id+5<8|-D$#9n{u&-E&T$ftIQ?0(#2-uYF1MbFEYAc(fW9baANF{4-VL!3f^Hr* z#vu{2*K5u-QZFwL@9`D&Rl=E4lP5E*9YZWwkrB;vk)9*AsF$I`|2WbAeu-n&ti5l> z%SAwk2Y#SLSXCbd8RHb0z?4eLnWF8>5ls17_+omBEJ0NTYBXM9rcy{;*tKl4W0P}2 zgQ@P*KI||*Sr2gqM~^KP3Z=f8c}E?!l%UN|Dlm2&rWSRpfAp9nJS)RAM;-XXyTFAh zC&n9h;=}PVlZ!G7zJB(e@YOd05`QvQDe-~@Y@Ri4a{rKUu(tg2GaTVWB#`)G;`uwS zeCoOV`I2_w^?QSEi%z7J&vdQPoCR+pPI@a7Ms1Q~m7tU-N0XO>F?ZIw z9-8r(sXyeZx%j*?6!y-cRjJsex{P~7=}|%gVo=)sm+y^y5BliFB`{;F7n@0iDL*CM<0n6Hd!p-}IBNE<6A9#IHvc zbXbnO=MNEp7j3GPW`eG-GADA`x6P0j~|m1l`zQ9KZNE98{ZMb(>D7n^$GE5t-a>9%YS_e3`79YxOeh3A*u->9gHs2_NAHbAdJR?@T>KzoJd8bm~<#4BB>2O;0Yi+{dWfjG~yX8hhwd8d~Z+* z(xoU`Kx*{x5n2&DyT5uK!>1{uM?1`(5@Z9!PTCsd*z$3h2-;k(#AmpKxZ(5ypXoBV z-WJE7(`#03n^6PJLhpAMcGu}Y+1^F3J4j$cRCma#zy(S2VNNnmJ*^$}5;Afkuf;kr ze*tTw#F71MY+l{?s z;{YL(!vjMF$F_;QWPDyqxuGkjnJdaZzMXbV2@VEv8=zY1 z{LGZKzK^E&D1?`F;Vv-ejm1_|&cgsCcDrKCne_hq@el8`&!A;|7MQYJiQ1Ll+kP^J z^)D0L&axN}O_P)(`&-rnx{q-G_u1DsdK|!P$=^p`vrrD=l+3Z9Fjq+ebS2bZO zE%&8U@ws!jf z6yYovwEVZ9^BvGj_3CE5B&$od(lfgd4+!IZk#NT#o`nHUL}chJ4x3~Tys=kFZMVBmWRIJQh87sc!tL!}-~F~#xaAix;A>X2 zFgn9Vi(fUD|3X``IXUznvoQ))nzBGyr}DE$?-d04DELt4dfXSnh(S?ZO)_XYA@{#V zWLpU31p$C8dP;LZkqb~=rWkhqG3NZwgZ_W`=zpw(f9OE}_U3t2eW98@FD_R1g-Wj} zLCeNQ+La5_JJ9vyQBrGgc<*Bl$%4Cre@!Sp{4n~@oq!I3VSp$bBCO?Dg!hEjTrHPs z34M~Vo{*pSKY0A4;{6gE4)fh!tdsux)1@{p!qR||i(cr~loA(^)cESZHV492u|oBz zrMosCA1oKgkFeS)`Y8!EP}teruh!~tYfT^fLUAgc2m39oq?W_2!y3u)*wTXQ0(>~v zOt1=7NAKo3eW5#h%Rfv6-k6>~;DePWV1#DsH{aT$WFoS-Cjr)*Am{V56U^=NG@)Z> zNcI)tWg@cWaUZzGKkX1uAZUS9@mqjm;)WA7KE1+^*}D$W`AUgbiD3Rt z3qORKftj^C4ILcmtgqV^cv-k?lVlG~#Ls`QlSHLH zCe#GHWx>=9H)6W>$fOYTb}3M0*k=MA&Puia@MM%TnQZDLkQ`tQ@S|Lu5Nn{dT z%a@}%*HV%eQd*#}o-1Hs0p^57#rC@*q)YAL!{MdCYxrGzU||5i-7Fajz83U_#W%%o zIVlauY|ph!643nZ$og6Rne@c<0t|EgIy{@yzCpK_j%t1a=zltY*v zwlk;J5_^U&d}*5Hl%I`Yx_i zBH9iZ^wrgRjp_nWOmj9i0Uwd{0~_#QWaxPKIk+$$Y$rZOf+3Eo|9@iOoZusyz-64@ zd@Pv1&lo3+!t};v(}t=8XmR0PTZdM1g=Kz^KbA%jVLDC=XG3;<&*SV$5+8dbqp%aA z)!Y^FKFiFrUNlG5_X!g|$Tfh7oLXpY&|Io#nuXp`Qt|jmSqC^Ltr1&+YH+Kvp{Ssk zRSC4RMv(cFh| zxqICA^9}gzd}U9Y)kz!Lg;g9EGEWdHOs{^WOp=F)Mj8xP9To z!3;TxNUqNJ=?&a4J-r|ntV9Nd8qYa8KY3Utm5fHpO3Mol3N5s8RFh(&p7{hl+!)#4 zrSn>`Lclfm_-fvPO{9FX)lWFg`|Xj8Ay`?LhoDCxnbaaSc^SyLyL-V>sf6`_F@*}g zpZTt!yT;#kNZcWIx)$_|o^lLl3fJ7tgw2G1ESfB5q#EZlO<$G?ywTPWH01ejwnfJB z4D4GAgG0q+v2AR-KdH zeI-wKQlGC6c9tzailc`mwlHM%3uA5wA>ge?h4}E}9+5cSHS$gHLHnPdYvyi2P_WD^ zo=E=A3I7lrwUvk}A#gvQ*MJ%uK;Jp2zdB;gh|l{2CcqD{xBqE~UhG^s3$!aoeit}H zuRleyvUeWl-J&v39PE!dvL{a-G`{;xSpPU9d}6yxRoWx-5_+Kc>!qZ{xpc{5R|V=T}NU lII#b6@JB!T{}~!`{lHk2*%h@Y2OxjY{yomS%Xj&m|3CIgZoU8j literal 0 HcmV?d00001