2020-05-08 06:44:32 +02:00
|
|
|
#include <signal.h>
|
|
|
|
#include <stdio.h>
|
2020-05-10 06:21:49 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
2020-10-12 05:02:02 +02:00
|
|
|
#include <sys/mman.h>
|
2020-05-10 06:21:49 +02:00
|
|
|
#include <sys/select.h>
|
|
|
|
#include <sys/stat.h>
|
2020-05-08 06:44:32 +02:00
|
|
|
#include <sys/time.h>
|
2020-05-10 06:21:49 +02:00
|
|
|
#include <sys/types.h>
|
2020-05-08 06:44:32 +02:00
|
|
|
#include "umka.h"
|
2020-05-10 06:21:49 +02:00
|
|
|
#include "shell.h"
|
2020-05-08 06:44:32 +02:00
|
|
|
|
2020-10-10 01:30:52 +02:00
|
|
|
#define MONITOR_THREAD_STACK_SIZE 0x100000
|
2020-05-08 06:44:32 +02:00
|
|
|
|
2020-05-09 06:34:28 +02:00
|
|
|
void monitor() {
|
2020-10-14 05:30:01 +02:00
|
|
|
__asm__ __inline__ __volatile__ (
|
|
|
|
"pushfd;"
|
|
|
|
"btr dword ptr[esp], 21;"
|
|
|
|
"popfd"
|
|
|
|
: : : "memory");
|
|
|
|
|
2020-05-10 06:21:49 +02:00
|
|
|
fprintf(stderr, "Start monitor thread\n");
|
|
|
|
// mkfifo("/tmp/umka.fifo.2u", 0644);
|
|
|
|
// mkfifo("/tmp/umka.fifo.4u", 0644);
|
|
|
|
FILE *fin = fopen("/tmp/umka.fifo.2u", "r");
|
|
|
|
FILE *fout = fopen("/tmp/umka.fifo.4u", "w");
|
|
|
|
if (!fin || !fout) {
|
|
|
|
fprintf(stderr, "Can't open monitor files!\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
run_test(fin, fout, 0);
|
2020-05-09 06:34:28 +02:00
|
|
|
}
|
|
|
|
|
2020-10-14 05:30:01 +02:00
|
|
|
void restart_timer(void);
|
|
|
|
void umka_thread_ping(void);
|
|
|
|
void umka_thread_net_drv(void);
|
|
|
|
|
|
|
|
struct itimerval timeout = {.it_value = {.tv_sec = 0, .tv_usec = 10000},
|
|
|
|
.it_interval = {.tv_sec = 0, .tv_usec = 10000}};
|
|
|
|
|
2020-05-08 06:44:32 +02:00
|
|
|
int main() {
|
2020-10-14 05:30:01 +02:00
|
|
|
__asm__ __inline__ __volatile__ (
|
|
|
|
"pushfd;"
|
|
|
|
"btr dword ptr[esp], 21;"
|
|
|
|
"popfd"
|
|
|
|
: : : "memory");
|
|
|
|
|
2020-05-11 05:38:44 +02:00
|
|
|
umka_tool = UMKA_OS;
|
2020-05-08 06:44:32 +02:00
|
|
|
|
2020-10-10 01:30:52 +02:00
|
|
|
struct sigaction sa;
|
|
|
|
sa.sa_sigaction = irq0;
|
2020-05-08 06:44:32 +02:00
|
|
|
sigemptyset(&sa.sa_mask);
|
|
|
|
sa.sa_flags = SA_SIGINFO;
|
|
|
|
|
|
|
|
if (sigaction(SIGPROF, &sa, NULL) == -1) {
|
|
|
|
printf("Can't install signal handler!\n");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2020-10-12 05:02:02 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
void *app_base = mmap((void*)0x000000, 16*0x100000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
|
|
|
if (app_base == MAP_FAILED) {
|
|
|
|
perror("mmap failed");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
printf("pid=%d, kos_lfb_base=%p\n", getpid(), (void*)kos_lfb_base);
|
2020-05-09 06:34:28 +02:00
|
|
|
|
2020-10-10 01:30:52 +02:00
|
|
|
kos_init();
|
|
|
|
kos_stack_init();
|
|
|
|
uint8_t *monitor_stack = malloc(MONITOR_THREAD_STACK_SIZE);
|
2020-10-14 05:30:01 +02:00
|
|
|
umka_new_sys_threads(0, monitor, monitor_stack + MONITOR_THREAD_STACK_SIZE);
|
|
|
|
|
|
|
|
uint8_t *net_drv_stack = malloc(MONITOR_THREAD_STACK_SIZE);
|
|
|
|
umka_new_sys_threads(0, umka_thread_net_drv, net_drv_stack + MONITOR_THREAD_STACK_SIZE);
|
|
|
|
|
|
|
|
uint8_t *ping_stack = malloc(MONITOR_THREAD_STACK_SIZE);
|
|
|
|
umka_new_sys_threads(0, umka_thread_ping, ping_stack + MONITOR_THREAD_STACK_SIZE);
|
2020-10-10 01:30:52 +02:00
|
|
|
|
2020-10-14 05:30:01 +02:00
|
|
|
setitimer(ITIMER_PROF, &timeout, NULL);
|
2020-10-10 01:30:52 +02:00
|
|
|
|
|
|
|
osloop(); // doesn't return
|
2020-05-08 06:44:32 +02:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|