MOP3 real hardware, theme update
All checks were successful
Build website / build-and-deploy (push) Successful in 1m8s
All checks were successful
Build website / build-and-deploy (push) Successful in 1m8s
This commit is contained in:
@@ -164,7 +164,7 @@ table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoo
|
||||
.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
|
||||
.clearfix:after, .float-group:after { clear: both; }
|
||||
|
||||
*:not(pre) > code { font-size: 0.9375em; padding: 1px 3px 0; white-space: nowrap; background-color: #060606; text-shadow: none; }
|
||||
*:not(pre) > code { font-size: 0.9375em; padding: 1px 3px 0; white-space: nowrap; background-color: #f8f9fa; text-shadow: none; }
|
||||
|
||||
/*pre, pre > code { line-height: 1.4; color: inherit; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }*/
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ body {
|
||||
height: 60px;
|
||||
}
|
||||
#footer {
|
||||
background-color: #060606;
|
||||
background-color: #f8f9fa;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
6757
assets/css/bootstrap.min.css
vendored
6757
assets/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
@@ -1,118 +1,91 @@
|
||||
/*
|
||||
* Derived from einaros's Sons of Obsidian theme at
|
||||
* http://studiostyl.es/schemes/son-of-obsidian by
|
||||
* Alex Ford of CodeTunnel:
|
||||
* http://CodeTunnel.com/blog/post/71/google-code-prettify-obsidian-theme
|
||||
*/
|
||||
/* Code container */
|
||||
pre.prettyprint {
|
||||
background: #f8f9fa;
|
||||
border: 1px solid #dee2e6;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
color: #2d2d2d;
|
||||
}
|
||||
|
||||
.str
|
||||
{
|
||||
color: #EC7600;
|
||||
/* Line numbers */
|
||||
ol.linenums {
|
||||
margin: 0;
|
||||
padding-left: 40px;
|
||||
}
|
||||
.kwd
|
||||
{
|
||||
color: #93C763;
|
||||
}
|
||||
.com
|
||||
{
|
||||
color: #66747B;
|
||||
}
|
||||
.typ
|
||||
{
|
||||
color: #678CB1;
|
||||
}
|
||||
.lit
|
||||
{
|
||||
color: #FACD22;
|
||||
}
|
||||
.pun
|
||||
{
|
||||
color: #F1F2F3;
|
||||
}
|
||||
.pln
|
||||
{
|
||||
color: #F1F2F3;
|
||||
}
|
||||
.tag
|
||||
{
|
||||
color: #8AC763;
|
||||
}
|
||||
.atn
|
||||
{
|
||||
color: #E0E2E4;
|
||||
}
|
||||
.atv
|
||||
{
|
||||
color: #EC7600;
|
||||
}
|
||||
.dec
|
||||
{
|
||||
color: purple;
|
||||
}
|
||||
pre.prettyprint
|
||||
{
|
||||
border: 0px solid #888;
|
||||
}
|
||||
ol.linenums
|
||||
{
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.prettyprint {
|
||||
background: #000;
|
||||
}
|
||||
li.L0, li.L1, li.L2, li.L3, li.L4, li.L5, li.L6, li.L7, li.L8, li.L9
|
||||
{
|
||||
color: #555;
|
||||
|
||||
li.L0, li.L1, li.L2, li.L3, li.L4,
|
||||
li.L5, li.L6, li.L7, li.L8, li.L9 {
|
||||
color: #999;
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
li.L1, li.L3, li.L5, li.L7, li.L9 {
|
||||
background: #111;
|
||||
background: #f1f3f5;
|
||||
}
|
||||
@media print
|
||||
{
|
||||
.str
|
||||
{
|
||||
color: #060;
|
||||
|
||||
/* Syntax elements */
|
||||
.str { /* strings */
|
||||
color: #d47500;
|
||||
}
|
||||
.kwd
|
||||
{
|
||||
color: #006;
|
||||
font-weight: bold;
|
||||
|
||||
.kwd { /* keywords */
|
||||
color: #446e9b;
|
||||
font-weight: 600;
|
||||
}
|
||||
.com
|
||||
{
|
||||
color: #600;
|
||||
|
||||
.com { /* comments */
|
||||
color: #6c757d;
|
||||
font-style: italic;
|
||||
}
|
||||
.typ
|
||||
{
|
||||
color: #404;
|
||||
font-weight: bold;
|
||||
|
||||
.typ { /* types */
|
||||
color: #3399f3;
|
||||
}
|
||||
.lit
|
||||
{
|
||||
color: #044;
|
||||
|
||||
.lit { /* literals */
|
||||
color: #3cb521;
|
||||
}
|
||||
.pun
|
||||
{
|
||||
color: #440;
|
||||
|
||||
.pun { /* punctuation */
|
||||
color: #495057;
|
||||
}
|
||||
.pln
|
||||
{
|
||||
color: #000;
|
||||
|
||||
.pln { /* plain text */
|
||||
color: #2d2d2d;
|
||||
}
|
||||
.tag
|
||||
{
|
||||
color: #006;
|
||||
font-weight: bold;
|
||||
|
||||
.tag { /* HTML tags */
|
||||
color: #446e9b;
|
||||
font-weight: 600;
|
||||
}
|
||||
.atn
|
||||
{
|
||||
color: #404;
|
||||
|
||||
.atn { /* attribute names */
|
||||
color: #6f42c1;
|
||||
}
|
||||
.atv
|
||||
{
|
||||
color: #060;
|
||||
|
||||
.atv { /* attribute values */
|
||||
color: #d47500;
|
||||
}
|
||||
|
||||
.dec { /* decimals */
|
||||
color: #3cb521;
|
||||
}
|
||||
|
||||
/* Print styles */
|
||||
@media print {
|
||||
pre.prettyprint {
|
||||
background: #fff;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.str { color: #060; }
|
||||
.kwd { color: #006; font-weight: bold; }
|
||||
.com { color: #600; font-style: italic; }
|
||||
.typ { color: #404; font-weight: bold; }
|
||||
.lit { color: #044; }
|
||||
.pun { color: #440; }
|
||||
.pln { color: #000; }
|
||||
.tag { color: #006; font-weight: bold; }
|
||||
.atn { color: #404; }
|
||||
.atv { color: #060; }
|
||||
}
|
||||
|
||||
BIN
assets/img/HP_t730_1.jpg
Normal file
BIN
assets/img/HP_t730_1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 MiB |
BIN
assets/img/HP_t730_2.jpg
Normal file
BIN
assets/img/HP_t730_2.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 MiB |
BIN
assets/img/MOP3_video_test.mp4
Normal file
BIN
assets/img/MOP3_video_test.mp4
Normal file
Binary file not shown.
BIN
assets/img/T730_boot_Options.jpg
Normal file
BIN
assets/img/T730_boot_Options.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.4 MiB |
79
content/blog/MOP2/MOP3-real-hardware.adoc
Normal file
79
content/blog/MOP2/MOP3-real-hardware.adoc
Normal file
@@ -0,0 +1,79 @@
|
||||
= Running my kernel on real hardware
|
||||
Kamil Kowalczyk
|
||||
2026-02-08
|
||||
:jbake-type: post
|
||||
:jbake-tags: MOP2 osdev
|
||||
:jbake-status: published
|
||||
|
||||
Developing a custom operating system is notoriously difficult. These days we have awesome developer tools
|
||||
such as QEMU or Bochs. Despite that, those tools can sometimes turn out to be faulty or simply not show the entire
|
||||
truth about the running OS - especially QEMU, which while works, is a little too loose and allows for some
|
||||
correctness issues to slip in (in regards to CPU features, stack alignment, device drivers and so on).
|
||||
Because of that, it's very important to test once in a while on real hardware - the code MUST be correct for it to
|
||||
work.
|
||||
|
||||
At the end I'll tell a short and funny story about my personal experience with QEMU ;).
|
||||
|
||||
== In search for the right hardware
|
||||
|
||||
**Of course we're talking about x86/PC machines here**
|
||||
|
||||
The right hardware will be either very easy or really difficult to buy depending on what platform you're
|
||||
developing for.
|
||||
|
||||
If your OS is 32 bit (ie. runs on i386-based machines) then you've got a problem. 32 bit machines
|
||||
are hard to get these days and are quite expensive due to their high collector value and vintage/retro freaks
|
||||
willing to overpay for this electronic scrap. I myself own 2 32 bit intel machines - Pentium S and the OG i386DX,
|
||||
but they barely work and I doubt they could handle constantly smashing the reset button and rebooting.
|
||||
|
||||
64 bit machines are more modern (duh!) and thus you get a lot of quality-of-life features like USB booting,
|
||||
which is miles better than writing floppies or CD disks, just to find out your kernel doesn't work and discard
|
||||
them, producing a mound of plastic garbage in the process.
|
||||
|
||||
Just because a machine is 64 bit, it doesn't make it better for development! A CPU is not everything, it is rather
|
||||
just one of many puzzle pieces, which make up the entirety of the PC. This is why you have to mind what
|
||||
peripherals your machine offers. A lot of modern PCs don't have legacy PS/2 ports or a serial port - and you
|
||||
can forget about LPT (rip). Everything is USB these days, which means that to have some simple debug printing
|
||||
(or just any output for that matter) you will need a graphics driver or a USB driver to send data. As you can
|
||||
imagine, this is really difficult to have when your OS is taking it's baby steps, while a serial PC driver is
|
||||
like 30 lines of code. That's why it's important to have these simple, primitive, yet super useful peripherals
|
||||
available.
|
||||
|
||||
=== HP Thin Client T730
|
||||
|
||||
++++
|
||||
<img src="/img/HP_t730_1.jpg" width="500px" height="500px" alt="HP T730" />
|
||||
<img src="/img/HP_t730_2.jpg" width="500px" height="500px" alt="HP T730" />
|
||||
++++
|
||||
|
||||
This is my machine of choice for this project. It's 64 bit, has all the cool legacy peripherals (a serial port
|
||||
most importantly) and is very small/light. As you can see it easily fits on my table and doesn't require too much
|
||||
space. Also a big plus is that if I get bored of OS dev eventually, I can use it as a secondary node in my home
|
||||
cloud infra.
|
||||
|
||||
Specs include:
|
||||
|
||||
* 32 GB hard drive; I can mount it out and use a bigger SSD, but I don't need to for now
|
||||
* AMD RX-427BB
|
||||
* 8 GB of RAM
|
||||
* 2 serial ports
|
||||
* LPT port
|
||||
* PS/2 mouse and keyboard
|
||||
|
||||
Overall this mini PC is a big steal! It was only ~ 250 PLN or ~ 70 USD!
|
||||
|
||||
++++
|
||||
<img src="/img/T730_boot_Options.jpg" width="500px" height="500px" alt="HP T730 boot options" />
|
||||
++++
|
||||
|
||||
Also this BIOS feature is really important to me - multiprocessor or SMP support on/off. This is amazing for
|
||||
testing the correctness of SMP code, both in single core and multi core environment. May seem like a basic thing,
|
||||
but actually not many BIOSes support this.
|
||||
|
||||
== Showcase
|
||||
|
||||
++++
|
||||
<video width="800px" controls>
|
||||
<source src="/img/MOP3_video_test.mp4" type="video/mp4" />
|
||||
</video>
|
||||
++++
|
||||
Reference in New Issue
Block a user