kernel support kconfig

This commit is contained in:
zhangzheng
2023-12-05 00:01:26 +08:00
parent feda3c7aaa
commit 7522bf9c1f
29 changed files with 138 additions and 563 deletions

View File

@@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.13)
file(GLOB_RECURSE deps *.c *.S)
add_library(knl STATIC ${deps})
target_include_directories(
knl

View File

@@ -19,7 +19,7 @@
#include "assert.h"
#include "slist.h"
#include "spinlock.h"
#include "futex_queue.h"
// #include "futex_queue.h"
#include "globals.h"
#include "string.h"
#include "ipc.h"
@@ -27,8 +27,7 @@
#include "slist.h"
#include "access.h"
#include "limits.h"
#define FT_ADDR_NR 16 //!< 最多加锁的对象
#include "futex.h"
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
@@ -67,7 +66,7 @@ typedef struct futex_lock
typedef struct futex
{
kobject_t kobj;
futex_lock_t fl_list[FT_ADDR_NR]; //!< 存储加锁的地址
futex_lock_t fl_list[CONFIG_FT_ADDR_NR]; //!< 存储加锁的地址
} futex_t;
static futex_t futex_obj;
@@ -173,7 +172,7 @@ static futex_lock_t *futex_set_addr(futex_t *ft, void *uaddr, thread_t *hd)
{
int empty_inx = -1;
for (int i = 0; i < FT_ADDR_NR; i++)
for (int i = 0; i < CONFIG_FT_ADDR_NR; i++)
{
if (ft->fl_list[i].uaddr == uaddr)
{
@@ -198,7 +197,7 @@ static futex_lock_t *futex_set_addr(futex_t *ft, void *uaddr, thread_t *hd)
}
static futex_lock_t *futex_find(futex_t *fst, void *uaddr)
{
for (int i = 0; i < FT_ADDR_NR; i++)
for (int i = 0; i < CONFIG_FT_ADDR_NR; i++)
{
if (fst->fl_list[i].uaddr == uaddr)
{
@@ -474,7 +473,7 @@ static void futex_unmap(obj_space_t *obj_space, kobject_t *kobj)
printk("%s:%d\n", __func__, __LINE__);
umword_t status = spinlock_lock(&futex->kobj.lock);
for (int i = 0; i < FT_ADDR_NR; i++)
for (int i = 0; i < CONFIG_FT_ADDR_NR; i++)
{
thread_t *pos;
@@ -512,7 +511,7 @@ static void futex_release_stage2(kobject_t *kobj)
static void futex_init(futex_t *ft)
{
kobject_init(&ft->kobj, FUTEX_TYPE);
for (int i = 0; i < FT_ADDR_NR; i++)
for (int i = 0; i < CONFIG_FT_ADDR_NR; i++)
{
slist_init(&ft->fl_list[i].thread_list_head);
}

View File

@@ -19,7 +19,7 @@
#include <irq.h>
#include <printk.h>
/*TODO:换成更节省内存的方式*/
static irq_entry_t irqs[IRQ_REG_TAB_SIZE] = {0};
static irq_entry_t irqs[CONFIG_IRQ_REG_TAB_SIZE] = {0};
static void irq_tigger(irq_entry_t *irq);
/**
@@ -30,7 +30,7 @@ static void irq_tigger(irq_entry_t *irq);
*/
bool_t irq_check_usability(int inx)
{
if (inx >= IRQ_REG_TAB_SIZE)
if (inx >= CONFIG_IRQ_REG_TAB_SIZE)
{
return FALSE;
}
@@ -61,7 +61,7 @@ bool_t irq_alloc(int inx, irq_sender_t *irq, void (*irq_tigger_func)(irq_entry_t
*/
void irq_free(int inx)
{
assert(inx < IRQ_REG_TAB_SIZE);
assert(inx < CONFIG_IRQ_REG_TAB_SIZE);
irqs[inx].irq_tigger_func = NULL;
}
/**
@@ -72,7 +72,7 @@ void irq_free(int inx)
*/
irq_entry_t *irq_get(int inx)
{
assert(inx < IRQ_REG_TAB_SIZE);
assert(inx < CONFIG_IRQ_REG_TAB_SIZE);
return &irqs[inx];
}
/**
@@ -83,7 +83,7 @@ void entry_handler(void)
{
umword_t isr_no = arch_get_isr_no();
isr_no -= USER_ISR_START_NO; //!< 系统用的irq偏移
isr_no -= CONFIG_USER_ISR_START_NO; //!< 系统用的irq偏移
// printk("%d.\n", isr_no);
if (!irq_check_usability(isr_no))

View File

@@ -18,7 +18,7 @@ void mm_space_init(mm_space_t *mm_space, int is_knl)
{
region_info_t *regi_info;
for (int i = 0; i < REGION_NUM; i++)
for (int i = 0; i < CONFIG_REGION_NUM; i++)
{
mm_space->pt_regions[i].region_inx = -1;
}

View File

@@ -14,14 +14,14 @@
#include "string.h"
void obj_space_init(obj_space_t *obj_space, ram_limit_t *ram)
{
for (int i = 0; i < OBJ_MAP_TAB_SIZE; i++)
for (int i = 0; i < CONFIG_OBJ_MAP_TAB_SIZE; i++)
{
obj_space->tab.tabs[i] = NULL;
}
}
void obj_space_release(obj_space_t *obj_space, ram_limit_t *ram)
{
for (int i = 0; i < OBJ_MAP_TAB_SIZE; i++)
for (int i = 0; i < CONFIG_OBJ_MAP_TAB_SIZE; i++)
{
mm_limit_free(ram, obj_space->tab.tabs[i]);
}
@@ -33,8 +33,8 @@ void obj_space_del(obj_space_t *obj_space, obj_addr_t inx)
{
return;
}
int tab_inx = inx / OBJ_MAP_ENTRY_SIZE;
int entry_inx = inx % OBJ_MAP_ENTRY_SIZE;
int tab_inx = inx / CONFIG_OBJ_MAP_ENTRY_SIZE;
int entry_inx = inx % CONFIG_OBJ_MAP_ENTRY_SIZE;
if (!obj_space->tab.tabs[tab_inx])
{
@@ -50,8 +50,8 @@ obj_map_entry_t *obj_space_insert(obj_space_t *obj_space, ram_limit_t *ram, kobj
{
return NULL;
}
int tab_inx = inx / OBJ_MAP_ENTRY_SIZE;
int entry_inx = inx % OBJ_MAP_ENTRY_SIZE;
int tab_inx = inx / CONFIG_OBJ_MAP_ENTRY_SIZE;
int entry_inx = inx % CONFIG_OBJ_MAP_ENTRY_SIZE;
if (!obj_space->tab.tabs[tab_inx])
{
@@ -79,8 +79,8 @@ obj_map_entry_t *obj_space_lookup(obj_space_t *obj_space, obj_addr_t inx)
{
return NULL;
}
int tab_inx = inx / OBJ_MAP_ENTRY_SIZE;
int entry_inx = inx % OBJ_MAP_ENTRY_SIZE;
int tab_inx = inx / CONFIG_OBJ_MAP_ENTRY_SIZE;
int entry_inx = inx % CONFIG_OBJ_MAP_ENTRY_SIZE;
if (!obj_space->tab.tabs[tab_inx])
{

View File

@@ -15,7 +15,7 @@
#include "uart/uart.h"
static spinlock_t lock;
static char print_cache[128];
static char print_cache[CONFIG_PRINTK_CACHE_SIZE];
/**
* @brief 原始输出