Subversion Repositories HelenOS-doc

Rev

Rev 152 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 152 Rev 154
1
\chapter{Running HelenOS}
1
\chapter{Running HelenOS}
2
 
2
 
3
\section{Kernel Start}
3
\section{Kernel Start}
4
When the HelenOS kernel starts up, it configures its output device
4
When the HelenOS kernel starts up, it configures its output device
5
and starts booting. During the boot process it writes out some some
5
and starts booting. During the boot process it writes out some some
6
lines regarding memory size and available CPUs. The userspace
6
lines regarding memory size and available CPUs. The userspace
7
drivers and tasks take over the console as soon as the start-up activity
7
drivers and tasks take over the console as soon as the start-up activity
8
and developer kernel tests are finished.
8
and developer kernel tests are finished.
9
 
9
 
10
The console driver provides 12 virtual consoles, 11 reserved
10
The console driver provides 12 virtual consoles, 11 reserved
11
for applications, console 12 is reserved for kernel console. Pressing
11
for applications, console 12 is reserved for kernel console. Pressing
12
function keys F1-F12 switches between the consoles.
12
function keys F1-F12 switches between the consoles.
13
 
13
 
-
 
14
If the architecture supports framebuffer device larger with
-
 
15
resolution at least 800x600, nice graphical console is shown. At the top
-
 
16
of the screen a row of buttons for the virtual console is drawn. If
-
 
17
the button contains console number, an application is connected to it.
-
 
18
The red button signifies that there was an activity on the terminal
-
 
19
since it was last shown to the user.
-
 
20
 
14
\section{KConsole}
21
\section{KConsole}
15
KConsole is a kernel thread operating completely in priviledged mode.
22
KConsole is a kernel thread operating completely in priviledged mode.
16
It allows user to interact directly with the kernel and even start directly
23
It allows user to interact directly with the kernel and even start directly
17
functions inside the kernel.
24
functions inside the kernel.
18
 
25
 
19
The KConsole is shown by switching to console number 12. On some platforms
26
The KConsole is shown by switching to console number 12. On some platforms
20
the kconsole screen is not restored to its previous contents. Press
27
the kconsole screen is not restored to its previous contents. Press
21
enter to see a KConsole prompt. The function keys for switching terminals
28
enter to see a KConsole prompt. The function keys for switching terminals
22
do not work in KConsole, to switch back to other console, use
29
do not work in KConsole, to switch back to other console, use
23
the {\em continue} command. After executing the command, press a function key
30
the {\em continue} command. After executing the command, press a function key
24
to switch to other consoles.
31
to switch to other consoles.
25
 
32
 
26
The basic editing facilities are very similar to {\em readline} conventions.
33
The basic editing facilities are very similar to {\em readline} conventions.
27
The left and right arrows, backspace and delete keys allow for convenient
34
The left and right arrows, backspace and delete keys allow for convenient
28
editing of the text. The history of last ten commands can be retrieved
35
editing of the text. The history of last ten commands can be retrieved
29
using up and down arrows. KConsole supports tab completion, double tab
36
using up and down arrows. KConsole supports tab completion, double tab
30
shows a list of available commands.
37
shows a list of available commands.
31
 
38
 
32
The first class of commands prints useful statistics from the running
39
The first class of commands prints useful statistics from the running
33
operating systems. The commands are:
40
operating systems. The commands are:
34
\begin{description}
41
\begin{description}
35
\item[zones] --- Prints a list of memory zones.
42
\item[zones] --- Prints a list of memory zones.
36
\item[zone $<$zone number$>$] --- Prints a detailed statistics about frame allocator.
43
\item[zone $<$zone number$>$] --- Prints a detailed statistics about frame allocator.
37
\item[slabs] --- Prints a details statistics about slab allocator.
44
\item[slabs] --- Prints a details statistics about slab allocator.
38
\item[scheduler] --- Prints scheduler queues on all cpus.
45
\item[scheduler] --- Prints scheduler queues on all cpus.
39
\item[threads] --- Prints list of existing threads, including information about
46
\item[threads] --- Prints list of existing threads, including information about
40
the thread state
47
the thread state
41
\item[tasks] --- Prints list of tasks along with some basic IPC informations.
48
\item[tasks] --- Prints list of tasks along with some basic IPC informations.
42
\item[ipc\_task $<$taskid$>$] --- Prints detailed information about IPC queues of a particular task.
49
\item[ipc\_task $<$taskid$>$] --- Prints detailed information about IPC queues of a particular task.
43
\item[tlb] --- Prints contents of the Translation Lookaside Buffer on a processor (supported only on some platforms)
50
\item[tlb] --- Prints contents of the Translation Lookaside Buffer on a processor (supported only on some platforms)
44
\item[exc] --- Prints table of registered exception handlers
51
\item[exc] --- Prints table of registered exception handlers
45
\end{description}
52
\end{description}
46
 
53
 
47
Kernel contains a searchable version of its symbol table. This is used
54
Kernel contains a searchable version of its symbol table. This is used
48
in error processing as well as for extending functionality of KConsole.
55
in error processing as well as for extending functionality of KConsole.
49
The following commands are supported:
56
The following commands are supported:
50
\begin{description}
57
\begin{description}
51
\item[symaddr $<$address$>$] --- Finds an address in symbol table and prints appropriate
58
\item[symaddr $<$address$>$] --- Finds an address in symbol table and prints appropriate
52
symbol name.
59
symbol name.
53
\item[call0, call1... $<$function$>$ $<$args...$>$] --- Calls a C function function(args...).
60
\item[call0, call1... $<$function$>$ $<$args...$>$] --- Calls a C function function(args...).
54
Note that the tab-completion works for the function names. Because
61
Note that the tab-completion works for the function names. Because
55
of architecture calling convention, this command does not work correctly
62
of architecture calling convention, this command does not work correctly
56
on the ia64 platform. The arguments can be specified
63
on the ia64 platform. The arguments can be specified
57
 \begin{itemize}
64
 \begin{itemize}
58
  \item as a number or hexadecimal number: call1 task\_kill 8
65
  \item as a number or hexadecimal number: call1 task\_kill 8
59
  \item as a string: call1 printf "Hello world"
66
  \item as a string: call1 printf "Hello world"
60
  \item as a hexadecimal number preceded by '*'. The argument is then read from
67
  \item as a hexadecimal number preceded by '*'. The argument is then read from
61
the given address: call2 printf "%X" *0x8000000
68
the given address: call2 printf "%X" *0x8000000
62
  \item as a symbol name. In such case the value located in the memory
69
  \item as a symbol name. In such case the value located in the memory
63
    in the symbols address is used: call2 printf "%d" task_counter
70
    in the symbols address is used: call2 printf "%d" task_counter
64
  \item as a symbol name preceded by '\&'. The address is used.
71
  \item as a symbol name preceded by '\&'. The address is used.
65
  \item as a symbol name preceded by '*'. In such a case the symbol is dereferenced.
72
  \item as a symbol name preceded by '*'. In such a case the symbol is dereferenced.
66
 \end{itemize}
73
 \end{itemize}
67
\item[set4 <address|symbol name>] --- Saves 4-byte value on a given address.
74
\item[set4 <address|symbol name>] --- Saves 4-byte value on a given address.
68
\end{description}
75
\end{description}
69
 
76
 
70
The mips, ia32 and amd64 platforms provide additional commands regarding
77
The mips, ia32 and amd64 platforms provide additional commands regarding
71
debugging facility - set and clear hardware breakpoints and watchpoints.
78
debugging facility - set and clear hardware breakpoints and watchpoints.
72
 
79
 
-
 
80
\section{KConsole Task Control}
-
 
81
KConsole {\em call} commands can be used to start and kill the tasks.
-
 
82
To repeatably start the task, the following procedure should be used:
-
 
83
\begin{verbatim}
-
 
84
.... kernel boot data ....
-
 
85
init[8].addr=0x8027b000, init[8].size=86016
-
 
86
.... rest of boot data ...
-
 
87
kconsole> call2 task_run_program 0x8027b000 0
-
 
88
Calling f(0x8027b000,0): 0x80119283: generic/src/proc/task.o:task_run_program
-
 
89
Result: 0x80086500
-
 
90
\end{verbatim}
-
 
91
 
-
 
92
To kill a task, the function {\em task\_kill} is appropriate. The {\em taskid}
-
 
93
parameter is a 64-bit number on all platforms, thus on the 32-bit platforms
-
 
94
call2 should be used with 2 32-bit parameters instead.
-
 
95
\begin{verbatim}
-
 
96
kconsole> call2 task_kill 8 0
-
 
97
Calling f(0x8,0x0): 0x801197e8: generic/src/proc/task.o:task_kill
-
 
98
Result: 0x0
-
 
99
\end{verbatim}
-
 
100
 
73
\section{Emergency Functions}
101
\section{Emergency Functions}
74
It may happen that the IPC communication dies or that there appear some
102
It may happen that the IPC communication dies or that there appear some
75
problems in the communication chain
103
problems in the communication chain
76
{\em keboard driver} - {\em console} - {\em output driver}.
104
{\em keboard driver} - {\em console} - {\em output driver}.
77
As long that at least the keyboard driver works, pressing Escape key three
105
As long that at least the keyboard driver works, pressing Escape key three
78
times transfers control to the KConsole immediately. Because the screen is not
106
times transfers control to the KConsole immediately. Because the screen is not
79
updated, the user should press Enter to see the kconsole prompt.
107
updated, the user should press Enter to see the kconsole prompt.
80
 
108
 
81
If a kernel panic occurs, the error handling automatially switches control
109
If a kernel panic occurs, the error handling automatially switches control
82
to the KConsole and allows users to inspect the failed kernel online.
110
to the KConsole and allows users to inspect the failed kernel online.
83
On the SMP system the other processors are halted immediately. The kernel
111
On the SMP system the other processors are halted immediately. The kernel
84
contains its symbol table, so you can probably read some useful information
112
contains its symbol table, so you can probably read some useful information
85
about the exact place where the panic occured.
113
about the exact place where the panic occured.
86
 
114
 
87
\section{How to Do a Kernel Panic}
115
\section{How to Do a Kernel Panic}
88
Kernel panic is extremely rare in HelenOS. However, if the user wishes to
116
Kernel panic is extremely rare in HelenOS. However, if the user wishes to
89
simulate it, KConsole contains proper commands. For example the following
117
simulate it, KConsole contains proper commands. For example the following
90
command simulates a write to the unmapped address 0x4:
118
command simulates a write to the unmapped address 0x4:
91
\begin{verbatim}
119
\begin{verbatim}
92
kconsole> set4 4 0
120
kconsole> set4 4 0
93
\end{verbatim}
121
\end{verbatim}
94
 
122
 
95
To test the autodebugging possibilities of the IA32 platform, the following
123
To test the autodebugging possibilities of the IA32 platform, the following
96
sequence can be executed:
124
sequence can be executed:
97
\begin{verbatim}
125
\begin{verbatim}
98
kconsole> bkpts
126
kconsole> bkpts
99
0. 0x80032010 in (NULL)
127
0. 0x80032010 in (NULL)
100
    Count(0)
128
    Count(0)
101
kconsole> set4 0x80032010 0
129
kconsole> set4 0x80032010 0
102
**** Found ZERO on address 0x0 ****
130
**** Found ZERO on address 0x0 ****
103
Reached breakpoint 0:0x8011552a(generic/src/console/cmd.o:cmd_set4)
131
Reached breakpoint 0:0x8011552a(generic/src/console/cmd.o:cmd_set4)
104
***Type 'exit' to exit kconsole.
132
***Type 'exit' to exit kconsole.
105
debug>
133
debug>
106
\end{verbatim}
134
\end{verbatim}
107
 
135
 
108
 
136
 
109
\section{KLog}
137
\section{KLog}
110
To avoid disturbing the framebuffer driver with kernel messages, a circular
138
To avoid disturbing the framebuffer driver with kernel messages, a circular
111
buffer communication between kernel and userspace area is established.
139
buffer communication between kernel and userspace area is established.
112
Non-critical messages are sent to the
140
Non-critical messages are sent to the
113
KLog application. User can see messages about task faults
141
KLog application. User can see messages about task faults
114
and task cleanup completion.
142
and task cleanup completion.
115
 
143
 
116
\section{IPCC - testing applicatoin}
144
\section{IPCC - testing application}
117
To test thouroughly some aspects of the IPC and task
145
To test thouroughly some aspects of the task activities, IPCC application
-
 
146
allows user to generate page faults
118
 
147
 
119
\section{Tetris}
148
\section{Tetris}