Rev 150 | Rev 154 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
125 | decky | 1 | \chapter{Running HelenOS} |
2 | |||
143 | palkovsky | 3 | \section{Kernel Start} |
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 |
||
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 |
||
8 | and developer kernel tests are finished. |
||
9 | |||
10 | The console driver provides 12 virtual consoles, 11 reserved |
||
11 | for applications, console 12 is reserved for kernel console. Pressing |
||
12 | function keys F1-F12 switches between the consoles. |
||
13 | |||
14 | \section{KConsole} |
||
15 | KConsole is a kernel thread operating completely in priviledged mode. |
||
144 | palkovsky | 16 | It allows user to interact directly with the kernel and even start directly |
143 | palkovsky | 17 | functions inside the kernel. |
18 | |||
19 | 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 |
||
21 | enter to see a KConsole prompt. The function keys for switching terminals |
||
144 | palkovsky | 22 | do not work in KConsole, to switch back to other console, use |
143 | palkovsky | 23 | the {\em continue} command. After executing the command, press a function key |
24 | to switch to other consoles. |
||
25 | |||
26 | The basic editing facilities are very similar to {\em readline} conventions. |
||
27 | 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 |
||
29 | using up and down arrows. KConsole supports tab completion, double tab |
||
30 | shows a list of available commands. |
||
31 | |||
32 | The first class of commands prints useful statistics from the running |
||
33 | operating systems. The commands are: |
||
144 | palkovsky | 34 | \begin{description} |
35 | \item[zones] --- Prints a list of memory zones. |
||
36 | \item[zone $<$zone number$>$] --- Prints a detailed statistics about frame allocator. |
||
37 | \item[slabs] --- Prints a details statistics about slab allocator. |
||
38 | \item[scheduler] --- Prints scheduler queues on all cpus. |
||
39 | \item[threads] --- Prints list of existing threads, including information about |
||
40 | the thread state |
||
41 | \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. |
||
43 | \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 |
||
45 | \end{description} |
||
143 | palkovsky | 46 | |
47 | Kernel contains a searchable version of its symbol table. This is used |
||
48 | in error processing as well as for extending functionality of KConsole. |
||
49 | The following commands are supported: |
||
144 | palkovsky | 50 | \begin{description} |
51 | \item[symaddr $<$address$>$] --- Finds an address in symbol table and prints appropriate |
||
143 | palkovsky | 52 | symbol name. |
144 | palkovsky | 53 | \item[call0, call1... $<$function$>$ $<$args...$>$] --- Calls a C function function(args...). |
143 | palkovsky | 54 | Note that the tab-completion works for the function names. Because |
55 | of architecture calling convention, this command does not work correctly |
||
56 | on the ia64 platform. The arguments can be specified |
||
144 | palkovsky | 57 | \begin{itemize} |
58 | \item as a number or hexadecimal number: call1 task\_kill 8 |
||
59 | \item as a string: call1 printf "Hello world" |
||
60 | \item as a hexadecimal number preceded by '*'. The argument is then read from |
||
143 | palkovsky | 61 | the given address: call2 printf "%X" *0x8000000 |
144 | palkovsky | 62 | \item as a symbol name. In such case the value located in the memory |
143 | palkovsky | 63 | in the symbols address is used: call2 printf "%d" task_counter |
144 | palkovsky | 64 | \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. |
||
66 | \end{itemize} |
||
67 | \item[set4 <address|symbol name>] --- Saves 4-byte value on a given address. |
||
68 | \end{description} |
||
143 | palkovsky | 69 | |
70 | The mips, ia32 and amd64 platforms provide additional commands regarding |
||
71 | debugging facility - set and clear hardware breakpoints and watchpoints. |
||
72 | |||
73 | \section{Emergency Functions} |
||
152 | palkovsky | 74 | It may happen that the IPC communication dies or that there appear some |
143 | palkovsky | 75 | problems in the communication chain |
76 | {\em keboard driver} - {\em console} - {\em output driver}. |
||
77 | As long that at least the keyboard driver works, pressing Escape key three |
||
152 | palkovsky | 78 | times transfers control to the KConsole immediately. Because the screen is not |
150 | palkovsky | 79 | updated, the user should press Enter to see the kconsole prompt. |
143 | palkovsky | 80 | |
81 | If a kernel panic occurs, the error handling automatially switches control |
||
82 | 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 |
||
84 | contains its symbol table, so you can probably read some useful information |
||
144 | palkovsky | 85 | about the exact place where the panic occured. |
152 | palkovsky | 86 | |
87 | \section{How to Do a Kernel Panic} |
||
88 | Kernel panic is extremely rare in HelenOS. However, if the user wishes to |
||
89 | simulate it, KConsole contains proper commands. For example the following |
||
90 | command simulates a write to the unmapped address 0x4: |
||
91 | \begin{verbatim} |
||
92 | kconsole> set4 4 0 |
||
93 | \end{verbatim} |
||
94 | |||
95 | To test the autodebugging possibilities of the IA32 platform, the following |
||
96 | sequence can be executed: |
||
97 | \begin{verbatim} |
||
98 | kconsole> bkpts |
||
99 | 0. 0x80032010 in (NULL) |
||
100 | Count(0) |
||
101 | kconsole> set4 0x80032010 0 |
||
102 | **** Found ZERO on address 0x0 **** |
||
103 | Reached breakpoint 0:0x8011552a(generic/src/console/cmd.o:cmd_set4) |
||
104 | ***Type 'exit' to exit kconsole. |
||
105 | debug> |
||
106 | \end{verbatim} |
||
107 | |||
108 | |||
109 | \section{KLog} |
||
110 | To avoid disturbing the framebuffer driver with kernel messages, a circular |
||
111 | buffer communication between kernel and userspace area is established. |
||
112 | Non-critical messages are sent to the |
||
113 | KLog application. User can see messages about task faults |
||
114 | and task cleanup completion. |
||
115 | |||
116 | \section{IPCC - testing applicatoin} |
||
117 | To test thouroughly some aspects of the IPC and task |
||
118 | |||
119 | \section{Tetris} |