古董整理
我也不知道发生了什么,但姑且同步一下
This commit is contained in:
parent
d47aca2002
commit
49ec5ba157
@ -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
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 +=
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,8 @@
|
||||
char getch()
|
||||
{
|
||||
char c;
|
||||
// TODO: your code here
|
||||
|
||||
c = usys_getc();
|
||||
|
||||
return c;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user