diff --git a/.gitignore b/.gitignore index d163863..709eb78 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -build/ \ No newline at end of file +build/ +user/build/* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 3fcba3d..9b65846 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -55,5 +55,6 @@ "C_Cpp_Runner.useLeakSanitizer": false, "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, - "C_Cpp_Runner.msvcSecureNoWarnings": false + "C_Cpp_Runner.msvcSecureNoWarnings": false, + "C_Cpp.errorSquiggles": "enabled" } \ No newline at end of file diff --git a/ext2_root/init.elf b/ext2_root/init.elf index ecfd81f..203b961 100755 Binary files a/ext2_root/init.elf and b/ext2_root/init.elf differ diff --git a/src/fs/ext2.c b/src/fs/ext2.c index 2bc8ff0..1b7ec31 100644 --- a/src/fs/ext2.c +++ b/src/fs/ext2.c @@ -5,6 +5,7 @@ #include #include "string.h" #include "mp/spinlock.h" +#include "arch/x86_64/pit.h" // ── module state ───────────────────────────────────────────────────────────── @@ -607,8 +608,8 @@ bool ext2_write_file_internal(ext2_inode_t* inode, uint32_t inum, } inode->i_blocks = ((new_size + block_size - 1) / block_size) * (block_size / 512); - //inode->i_mtime = (uint32_t)g_Unixseconds; - //inode->i_ctime = (uint32_t)g_Unixseconds; + inode->i_mtime = (uint32_t)g_Unixseconds; + inode->i_ctime = (uint32_t)g_Unixseconds; kfree(tmp); ext2_write_inode_internal(inum, inode); return true; @@ -653,8 +654,8 @@ bool ext2_truncate_internal(ext2_inode_t* inode, uint32_t inum, uint32_t new_siz // extending: sparse — just update the size field inode->i_size = new_size; - //inode->i_mtime = (uint32_t)g_Unixseconds; - //inode->i_ctime = (uint32_t)g_Unixseconds; + inode->i_mtime = (uint32_t)g_Unixseconds; + inode->i_ctime = (uint32_t)g_Unixseconds; return ext2_write_inode_internal(inum, inode); } @@ -765,7 +766,7 @@ static bool dir_add_entry_internal(ext2_inode_t* dir, uint32_t dir_inum, dir->i_size += block_size; dir->i_blocks = (dir->i_size / block_size) * (block_size / 512); - //dir->i_mtime = (uint32_t)g_Unixseconds; + dir->i_mtime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(dir_inum, dir); kfree(buf); return true; @@ -799,7 +800,7 @@ static bool dir_remove_entry_internal(ext2_inode_t* dir, uint32_t dir_inum, cons else e->inode = 0; // first entry: zero inode ext2_write_block_raw(phys, buf); - //dir->i_mtime = (uint32_t)g_Unixseconds; + dir->i_mtime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(dir_inum, dir); kfree(buf); return true; @@ -912,7 +913,7 @@ bool ext2_read_dir_internal(ext2_inode_t* dir) { uint8_t nl = e->name_len > EXT2_NAME_LEN ? EXT2_NAME_LEN : e->name_len; memcpy(name, e->name, nl); name[nl] = '\0'; - printf(" %-32s inode=%-6u %s\n", + printf(" %s inode=%u %s\n", name, e->inode, ext2_file_type_string(e->file_type)); } off += e->rec_len; @@ -1017,7 +1018,7 @@ bool ext2_create_file_internal(ext2_inode_t* dir, uint32_t dir_inum, ext2_inode_t inode = {0}; inode.i_mode = EXT2_S_IFREG | 0644; inode.i_links_count = 1; - //inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds; + inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(inum, &inode); if (!dir_add_entry_internal(dir, dir_inum, inum, name, EXT2_FT_REG_FILE)) { @@ -1060,7 +1061,7 @@ bool ext2_mkdir_internal(ext2_inode_t* parent, uint32_t parent_inum, dir.i_size = block_size; dir.i_blocks = block_size / 512; dir.i_block[0] = phys; - //dir.i_atime = dir.i_ctime = dir.i_mtime = (uint32_t)g_Unixseconds; + dir.i_atime = dir.i_ctime = dir.i_mtime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(inum, &dir); uint8_t* buf = kmalloc(block_size); @@ -1125,11 +1126,11 @@ bool ext2_unlink_internal(ext2_inode_t* dir, uint32_t dir_inum, const char* name fi.i_links_count--; if (fi.i_links_count == 0) { ext2_free_inode_blocks_internal(&fi); - //fi.i_dtime = (uint32_t)g_Unixseconds; + fi.i_dtime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(inum, &fi); ext2_free_inode_internal(inum, false); } else { - //fi.i_ctime = (uint32_t)g_Unixseconds; + fi.i_ctime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(inum, &fi); } ext2_sync(); @@ -1166,7 +1167,7 @@ bool ext2_rmdir_internal(ext2_inode_t* parent, uint32_t parent_inum, const char* ext2_free_inode_blocks_internal(&dir); dir.i_links_count = 0; - //dir.i_dtime = (uint32_t)g_Unixseconds; + dir.i_dtime = (uint32_t)g_Unixseconds; ext2_write_inode_internal(inum, &dir); ext2_free_inode_internal(inum, true); @@ -1272,7 +1273,7 @@ bool ext2_symlink_internal(ext2_inode_t* dir, uint32_t dir_inum, inode.i_mode = EXT2_S_IFLNK | 0777; inode.i_links_count = 1; inode.i_size = tlen; - //inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds; + inode.i_atime = inode.i_ctime = inode.i_mtime = (uint32_t)g_Unixseconds; if (tlen < 60) { // fast symlink: target stored directly in i_block[] @@ -1368,7 +1369,7 @@ bool ext2_chmod_internal(uint32_t inum, uint16_t mode) { ext2_inode_t inode; if (!ext2_read_inode_internal(inum, &inode)) return false; inode.i_mode = (inode.i_mode & 0xF000) | (mode & 0x0FFF); - //inode.i_ctime = (uint32_t)g_Unixseconds; + inode.i_ctime = (uint32_t)g_Unixseconds; return ext2_write_inode_internal(inum, &inode); } @@ -1377,7 +1378,7 @@ bool ext2_chown_internal(uint32_t inum, uint16_t uid, uint16_t gid) { if (!ext2_read_inode_internal(inum, &inode)) return false; inode.i_uid = uid; inode.i_gid = gid; - //inode.i_ctime = (uint32_t)g_Unixseconds; + inode.i_ctime = (uint32_t)g_Unixseconds; return ext2_write_inode_internal(inum, &inode); } diff --git a/src/main.c b/src/main.c index e5322e6..45a01ca 100644 --- a/src/main.c +++ b/src/main.c @@ -203,6 +203,7 @@ void kmain(void) { x86_64_PIT_Initialize(1000); asm volatile("sti"); calibrate_tsc(); + //while (1) asm volatile("hlt"); @@ -425,7 +426,7 @@ void kmain(void) { } - pci_init(); + /*pci_init(); pci_device_t hda; if (pci_find_hda(&hda)) { @@ -438,7 +439,7 @@ void kmain(void) { } } else { printf("[PCI] No HDA controller found!\n"); - } + }*/ //syscall_init(); diff --git a/user/build/init.elf b/user/build/init.elf index ecfd81f..203b961 100755 Binary files a/user/build/init.elf and b/user/build/init.elf differ diff --git a/user/build/init.o b/user/build/init.o index 9c6a95c..7f50eb9 100644 Binary files a/user/build/init.o and b/user/build/init.o differ