From 3b69ce8cfbb19db431523f7221c43610e8287861 Mon Sep 17 00:00:00 2001 From: Sean Lachhander Date: Wed, 26 Apr 2017 11:04:02 -0400 Subject: [PATCH 1/2] Add files via upload --- README.md | 2 +- c_to_nasm.sh | 21 +++++++ constants.inc | 29 ++++++++++ devfs.c | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++ devfs.h | 10 ++++ devfs.o | Bin 0 -> 3036 bytes fb.o | Bin 4316 -> 4432 bytes gdt.h | 1 + gdt_asm.o | Bin 0 -> 608 bytes gdt_asm.s | 27 +++++++++ idt.c | 3 +- idt.o | Bin 3624 -> 4188 bytes interrupt.c | 6 +- interrupt.o | Bin 1400 -> 1532 bytes 14 files changed, 240 insertions(+), 7 deletions(-) create mode 100644 c_to_nasm.sh create mode 100644 constants.inc create mode 100644 devfs.c create mode 100644 devfs.h create mode 100644 devfs.o create mode 100644 gdt_asm.o create mode 100644 gdt_asm.s diff --git a/README.md b/README.md index fa9230f..33f75d8 100755 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# LittleOS# OS +# LittleOS \ No newline at end of file diff --git a/c_to_nasm.sh b/c_to_nasm.sh new file mode 100644 index 0000000..37b9e7a --- /dev/null +++ b/c_to_nasm.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Translates a C header to a NASM header +# The C header can only make use of: +# - #define +# - #ifndef +# - #endif + +# INPUT: A list of the required NASM headers + +set -e + +for NASM_HEADER in $@ +do + C_HEADER="${NASM_HEADER%%.inc}.h" + if [ $C_HEADER -nt $NASM_HEADER ]; then + sed 's/\/\*/;/' $C_HEADER | # change start of comments + sed 's/\*\///' | # change end of comments + sed 's/^#/%/' > $NASM_HEADER + fi +done diff --git a/constants.inc b/constants.inc new file mode 100644 index 0000000..93728b3 --- /dev/null +++ b/constants.inc @@ -0,0 +1,29 @@ +%ifndef CONSTANTS_H +%define CONSTANTS_H + +; numeric contants +%define FOUR_KB 0x1000 +%define ONE_MB 0x100000 +%define FOUR_MB 0x400000 +%define EIGHT_MB 0x800000 + +; virtual memory +%define KERNEL_START_VADDR 0xC0000000 +%define KERNEL_PDT_IDX (KERNEL_START_VADDR >> 22) + +; kernel stack +%define KERNEL_STACK_SIZE FOUR_KB + +; interrupts +%define SYSCALL_INT_IDX 0xAE + +; segements +%define SEGSEL_KERNEL_CS 0x08 +%define SEGSEL_KERNEL_DS 0x10 +%define SEGSEL_USER_SPACE_CS 0x18 +%define SEGSEL_USER_SPACE_DS 0x20 + +; registers +%define REG_EFLAGS_DEFAULT 0x202 + +%endif diff --git a/devfs.c b/devfs.c new file mode 100644 index 0000000..9ea282b --- /dev/null +++ b/devfs.c @@ -0,0 +1,148 @@ +#include "devfs.h" +#include "common.h" +#include "kmalloc.h" +#include "log.h" +#include "string.h" + +struct devfs_inode { + struct devfs_inode *next; + char const *name; + vnode_t *node; +}; +typedef struct devfs_inode devfs_inode_t; + +static devfs_inode_t *devices = NULL; + +static vnode_t root; +static vnodeops_t vnodeops; +static vfsops_t vfsops; + +static int devfs_root(vfs_t *vfs, vnode_t *out) +{ + UNUSED_ARGUMENT(vfs); + + out->v_op = root.v_op; + out->v_data = root.v_data; + + return 0; +} + +static int devfs_open(vnode_t *n) +{ + UNUSED_ARGUMENT(n); + + return -1; +} +static int devfs_read(vnode_t *node, void *buf, uint32_t count) +{ + UNUSED_ARGUMENT(node); + UNUSED_ARGUMENT(buf); + UNUSED_ARGUMENT(count); + + return -1; +} + +static int devfs_write(vnode_t *n, char const *s, size_t l) +{ + UNUSED_ARGUMENT(n); + UNUSED_ARGUMENT(s); + UNUSED_ARGUMENT(l); + + return -1; +} + +static int devfs_getattr(vnode_t *n, vattr_t *attr) +{ + UNUSED_ARGUMENT(n); + + attr->file_size = 0; + + return 0; +} + +static int devfs_lookup(vnode_t *dir, char const *name, vnode_t *out) +{ + UNUSED_ARGUMENT(dir); + + if (name == NULL) { + log_error("devfs_lookup", + "Trying to lookup a null path\n"); + return -1; + } + + devfs_inode_t *i; + for (i = devices; i != NULL; i = i->next) { + if (strcmp(i->name, name) == 0) { + out->v_op = i->node->v_op; + out->v_data = i->node->v_data; + return 0; + } + } + + return -1; +} + +int devfs_add_device(char const *path, vnode_t *node) +{ + if (path == NULL || strlen(path) == 0) { + log_error("devfs_add_device", + "path is empty or NULL\n"); + return -1; + } + + devfs_inode_t *i; + for (i = devices; i != NULL; i = i->next) { + if (strcmp(i->name, path) == 0) { + log_error("devfs_add_device", + "Trying to add a device that is already added: %s\n", + path); + return -1; + } + } + + int len = strlen(path) + 1; + char *copy = kmalloc(len); + if (copy == NULL) { + log_error("devfs_add_device", + "Could not allocated memory for path name %s\n", + path); + return -1; + } + memcpy(copy, path, len); + + devfs_inode_t *inode = kmalloc(sizeof(devfs_inode_t)); + if (inode == NULL) { + log_error("devfs_add_device", + "Could not allocated memory for devfs_inode_t struct\n"); + kfree(copy); + return -1; + } + + inode->next = NULL; + inode->name = copy; + inode->node = node; + + if (devices == NULL) { + devices = inode; + } else { + devices->next = inode; + } + + return 0; +} + +int devfs_init(vfs_t *vfs) +{ + vnodeops.vn_open = &devfs_open; + vnodeops.vn_getattr = &devfs_getattr; + vnodeops.vn_read = &devfs_read; + vnodeops.vn_lookup = &devfs_lookup; + vnodeops.vn_write = &devfs_write; + root.v_op = &vnodeops; + + vfsops.vfs_root = &devfs_root; + vfs->vfs_op = &vfsops; + vfs->vfs_data = 0; + + return 0; +} diff --git a/devfs.h b/devfs.h new file mode 100644 index 0000000..e7894fa --- /dev/null +++ b/devfs.h @@ -0,0 +1,10 @@ +#ifndef DEVFS_H +#define DEVFS_H + +#include "vfs.h" +#include "vnode.h" + +int devfs_init(vfs_t *vfs); +int devfs_add_device(char const *path, vnode_t *node); + +#endif /* DEVFS_H */ diff --git a/devfs.o b/devfs.o new file mode 100644 index 0000000000000000000000000000000000000000..4b15c04dc40ff3cf36e698a9bfc0d5ccc4accab8 GIT binary patch literal 3036 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 literal 4316 zcma)AZERcB89vu`TDPRN3!UWAZkVZqbfccrr5P-pNNH|bi3&n1Yiv-Ao!B_dhco-$ zG#w4g6QAKTB9o1Wl>bam7yDDbc`hBHR$xOLbdmq}zvwA60bf4Io_{b@QRhAxJ&xBrz zPg>|W53wupu}vdy&rRNId8&Tgo{0vUI7T0TnGEKh2}Ez~vXa$Kzw91=HgDXenp$f& zZCSf%Cf~JYPYrhWW0|7MGx4?RfaK12CMJ9H@68D@X?e33V92;HSZ0yB* zlW`B;ZsV>Os}uc76)tO+wfU@m9l5cH+_-LKtK*?|W~22-jK=yDufmhm+T3GBK-LUV zq=fKS%%asPLwE~&s9W+fj6I~@PPUp5YJx89;Esqmmr)|1>c%g6*@!p`NS~g2qrks8~lMmk9Wz8kz&grE$-kY17TfTzGmXpra zXi1n8wc*U@*D2t%eobIS65C*_!DCz-K?^Mif}4SEh{+GHX6G{to^kyej{h|bK%2jL z)|mmBF5=X5t($3m8M!vCFNuN=Etjyv%SXGg0ki+1jB6azm$b3brH6;FjOoj;mVL-I zx#G3qs8~%H2ri*`HnfO)V!<;JTC5+4>_yxX3)(!CC0I-9VCYNoP@j{%d8?sbr->h@ zYwdNMz{JV!TLLY+tM&f9!RFRrYw$kA7c>eg+E0%P?X+9l(dcrGBjt9YjvgxC zq1S<}?q?kjY-#9w8y;0{KWlf|_2YH@anyI=X}9aA>-uTbpT(1~>y94jKz;uX&kCOP z`hOGJ-56^dur|Jv_4t27brkwq?fuZoczy-_F<`BIN5<(m_Vy*3q#xCO=tVrIzU=dp zs?Sc;cR-Ihg!s(v;3g{o`If({!6>=$kp1v0{sT`r&j6RHGPWu z$DSNnr5~>8i_l+#{@^P8P)&DX?3AaQ?Ruw_We)6uPT9Mj-T|F*dOf`dI%WEL`Wfhy z|2ypc|FGWwE70$UzTd8o)b%OoPeYeqMwO>Os_N9lUa%Ck;u8O=)Ci2#zlw-s(QUTyKhxRPx9p8s*1D`Ng-r+Dv93W(QtAo zHb~f?O!k>WWYJ&r8ka=(t^oDaKD2|H(+}uhHGYxQ#K$xSvsHJi^$=XfQs_ z_*=%880Q#2WTd-<#+4&Pzcb9=XYPdNz(w)&VG2u;H;p4%9GKnD)< zBZO%GDk0i^PCA}u+&`pu0Er(aM4t~aKg#@3=8rRvGLJLwXFkL{!`x5niFoadPcn`% zzQCAgTwtV>rgpm+4>Kkh>03|wdB#~ri_r~@^d`o`j0whZ#`BD`j3SUeHDE-dKqFPf zgtAhx{(uo1F+`vzVnjqBnof&ADp@7n$$^2`Ahf}x5epo8D6|Jh0jDKEtzwCAJQW#; zVRHXxxdVQfO6}fmf&Ck-sVbyVp>Ge}8dNN1DhohghVk zqU>*@f^IwIHxECbasnzp`b|Lbv23!CpZZNk6>5CJflWMqH=Mh0dE1doBi0V-hvrZpJY7?@y6Nuoh!f-oCYmjRF?i)4ZTl+6yL znUTZ;faPH=7IR#E-Ebii~_It!2Glw0t|gO`Y!Yx=zG!k;4n~(L9ZmWqJ%-O zIHS0vs3b87$g0eR&`^F+Y7RsVNHqq4xd$Y{!tn7wvI0=da03NE?tp-g|7Cy-SlBTD z)!PC2Ah$sPBZDrC38V!;K1ok0iBBxf)hlKQc6ASS^@;a(4e|q0&cSE`F2P{6Ir)hx h@rijU@x`en7y^1g&w%8MQ`2)(^Gb>#Zev7>7yyD{M!Wz3 literal 0 HcmV?d00001 diff --git a/gdt_asm.s b/gdt_asm.s new file mode 100644 index 0000000..62283fc --- /dev/null +++ b/gdt_asm.s @@ -0,0 +1,27 @@ +; these are functions dealing with the gdt and idt +; see also descriptor_tables.[c,h] + +global gdt_load_and_set + +SEGSEL_KERNEL_CS equ 0x08 +SEGSEL_KERNEL_DS equ 0x10 + +section .text + +; load the gdt into the cpu, and enter the kernel segments +gdt_load_and_set: + mov eax, [esp+4] ; fetch gdt_ptr from parameter stack + lgdt [eax] ; load gdt table + + ; load cs segment by doing a far jump + jmp SEGSEL_KERNEL_CS:.reload_segments + +.reload_segments: + ; we only use one segment for data + mov ax, SEGSEL_KERNEL_DS + mov ds, ax + mov ss, ax + mov es, ax + mov gs, ax + mov fs, ax + ret diff --git a/idt.c b/idt.c index 41f464e..3808be1 100644 --- a/idt.c +++ b/idt.c @@ -10,8 +10,6 @@ #define IDT_TIMER_INTERRUPT_INDEX 0x20 #define IDT_KEYBOARD_INTERRUPT_INDEX 0x21 -//for part 6 of little os - #define CREATE_IDT_GATE(idx) \ create_idt_gate(idx, (uint32_t) &interrupt_handler_##idx,\ IDT_TRAP_GATE_TYPE, PL0); @@ -165,3 +163,4 @@ static void create_idt_gate(uint8_t n, uint32_t handler, uint8_t type, (0x01 << 1) | type; } + diff --git a/idt.o b/idt.o index abf1fade31430cdf04b18f1da41897a50eb160f8..e461511aadb7fb64c6c439c95d888f14dd8f9a41 100644 GIT binary patch literal 4188 zcmeHKL2nyH6n<-O8YgjWCp9I|l)BBfNt$Hqtv61KdT1M$6bLAwR6*k4I>`nnbsS`G zqy_>(G7_#*P$epHfCC2*ASB>WRTUthNQ@u)zQpLe(DAfldfQ1C-X_;C!X(i&(6!xW{`Pj0c`Ptiorm`0Wt&Tk-Xj@oO(CS%Q&;smUL2F?B zg4W2|1+9sN1ue+_!Ufx$?^gD`poQ2Mf)-{U3R;A{DQL~?1wm_JB|+Q9W(6(A9u~CS zY*5hlu!Nwsvt5Fwu_i&=%YMf~*t`b&*tde#!LAEhCwouOy4Y)iwx2yOXx(g4(0bSz zLF;9sf~Kcr`!PbM`G%SZh^&7OTFr793`OS1J`u_d;oZp{5z@A}+T=BL6)Ot@)gd3NtLpmr@a3ph zy5YZiqplIdmOg#199^x$UVM3Q83qRi?u>Pw8k@`8bFn_%)Z@L$Ifoff8c98F>Sk9} zj~$E~$#^n;m?B5%fu=n6ASep~Wk*m|%lLOaiL+>{c0t&W&Oj(O8q$u3I*)~Vj)&qW zL$Se|^yX>^#c-ll8$HJyClyki8p~omQ5`)&H8l{5_~x;LGc3DxQ{m^zIzeaiX+)fg za>M+fLOoLV9llMc7mcTHY{UG{XfLmWTam^{3IH_2FO?nSqfyKjjHgwp^Nis05XXl& zewyPp$IBdliR15Ze1+p*aeR&Ap5q*7zS}(uOuU=pM>&3qp(kR@cuGD^tinUKvhA)9AHHqV4? zo(b7J6S8?GWb-s-D{snH-jroz$}%!#8JV(-Oj$-|KUC{GU7RnDXL32`3&_o8Cem2; z>7qq@X%jZ3p?Zf=kaQ9c0vsXS3NTEF|F=vKh5^nJ;)i#huo>WG!WMu_gxdf4dA3%z*1K=S-OfpB<1@IK%et?UF-2kr> z_5i$3*bDGEp$3xKt7w2c}%ow6w zsAAUj3RX_Ht+O`h6B#=L`dG0D`uOb3jFm?%KWkh1;Qgn1i*{!G4Cpl4%BCj^nHdY? z{!hat1YD~1liWoAJkHfM>La6b8`FcM*vKwnO`OKgM)YZniYu(cbuu>| zF0C`(?f$QExU|l12+3$%U)6P<6ptERyxrK;@tYf%2%6h>U(KhbC;J1(Ew}_Z;a;IUn3K?qeyOx>EC+c0o7KEGV~G3!(D1s8`g zZ1fC62p=$cC0wEz;%7zki7yq+FWytMfOtdED#S~Qwnm&*v`X=Wq6NiKMXM6FqE(BC zqOBDnMGJ{Vnz8bFYs5`Os}(;eTAlbz(Zb>#MXMLDDO!U#uW0MUh@wTrNk!Wt9#FKc zBC2TH#AZd?E`o}-LoCobD4&C!;<} z^UIsKO~x@BDBku0b?;%i@0a*7iJy|VBk{b%-<0?V62BtxUnD*!@sh0>obURQ31;3V z@h*ucBt9(ha}wum#xsupuEf8P_)iiS68}fy4ZPfo#_^jaeo*2kBt9VV=OsQP@rx4w zRN~)D{HDbJmUwN+lI8rHB#xne$LvF2Hl1?PNg~N7slh5=$)U^;H8M^*n;k#xBnMNO z{*iPx8P#Z(M%$~=Vj9iXXdN1@Q={$EX!|wV0gYy93(-|#=}NJ5wOG1hEL}C0t{h8O zkEJWf(p41GUNdDzbGI*}97C zeJHH&WNsqYml_#yzkrdkRDY6|eKMEky|jidqYB{j)mRI(GKPTr7|D5pu@*=()&UcY z^x<7#tOwp=YyduDTnAiZq{Hr4MhbeHaXnB$`;bA0!$!spKs)0`I?fpH0(hS^=&%@K zq(koo#wOrZ#=C)wjQ0SaFh+py7`FhwF>VF^V%!E)(SBjjA=AXT1F#r(0&&J>;4#J) zV3d)HeUWh&@H%4~?YE5d5Ar!Pe zkDl!+BFx;xsFUg?bg~5;^jg{Ui0P!Cbzt_VoD|I7Tn=X6*yw0FLt19cNt;KGC)#sP zs_!Y7+&ev(9LT0d`Q`jiqba0Q7%L~aP3^Okt7q(E<8zzJbMt0?z8W}1P6GFN{_~(C z9yG-+_d`aMdTXWqDs-k9v`q5xqU Xo4UK>a6FFBW0t1gLxY(mf*0>!%;%>w diff --git a/interrupt.c b/interrupt.c index af517eb..c02215a 100644 --- a/interrupt.c +++ b/interrupt.c @@ -8,10 +8,8 @@ #include "log.h" #include "constants.h" -//interupt handler for part 6 - static interrupt_handler_t interrupt_handlers[IDT_NUM_ENTRIES]; -/* + uint32_t register_interrupt_handler(uint32_t interrupt, interrupt_handler_t handler) { @@ -28,7 +26,7 @@ uint32_t register_interrupt_handler(uint32_t interrupt, interrupt_handlers[interrupt] = handler; return 0; } -*/ + void interrupt_handler(cpu_state_t state, idt_info_t info, stack_state_t exec) { if (interrupt_handlers[info.idt_index] != NULL) { diff --git a/interrupt.o b/interrupt.o index 42b903ae30c1e725c91089ceb793fe8611567535..4e6d6be38d1130adff0f1542cb7234d55d4e180a 100644 GIT binary patch delta 376 zcmeyt^@n?c0^^s7io(8)H7YFs85kJK*mp1jsn^yZfptJuDO5nK+eL+?o23;f#L#-6 z1S%>577bD1=oA6V>;Oq0o@g?E;)5Bo0zkG5NB{_YArwOfkTwAEH#ahJGfIMlg%}ta zG(kc@JQ>Qjo;;OFKeZ?|J+rtZwJ1I_4@ef37L>$iB<7{$q!uycoWYsFz`!5_#0;CSGIBF=P6o1s7#JChCjVs8 zpKQo1t;N6%6k=pyV32~+H6WUefuRvfw*hG;pdy9Iz08XlCr>tHQD%L>#K532Ig&-0 z={UpWIu Date: Wed, 26 Apr 2017 23:45:17 -0400 Subject: [PATCH 2/2] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 33f75d8..3affa44 100755 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# LittleOS \ No newline at end of file +# LittleOS + +This project consists of writing an Operating System in x86 architecture. This project requires work within a UNIX/Linux environment, systems programming, C language, and computer systems in general.