From 4fd140db2ffef5f84d75f6d47d7b0cfb8819ad55 Mon Sep 17 00:00:00 2001 From: Mochi Date: Mon, 5 Dec 2016 23:46:58 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A1=E3=83=A2=E3=83=AA=E7=AE=A1=E7=90=86?= =?utf8?q?=E3=83=A2=E3=82=B8=E3=83=A5=E3=83=BC=E3=83=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/Makefile | 2 +- .../InitctrlInit.c => InitCtrl/InitCtrlInit.c} | 10 +- src/kernel/Makefile | 8 +- src/kernel/MemMng/MemMngGdt.c | 167 +++++++++++++++++++++ src/kernel/MemMng/MemMngGdt.h | 16 ++ src/kernel/MemMng/MemMngInit.c | 36 +++++ src/kernel/include/MemMng.h | 48 ++++++ src/kernel/include/cpu/IA32/IA32Descriptor.h | 18 ++- src/kernel/include/cpu/IA32/IA32Instruction.h | 26 ++-- .../include/cpu/IA32/{IA32TSS.h => IA32Tss.h} | 6 +- src/kernel/kernel.lds | 4 +- 11 files changed, 315 insertions(+), 26 deletions(-) rename src/kernel/{Initctrl/InitctrlInit.c => InitCtrl/InitCtrlInit.c} (88%) create mode 100644 src/kernel/MemMng/MemMngGdt.c create mode 100644 src/kernel/MemMng/MemMngGdt.h create mode 100644 src/kernel/MemMng/MemMngInit.c create mode 100644 src/kernel/include/MemMng.h rename src/kernel/include/cpu/IA32/{IA32TSS.h => IA32Tss.h} (96%) diff --git a/src/Makefile b/src/Makefile index dccc2a1..68bb9be 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ #******************************************************************************# #* src/Makefile *# #* 2016/12/05 *# -#* Copyright (C) 2016 Mochi *# +#* Copyright (C) 2016 Mochi. *# #******************************************************************************# #******************************************************************************# #* マクロ設定 *# diff --git a/src/kernel/Initctrl/InitctrlInit.c b/src/kernel/InitCtrl/InitCtrlInit.c similarity index 88% rename from src/kernel/Initctrl/InitctrlInit.c rename to src/kernel/InitCtrl/InitCtrlInit.c index 9c10db6..a4f11f8 100644 --- a/src/kernel/Initctrl/InitctrlInit.c +++ b/src/kernel/InitCtrl/InitCtrlInit.c @@ -1,6 +1,6 @@ /******************************************************************************/ -/* src/kernel/Initctrl/InitctrlInit.c */ -/* 2016/12/04 */ +/* src/kernel/InitCtrl/InitCtrlInit.c */ +/* 2016/12/05 */ /* Copyright (C) 2016 Mochi. */ /******************************************************************************/ /******************************************************************************/ @@ -10,6 +10,7 @@ #include /* 外部モジュールヘッダ */ +#include /* 内部モジュールヘッダ */ @@ -23,8 +24,11 @@ * @details Mochi Kernelのエントリ関数。各モジュールの初期化を行う。 */ /******************************************************************************/ -void InitctrlInit( void ) +void InitCtrlInit( void ) { + /* メモリ管理モジュール初期化 */ + MemMngInit(); + /* アイドル(仮) */ while ( 1 ) { /* hlt */ diff --git a/src/kernel/Makefile b/src/kernel/Makefile index 4a111f8..55e8484 100644 --- a/src/kernel/Makefile +++ b/src/kernel/Makefile @@ -1,7 +1,7 @@ #******************************************************************************# #* src/kernel/Makefile *# -#* 2016/03/21 *# -#* Copyright (C) 2016 Mochi *# +#* 2016/12/05 *# +#* Copyright (C) 2016 Mochi. *# #******************************************************************************# #******************************************************************************# #* マクロ設定 *# @@ -13,7 +13,9 @@ CUR_DIR = kernel KERNEL_NAME = kernel # ソースコード -SRCS = Initctrl/InitctrlInit.c +SRCS = InitCtrl/InitCtrlInit.c \ + MemMng/MemMngInit.c \ + MemMng/MemMngGdt.c # Cフラグ CFLAGS = -O \ diff --git a/src/kernel/MemMng/MemMngGdt.c b/src/kernel/MemMng/MemMngGdt.c new file mode 100644 index 0000000..1d3d3e8 --- /dev/null +++ b/src/kernel/MemMng/MemMngGdt.c @@ -0,0 +1,167 @@ +/******************************************************************************/ +/* src/kernel/MemMng/MemMngGdt.c */ +/* 2016/12/05 */ +/* Copyright (C) 2016 Mochi. */ +/******************************************************************************/ +/******************************************************************************/ +/* インクルード */ +/******************************************************************************/ +/* 共通ヘッダ */ +#include +#include + +/* 外部モジュールヘッダ */ +#include + +/* 内部モジュールヘッダ */ + + +/******************************************************************************/ +/* 変数定義 */ +/******************************************************************************/ +static IA32Descriptor_t gGdt[ MEMMNG_GDT_ENTRY_MAX ] = { + /* GDT#0 Nullセグメント */ + { { 0 } }, + /* GDT#1 カーネルコードセグメント */ + { { 0xFFFF, /* セグメントリミット(0-15) */ + 0x0000, /* セグメントベース(0-15) */ + 0x00, /* セグメントベース(16-23) */ + IA32_DESCRIPTOR_TYPE_CODE_X, /* セグメントタイプ */ + IA32_DESCRIPTOR_S_NO, /* システムフラグ */ + IA32_DESCRIPTOR_DPL_0, /* ディスクリプタ特権レベル */ + IA32_DESCRIPTOR_P_YES, /* ディスクリプタ存在フラグ */ + 0xF, /* セグメントリミット(16-19) */ + IA32_DESCRIPTOR_AVL_OFF, /* 未使用 */ + 0x0, /* 予約(0) */ + IA32_DESCRIPTOR_DB_32, /* デフォルトオペレーションサイズ */ + IA32_DESCRIPTOR_G_4K, /* リミット粒度 */ + 0x00 } }, /* セグメントベース(24-31) */ + /* GDT#2 カーネルデータセグメント */ + { { 0xFFFF, /* セグメントリミット(0-15) */ + 0x0000, /* セグメントベース(0-15) */ + 0x00, /* セグメントベース(16-23) */ + IA32_DESCRIPTOR_TYPE_DATA_RW, /* セグメントタイプ */ + IA32_DESCRIPTOR_S_NO, /* システムフラグ */ + IA32_DESCRIPTOR_DPL_0, /* ディスクリプタ特権レベル */ + IA32_DESCRIPTOR_P_YES, /* ディスクリプタ存在フラグ */ + 0xF, /* セグメントリミット(16-19) */ + IA32_DESCRIPTOR_AVL_OFF, /* 未使用 */ + 0x0, /* 予約(0) */ + IA32_DESCRIPTOR_DB_32, /* デフォルトオペレーションサイズ */ + IA32_DESCRIPTOR_G_4K, /* リミット粒度 */ + 0x00 } }, /* セグメントベース(24-31) */ + /* GDT#3 ユーザコードセグメント */ + { { 0xFFFF, /* セグメントリミット(0-15) */ + 0x0000, /* セグメントベース(0-15) */ + 0x00, /* セグメントベース(16-23) */ + IA32_DESCRIPTOR_TYPE_CODE_X, /* セグメントタイプ */ + IA32_DESCRIPTOR_S_NO, /* システムフラグ */ + IA32_DESCRIPTOR_DPL_3, /* ディスクリプタ特権レベル */ + IA32_DESCRIPTOR_P_YES, /* ディスクリプタ存在フラグ */ + 0xF, /* セグメントリミット(16-19) */ + IA32_DESCRIPTOR_AVL_OFF, /* 未使用 */ + 0x0, /* 予約(0) */ + IA32_DESCRIPTOR_DB_32, /* デフォルトオペレーションサイズ */ + IA32_DESCRIPTOR_G_4K, /* リミット粒度 */ + 0x00 } }, /* セグメントベース(24-31) */ + /* GDT#4 ユーザデータセグメント */ + { { 0xFFFF, /* セグメントリミット(0-15) */ + 0x0000, /* セグメントベース(0-15) */ + 0x00, /* セグメントベース(16-23) */ + IA32_DESCRIPTOR_TYPE_DATA_RW, /* セグメントタイプ */ + IA32_DESCRIPTOR_S_NO, /* システムフラグ */ + IA32_DESCRIPTOR_DPL_3, /* ディスクリプタ特権レベル */ + IA32_DESCRIPTOR_P_YES, /* ディスクリプタ存在フラグ */ + 0xF, /* セグメントリミット(16-19) */ + IA32_DESCRIPTOR_AVL_OFF, /* 未使用 */ + 0x0, /* 予約(0) */ + IA32_DESCRIPTOR_DB_32, /* デフォルトオペレーションサイズ */ + IA32_DESCRIPTOR_G_4K, /* リミット粒度 */ + 0x00 } }, /* セグメントベース(24-31) */ + /* GDT#5以降 空ディスクリプタ */ + { { 0 } }, }; + + +/******************************************************************************/ +/* グローバル関数定義 */ +/******************************************************************************/ +/******************************************************************************/ +/** + * @brief GDT初期化 + * @details GDTを初期化しCPUのGDTRへGDTを設定する。 + */ +/******************************************************************************/ +void MemMngGdtInit( void ) +{ + /* GDTR設定 */ + IA32InstructionLgdt( gGdt, sizeof ( gGdt ) - 1 ); + + return; +} + + +/******************************************************************************/ +/** + * @brief GDTエントリ追加 + * @details GDTの空きエントリを検索し、エントリをGDTに追加する。 + * + * @param[in] *pBase セグメントベース + * @param[in] limit セグメントサイズ + * @param[in] limitG リミット粒度 + * @param[in] sysFlg システムフラグ + * @param[in] type セグメントタイプ + * @param[in] level セグメント特権レベル + * @param[in] opSize オペレーションサイズ + * + * @retval MEMMNG_GDT_NULL 失敗(空きエントリ無し) + * @retval MEMMNG_GDT_ENTRY_MIN 成功(GDTエントリ番号最小値) + * @retval MEMMNG_GDT_ENTRY_MAX 成功(GDTエントリ番号最大値) + */ +/******************************************************************************/ +uint16_t MemMngGdtAdd( void *pBase, + size_t limit, + uint8_t limitG, + uint8_t sysFlg, + uint8_t type, + uint8_t level, + uint8_t opSize ) +{ + uint16_t selector; /* セグメントセレクタ */ + IA32DescriptorSeg_t *pDescriptor; /* セグメントディスクリプタ */ + + /* 空きディスクリプタ検索 */ + for ( selector = MEMMNG_GDT_ENTRY_MIN; + selector < MEMMNG_GDT_ENTRY_MAX; + selector++ ) { + /* 参照変数設定 */ + pDescriptor = &( gGdt[ selector ].seg ); + + /* 空きディスクリプタ判定 */ + if ( pDescriptor->attr_p == IA32_DESCRIPTOR_P_NO ) { + /* 空き */ + + /* ディスクリプタ追加 */ + pDescriptor->limit_low = IA32_DESCRIPTOR_LIMIT_LOW( limit ); + pDescriptor->base_low = IA32_DESCRIPTOR_BASE_LOW( pBase ); + pDescriptor->base_middle = IA32_DESCRIPTOR_BASE_MIDDLE( pBase ); + pDescriptor->attr_type = type; + pDescriptor->attr_s = sysFlg; + pDescriptor->attr_dpl = level; + pDescriptor->attr_p = IA32_DESCRIPTOR_P_YES; + pDescriptor->limit_high = IA32_DESCRIPTOR_LIMIT_HIGH( limit ); + pDescriptor->attr_avl = IA32_DESCRIPTOR_AVL_OFF; + pDescriptor->attr_reserved = 0; + pDescriptor->attr_opSize = opSize; + pDescriptor->attr_g = limitG; + pDescriptor->base_high = IA32_DESCRIPTOR_BASE_HIGH( pBase ); + + return selector; + } + } + + /* 空き無しによる追加失敗 */ + return MEMMNG_GDT_NULL; +} + + +/******************************************************************************/ diff --git a/src/kernel/MemMng/MemMngGdt.h b/src/kernel/MemMng/MemMngGdt.h new file mode 100644 index 0000000..6e972f4 --- /dev/null +++ b/src/kernel/MemMng/MemMngGdt.h @@ -0,0 +1,16 @@ +/******************************************************************************/ +/* src/kernel/MemMng/MemMngGdt.h */ +/* 2016/12/05 */ +/* Copyright (C) 2016 Mochi. */ +/******************************************************************************/ +#ifndef MEMMNG_GDT_H +#define MEMMNG_GDT_H +/******************************************************************************/ +/* グローバル関数プロトタイプ宣言 */ +/******************************************************************************/ +/* GDT管理サブモジュール初期化 */ +extern void MemMngGdtInit( void ); + + +/******************************************************************************/ +#endif diff --git a/src/kernel/MemMng/MemMngInit.c b/src/kernel/MemMng/MemMngInit.c new file mode 100644 index 0000000..de7f480 --- /dev/null +++ b/src/kernel/MemMng/MemMngInit.c @@ -0,0 +1,36 @@ +/******************************************************************************/ +/* src/kernel/MemMng/MemMngInit.c */ +/* 2016/12/05 */ +/* Copyright (C) 2016 Mochi. */ +/******************************************************************************/ +/******************************************************************************/ +/* インクルード */ +/******************************************************************************/ +/* 共通ヘッダ */ + +/* 外部モジュールヘッダ */ + +/* 内部モジュールヘッダ */ +#include "MemMngGdt.h" + + +/******************************************************************************/ +/* グローバル関数定義 */ +/******************************************************************************/ +/******************************************************************************/ +/** + * @brief メモリ管理初期化 + * @details GDT管理サブモジュールの初期化を呼び出し、メモリ管理機能を初期化 + * する。 + */ +/******************************************************************************/ +void MemMngInit( void ) +{ + /* GDT管理サブモジュール初期化 */ + MemMngGdtInit(); + + return; +} + + +/******************************************************************************/ diff --git a/src/kernel/include/MemMng.h b/src/kernel/include/MemMng.h new file mode 100644 index 0000000..b4c2c1c --- /dev/null +++ b/src/kernel/include/MemMng.h @@ -0,0 +1,48 @@ +/******************************************************************************/ +/* src/kernel/include/MemMng.h */ +/* 2016/12/05 */ +/* Copyright (C) 2016 Mochi. */ +/******************************************************************************/ +#ifndef MEMMNG_H +#define MEMMNG_H +/******************************************************************************/ +/* インクルード */ +/******************************************************************************/ +/* 共通ヘッダ */ +#include +#include + + +/******************************************************************************/ +/* 定義 */ +/******************************************************************************/ +/* GDT定義 */ +#define MEMMNG_GDT_NULL ( 0 ) /**< GDTエントリ無し */ +#define MEMMNG_GDT_ENTRY_MIN ( 1 ) /**< GDTエントリ最小値 */ +#define MEMMNG_GDT_ENTRY_MAX ( 10 ) /**< GDTエントリ最大値 */ + +/* セグメント定義 */ +#define MEMMNG_SEG_KERNEL_CODE ( 1 * 8 ) /**< カーネルコードセグメント */ +#define MEMMNG_SEG_KERNEL_DATA ( 2 * 8 ) /**< カーネルデータセグメント */ +#define MEMMNG_SEG_USER_CODE ( 3 * 8 + 3 ) /**< ユーザコードセグメント */ +#define MEMMNG_SEG_USER_DATA ( 4 * 8 + 3 ) /**< ユーザデータセグメント */ + + +/******************************************************************************/ +/* グローバル関数宣言 */ +/******************************************************************************/ +/* MemMngInit.c */ +extern void MemMngInit( void ); + +/* MemMngGdt.c */ +extern uint16_t MemMngGdtAdd( void *pBase, + size_t limit, + uint8_t limitG, + uint8_t sysFlg, + uint8_t type, + uint8_t level, + uint8_t opSize ); + + +/******************************************************************************/ +#endif diff --git a/src/kernel/include/cpu/IA32/IA32Descriptor.h b/src/kernel/include/cpu/IA32/IA32Descriptor.h index ff3862e..6402d97 100644 --- a/src/kernel/include/cpu/IA32/IA32Descriptor.h +++ b/src/kernel/include/cpu/IA32/IA32Descriptor.h @@ -1,7 +1,7 @@ /******************************************************************************/ /* src/kernel/include/cpu/IA32/IA32Descriptors.h */ /* 2016/12/05 */ -/* Copyright (C) 2016 Mochi */ +/* Copyright (C) 2016 Mochi. */ /******************************************************************************/ #ifndef IA32_DESCRIPTOR_H #define IA32_DESCRIPTOR_H @@ -72,6 +72,22 @@ #define IA32_DESCRIPTOR_AVL_OFF ( 0 ) /**< 0 */ #define IA32_DESCRIPTOR_AVL_ON ( 1 ) /**< 1 */ +/** セグメントリミット(0-15)マクロ */ +#define IA32_DESCRIPTOR_LIMIT_LOW( _limit ) \ + ( ( uint16_t ) ( ( uint32_t ) ( _limit ) & 0x0000FFFF ) ) +/** セグメントリミット(16-23)マクロ */ +#define IA32_DESCRIPTOR_LIMIT_HIGH( _limit ) \ + ( ( uint8_t ) ( ( ( uint32_t ) ( _limit ) & 0x00FF0000 ) >> 16 ) ) +/** セグメントベースアドレス(0-15)マクロ */ +#define IA32_DESCRIPTOR_BASE_LOW( _pBase ) \ + ( ( uint16_t ) ( ( uint32_t ) ( _pBase ) & 0x0000FFFF ) ) +/** セグメントベースアドレス(16-23)マクロ */ +#define IA32_DESCRIPTOR_BASE_MIDDLE( _pBase ) \ + ( ( uint8_t ) ( ( ( uint32_t ) ( _pBase ) & 0x00FF0000 ) >> 16 ) ) +/** セグメントベースアドレス(24-31)マクロ */ +#define IA32_DESCRIPTOR_BASE_HIGH( _pBase ) \ + ( ( uint8_t ) ( ( ( uint32_t ) ( _pBase ) & 0xFF000000 ) >> 24 ) ) + /* セグメントディスクリプタ */ typedef struct { uint16_t limit_low; /* セグメントリミット(0-15) */ diff --git a/src/kernel/include/cpu/IA32/IA32Instruction.h b/src/kernel/include/cpu/IA32/IA32Instruction.h index dc2241f..88e287e 100644 --- a/src/kernel/include/cpu/IA32/IA32Instruction.h +++ b/src/kernel/include/cpu/IA32/IA32Instruction.h @@ -1,7 +1,7 @@ /******************************************************************************/ /* src/kernel/include/cpu/IA32/IA32Instruction.h */ /* 2016/12/05 */ -/* Copyright (C) 2016 Mochi */ +/* Copyright (C) 2016 Mochi. */ /******************************************************************************/ #ifndef IA32_INSTRUCTION_H #define IA32_INSTRUCTION_H @@ -23,7 +23,7 @@ * @param[in] value 加算値 */ /******************************************************************************/ -static inline void IA32InstructionAddESP( int32_t value ) +static inline void IA32InstructionAddEsp( int32_t value ) { /* add命令実行 */ __asm__ __volatile__ ( "add esp, %0" @@ -76,7 +76,7 @@ static inline void IA32InstructionCli( void ) * @param[out] *pValue espレジスタ値格納先 */ /******************************************************************************/ -static inline void IA32InstructionGetESP( uint32_t *pValue ) +static inline void IA32InstructionGetEsp( uint32_t *pValue ) { /* mov命令実行 */ __asm__ __volatile__ ( "mov %0, esp" @@ -377,7 +377,7 @@ static inline void IA32InstructionPopad( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPopDS( void ) +static inline void IA32InstructionPopDs( void ) { /* pop ds命令実行 */ __asm__ __volatile__ ( "pop ds" ); @@ -394,7 +394,7 @@ static inline void IA32InstructionPopDS( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPopES( void ) +static inline void IA32InstructionPopEs( void ) { /* pop es命令実行 */ __asm__ __volatile__ ( "pop es" ); @@ -428,7 +428,7 @@ static inline void IA32InstructionPopfd( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPopFS( void ) +static inline void IA32InstructionPopFs( void ) { /* pop fs命令実行 */ __asm__ __volatile__ ( "pop fs" ); @@ -445,7 +445,7 @@ static inline void IA32InstructionPopFS( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPopGS( void ) +static inline void IA32InstructionPopGs( void ) { /* pop gs命令実行 */ __asm__ __volatile__ ( "pop gs" ); @@ -499,7 +499,7 @@ static inline void IA32InstructionPushad( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPushDS( void ) +static inline void IA32InstructionPushDs( void ) { /* push ds命令実行 */ __asm__ __volatile__ ( "push ds" ); @@ -516,7 +516,7 @@ static inline void IA32InstructionPushDS( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPushES( void ) +static inline void IA32InstructionPushEs( void ) { /* push es命令実行 */ __asm__ __volatile__ ( "push es" ); @@ -551,7 +551,7 @@ static inline void IA32InstructionPushfd( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPushFS( void ) +static inline void IA32InstructionPushFs( void ) { /* push fs命令実行 */ __asm__ __volatile__ ( "push fs" ); @@ -568,7 +568,7 @@ static inline void IA32InstructionPushFS( void ) * @attention スタックポインタが破壊される。 */ /******************************************************************************/ -static inline void IA32InstructionPushGS( void ) +static inline void IA32InstructionPushGs( void ) { /* push gs命令実行 */ __asm__ __volatile__ ( "push gs" ); @@ -585,7 +585,7 @@ static inline void IA32InstructionPushGS( void ) * @param[in] value 設定値 */ /******************************************************************************/ -static inline void IA32InstructionSetESP( uint32_t value ) +static inline void IA32InstructionSetEsp( uint32_t value ) { /* mov命令実行 */ __asm__ __volatile__ ( "mov esp, %0" @@ -620,7 +620,7 @@ static inline void IA32InstructionSti( void ) * @param[in] value 減算値 */ /******************************************************************************/ -static inline void IA32InstructionSubESP( int32_t value ) +static inline void IA32InstructionSubEsp( int32_t value ) { /* add命令実行 */ __asm__ __volatile__ ( "sub esp, %0" diff --git a/src/kernel/include/cpu/IA32/IA32TSS.h b/src/kernel/include/cpu/IA32/IA32Tss.h similarity index 96% rename from src/kernel/include/cpu/IA32/IA32TSS.h rename to src/kernel/include/cpu/IA32/IA32Tss.h index 2b057b2..9d5247a 100644 --- a/src/kernel/include/cpu/IA32/IA32TSS.h +++ b/src/kernel/include/cpu/IA32/IA32Tss.h @@ -1,7 +1,7 @@ /******************************************************************************/ -/* src/kernel/include/cpu/IA32/IA32TSS.h */ +/* src/kernel/include/cpu/IA32/IA32Tss.h */ /* 2016/12/05 */ -/* Copyright (C) 2016 Mochi */ +/* Copyright (C) 2016 Mochi. */ /******************************************************************************/ #ifndef IA32_TSS_H #define IA32_TSS_H @@ -55,7 +55,7 @@ typedef struct { uint16_t reserved12:15; /* 予約 */ uint16_t t:1; /* デバッグトラップフラグ */ uint16_t ioMapBase; /* I/Oマップベースアドレス */ -} IA32TSS_t; +} IA32Tss_t; /******************************************************************************/ diff --git a/src/kernel/kernel.lds b/src/kernel/kernel.lds index edd3e30..294b03f 100644 --- a/src/kernel/kernel.lds +++ b/src/kernel/kernel.lds @@ -1,10 +1,10 @@ /******************************************************************************/ /* src/kernel/kernel.lds */ -/* 2016/12/04 */ +/* 2016/12/05 */ /* Copyright (C) 2016 Mochi. */ /******************************************************************************/ OUTPUT_FORMAT( binary ) -ENTRY( InitctrlInit ) +ENTRY( InitCtrlInit ) SECTIONS { . = 0x100000; -- 2.11.0