古董整理

我也不知道发生了什么,但姑且同步一下
This commit is contained in:
KAAAsS 2022-04-19 20:54:02 +08:00
parent d47aca2002
commit 49ec5ba157
Signed by: KAAAsS
GPG Key ID: D22F53AF662411FE
9 changed files with 75 additions and 11 deletions

View File

@ -13,4 +13,4 @@ define add-symbol-file-auto
end
add-symbol-file-auto ./build/kernel.img
add-symbol-file-auto ./user/build/ramdisk/ipc_reg.bin
add-symbol-file-auto ./user/build/ramdisk/ipc_mem.bin

View File

@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.14)
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_BUILD_TYPE "Release") # "Release" or "Debug"
set(CMAKE_BUILD_TYPE "Debug") # "Release" or "Debug"
set(CHCORE_PLAT "raspi3")
set(CHCORE_ARCH "aarch64")

View File

@ -13,4 +13,4 @@ define add-symbol-file-auto
end
add-symbol-file-auto ./build/kernel.img
add-symbol-file-auto ./user/build/ramdisk/fs_test.bin
add-symbol-file-auto ./user/build/ramdisk/tmpfs_test.bin

View File

@ -220,6 +220,13 @@ static int simple_vsprintf(char **out, const char *format, va_list ap)
flags, 'a');
break;
case ('b'):
u.u = va_arg(ap, unsigned int);
pc +=
printk_write_num(out, u.u, 2, 0, width,
flags, 'a');
break;
case ('x'):
u.u = va_arg(ap, unsigned int);
pc +=

View File

@ -39,6 +39,7 @@ void do_page_fault(u64 esr, u64 fault_ins_addr)
int fsc; // fault status code
fault_addr = get_fault_addr();
kdebug("Page fault addr = %x, cpu = %d\n", fault_addr, smp_get_cpu_id());
fsc = GET_ESR_EL1_FSC(esr);
switch (fsc) {
case DFSC_TRANS_FAULT_L0:

View File

@ -52,9 +52,15 @@ char *readline(const char *prompt)
c = getch();
if (c < 0)
return NULL;
// TODO: your code here
buf[complement_time++] = c;
printf("%c", c);
if (c == '\r') {
usys_putc('\n');
break;
}
}
buf[complement_time - 1] = '\0';
return buf;
}
@ -77,21 +83,55 @@ int do_top()
return 0;
}
void fs_scan(char *path)
int fs_scan(char *path)
{
// TODO: your code here
int count = 4096/2;
char str[256];
struct fs_request fr;
int ret;
fr.req = FS_REQ_SCAN;
fr.buff = (char *) TMPFS_SCAN_BUF_VADDR;
strcpy(fr.path + 1, path);
fr.path[0] = '/';
fr.offset = 0;
fr.count = count;
printf("Send ls: %s\n", path);
ipc_msg_t *ipc_msg = ipc_create_msg(tmpfs_ipc_struct, sizeof(fr), 1);
ipc_set_msg_data(ipc_msg, (void *)&fr, 0, sizeof(fr));
ipc_set_msg_cap(ipc_msg, 0, tmpfs_scan_pmo_cap);
ret = ipc_call(tmpfs_ipc_struct, ipc_msg);
printf("Return ls: %d\n", ret);
ipc_destroy_msg(ipc_msg);
return ret;
}
int do_ls(char *cmdline)
{
char pathbuf[BUFLEN];
int ret;
pathbuf[0] = '\0';
cmdline += 2;
while (*cmdline == ' ')
cmdline++;
strcat(pathbuf, cmdline);
fs_scan(pathbuf);
ret = fs_scan(pathbuf);
if (ret >= 0) {
char *print_ptr;
struct dirent *dirat;
print_ptr = (char *) TMPFS_SCAN_BUF_VADDR;
for (int i = 0; i < ret; i++) {
dirat = (struct dirent *) print_ptr;
printf(" %s\n", dirat->d_name);
print_ptr += dirat->d_reclen;
}
} else {
printf("ls returns code %d\n", ret);
}
return 0;
}

View File

@ -8,7 +8,8 @@
char getch()
{
char c;
// TODO: your code here
c = usys_getc();
return c;
}

View File

@ -14,7 +14,13 @@ static void fs_dispatch(ipc_msg_t * ipc_msg)
ipc_get_msg_data(ipc_msg);
switch (fr->req) {
case FS_REQ_SCAN:{
int cap = ipc_get_msg_cap(ipc_msg, 0);
ret = usys_map_pmo(SELF_CAP, cap, (u64) fr->buff, VM_READ | VM_WRITE);
if (ret != 0) {
break;
}
ret = fs_server_scan(fr->path, fr->offset, fr->buff, fr->count);
usys_unmap_pmo(SELF_CAP, cap, (u64) fr->buff);
break;
}
case FS_REQ_MKDIR:
@ -40,12 +46,20 @@ static void fs_dispatch(ipc_msg_t * ipc_msg)
usys_exit(-1);
break;
case FS_REQ_WRITE:{
// TODO: you code here
int cap = ipc_get_msg_cap(ipc_msg, 0);
ret = usys_map_pmo(SELF_CAP, cap, (u64) fr->buff, VM_READ | VM_WRITE);
if (ret != 0) {
break;
}
ret = fs_server_write(fr->path, fr->offset, fr->buff, fr->count);
break;
}
case FS_REQ_READ:{
// TODO: you code here
int cap = ipc_get_msg_cap(ipc_msg, 0);
ret = usys_map_pmo(SELF_CAP, cap, (u64) fr->buff, VM_READ | VM_WRITE);
if (ret != 0) {
break;
}
ret = fs_server_read(fr->path, fr->offset, fr->buff, fr->count);
break;
}

View File

@ -4,7 +4,8 @@
#include "syscall.h"
#define PMO_SIZE 0x1000
#define MAP_VA 0x1000000
// FIXME 0x1000000 就会出诡异 bug
#define MAP_VA 0x1500000
/* virtual memory rights */
#define VM_READ (1 << 0)