From 01a4016f15bfe3a1b024fb0eb35592eb3810eae9 Mon Sep 17 00:00:00 2001 From: xamidev Date: Mon, 22 Jul 2024 11:07:52 +0200 Subject: [PATCH] Add: build process for real hardware --- .gitignore | 3 +++ README.md | 17 ++++++++++++++++- iso/boot/kernel.elf | Bin 21380 -> 21380 bytes makefile | 9 +++++++-- os.iso | Bin 497664 -> 497664 bytes src/kernel/shell.c | 8 ++++++-- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 5dc6254..5266f2b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ bochslog.txt build/ kernel.elf +os.iso +blankos.iso +real/ diff --git a/README.md b/README.md index 256a3aa..de1a7cf 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,21 @@ make run This will start a new Bochs debugger instance. To proceed with the kernel execution, you will have to type `c` in the shell spawning Bochs. Serial output will be saved under the `com1.out` file, this way you can debug the kernel by viewing its log messages. To quit, type `q`. Feel free to open issues or pull requests. +## Running on real hardware + +To run the OS on real hardware, you'll first need to have a BIOS-compatible computer. Some of the new laptops with graphical "BIOSes" only support UEFI now. So make sure to get a computer that can boot into BIOS mode, **not UEFI mode**. Then, switch the boot mode to "Legacy" in your BIOS utility. + +Then, use the Makefile target `real` to build a "real"-capable ISO disk image. The image will have GRUB2 installed on it, using the `grub-mkrescue` utility (make sure to install it before) which is dependent on `xorriso` (install it too). + +Once the ISO file is generated, you can write it on a disk using this command: + +``` +sudo dd bs=4M if=blankos.iso of=/dev/sdX status=progress oflag=sync +``` + +Replace `sdX` with your USB drive name (you can find it by doing `sudo fdisk -l`). +Tada! You now have a working BlankOS USB stick. Go ahead and try it out! + ### ⚠️ Disclaimer -This is a hobbyist operating system kernel and it comes without any warranty whatsoever! It isn't capable of anything really. +This is a hobbyist operating system kernel and it comes without any warranty whatsoever! It isn't capable of anything really. Feedback and contributions are highly appreciated! diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 8e0ae03a9be51dd01ee66d565044dcfd8645e331..571781954d5da329cf469daa49eaa790b0c0e9cf 100755 GIT binary patch delta 2691 zcmb7GYj9h|72dtJ9=0V*iX>Zp>e{kXOSU9C4vj+|5Nz3&A=EY#JcDamH_0Frk~TDf zDP0W-YZM$ z3_n`Ue7bwS^PRJ2ch6mE#{s(I01dB`oi8Ee{96xBYw~*Sgk%!wqs7M-M29`{nD$;u zXCvoy_t1h7=3SMm+{xXcmbC;jiqUMyAmmk8p*PcE=+Rp^t_ZRhl)}sUOfIJgUelN6 zscosmJVtzi5warqo4%Yr0J9kQ1o#d4Si9mOX$&jL!BpJ^iS*mYYV0n`4@#c7D7^O{8-cpH~Qzwf! z#3IEhznUjilKoG~UVdnc;y5mpOy;vSYNQM&;hAca(X;>?^)Ku&V=B)q&eazcUVx$M z0(uEPtF{^2q!h`{4#Z5t>yTgbL#|T?TWjjAuZr8%6UWmyqn%uaX+nWRBIizU-xIkL zaIQv=7sW&k@B2XX6Um=UeUCquiB$@(;1%SL_TbjDYO_LtQBi(Eo?J0OS!n0YIo1!k zISCr){Ztf=CWWEEXN;MbZj+=teW$k?#F{RO`TvGiZ!-X`}c5Yq}dO#6Wj z9(7bHE@E@|qc6g1jtaUQK6DgS^V#!Tg@?`VTp?FtG{;=mHAhdg(mm%He;ssAy}S!E z$nwDEtW}h;;YBU+a<=YZb+Ti*_= zmOP7i5pe`@3h@czbHr5yv1y4KVMWv-T!;>Y7qJzw3(=4G9pc#kiI&F3hE#E=3bJFq+qWwsk{|F(A$opx; zF%;CL1)M}1()`0{Pr&#cmv!gtQdtW)1qopnu7&YNC+!AxlbNfp07sL9-hiH_+h`aD znx5uLO2Of}-#BE^lBJkq0WS6d{QWVNXvqldbKObL!j#KQp96KXnKRhI(R{aVuUU)b zN#ZFKk3p!}$!YB{)a>9ItKd@eO8RH8w;a}u@LKVI4@>(lzQ-dl)ncaYpl-d5{sUIG z{-ACHDryqB?AYNZET7$8I*h2t!FZ{bJUQ>j_u?HGYjx5&m~A!F!%*Tj)9tXr{ZqOY z2Hl70DD<>B>Dv%$Gt-~IAb!6Q8EcEmaTU*Wm}O@%`B@n6$cNDmm23p95wt9_F&vGF Rd~v5r#&+;r#NOFO{{w=|xupOA delta 2587 zcmb7Gdu&rx7(eH(UAwZec3s({Z0*(!w$ZiYF?kJeV-JSBHeNv~vamtdgn^8Q2r}yh z;)I652Pn#GDi00sMj>WQNI^kakZ1%+Mg)UgpaTgaFgC8=xp!-;@eghCYtQfZ{mys3 z^SGyX^**|KA8n{q&QBs_{?Y1Z(Y>Bp2~iOFqs5=ah}%~08`^1#54CcF z|0I@UtphMTb#ZecP!*C&RjDG8}hhLQS2Wg#~AK&ipPT{A@u6W5gLeQt=*&~i|l_j3n(!!h$BnhWVE%ed1<*qLG<^lcA9_%m9e<_}S9 zSm)?C@0(hGQ&@_HDR(3jvTmw+-T27*^$ksNgfuv$;0&OtDRslq;`Yr#5ARpIbS|@S zrI(aSqR!no1>x(UVs@nn$AdJ(*~kogf{FqSTZ5F74Xc9+MZ=N+9p$33V@^PF5p+xm zp|YVsRsxfo%=;C>D(^3;+bMTF9#*9lrI*GADmUXqhRO8rJ(hZfw1hA^8@P-cnvSQU zIH~>zp;H6*G7@ytu!GyT9G8gqN4jPU1mZKNb9eOcT4om4tcM+$rSZ%3%<};jBb>mg zvsDW7@MqfLd1jpPMmy#c#&J>^!u-dg$l{!bZ*Pa3thfo9XDpuB6<_s46rXh&j8cTi zkuJ?DX?`kaqj*eMK;z-_q(A~}$uigNk74zEXOM%$`4rEzP|#EAgLdazSfukA6SD)N zE6n+XDaN4E)iENdgvq@gM+H)S!&0@gjyD3L!_~vt!KCj4k}FwOngfdS5bG%o`DwQp zDf3Tco_A=m>I6=d+>K*%jFvO3gpK{;4M%i%h%d9f^hY{7ajbfu@G>;_OQ37vO1~_F zMotmfX5Jq!jD|StOzw^rmRJX7R!Pg{5OFuoXzvckG#i2Xlihv=Rw)d_Ysu|%;89@JMtJ!3lD#%OuvP?Zo;6RNv;97&>5_5Wt&(wV z!06%MXG*tqi2N9@NjtSy>=|0^ER$D&p z0X4SX0}U*ghsOeI^E6Cu6UA~DTeG@{(gFk~!~3`GGE~jjcKfb_-C zo5FLLJ{^|i^a)q6WNBp zSKr5a+`gEe-lhQ&RCN`rP|_&4FmOP4BWs@n#h}3|CpO)_bx<&9B+UW$pf+0QU67ka z)fyEGWNW;QFJx1?6)q0$#hvSbTZ1dpr{J@tT%neZR^0A+iv;h!VsML^WdB|3t~? z(Oy%26s>DZV}JeZ6Gk@Rx2{i+Z$@4a65ob=Q3&6O{6Gl*82R}Sz90G7^kBY&$a6yY zF+v8AqjSy96;@T`=E40z0 z;3ynL$HI=n4cz4hh{nOFGUUHZt8_)9*t5$mT(jgy+{Jmr?S=$}Qr(glJjIq-b&^g9Lt0Ae> zMDt)o=>nPr2TKp*ee4)($JZy%SQAZ!gZMqy+cMS{jPwEZ5+^A76%u~B9#@$ ZDv()}RoJSM^xox>O16U4-t6+}^e>-&hui=F diff --git a/makefile b/makefile index 70cd968..cc8fb96 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,5 @@ CC = gcc -CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -c -I src/ +CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -Wno-div-by-zero -c -I src/ LDFLAGS = -T link.ld -melf_i386 AS = nasm ASFLAGS = -f elf @@ -43,9 +43,14 @@ os.iso: kernel.elf -o os.iso \ iso +real: kernel.elf + mkdir -p real/boot/grub + cp kernel.elf real/boot/kernel.elf + grub-mkrescue real -o blankos.iso + run: os.iso bochs -f bochsrc.txt -q clean: - rm -rf $(OBJ_DIR) kernel.elf os.iso + rm -rf $(OBJ_DIR) kernel.elf os.iso blankos.iso real diff --git a/os.iso b/os.iso index 389c463585476c16182f9c89b9ee77ca54798350..62255ed9145bfcc901dd98d9b1ebd8626a008ddb 100644 GIT binary patch delta 3385 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