From cb9b86493391b1755f72338b365ab730ad515c9b Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Mon, 24 Mar 2025 21:42:14 +0300 Subject: [PATCH] continue messing with fat32 --- Makefile | 10 +++++++--- grubshit/test.txt | 1 + src/disk.c | 1 - src/fat.c | 6 ------ src/kernel.c | 19 +++++++++++-------- 5 files changed, 19 insertions(+), 18 deletions(-) create mode 100644 grubshit/test.txt diff --git a/Makefile b/Makefile index 99b73b6..b8076c6 100644 --- a/Makefile +++ b/Makefile @@ -19,15 +19,19 @@ OUTPUT = myos.bin all: $(OUTPUT) create-image: + #sudo umount /mnt + #sudo losetup -D cp myos.bin grubshit/boot/ #grub-mkrescue -o boot.iso grubshit dd if=/dev/zero of=boot.iso bs=1M count=256 - fdisk boot.iso + parted boot.iso --script mklabel msdos + parted boot.iso --script mkpart primary fat32 1MiB 100% #sudo mkdosfs -F 32 -I boot.iso + #parted boot.iso mklabel msdos mkpart primary ext4 2048s 100% set 1 boot on sudo losetup /dev/loop0 boot.iso sudo losetup /dev/loop1 boot.iso -o 1048576 - #sudo mkdosfs -F32 -f 2 /dev/loop1 - sudo mkfs.vfat -F 32 -f 2 /dev/loop1 + sudo mkdosfs -F32 -f 2 /dev/loop1 + #sudo mkfs.vfat -F 32 -f 2 /dev/loop1 sudo mount /dev/loop1 /mnt sudo grub-install --root-directory=/mnt --no-floppy --modules="normal part_msdos ext2 multiboot biosdisk" /dev/loop0 #there was biosdev also sudo cp -r grubshit/boot/ /mnt/ diff --git a/grubshit/test.txt b/grubshit/test.txt new file mode 100644 index 0000000..dddbd22 --- /dev/null +++ b/grubshit/test.txt @@ -0,0 +1 @@ +KATYA_KRUTAYA diff --git a/src/disk.c b/src/disk.c index 0d5199c..3a5c2f4 100644 --- a/src/disk.c +++ b/src/disk.c @@ -163,7 +163,6 @@ void ata_poll() //x86 directions section bool ata_read(uint8_t *buffer, uint32_t lba) { - printf("ata_read: 0x%X\n", lba); outb(0x1F6, 0xE0 | ((lba >> 24) & 0x0F));//E0 is for master, F0 is for slave //outb(0x1F1, 0x00);//TODO: this is probably ignored so could be removed maybe? outb(0x1F2, 1);//1 is sector count, how many sectors are we reading diff --git a/src/fat.c b/src/fat.c index 9889069..6079702 100644 --- a/src/fat.c +++ b/src/fat.c @@ -1006,14 +1006,11 @@ static int follow_path(dir_t* dir, const char** path) { str++; len = subpath_len(str); - printf("len: %X\n", len); if (len == 0) return FAT_ERR_PATH; - printf("AYE\n"); fat_t* fat = find_fat_volume(str, len); if (!fat) return FAT_ERR_PATH; - printf("HEH\n"); str += len; dir->fat = fat; @@ -1022,14 +1019,11 @@ static int follow_path(dir_t* dir, const char** path) dir->sect = fat->root_sect; dir->idx = 0; } - printf("HJUY!\n"); fat_t* fat = dir->fat; if (!fat) return FAT_ERR_PARAM; - printf("EBALO\n"); - dir_rewind(fat, dir); for (;;) diff --git a/src/kernel.c b/src/kernel.c index 3df0c2e..e983016 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -35,6 +35,7 @@ static int cat(const char* path) return cnt; printf("%.*s\n", cnt, buf); + printf("%s\n", buf); if (cnt < 512) break; } @@ -47,16 +48,12 @@ static int ls(const char* path) dir_t dir; dir_info_t info; - printf("\nListing items in %s:\n\n", path); - int err = fat_opendir(&dir, path); - printf("opening %s\n", path); if (err) return err; for (;;) { - printf("reading dir...\n"); err = fat_readdir(&dir, &info); if (err == FAT_ERR_EOF) @@ -64,7 +61,7 @@ static int ls(const char* path) if (err) return err; - printf("%X %s %d %d:%d %s%c\n", + printf("%X %s %x %x:%x %x %s%c\n", info.size, months[info.modified.month], info.modified.day, info.modified.hour, info.modified.min, info.namelen, info.name, info.attr & FAT_ATTR_DIR ? '/' : ' '); @@ -78,17 +75,22 @@ static int ls(const char* path) void file_fuckery() { int err; - err = fat_mount(&ops, 0, &g_fat, "/"); + err = fat_mount(&ops, 0, &g_fat, "ebalo"); if(err) printf("KATYAKATYAKATYAKATYAKATYA: %X\n", err); - printf("%X\n", FAT_ERR_NOFAT); + printf("%X\n", err); - err = ls("."); + err = ls("/ebalo"); + err = cat("/ebalo/boot/grub/grub.cfg"); + err = fat_mkdir("/ebalo/pizdaa"); + err = ls("/ebalo"); + fat_umount(&g_fat); //err = fat_fclose(&file); if(err) printf("ERROR! %X\n", err); + } void apply_pic_masks() @@ -118,6 +120,7 @@ void kmain() disk_info info; get_disk_info(&info); printf("CYL HEAD SECT: %X %X %X\n", info.cylinders, info.heads, info.sectors); + file_fuckery(); while(1) {