From: acevest Date: Sat, 31 Jan 2026 12:26:59 +0000 (+0800) Subject: 修复一些bug X-Git-Url: http://repos.zhaoyanbai.com/Mou_128.png?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=kernel.git 修复一些bug --- diff --git a/fs/read.c b/fs/read.c index 7bb1bfc..b7394fb 100644 --- a/fs/read.c +++ b/fs/read.c @@ -29,6 +29,8 @@ ssize_t vfs_generic_file_read(file_t* file, char* buf, size_t size, loff_t* p_po uint32_t offset = pos & (PAGE_SIZE - 1); size_t left = size; + ssize_t read_bytes = 0; + while (left > 0) { page_t* page = NULL; uint32_t end_index = inode->i_size >> PAGE_SHIFT; @@ -58,6 +60,7 @@ ssize_t vfs_generic_file_read(file_t* file, char* buf, size_t size, loff_t* p_po // copy data bytes = bytes < left ? bytes : left; + read_bytes += bytes; void* addr = page2va(page); // printk("memcpy bytes %u index %u\n", bytes, index); // printk("read addr %x bytes %u index %u offset %u\n", addr, bytes, index, offset); @@ -80,7 +83,7 @@ ssize_t vfs_generic_file_read(file_t* file, char* buf, size_t size, loff_t* p_po no_cached_page_in_hash: page = alloc_one_page(0); if (page == NULL) { - return ENOMEM; + return -ENOMEM; } // TODO:可能已经有其它进程已经把数据读入内存了 @@ -91,7 +94,7 @@ ssize_t vfs_generic_file_read(file_t* file, char* buf, size_t size, loff_t* p_po assert(mapping->a_ops->read_page != NULL); ret = mapping->a_ops->read_page(file, page); if (0 != ret) { - return EIO; + return -EIO; } // @@ -99,7 +102,7 @@ ssize_t vfs_generic_file_read(file_t* file, char* buf, size_t size, loff_t* p_po add_page_to_hash(page, mapping, index); } - return ret; + return read_bytes; } ssize_t sysc_read(int fd, void* buf, size_t count) { diff --git a/include/types.h b/include/types.h index 7ebcc74..60657d8 100644 --- a/include/types.h +++ b/include/types.h @@ -28,7 +28,6 @@ typedef signed long long s64; typedef unsigned char u8; typedef unsigned short u16; typedef unsigned long u32; -typedef unsigned long u32; typedef unsigned long long u64; typedef signed char s8_t; diff --git a/kernel/ap.c b/kernel/ap.c index bb059c4..36b2be1 100644 --- a/kernel/ap.c +++ b/kernel/ap.c @@ -124,7 +124,7 @@ void ap_kernel_entry() { panic("local apic not supported\n"); } - // 开房时钟中断 + // 开启时钟中断 lapic_t* lapic = system.lapic; uint32_t apic_base = 0; diff --git a/kernel/irq.c b/kernel/irq.c index b40d7fb..48a5db1 100644 --- a/kernel/irq.c +++ b/kernel/irq.c @@ -48,7 +48,9 @@ __attribute__((regparm(1))) void irq_handler(pt_regs_t* regs) { // 在qemu启动后如果gdb有加断点,就很会一直触发中断重入 reenter++; - reenter_count += reenter == 0 ? 0 : 1; + if (reenter > 1) { + reenter_count++; + } assert(irq_disabled()); assert(reenter >= 0); assert(reenter <= 1); diff --git a/kernel/task_init.c b/kernel/task_init.c index 89445a1..985e31c 100644 --- a/kernel/task_init.c +++ b/kernel/task_init.c @@ -160,13 +160,14 @@ void init_task_entry() { file.f_dentry = ni.path.dentry; file.f_ops = file.f_dentry->d_inode->i_fops; - vfs_generic_file_write(&file, "aaa1234567", 10, &file.f_pos); + const char* init_elf_data = "aaa1234567abcdIII"; + vfs_generic_file_write(&file, init_elf_data, strlen(init_elf_data), &file.f_pos); file.f_pos = 0; char buf[128] = {'b', 'u', 'f'}; - vfs_generic_file_read(&file, buf, 4, &file.f_pos); - for (int i = 0; i < 16; i++) { - printk("%c ", buf[i]); + ssize_t ret = vfs_generic_file_read(&file, buf, 128, &file.f_pos); + for (int i = 0; i < ret; i++) { + printk("%c", buf[i]); } printk("\n"); } diff --git a/mm/page.c b/mm/page.c index 693c7c1..223c128 100644 --- a/mm/page.c +++ b/mm/page.c @@ -94,7 +94,6 @@ void do_wp_page(void* addr) { // 2. 拷贝页表 pte_t* oldaddr = pa2va(PAGE_ALIGN(page_dir[npde])); memcpy((void*)newaddr, (void*)oldaddr, PAGE_SIZE); - // 3. 解除PTE的写保护 *pte |= PTE_RW; }