OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / sample / mips / jelly / boot.c
1 /** 
2  *  Sample program for Hyper Operating System V4 Advance
3  *
4  * @file  sample.c
5  * @brief %jp{サンプルプログラム}%en{Sample program}
6  *
7  * Copyright (C) 1998-2008 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include "kernel.h"
16 #include "kernel_id.h"
17 #include "system/system/system.h"
18 #include "system/sysapi/sysapi.h"
19 #include "system/file/console.h"
20 #include "system/process/process.h"
21 #include "system/command/command.h"
22 #include "driver/serial/jelly/jellyuartdrv.h"
23 #include "driver/console/vt100/vt100drv.h"
24 #include "application//syscmd/shell/shell.h"
25 #include "application//syscmd/commandlist/commandlist.h"
26 #include "application//syscmd/processlist/processlist.h"
27 #include "application/utility/timecmd/timecmd.h"
28 #include "application/utility/memdump/memdump.h"
29 #include "application/utility/memwrite/memwrite.h"
30 #include "application/utility/memtest/memtest.h"
31 #include "application/utility/keytest/keytest.h"
32 #include "application/example/hello/hello.h"
33 #include "boot.h"
34 #include "ostimer.h"
35
36
37 #if 0
38
39 long    g_SystemHeap[128 * 1024 / sizeof(long)];
40 #define SYSTEM_HEAP_ADDR        ((void *)g_SystemHeap)
41 #define SYSTEM_HEAP_SIZE        sizeof(g_SystemHeap)
42
43 #else
44
45 #define SYSTEM_HEAP_ADDR        ((void *)0x00200000)
46 #define SYSTEM_HEAP_SIZE        0x00100000
47
48 #endif
49
50
51 extern SYSTIM_CPUTIME           SysTim_TimeCounter;             /* デフォルトのタイマカウンタ */
52
53
54
55 int Boot_Process(VPARAM Param);
56
57
58 void Boot_Task(VP_INT exinf)
59 {
60         T_SYSTEM_INITIALIZE_INF SysInf;
61         
62         
63         /*************************/
64         /*       初期化          */
65         /*************************/
66         
67         /* システム初期化 */
68         memset(&SysInf, 0, sizeof(SysInf));
69         SysInf.pSysMemBase     = SYSTEM_HEAP_ADDR;
70         SysInf.SysMemSize      = SYSTEM_HEAP_SIZE;
71         SysInf.SysMemAlign     = 8;
72         SysInf.pIoMemBase      = NULL;
73         SysInf.SystemStackSize = 2048;
74         SysInf.pfncBoot        = Boot_Process;
75         SysInf.BootParam       = (VPARAM)0;
76         SysInf.BootStackSize   = 2048;
77         System_Initialize(&SysInf);
78 }
79
80
81 /* ブートプロセス */
82 int Boot_Process(VPARAM Param)
83 {
84         T_PROCESS_CREATE_INF    ProcInf;
85         HANDLE                                  hProcess;
86         HANDLE                                  hDriver;
87         HANDLE                                  hTty;
88         HANDLE                                  hCon;
89         
90         
91         /*************************/
92         /*   デバイスドライバ    */
93         /*************************/
94         
95         /* タイマ初期化 */        
96         OsTimer_Initialize();
97         
98         /* Jelly UART デバドラ生成 (/dev/com0 に登録) */
99         hDriver = JellyUartDrv_Create((void *)0xf2000000, 1, 2, 64);
100         File_AddDevice("com0", hDriver);
101         
102         /* シリアルを開く */
103         hTty = File_Open("/dev/com0", FILE_OPEN_READ | FILE_OPEN_WRITE);
104         
105         /* シリアル上にコンソールを生成( /dev/con0 に登録) */
106         hDriver = Vt100Drv_Create(hTty);
107         File_AddDevice("con0", hDriver);
108         
109         /* コンソールを開く */
110         hCon = File_Open("/dev/con0", FILE_OPEN_READ | FILE_OPEN_WRITE);
111         
112         
113         /*************************/
114         /*     標準入出力設定    */
115         /*************************/
116         
117         Process_SetTerminal(HANDLE_NULL, hTty);
118         Process_SetConIn(HANDLE_NULL, hCon);
119         Process_SetConOut(HANDLE_NULL, hCon);
120         Process_SetStdIn(HANDLE_NULL, hCon);
121         Process_SetStdOut(HANDLE_NULL, hCon);
122         Process_SetStdErr(HANDLE_NULL, hCon);
123         
124         
125         /*************************/
126         /*     コマンド登録      */
127         /*************************/
128         Command_AddCommand("sh",       Shell_Main);
129         Command_AddCommand("ps",       ProcessList_Main);
130         Command_AddCommand("help",     CommandList_Main);
131         Command_AddCommand("time",     TimeCmd_Main);
132         Command_AddCommand("memdump",  MemDump_Main);
133         Command_AddCommand("memwrite", MemWrite_Main);
134         Command_AddCommand("memtest",  MemTest_Main);
135         Command_AddCommand("keytest",  KeyTest_Main);
136         Command_AddCommand("hello",    Hello_Main);
137         
138         
139         /*************************/
140         /*    起動メッセージ     */
141         /*************************/
142         StdIo_PutString(
143                         "\n\n"
144                         "================================================================\n"
145                         " Hyper Operating System  Application Framework\n"
146                         "\n"
147                         "                          Copyright (C) 1998-2008 by Project HOS\n"
148                         "                          http://sourceforge.jp/projects/hos/\n"
149                         "================================================================\n"
150                         "\n");
151         
152         
153         /*************************/
154         /*      シェル起動       */
155         /*************************/
156         
157         /* プロセスの生成*/
158         ProcInf.pszCommandLine = "sh -i";                                                               /* 実行コマンド */
159         ProcInf.pszCurrentDir  = "";                                                                    /* 起動ディレクトリ */
160         ProcInf.pfncEntry      = NULL;                                                                  /* 起動アドレス */
161         ProcInf.Param          = 0;                                                                             /* ユーザーパラメータ */
162         ProcInf.StackSize      = 2048;                                                                  /* スタックサイズ */
163         ProcInf.Priority       = PROCESS_PRIORITY_NORMAL;                               /* プロセス優先度 */
164         ProcInf.hTerminal      = Process_GetTerminal(HANDLE_NULL);              /* ターミナル */
165         ProcInf.hConIn         = Process_GetConIn(HANDLE_NULL);                 /* コンソール入力 */
166         ProcInf.hConOut        = Process_GetConOut(HANDLE_NULL);                /* コンソール出力 */
167         ProcInf.hStdIn         = Process_GetStdIn(HANDLE_NULL);                 /* 標準入力 */
168         ProcInf.hStdOut        = Process_GetStdOut(HANDLE_NULL);                /* 標準出力 */
169         ProcInf.hStdErr        = Process_GetStdErr(HANDLE_NULL);                /* 標準エラー出力 */
170         for ( ; ; )
171         {
172                 hProcess = Process_CreateEx(&ProcInf);
173                 Process_WaitExit(hProcess);
174                 Process_Delete(hProcess);
175         }
176 }
177
178
179 /* end of file */