From 6dd6bd427e0c1271f5e8c5aa39f7ff91c4e0e8fc Mon Sep 17 00:00:00 2001 From: ice-bit Date: Sat, 1 Aug 2020 12:37:43 +0200 Subject: [PATCH] Fixed typos --- README.md | 45 ++++++++++++++++++-------------------------- imgs/screenshot.png | Bin 26613 -> 11605 bytes 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 4d1af47..168cc7c 100644 --- a/README.md +++ b/README.md @@ -17,47 +17,38 @@
iceOS running under QEMU


-**iceOS** is a x86 monolithic kernel written in C from scratch. -This project doesn't aim to be a fully functional operating system -with tons of drivers and graphical applications, it's just a learning tool to teach myself concepts like Operating Systems, Computer Architecture and Digital Electronics. +**iceOS** is a x86 monolithic kernel written in C from scratch following the UNIX philosophy. This project is just a student learning tool to know more about operating systems, do not expect nothing more than a toy. + ## Installation ### Requirements -Before generating an ISO you have to compile a [cross compiler](https://wiki.osdev.org/GCC_Cross-Compiler) and you also have to install those packets: +Before building this project you need to setup a [cross compiler](https://wiki.osdev.org/GCC_Cross-Compiler). Also install the following packages: - nasm - bochs - grub -- mtools(if you are on Arch Linux) +- mtools(only for Arch Linux) -Then you can run these commands: +After that, you can build iceOS just by running the command listed below. 1. Type `make all` to compile the system and to create an ISO 2. Type `make run` to start it in QEMU or `make bochs` to start it with bochs(only for debug purposes). -Otherwise you can download an already compiled ISO file +You can also find a ISO file [here](https://github.com/ice-bit/iceOS/raw/master/imgs/iceOS.iso)(md5sum: `342691301699a73102fa6a57abea6989`) ## Features -iceOS already have/will have the following features: -- [x] Bare metal booting; -- [x] VGA driver; -- [x] Interrupts implementation; -- [x] PIC & PIT implementation; -- [x] PS/2 driver; -- [x] Heap implementation; -- [ ] Virtual File System -- [x] Support for x86 architecture; -- [x] GRUB as bootloader; +iceOS has the following features: +- [x] VGA driver +- [x] Interrupts +- [x] PIC & PIT driver +- [x] PS/2 driver +- [x] Heap +- [x] Paging +- [ ] VFS driver + +## Tutorial +I'm also writing a tutorial about this project. If you are interested about OS development and you're looking for a detailed _step-by-step_ tutorial, have a look at my [website](osdev.marcocetica.com). -## Resources -This project is made with different kind of resources and different kind of knowledges, before starting it i read/studied the following resources: -- [Structured Computer Organization - Tanenbaum (2013)](https://www.pearson.it/opera/pearson/0-5585-architettura_dei_calcolatori_6ed) -- [Operating System Concepts - Silberschatz (2016)](https://www.amazon.it/Sistemi-operativi-Concetti-ed-esempi/dp/8865183713/ref=pd_lpo_sbs_14_img_1?_encoding=UTF8&psc=1&refRID=4A5T2C7KKH7RA0K1T7RV) -- [The Art Of Electronics - Horowitz (2015)](https://www.amazon.it/gp/product/0521809266/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&psc=1) -- [OSDev wiki](https://wiki.osdev.org/Main_Page) -- [JamesM's kernel development tutorials](http://www.jamesmolloy.co.uk/tutorial_html/1.-Environment%20setup.html) -- [The Little Book About OS Development](https://littleosbook.github.io/) -- [I actually started this project thanks to skiftOS](https://github.com/skiftOS/skift) ## License -iceOS is released under GPLv3, you can obtain a copy of this license by cloning the repository or by visiting [this](https://opensource.org/licenses/GPL-3.0) page. +iceOS is released under GPLv3, you can obtain a copy of this license by cloning this repository or by visiting [this](https://opensource.org/licenses/GPL-3.0) page. diff --git a/imgs/screenshot.png b/imgs/screenshot.png index 8c1ed8527718d5f32b30f9c0393b1c34fa96f886..4ba687fe324e90f6666ae4694548e5519ad52a32 100644 GIT binary patch literal 11605 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
  • Uqtl!L@*=&b}A(u#4C`dMlo#X-k z5jzRVjHi!5R4e>)M0NaUK|$5=)wrOsf%pU`D66(%Yc73P1}1xfGG*xPLZ$|EqY;{L z=yFitxc>;3+K2=*uQzCjPI)dJk5u%Z-2z$PshS2Ps1Ut(5zmXuY}}1GP%{~31dP>O zYNp>F219-7&0WmTAgQNJEgGXjPWgSk=DqpjMW<+K4>qjJZBag1_uR5UPKtEV0R^iCMY~qr=E-UNbmv9)lr64Q9;W0NFfyH@d_*` zHK(RxpvSOV=}zqw`@n#(wRG;!suO+#ZxkiAzoMdj3EGk%2N(Dx zHMIbMaL!LYV8Xt28r1B+{`+Ckx_{Tk3JKbc1n;dj(|AP+TkB0+0{5gRDWKV|B;(&_ z-oGW`|M%h7@$)j7D}C}?h`VlgNsKMU)?tAXd2E@x_91vk9kj?8KDK0Dzz@pr?v-+j zQf5HRn5~qlW%f4Xj6YQGN;yJ)tqCNC)@T>&jWa-vOYXTD8*7_`ZJVE)o-rc#c$s{# z3$n+q+7)CWpHqEHe$GlhBI3U<-sOPmKtI90pmBvg!+n|Y-fH3nU{Kg$WVLwAmGz9Z zw9+R+=Aai;>cpULyh#O-`DA|GQC~i^7rIgpfmuS?!%h@=S9#KW$z0w>NnsDCTVB+xU@3q> z95K9)#zxw2>>MpMu_q|98e>a1u%u!qYgiyqa`knh2EL1L+(bW}a=6o+(U^^t_)?5n zmRBN+U1?qO;bUOk)k+?-3guoJ+Mr&TFdO8nSNR;6xA4{iyz%sPJ`d7Ob5N*d8FC7H#%9Mx9YZaogK*VdfUUPz!8v@QdKg-jht zoGAo+o13v;w1>-#gcKwiMGS88JbX2CZe~#bgp`Gf!jOnh`p-q7y@3^_6NAL8t9MXz zLh;mzO9KfdIN)CPeNqgXNG;Daazc#W>1@4nFD(Q&`L(cwW59}ws189e>}w&gf(2ci zBIqHOwU~t`-PH*3_dQW*@UfG%+FL&6?juDW{BGYN32RNlL#nRXe0AnbH4q$oxG~;i zxKwJrSBVVo$IUS+6Kzyj^XOh<)K5M|F%Q2HeJ14b{>?nj1=SH+qvjS5kM6NlX9@rY z0=`{oGOZQXXTpAY?TOI@V)6UcP4$67;m*Cl0Pb%*SSYPpF*_aGnBQsH&Bn==QR-#6 zJJ?$cbRRfQ{ zzFqrbwaooNnUb2t&~O7|y{RtPq)WoDEyaxW3-CbvBov+xlOm+&>+~*!*dgHeUR^#o z+nObr#0!|ahMi8362^rZ`ab&b4A19?+LtV1HlpT{T$R`^*Q(k%{ASL`t+0n!LNr%2g>P_K? zO)X5BX8@ho9enhcv&V2X=eoACkA`HPQjc${zch>C1*9Bg_NWhCxpNr!D!XS(vASs2@_CxSFE4}+@ys-kuD^BJDCqS z(XOlCRbOlU?2}4!OOe6oSGz$Yl`l^CqtDh|1b$exR;<_sHWyPC>jk1KP!M-*uw3T4 zla&0(b6Dwa#JiAV&*=6%wo-gR$>64rxXI00xGtfuut zlh@UOd&zoy^y(iWDW1Ww!X>$BVPrL4_^@?$rCSDi-w-dL;C521>m2SG-Rk7Am8;Pi zAzvDLUIyqk{;chM9v8Zi`qF+Mj^wkQE@s2KYC8ZhymBlegRK0>Qw0E^ z7hcJqGdwh1TsZY4?J_U$Uh$g_ghV}_^)$^6g1emt&&qCH4noV{9Ffh=PrOlctzK%= z(YUN9MY>5Zu%1W_R-BW9>v_1H*g_~cPvi*Q?_4|t`osOU2yhqN3J0wI%0(axCTe8% zJ-;?;_W7-aWTz&b((3E@O-!4woRBJ7Sgyzz%!jQW$MJ-hC~Le*Ju*_`hi7TP zy+lY}uASiCHFdbS-P3NvJr6x|5^&B1_YQncSc+bIXx!OC@hg{=a>Yz8ukxRalD9Fo z+Jb@w`ga9??T>qS5BL2miBWM&Q}iJqN4ntbE7Q!2J-z#Y-wS`D!{56+(qfpM0>Ur8 zbv~WF5^%`4q35#1?E4-?0>M5|ifowxD>lqWqVxY)5_ zDI&yk^bwgCIAKwIpyj`1SH!OTb64J07LxK$cY4SVp*Ko8C+_j&j9%2Zj>#XAIgB2i zy$Q!XU(OAvJ_E5Ska}+%x}QMyN31jv4b6>_#85kemZ(JxF3H4P`zD(YaD+`4mL2x3 z$+9{)sBDS+skxY^sT;uyAWJ~A<=RTE1PU8P!&fq_{PYReC~LDFE~N(A=2A`R3ps!d zvoAYu-;Zim{t{$qBZS`?vcNc500nfa{uWc!19CWn&J#y<@n~~K%e?!oo{==_jkMG1 zJu2~IBS->ar3P8q*}$sopT+xK%4%+QCTI|cK<159~*R5 zH9ex*8G&Zo-+w`C(J=0p^W8~1$qVGUfgt?A{x>br(`!)a8T~t*LrGLzsp~q{GjZ}o z8^+!+#E|EqwZYBPg&GAyS|!p0X7^9{4T%6b_J87KR)|dB>AdHI1zwiAD_d)DBWI88 z0G^M^@BT|)Xst+johkrt{f8B%Cnu4GOA)CnH$k_iDzXkamN(|I z(gU-Ck=X-l_-(t~4O}XW_IW^5n&jjoYoJ;=CGthMZ6X?bb{s%i>|PO+?9MWXMAGm7#P07 ze}(U_U;YZ;NxT$7yuKIt+~pAPRxbY{;V)Liey_=EXfdB`YzyBD6u_D%CWjaOR1V8H z;SL@x@~s`~QUhdRd(@9ET#b8j|J<-YdM}`iwKxn~r*b-5e@f4Ic$J31QYIAWOh2;E8!;2UcFTA##HYep5Y>-GT!L=ba#FMlN2 ztOdJ>t*{guy_YJdB=vrSLXh28qe!$*zJ~fqxmy-941DyvqX^HpJaO{qE4?H4@@lVM zde=m)+3pkoK1#V_ad)t%Eowa19G3MtU5u-F0C>*!G?NHofmY?gt1^u|q zC@fKckkP4jQ0Lu?OKBr#r>%F2wkD#vVPSdhXCQolM-N3-TTr0 zllRH|h0wGu)~MH+f?#fZE{Qp}5%rWGI9y6IwWy{K9QZYR`>iVvpdex@)b;FR$PD*u zH`iVzi9nVx@OQUNQ*rd??)m65C}Udm7eB#USkGP5%$wA5{(k9Kvv1ih7R-aEr&AWq z1CrRb%6p$AjkIPXQBPuhkG;zkGSnY^(Pog$1H3B)Z>RWai0(^HzjgXWlfhku%oOAv zU`SfDtI!d5Q1@*K56~kXkx|@F8Cx@y@L%@#@CCy6ntG4k=yDAK2wW{XIe}N6rp;f2*X<`nW%-SMq;J9>F-|wODDX04Xtd^t<>F z6Jw=e$0Q!!Jm(1CR_Yn~#2!0|hK?#uFGYH9D=nc%x~r}J)h`uE)75PtJC5 z*b);3YAWc78p3+!)n5I@`f<;xg!kJv%6G=80g20bWd-Yb{CM{Fg{y{V+9{+YFT?6n zqP=Rnb4J<1FR;v=#Jr~95UEnKaoYUI)~BIbjlK^J z?!f0u6Z*4rD@#~)SC@9SybY?MH42i0RacNU{>(;FQf!I3N&)3N@Zj=AWODM7ZO=}+ z|1lWvM*6%}0koC8FjTMTdxtMsnrKnEl@2GrGeec!8??aE&FkmC2bF~tovh1}QByf3 z3gFH2BedGJ+K~RKRO3;O`4xd$T;qFxhGgzL!4KDXa$V!&Xn0UJj60mW`O4Ql7G?zS z74_*Fk)JRJuNX!w&RqQ|oVI^vFn7ec0W2?^eq}23LlnrVkFsU{3;Qme=J5}(a84w2yGMW^qO!h=7OREtYHW+Zrl!~Nf-FSTCxz&_1pBff`#2QrfX zGr3;(w7zwTkfV5$vIf_u;&Wyrx3yeR+e26T0(gM+#3#RMi9Y4)UGt1~S@PB8>b%Qb zYgtXS!{qdAKbvLa%zrb;Uc=+ooxWzUt`U>5aWEP;l+c$E>6_)@Yjlzn|# z>RP4c$5REpij;Ks3>$2{b$L6~@%ZooBA_$$hHz#@mD{|uM#+LGdS8XR|Gp zUou72rwV@et_VEIL{9`RBggyo$vRA>8UA4m=L@R}U*6 zv!V3D_K!Q$E~fA}EBbc*b>&tkQ1dbA7+69p8dSJ3x~ncf=Dpb!G{Ez7|2vodt*NA( z+Qb{_hw^cFIs8+lCXwpB78Mo>$Gv|=wIp+ti{%e>EShE#P5m-Pymv;Tx*EN<4>^NNGfYBm@8*Q5VKu?y^TO90 zfq@cqYhOq;z5`)c%HQt4_tmv?-H~WbY}g>;!Mt*Lb*CPZbhH&cjqysdf+d>`{J`yS zPt3Po<|5TywarllfU^0tG5J(S&Qoi1_SQFg^)|!dZPW7u>E<4xLY)2GGMcEmJFOV$ zv|kk?e8xjMq&20B`R=&wq}())_9mP7re zl#+{5T}CYp7w3yu!6y$3b)?fn09n3dux_YI@_Kg_{_f7uK11{H+iC4wV?)(AZoLyj zY47REZ@yhG%rB}DTpKRuji5K)iNfaY95x(#VMrk;zZ-;{VjL9n=fJYoX-Z4CLa`h( zv63|pLvq5p3FQ`Os(Y#TS6u%RaIk`<&t2^)a^)8i^i7!2zZgoJ7Vf-o#+D+UB& zh1sylE@X;%Eedy{4%&t`AH*UDBttwbM@u6I5j~dP?&~r(o!)AFw1Lt-lX}EB{x4i9Y^y3Ct#yGlbfQvpOghVc)}ma#gvvQ zh|$+93eOCxc*qC=3W%S4PCA^7TvBF=fc$s2@cegN_zi5*?Suu=tgA-E4&Jm@g%v}uAlIh-!;fHE}G^_s>tp6=TLBVgC*$K-#VPsG6u$JbZ z4f51#+B3n?;S{;L+M0(MO!9(n^vg)p*R@@IV`&p*PoxB`4+w9fOHrZK0?itSLA2 z?i;f|Q%TycX3UHjhG=vv5Y5agqQ7lE^XQF#V%gXWmOOM2GGb@s-`&6BzP}ez={%?b zt=5)`O>KAx(!>rZ$|W+^U8%Yx^`;wi6$oqcl3U0tIVr2$~E*AF}$kkD+oB~zJu zzrBTVTL{Mk^t&cY4}xMdKqHe8i96!Un{^EyV{}+-cKZjMSdy2eflvDO-t7Y~(DMdt za{SrTsOZNg=JpzX{amFRc9NIMH2SM!(Aybht^#f{zo z{J_WB^s!ykRyg$UyC45?Pvn1o{Z9&Y|6{)Y?_9&V!u=B%TOM!3KsxiEe!{DEP_r8H V#!H6cr*|*9ebY#{;`+mX{4ba{Q?~#B literal 26613 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 OFGc@H&)+}#^nU;Xn=-2a