Subversion Repositories HelenOS-doc

Rev

Rev 150 | Rev 154 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. \chapter{Running HelenOS}
  2.  
  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.
  16. It allows user to interact directly with the kernel and even start directly
  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
  22. 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
  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:
  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}
  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:
  50. \begin{description}
  51. \item[symaddr $<$address$>$] --- Finds an address in symbol table and prints appropriate
  52. symbol name.
  53. \item[call0, call1... $<$function$>$ $<$args...$>$] --- Calls a C function function(args...).
  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
  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
  61. the given address: call2 printf "%X" *0x8000000
  62.   \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
  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}
  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}
  74. It may happen that the IPC communication dies or that there appear some
  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
  78. times transfers control to the KConsole immediately. Because the screen is not
  79. updated, the user should press Enter to see the kconsole prompt.
  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
  85. about the exact place where the panic occured.
  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}