<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>miku_JK_Jbのブログ</title>
<link>https://ameblo.jp/miku-jk-jb/</link>
<atom:link href="https://rssblog.ameba.jp/miku-jk-jb/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>Youtubeの撮影の裏側や、自作OSの開発の進捗状況を書いていく</description>
<language>ja</language>
<item>
<title>高校生の間に自作OSの開発はどこまで進んだのか？</title>
<description>
<![CDATA[ <p>はい、<b style="font-weight:bold;">miku_JK_Jb</b>です。<br><br>今回は<b style="font-weight:bold;">高校生の間に自作OSの開発はどこまで進んだのか</b>について話していくよ<br><br>現状はこんな感じに動作する<br><a href="https://stat.ameba.jp/user_images/20260323/00/miku-jk-jb/f7/cb/j/o1080081015763384797.jpg"><img alt="image" height="315" src="https://stat.ameba.jp/user_images/20260323/00/miku-jk-jb/f7/cb/j/o1080081015763384797.jpg" width="420"></a><br><br>前回のブログやYouTubeで紹介したように、<b style="font-weight:bold;">起動した後にライブラリの改変を一切していないFreeTypeが起動して、多言語で「こんにちは 世界」が描画される</b>ようになっているよ。<br><br><b style="font-weight:bold;">今の自作OSのプロセスはこんな感じ</b><br><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはブートローダーのプロセスから</b></span><br><br><b style="font-weight:bold;">ブートローダーが起動<br>↓<br>Simple File Systemを開いて起動ドライブのルートを取得<br>↓<br>起動ドライブの&nbsp;BlockIo&nbsp;を取得<br>↓<br>FAT32 を読んで自作OSのRootの位置を特定<br>↓<br>起動ボリュームの内容をスナップショット(1GB, 512MB, 386MB, 256MBと段階的にフォールバック)<br>↓<br>GOP を取得して、画面情報&nbsp;FrameBufferConfig&nbsp;を作成<br>↓<br>必要なら&nbsp;BltOnly&nbsp;ではない描画可能モードへ切り替え<br>↓<br>自作OSのカーネルを読み込む<br>↓<br>ELF を解析して、high-half カーネルセグメントを物理メモリ上に展開<br>↓<br>カーネルのエントリポイント、配置先物理アドレス、仮想ベースアドレス、サイズを確定<br>↓<br>handoff バッファを作成<br>↓<br>handoff バッファにUEFIメモリマップ,&nbsp;BootVolume,&nbsp;UefiMemoryMap,&nbsp;BootFileTable<br>↓<br>プリロードの設定ファイルを読み込んで、必要な共有ライブラリなどを読み込んで、BootFileTableに登録<br>↓<br>新しいページテーブルを作成<br>↓<br>物理メモリの identity map と high-half direct map を作る<br>↓<br>カーネル本体、フレームバッファ、handoff 領域もそのページテーブルにマップ<br>↓<br>カーネル用の一時スタックを確保<br>↓<br>ExitBootServices&nbsp;を実行して UEFI のブートサービスを終了<br>↓<br>CR3&nbsp;を新しいページテーブルへ切り替える<br>↓<br>handoff の high-half アドレスを引数にして、カーネルエントリへジャンプ<br>↓<br>カーネル側が handoff を読んで初期化開始</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">これがブートローダーのプロセスだ</b></span><br><br><b style="font-weight:bold;">次はカーネルの動作プロセスを紹介する<br><br>ブートローダーから handoff を受け取ってカーネルメインが開始<br>↓<br>シリアル初期化<br>↓<br>handoff のアドレスを検証<br>↓<br>HandoffHeader&nbsp;を読み取り、マジック番号とバージョンを検証<br>↓<br>handoff から以下の情報を復元(UEFIメモリマップ, FrameBufferConfig,&nbsp; BootVolume,&nbsp; UefiMemoryMap, BootFileTable)<br>↓<br>ブートローダーが作ったページテーブル情報を引き継ぐ<br>↓<br>BootVolume.snapshot&nbsp;の領域を identity map + linear map する<br>↓<br>IDT を再初期化<br>↓<br>FPU / SSE / XCR0 を初期化<br>↓<br>システムコールテーブルを初期化<br>↓<br>自作の動的リンカーの IRELATIVE 再配置を確定<br>↓<br>syscall 機構を初期化<br>↓<br>glibc / FreeType 用の TLS 領域を確保して FS ベースを設定<br>↓<br>VFS(仮想ファイルシステム) を初期化<br>↓<br>PCI を初期化<br>↓<br>VFS のディスクルートを自作OSのRootに設定<br>↓<br>BootVolume&nbsp;を使ってディスクバックド VFS を接続<br>↓<br>フレームバッファを初期化<br>↓<br>自作の動的リンカーを初期化<br>↓<br>ブートローダーから渡された&nbsp;BootFileTable&nbsp;を自作の動的リンカーに登録<br>↓<br>システムライブラリをロード<br>↓<br>ユーザー空間や必要な共有ライブラリが使えるか確認<br>↓<br>ユーザー空間のグラフィックを初期化<br>↓<br>GUI が使える場合はデスクトップ環境を初期化<br>↓<br>設定されているデスクトップUIのモードを呼ぶ<br>↓<br>デスクトップUIの描画<br>↓<br>多言語デモの実行</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">これがカーネルの動作プロセスだ</b></span><br><br><b style="font-weight:bold;">他にもxHCIのUSBドライバを高校生の間に作成した。<br><br>ブートローダーは高校1～高3まで<br>ブートローダーはセキュアブートに対応している。<br><br>カーネルも高1~高3まで開発してここまで出来た。</b><br>とはいってもカーネルの開発は主に高3だったけどね<br><br><b style="font-weight:bold;">特にブートローダーと動的リンカーの作成で気が狂いそうになった</b>。<br><br><b style="font-weight:bold;">ブートローダーでは、スナップショットを取得してカーネル側で1次キャッシュ(L1)として使用するのだが、EFIのメモリやスタック不足による start_image() Out of Resourcesに悩まされた。今では1GB, 512MB, 386MB, 256MBに段階的にフォールバックするようにしている。<br>また、ブートローダーの機能を盛り込み過ぎてもstart_image() Out of Resourcesが出てしまうので、どこを消そうか、どこを残そうかの取捨選択で迷った。<br><br>動的リンカーでは、FreeTypeはLinux上で動く前提で作られているので、<font face="monospace">malloc</font>も<font face="monospace">errno</font>も当然あるものとして呼んでくる。なので自作OSに自前で実装したが、動かせるまでが大変だった。さらにglibcが使っているIFUNCという仕組みがあり、CPUの環境に応じて最適な実装を実行時に切り替える機能があるのだが、これをカーネル環境でそのまま呼ぶとクラッシュするので、安全な実装に差し替える処理を実装したり、FreeTypeだけじゃなく、FreeTypeの依存ライブラリ<code>libz<font face="-apple-system, BlinkMacSystemFont, sans-serif">,&nbsp;</font>libpng<font face="-apple-system, BlinkMacSystemFont, sans-serif">,&nbsp;</font>brotli<font face="-apple-system, BlinkMacSystemFont, sans-serif">,&nbsp;</font>harfbuzzをロード順を間違えただけでもクラッシュする。などといった。Linux互換の壁を非常に感じた。</code></b><br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">今後は自作OSに高校の間に作成したxHCIのUSBドライバをぶち込んで、マウスやキーボードに対応したり、Linuxアプリなどを動かせるようにしていきたい。<br>あとはインターネットに接続できるようにしたりとかね</span><br><br>これが高校生の間に自作OSの開発がどこまで進んだのかについて解説するブログでした</b><br>と言うことで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした</p>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12962102613.html</link>
<pubDate>Mon, 06 Apr 2026 01:23:56 +0900</pubDate>
</item>
<item>
<title>高校生が自作OSをライブラリの改変なしでFreeType経由で文字を描画できるようになった話</title>
<description>
<![CDATA[ <p>はい、<b>miku_JK_Jb</b>です<br>今回は<span style="color:#ff0000;"><b style="font-weight:bold;">自作OSをフォントの描画に対応させた</b></span>作業について解説していくよ。<br>このブログはかなり読み応えがあるからね。</p><p>&nbsp;</p><p>先に見せるとこんな感じ</p><div><a href="https://stat.ameba.jp/user_images/20260323/00/miku-jk-jb/f7/cb/j/o1080081015763384797.jpg"><img alt="" border="0" height="300" src="https://stat.ameba.jp/user_images/20260323/00/miku-jk-jb/f7/cb/j/o1080081015763384797.jpg" width="400"></a></div><p><br>フォントの描画をできるようにする前に前回のブログで話した<br><span style="font-size:1.4em;"><span style="color:#ff7f00;"><b style="font-weight:bold;">カーネル空間とユーザー空間の分離について</b></span></span>解説しよう<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff7f00;">最初にカーネル空間とユーザー空間は何なのか</span></b>について解説する</span><br>まずはカーネル空間について解説する<br><b style="font-weight:bold;"><span style="font-size:1.4em;">カーネル空間が行う処理はこんな感じだ</span></b></p><ul><li><!--StartFragment --><b style="font-weight:bold;">メモリ管理(</b><!--StartFragment --><b style="font-weight:bold;">どのプロセスがどの領域を使うかを割り当て、不要になった領域を解放する<!--EndFragment -->)</b></li><li><b style="font-weight:bold;">プロセス管理(</b><b style="font-weight:bold;">複数のプログラムが同時に動けるようにスケジューリングを行う<!--EndFragment -->)</b></li><li><b style="font-weight:bold;">ドライバ管理(キーボードやディスクなどをアプリで使えるようにする)</b></li></ul><div><b style="font-weight:bold;">全体的にOS全体を包括する</b>様な感じだ。<br><span style="color:#ff0000;"><b style="font-weight:bold;">カーネルはOSの心臓で、ユーザー空間を支える基盤</b></span>といったものだ<br><br>次にユーザー空間について解説する<br><span style="font-size:1.4em;"><b style="font-weight:bold;">ユーザー空間が行う処理はこんな感じだ</b></span></div><ul><li><b style="font-weight:bold;">アプリが動作する領域</b></li><li><b style="font-weight:bold;"><!--StartFragment -->プログラムは直接ハードウェアにアクセスできないのでシステムコールなどを使用する</b></li><li><b style="font-weight:bold;">セキュリティや安定性のため制限が掛かっている</b></li></ul><div>今見ているアメブロやYouTubeなどはユーザー空間で動作しているのだ<br><br><span style="font-size:1.4em;"><span style="color:#ff7f00;"><b style="font-weight:bold;">では何故カーネル空間とユーザー空間を分離するのかについて解説する</b></span></span><br>分離する理由は<span style="font-size:1em;"><b style="font-weight:bold;"><span style="color:#ff0000;">主に安定性</span></b></span>だ。<br><b style="font-weight:bold;">もしユーザー空間が暴走したとしても分離されているとカーネルにまで影響が起こらない</b>。また、<b style="font-weight:bold;">カーネルが守られているのでOS全体のクラッシュを防ぐことができる</b>のだ。<br>他にも<span style="color:#ff0000;"><b style="font-weight:bold;">効率性が上がる</b></span>のだ<br><b style="font-weight:bold;">これはカーネルとユーザー空間側の役割が分担されるんでそれぞれを<span style="color:#ff0000;">最適化</span>をしやすいのだ。</b></div><div>&nbsp;</div><div><b style="font-weight:bold;"><span style="font-size:1.4em;">それでは作業について解説していこう</span></b><br><br><span style="font-size:1.4em;"><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはユーザー空間側での画面描画だ</b></span></span><br>これは<b style="font-weight:bold;">ユーザー空間でUIの描画を行う準備</b>だ</div><div><b style="font-weight:bold;">ユーザー空間で画面描画を行うためにカーネル空間とユーザー空間のソースコードの分離などを行った。</b><br>また、<b style="font-weight:bold;">カーネル空間では描画の高速化を図るバックバッファの処理だけを残した。</b><br>ユーザー空間での画面描画は前回のブログのソースコードをそのまま使えるので使った。<br><b style="font-weight:bold;">で、ユーザー空間で描いたものはこんな感じだ</b></div><div><a href="https://stat.ameba.jp/user_images/20251110/21/miku-jk-jb/09/66/j/o5712428415713566489.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20251110/21/miku-jk-jb/09/66/j/o5712428415713566489.jpg" width="420"></a></div><div><span style="color:#ff0000;"><b style="font-weight:bold;">この画面はUIの開発と何らかの理由でデスクトップ画面の背景が映せない場合のみに代わりとなる背景だ</b></span><br><a href="https://stat.ameba.jp/user_images/20251110/22/miku-jk-jb/d9/b2/j/o4280354315713580342.jpg"><img alt="" height="348" src="https://stat.ameba.jp/user_images/20251110/22/miku-jk-jb/d9/b2/j/o4280354315713580342.jpg" width="420"></a><br>この本を使って<span style="color:#00afff;"><b style="font-weight:bold;">背景カラーの色</b></span>を選んだ<br>色は江戸切子だ<br><br><b><font size="5">これでユーザー空間側での画面描画の処理とUIを作る準備は終了</font></b></div><div>&nbsp;</div><div><b><font size="5">次は<font color="#ef8632">フォントの描画が処理をできるようにした</font>ことについて解説する</font></b></div><div>やっと本題に入ったってことだ</div><div>&nbsp;</div><div><font size="5"><b>まずは最初に行ったのは勿論の事設計だ</b></font></div><div><div><a href="https://stat.ameba.jp/user_images/20251115/18/miku-jk-jb/85/2c/j/o1080130415717319784.jpg"><img alt="" border="0" height="482" src="https://stat.ameba.jp/user_images/20251115/18/miku-jk-jb/85/2c/j/o1080130415717319784.jpg" width="400"></a></div><p>今は設計もPCなどでできるが私は紙で行った方が考えが浮かびやすい</p><p>&nbsp;</p><p><font color="#ea3323" size="5"><b>フォントの描画つまり文字表示で問題になるのが多言語化だ</b></font></p><p>&nbsp;</p><p>これは<b style="font-weight:bold;">設計図にもある通り各言語(β版では主にメジャー)の.langファイルを使用して多言語化を行う</b></p><p><a href="https://stat.ameba.jp/user_images/20251129/21/miku-jk-jb/a6/4d/p/o1115013115724684376.png"><img alt="" height="49" src="https://stat.ameba.jp/user_images/20251129/21/miku-jk-jb/a6/4d/p/o1115013115724684376.png" width="420"></a><br><span style="color:#ff7f00;"><b style="font-weight:bold;"><span style="font-size:1.4em;">自作OSの多言語化は最初にテストで10言語で「こんにちは 世界」と表示できるようにする</span></b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">まずは.langファイルの作成だ</b></span><br>写真にあるように<b style="font-weight:bold;">スプレッドシートで各言語を書き、JSONファイルに変換、<br>その後Pythonを使用してJSONファイルを読み込ませてKey配列を取得し、各言語ごとに.langファイルを作成するようにした</b><br><!-- notionvc: 466abea0-3fd8-4bd8-b2aa-2f880dd21bd0 --><br>スプレッドシートから.langファイルの変換はこのサイトを利用した<br>↓</p><div class="ogpCard_root"><article class="ogpCard_wrap" contenteditable="false" style="display:inline-block;max-width:100%"><a class="ogpCard_link" data-ogp-card-log="" href="https://hep.eiz.jp/article/convert-json-tool/" rel="noopener noreferrer" style="display:flex;justify-content:space-between;overflow:hidden;box-sizing:border-box;width:620px;max-width:100%;height:120px;border:1px solid #e2e2e2;border-radius:4px;background-color:#fff;text-decoration:none" target="_blank"><span class="ogpCard_content" style="display:flex;flex-direction:column;overflow:hidden;width:100%;padding:16px"><span class="ogpCard_title" style="-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;max-height:48px;line-height:1.4;font-size:16px;color:#333;text-align:left;font-weight:bold;overflow:hidden">Excelから貼り付けてJSONに変換するツール。入れ子にも対応 | Hep Hep!</span><span class="ogpCard_description" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.6;margin-top:4px;color:#757575;text-align:left;font-size:12px">ExcelデータからJSONに変換するためのツール。エクセル、またはGoogleスプレッドシートでJSON形式に対応したデータをコピーして貼り付けるだけで簡単にJSONデータを作成できる便利ツール。</span><span class="ogpCard_url" style="display:flex;align-items:center;margin-top:auto"><span class="ogpCard_iconWrap" style="position:relative;width:20px;height:20px;flex-shrink:0"><img alt="リンク" class="ogpCard_icon" height="20" loading="lazy" src="https://c.stat100.ameba.jp/ameblo/symbols/v3.20.0/svg/gray/editor_link.svg" style="position:absolute;top:0;bottom:0;right:0;left:0;height:100%;max-height:100%" width="20"></span><span class="ogpCard_urlText" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#757575;font-size:12px;text-align:left">hep.eiz.jp</span></span></span><span class="ogpCard_imageWrap" style="position:relative;width:120px;height:120px;flex-shrink:0"><img alt="" class="ogpCard_image" data-ogp-card-image="" height="120" loading="lazy" src="https://hep.eiz.jp/wp-content/uploads/2025/03/convert-json-tool.jpg" style="position:absolute;top:50%;left:50%;object-fit:cover;min-height:100%;min-width:100%;transform:translate(-50%,-50%)" width="120"></span></a></article></div><p><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">これでひとまず.langファイルを作成することができた</b></span></span><br><a href="https://stat.ameba.jp/user_images/20251129/21/miku-jk-jb/20/d1/p/o0294028515724684409.png"><img alt="" height="285" src="https://stat.ameba.jp/user_images/20251129/21/miku-jk-jb/20/d1/p/o0294028515724684409.png" width="294"></a><br><br><b style="font-weight:bold;"><span style="color:#ff7f00;"><span style="font-size:1.4em;">次は自作OSが言語ファイルを取り扱えるようにした</span></span></b><br>さっきは言語ファイルを作っただけだからね😅<br>なので<b style="font-weight:bold;">言語ファイルの読み込み、初期化、終了を行えるようにした。</b><br>後にかなり面倒なことになるんだけどね😓<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">ただ、修正した後もやっていることは変わらないので解説していく</b></span></p><p><br><span style="font-size:1em;"><b style="font-weight:bold;"><span style="color:#ff7f00;">まずは、言語ファイルの読み込みだ</span></b></span><br>これは<b style="font-weight:bold;">仮想のファイルシステムから言語ファイルを読み込み、メモリに展開する処理だ。</b>また、<b style="font-weight:bold;">言語ファイルにある各言語の翻訳も読み込んでいる</b><br>これを行うことによって<b style="font-weight:bold;">自作OSが言語ファイルに触れるようになるのだ</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次は初期化だ</b></span></p><p>これは<b style="font-weight:bold;">内部テーブルをリセットし、日本語ファイルを読み込む処理だ。</b><br>これで<b style="font-weight:bold;">自作OSが多言語に対応する感じだ👍</b><br>また、今<b style="font-weight:bold;">は日本語ファイルを読み込むようにしているが、今後は初期設定で設定された言語を読み込むように変更する</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次は終了だ</b></span><br>これは<b style="font-weight:bold;">言語ファイルがメモリに展開されているので、リセットしてキャッシュを破棄、次回起動時にクリーンな状態から再読み込みできる処理だ。</b><br>これで次に起動するときに前の翻訳された文字などが出なくなるのだ😉<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">これで言語ファイルを自作OSが取り扱えるようになった</span></b><br><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">次はフォントの読み込みと描画だ</b></span></span><br>これも言語ファイルと一緒で後でトラブルが起こるんだけどね😉<br><b style="font-weight:bold;">フォントはかなり前のブログでNotoSansとNotoSansJPを使うことにしたんだよね</b></p><div class="ogpCard_root">&nbsp;</div><div class="ogpCard_root"><article class="ogpCard_wrap" contenteditable="false" style="display:inline-block;max-width:100%"><a class="ogpCard_link" data-ogp-card-log="" href="https://ameblo.jp/miku-jk-jb/entry-12887570376.html" rel="noopener noreferrer" style="display:flex;justify-content:space-between;overflow:hidden;box-sizing:border-box;width:620px;max-width:100%;height:120px;border:1px solid #e2e2e2;border-radius:4px;background-color:#fff;text-decoration:none" target="_blank"><span class="ogpCard_content" style="display:flex;flex-direction:column;overflow:hidden;width:100%;padding:16px"><span class="ogpCard_title" style="-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;max-height:48px;line-height:1.4;font-size:16px;color:#333;text-align:left;font-weight:bold;overflow:hidden">『自作OSのフォントを決めて、インストールした話』</span><span class="ogpCard_description" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.6;margin-top:4px;color:#757575;text-align:left;font-size:12px">はい、miku_JK_Jbです今回は私が開発している自作OSのフォントを決めて、インストールした話をしていこう。最近忙しくて、ブログやYoutube動画の作成…</span><span class="ogpCard_url" style="display:flex;align-items:center;margin-top:auto"><span class="ogpCard_iconWrap" style="position:relative;width:20px;height:20px;flex-shrink:0"><img alt="リンク" class="ogpCard_icon" height="20" loading="lazy" src="https://c.stat100.ameba.jp/ameblo/symbols/v3.20.0/svg/gray/editor_link.svg" style="position:absolute;top:0;bottom:0;right:0;left:0;height:100%;max-height:100%" width="20"></span><span class="ogpCard_urlText" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#757575;font-size:12px;text-align:left">ameblo.jp</span></span></span><span class="ogpCard_imageWrap" style="position:relative;width:120px;height:120px;flex-shrink:0"><img alt="" class="ogpCard_image" data-ogp-card-image="" height="120" loading="lazy" src="https://stat.ameba.jp/user_images/20250223/20/miku-jk-jb/74/7f/p/o1919092315547508390.png" style="position:absolute;top:50%;left:50%;object-fit:cover;min-height:100%;min-width:100%;transform:translate(-50%,-50%)" width="120"></span></a></article></div><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20250223/20/miku-jk-jb/74/7f/p/o1919092315547508390.png"><img alt="" height="202" src="https://stat.ameba.jp/user_images/20250223/20/miku-jk-jb/74/7f/p/o1919092315547508390.png" width="420"></a><br>使い分けとしては、<b style="font-weight:bold;">日本語はNotoSansJPをそれ以外の言語はNotoSansで分けている</b><br>本当は日本語、韓国語、中国語を一緒にしたNotoSansCJKを使いたかったが何故か見つけることができなかったので、NotoSansJPで日本語専門、それ以外の言語はNotoSansと言う使い分けになってしまった。<br><b style="font-weight:bold;"><span style="color:#ff7f00;">また、フォントの描画にはFreeTypeを使用する</span></b><br>FreeTypeとは、NotoSans達はビットマップフォントではなく、OTFやTTFフォントだ<br>それら(OTF、TTFフォント)を読み込んで画面に描画するためのフォントエンジンだ。<br>MacやiOS、Android、ChromeOSにも使われている。有名な奴だ<br><b style="font-weight:bold;">ちなみにFreeTypeのラインセンスは2つあってGPLv2とFTLだ。</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">勿論私はFTLを選択した。</b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">それじゃあフォントの読み込みと描画処理について解説する</b></span><br><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはフォントの読み込みだ</b></span><br>これは<b style="font-weight:bold;">言語ファイルみたいに仮想のファイルシステムからフォントを探して読み込み、メモリ上に展開する。</b>また、<b style="font-weight:bold;">フォントは日本語はNotoSansJPをそれ以外の言語はNotoSansをメモリ上に展開する。</b><br>これを行うことによって描画するためのフォントの準備が整う👍<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次はフォントの描画だ</b></span><br>これは<b style="font-weight:bold;">後ほど解説する動的リンカーからFreeTypeを読み込み、UTF-8,16,32をデコードして、描画する。フォントの描画も図形の描画と一緒で</b><b>バックバッファ(画面の裏)で先に描画し、画面の幅や内部幅が一致したなら描画した物を一気にまとめてコピーし、表示するようにしている</b><br>これを行うことで自作OSがフォントを描画することができるのだ😁<br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">次はフォントの各種設定だ</span></b><br>これは<b style="font-weight:bold;">サイズの変更、太字、下線、イタリック、取り消し線、簡易的な色覚補正だ。</b><br>まあ、フォントの大きさだったり、色だったり、書き方を変更する感じだね<br>これで様々な文字に対応することができるね🥹<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これで自作OSはフォントを描画できるようになるはずだ</b></span></p><p><b style="font-weight:bold;"><span style="color:#ff0000;"><span style="font-size:1.4em;">ただ、自作OSはFreeTypeを動的リンクで動かしている。</span></span></b><br><span style="font-size:1.4em;"><b style="font-weight:bold;">そしてglibcも動的リンクだ。<br>だからカーネルに動的リンクのライブラリーを読み込ませる必要がある。</b></span><br><span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">そのために動的リンカーを作成した</span></b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">それじゃあ動的リンカーの処理について解説する</b></span><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはライブラリの管理だ</b></span><br>これは<b style="font-weight:bold;">指定されたファイルパスにある共有ライブラリをメモリに読み込み、実行可能にする処理だ。</b><br>この処理を行うことで動的ローダーの内部状態を初期化して、ライブラリをロードする準備が整うのだ😁<br>&nbsp;</p><p><span style="color:#ff7f00;"><b style="font-weight:bold;">次にライブラリのロード</b></span><br>これは<b style="font-weight:bold;">指定されたパスのファイルを読み込み、ファイルサイズを取得してメモリに割り当て、ファイルが有効なELF形式で共有オブジェクトかを検証、ELFのプログラムヘッダーを解析し、ライブラリのロードに必要なメモリ領域を計算・確保し、ファイルの内容をそのメモリ領域にコピー、共有ライブラリを任意のメモリ位置にロードできるようにし、ロードされたライブラリの情報を格納する処理だ。</b><br>これでカーネルや他のアプリが、そのライブラリの機能を利用するための基盤が構築されるのだ。<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にシンボルの解決だ</b></span><br>これは<b style="font-weight:bold;">ロードされたライブラリハンドルとシンボル名を受け取り、ライブラリ内の ダイナミックシンボルテーブルと文字列テーブルを走査。シンボル名が一致した場合、シンボルの値にライブラリのベースアドレスを加えてその関数/データの実アドレスを計算して返す処理だ。</b><br>この処理を行うことでアプリは名前ではなくアドレスを通じて、そのライブラリの機能を直接呼び出すことができるようになるのだ。<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にライブラリのアンロード</b></span><br>これは<b style="font-weight:bold;">指定されたライブラリハンドルに関連付けられたメモリを解放する処理だ。</b><br>この処理を行うことでアプリがライブラリの使用を終了した後も、メモリが効率的に再利用されるようになるのだ。<br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">最後にシステムライブラリのロード</span></b><br>これは<b style="font-weight:bold;">OSの動作に不可欠な以下のライブラリをロードし、特定の関数のポインタをグローバル変数に解決する処理だ。</b><br>この処理を行うことで<b>標準的なC/C++の機能</b>や、<b>フォント描画</b>などの高度な機能にアクセスできるようになるのだ。<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">これが動的リンカーの処理と実装だ！！</span></b><br>かなりてんこ盛りな処理でしょ😁<br>くっそ大変だったわ🤪<br><br><span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">これで自作OSがフォントを描画できるようになるはず！！</span></b></span><br><a href="https://stat.ameba.jp/user_images/20251110/21/miku-jk-jb/09/66/j/o5712428415713566489.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20251110/21/miku-jk-jb/09/66/j/o5712428415713566489.jpg" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;">ってあれ？？</b></span><br><b style="font-weight:bold;"><span style="font-size:1.4em;">フォントが表示されない...<br><br>シリアルログを見てみると</span></b></p><p><a href="https://stat.ameba.jp/user_images/20251202/21/miku-jk-jb/e6/a7/p/o1916086215725860180.png"><img alt="" contenteditable="inherit" height="189" src="https://stat.ameba.jp/user_images/20251202/21/miku-jk-jb/e6/a7/p/o1916086215725860180.png" width="420"></a></p><p><a href="https://stat.ameba.jp/user_images/20251202/21/miku-jk-jb/7a/6f/p/o1896038015725860213.png"><img alt="" height="84" src="https://stat.ameba.jp/user_images/20251202/21/miku-jk-jb/7a/6f/p/o1896038015725860213.png" width="420"></a></p><p><span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">言語ファイルとFreeTypeの読み込みに失敗している！！</span></b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">原因は？</b></span><br><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">ブートローダーが受け渡すexFAT情報を使っていなかった<br>Rootディレクトリを開くことができていなかった(こいつが中々の難敵だった)</b></span></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">ってことで直していこうか</b></span><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはブートローダーの修正だ</b></span><br>これは<b style="font-weight:bold;">exFAT の BPB を解析し、FAT/クラスタヒープ/ルートクラスタなどのメタ情報<!-- notionvc: 9ad7dff8-46e6-441b-b984-6a4815dc27fa -->をブートのボリュームに追加。EFIのBlock-IOからボリューム全体をメモリへスナップショットし、その物理アドレスとサイズを格納してカーネルへ渡すようにした</b><br>これを行うことによって<b style="font-weight:bold;">メタデータ提供: exFATの構造情報をブートボリュームに詰めることでカーネルの構造解析時間を短縮。ディスク全体をスナップショットすることで、ディスクファイルシステムは物理I/Oコードを必要とせず、単なるメモリアクセスとして動作できるになるのだ😁</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次に共有ヘッダーの拡張だ</b></span><br>これは<b style="font-weight:bold;">ブートローダーとカーネルで共通に使う<!-- notionvc: c61a98d3-45c7-4a92-9cbb-9474a591a94d -->構造体を拡張<!-- notionvc: 0cec460b-e168-42a1-8c2b-06a664e1e0c9 -->させた</b><br>これを行うことによって<b style="font-weight:bold;">ブートローダー側とカーネル側の開発を完全に分離でき、構造体を拡張することにより、カーネルとブートローダーの整合性を保証できるのだ</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にRootディレクトリをカーネル側でも開けられるように修正</b></span><br>これは<b style="font-weight:bold;">スナップショットメモリを使ってセクタ読み込みを行い、exFAT の FAT チェイン・ディレクトリを解析して&nbsp;<!-- notionvc: a4584cce-dd85-4865-9290-ad35ec614d9e -->Rootディレクトリを開けるようにした。</b><br>また、<span style="color:#ff0000;"><b style="font-weight:bold;">私の自作OSはRootを仮想化しているので、</b></span><b style="font-weight:bold;">仮想ファイルシステムがインメモリだけでなく、ヒットしなかったパスを<!-- notionvc: a4d6b31e-f838-4b39-bdc8-4f99c784665a -->ディスクファイルシステムに任せる仕組みを作成した</b><br>これを行うことによって<b style="font-weight:bold;">メモリ上のアドレス指定でセクタの読み書きをエミュレートできるから、非常に高速なファイルアクセスが可能になる。また、Rootの仮想化ができ、インメモリファイルと物理ディスクファイルを統合することができるのだ</b><br>これが修正の中で一番大変だった🥺<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">最後にカーネルで</b></span><br>これは<b style="font-weight:bold;">カーネルが起動したら仮想ファイルシステムを起動させてディスクファイルシステムを有効にしてからユーザー空間に移るようにした</b><br>これを<b style="font-weight:bold;">行うことによってカーネルが起動に必要なファイルを読み込むことが可能になるのだ。</b><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これが行った修正だ！！</b></span><!-- notionvc: b942d201-9afb-40b7-ad30-279561f38766 --></p><p>これも中々大変だったわ</p><p><br><b style="font-weight:bold;"><span style="color:#ff0000;"><span style="font-size:1.4em;">それじゃあ多言語化が可能になったか見ていこう！！</span></span></b><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">結果は？</span></b><br><a href="https://stat.ameba.jp/user_images/20260114/02/miku-jk-jb/98/f8/p/o1586108015740686950.png"><img alt="" height="286" src="https://stat.ameba.jp/user_images/20260114/02/miku-jk-jb/98/f8/p/o1586108015740686950.png" width="420"></a></p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">あーー🤦</b></span></p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">ダメだ</b></span><br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">起こっている問題はstart_image() returned Out of Resourcesだね</span></b><br>これは<b style="font-weight:bold;">UEFIでメモリ不足が起こっていたり、スタック不足でする際に起こるエラーだ</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">原因は</b></span><b style="font-weight:bold;">ブートローダーのスナップショットをボリューム全体にしていたのだが</b></p><p><b style="font-weight:bold;">実機検証などで使っている<span style="color:#ff0000;">ASUS P8Z77-Vのマザボは初期のUEFIを搭載していてメモリマップがかなりシビアなものだから、メモリ不足などが発生してしまい、</span>結果的にstart_jmage() returned Out of Resourcesが出てしまった</b>というわけだ<br><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">それじゃあ直していこう！！</b></span></span><br><span style="font-size:1.4em;"><b style="font-weight:bold;">修正する場所はブートローダーだ</b></span></p><p>&nbsp;</p><p><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはスナップショット数をボリューム全体から1GBにまでサイズをダウンして見た</b></span><br><br><b style="font-weight:bold;">結果は案の定start_image() returned Out of Resourcesだった</b></p><p><a href="https://stat.ameba.jp/user_images/20260114/02/miku-jk-jb/98/f8/p/o1586108015740686950.png"><img alt="" height="286" src="https://stat.ameba.jp/user_images/20260114/02/miku-jk-jb/98/f8/p/o1586108015740686950.png" width="420"></a><br>&nbsp;</p><p><span style="color:#ff7f00;"><span style="font-size:1em;"><b style="font-weight:bold;">それならば極端ではあるがスナップショットのサイズを256MBに下げて見た</b></span></span><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">結果は</b></span></p><p><a href="https://stat.ameba.jp/user_images/20251110/21/miku-jk-jb/09/66/j/o5712428415713566489.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20251110/21/miku-jk-jb/09/66/j/o5712428415713566489.jpg" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;">FreeType経由でフォントや文字の描画がされていないが起動はした</b></span><br><br><span style="color:#ff0000;"><b style="font-weight:bold;">FreeTypeが動作しない原因は</b></span><b style="font-weight:bold;">スナップショットを256MBにしたせいでFreeTypeがいる475MBの場所が範囲外であったため<br>動作がしなかった。</b>うん。みんなは1GBから急に256MBに下げたりしないで段階的に量を減らしていくんだぞ。ダイエットと同じだ<br><br><span style="color:#ff7f00;"><span style="font-size:1.4em;"><b style="font-weight:bold;">ってことでFreeTypeを動かせるようにするために</b></span></span><br><br><b style="font-weight:bold;">スナップショットのサイズを512MBにするのではなく、1GBがダメなら512GB、384MB、256MBにする段階フォールバックを実装した。また、FreeTypeなどが範囲外の場合は仮想ファイルシステムから読み込んで動作させるというバックアップ方式に修正した。<span style="color:#ff0000;">これでちゃんとユーザー空間でFreeTypeが動作し、文字の描画などができるようになるはずだ！！</span></b></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">結果は</span></b></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">動wかwなwいw</span></b></p><p>あー、うぜ〜</p><p>&nbsp;</p><p><b style="font-weight:bold;">でもねフォントの初期化のコードを一時的にコメントアウトして無効化すると</b><br><a href="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/f3/86/j/o1920144015743169976.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/f3/86/j/o1920144015743169976.jpg" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;">デスクトップの表示はできる</b></span><br><span style="font-size:1em;"><b style="font-weight:bold;">デスクトップUIは前回のブログで書いたけど、実はこのフォント描画や動的リンカーの作成の方が長いのである</b><br>時系列バグっててすまんこ</span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">ん？ここでようやく気づいた</b></span><br><span style="font-size:1em;">FreeTypeに必要なライブラリをリンクしてなくね？FreeTypeちゃんずっと寂しい寂しい🥲ってなってたのでは？と<br><br><b style="font-weight:bold;">ってことでFreeTypeが必要としているライブラリを探すと</b></span><br><a href="https://stat.ameba.jp/user_images/20260127/17/miku-jk-jb/ee/a6/p/o1219014215745127029.png"><img alt="" height="49" src="https://stat.ameba.jp/user_images/20260127/17/miku-jk-jb/ee/a6/p/o1219014215745127029.png" width="420"></a><br><b style="font-weight:bold;">libpng16.so.16、libz.so.1、libharfbuzz.so.0、libbrotlidec.so.1、libc.so.6を欲しているらしい</b><br>今の所ロードしているのはlibcとlibmとFreeTypeなので残りのlibpngとlibzとlibharfbuzzとlibbrotlidecを読み込めばいいね<br><br><span style="color:#ff7f00;"><span style="font-size:1.4em;"><b style="font-weight:bold;">ってことで修正します💪</b></span></span></p><p>&nbsp;</p><p><b>修正は単純でFreeTypeやglibcなどと一緒でブートローダーのスナップショットの範囲内であればそのまま動的リンカーを使って読み込み、範囲外であれば仮想ファイルシステムから探して動的リンカーを使って呼び出す方式なのでパスを仮想ファイルシステムとブートローダーでカーネルとライブラリを一緒に読み込ませるファイルに設定した<br>これを行うことにより、</b><b style="font-weight:bold;"><span style="color:#ff0000;">スナップショット内にライブラリがあるとディスクI/Oを発生させずに、すでにメモリ上にあるライブラリをそのまま利用することができ、速度が向上する。</span>また、<span style="color:#ff7f00;">スナップショット内にライブラリが無い場合でも起動直後に必要になったライブラリを仮想ファイルシステム経由で持ってくるので拡張性は損なわない構造になる。</span></b><br><b>従来のOS</b><b style="font-weight:bold;">の起動プロセスでは初期の実行環境から本格的な運用環境に一気に切り替わるが、自分の設計ではその境界をわざと曖昧にしている。</b><br><br><a href="https://stat.ameba.jp/user_images/20260313/15/miku-jk-jb/5f/92/p/o0533009915760104116.png"><img alt="" height="78" src="https://stat.ameba.jp/user_images/20260313/15/miku-jk-jb/5f/92/p/o0533009915760104116.png" width="420"></a><br>↑<br>写真で表すとこんな感じになるね。<br><br><span style="color:#ff0000;"><b style="font-weight:bold;">要するにスナップショットをキャッシュみたいにも扱うという感じ</b></span><br><br><span style="font-size:1.4em;"><b>さあこれで動くようになるか！？<br><br>結果は<br><br><span style="color:#ff0000;">クラッシュ！！</span><br><br>あーうぜー</b></span><br><br><span style="color:#ff0000;"><b>シリアルログを見てみると<br>原因が判明</b></span><br><br><b><span style="color:#ff7f00;">今度はFreeTypeなどの例外関数が未実装だったためクラッシュしている</span><br><br>なので未実装であった関数を実装するのみ</b><br><br><b>実装したので再度動くのか検証！！<br><br><span style="font-size:1.4em;">さあ、結果は？<br><br><font color="#ff0000">なぜかUIだけ描画されたｗ</font></span></b><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">なんか色ずれが直ってるんだけどｗ</b></span><br><br>多分メモリマッピング関係も少しいじったのでその影響だな<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">FreeTypeが動かない理由は？</b></span><br><span style="font-size:1em;"><b style="font-weight:bold;">brkが-1を返していた<br>-1を返す理由は自作の動的リンカーでbrkをカーネル実装にバインドしていなかった😅</b></span></p><p>&nbsp;</p><p><b><span style="font-size:1.4em;">これで動くかな？と思いきや</span><br><span style="color:#ff0000;"><span style="font-size:1.4em;">結果は動かなかったわ</span></span></b></p><p>&nbsp;</p><p><b><span style="font-size:1.4em;">原因は</span><br><span style="color:#ff7f00;">FreeTypeの初期化を2回行っていた。</span><br>初期化を2回行ったことで</b><strong>リソースリークが起き、FreeTypeの内部状態で不整合になってしまっていた。<br><br><span style="color:#ff0000;">なので間違えて追加されていた2回目のFreeTypeの初期化の処理を削除した</span><br><br><span style="font-size:1.4em;">これで動くはずだ！！</span></strong></p><p><br><strong><span style="font-size:1.4em;">結果は！？</span></strong><br><br><a href="https://stat.ameba.jp/user_images/20260304/01/miku-jk-jb/43/24/p/o1920108015757011180.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20260304/01/miku-jk-jb/43/24/p/o1920108015757011180.png" width="420"></a><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">うおおおおおなんか違うぅぅぅぅぅ！！<br><br><span style="color:#ff0000;">多言語デモで10か国でHello Wrold!! (こんにちは 世界)が表示されてねぇ！！<br>というかフォントが描画されてねぇぇぇぇぇ！！</span><br><br>ってことでちゃんとフォントが描画されるように修正するか<br><br>フォントが描画されていない原因は？<br><br><span style="color:#ff7f00;">単純にNotoSans NotoSans-JPのフォントファイルを読み込めていなかった。</span></span><br><br><span style="font-size:1em;"><span style="color:#ff0000;">それじゃあ直していこう</span><br>これは</span></b><b>FreeTypeやglibcなどと一緒でブートローダーのスナップショットの範囲内であればそのまま読み込み、スナップショットの範囲外であれば仮想ファイルシステムを経由してフォントを読み込むように修正した。これで確実性も上がる</b><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">さあ、結果は？</span></b><br><br><a href="https://stat.ameba.jp/user_images/20260304/01/miku-jk-jb/43/24/p/o1920108015757011180.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20260304/01/miku-jk-jb/43/24/p/o1920108015757011180.png" width="420"></a><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">ダメでしたｗ<br><br>シリアルログを見ると？</b></span><br><br><a href="https://stat.ameba.jp/user_images/20260313/15/miku-jk-jb/46/eb/p/o1900028415760107345.png"><img alt="" contenteditable="inherit" height="63" src="https://stat.ameba.jp/user_images/20260313/15/miku-jk-jb/46/eb/p/o1900028415760107345.png" width="420"></a><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">FreeTypeが複数回ロードされている！！</b></span><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;"><span style="color:#ff0000;">何が問題なのか？</span></span></b><br><b style="font-weight:bold;">FreeTypeが複数回ロードされることで、最初はリロケーションされていた関数が、上書きされてしまい、未リロケーションとして処理されてしまい、FreeTypeが必要としている関数にアクセスすることができなくなり、クラッシュしたり、ちゃんと動かなくなってしまう<br><br><span style="color:#ff7f00;"><span style="font-size:1.4em;">それじゃあ修正していく😁</span></span><br>行った修正は、</b><strong>多重ロード防止のキャッシュ機構を追加だ<br>これを追加することで、既に同じファイル名のライブラリがロード済みかどうかをチェック</strong><b style="font-weight:bold;">し、</b><br><strong>ロード済みなら新たにロードせず、既存のハンドルを返す</strong><b style="font-weight:bold;">ようにした。</b><br><strong>また、ファイル名（leaf名）だけで比較</strong><b style="font-weight:bold;">しているので、絶対パスや区切り文字（/や\）の違いも吸収できる。<br>これにより、</b><strong>同じライブラリは一度だけロードされ、以降はキャッシュされたハンドルが返るようになった。<br><br><span style="font-size:1.4em;"><span style="color:#ff7f00;">んで、フォントが描画されようになったのか？</span></span><br><br><span style="color:#ff0000;"><span style="font-size:1.4em;">結果は？</span></span></strong><br><br><a href="https://stat.ameba.jp/user_images/20260304/01/miku-jk-jb/43/24/p/o1920108015757011180.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20260304/01/miku-jk-jb/43/24/p/o1920108015757011180.png" width="420"></a><br><br>😊😊<br><span style="font-size:1.4em;">あーーうぜー。<br><br><b style="font-weight:bold;">シリアルログを見てみると？👀</b></span><br><a href="https://stat.ameba.jp/user_images/20260313/21/miku-jk-jb/3d/5f/p/o1893049815760222460.png"><img alt="" height="110" src="https://stat.ameba.jp/user_images/20260313/21/miku-jk-jb/3d/5f/p/o1893049815760222460.png" width="420"></a><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">まだFreeTypeに必要な関数が足りない！！</b></span></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">と言うことで必要な関数を追加していく</b></span></p><p>&nbsp;</p><p><span style="color:#ff7f00;"><span style="font-size:1.4em;"><b style="font-weight:bold;">まあ追加したのはいいのだが私は気づいてしまった。</b></span></span></p><p>&nbsp;</p><p><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">メモリマッピングの不足と違反を</b></span></span></p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">ってことでそこも修正する</b></span><br><br><span style="font-size:1em;"><b style="font-weight:bold;">修正した点はこの3つ</b></span></p><p><span style="font-size:1em;"><b>・FreeTypeから見える位置に関数がなかったので、見えるようにした</b></span></p><p><span style="font-size:1em;"><b>・シンボルのマッピングミスとメモリ</b></span><strong>アドレス空間のマッピングミス</strong></p><p><span style="font-size:1em;"><b>・フォントファイルのマッピングミス<br>だ</b></span></p><p><br><b style="font-weight:bold;">まずは</b><span style="font-size:1em;"><b><span style="color:#ff7f00;">FreeTypeから見える位置に関数がなかったので、見えるようにしたことについて解説する</span></b></span><br>これは<b style="font-weight:bold;">動的ロードされたユーザー空間にとって必要なのは、</b></p><ul><li><b style="font-weight:bold;">メモリ管理係、</b></li><li><b style="font-weight:bold;">FreeType初期化や face 操作用の関数</b></li><li><b style="font-weight:bold;">glyph 読み込み周辺の関数</b></li></ul><p><b style="font-weight:bold;">のような外部シンボルだが、自作した動的リンカーで十分に解決されていなかったので、<span style="color:#ff0000;">呼び出しがNULLになったり、変な所にすっ飛んでたりしていた</span>ので、</b>修正した。<br><br><b style="font-weight:bold;">次に、</b><span style="color:#ff7f00;"><b style="font-weight:bold;">シ</b><span style="font-size:1em;"><b>ンボルのマッピングミスとメモリ</b></span></span><strong><span style="color:#ff7f00;">アドレス空間のマッピングミスの修正について解説する</span></strong><br>これは<b style="font-weight:bold;">動的リンカーのリロケーション処理で、JUMP_SLOT&nbsp;だけに当てるべき外部上書きを&nbsp;GLOB_DAT&nbsp;にまで広げていて、ユーザー空間自身の内部参照まで、動的リンカーのアドレスに置き換わり、</b><strong>本来は関数アドレスであるべき場所に、変数のアドレスが入る状態になっていたため、</strong>修正した。<br><br><b style="font-weight:bold;">最後に</b><span style="font-size:1em;"><b><span style="color:#ff7f00;">フォントファイルのマッピングミスの修正について解説する</span></b></span><br>これは<b style="font-weight:bold;">フォントファイルの実体はブートイメージ由来で、<span style="color:#ff0000;">最初はカーネルの仮想アドレスのまま、FT_New_Memory_Faceに渡していた。</span>だが、F<span style="color:#ff0000;">reeTypeが動いているのはユーザー空間なので、ユーザー空間にそのままカーネル空間の仮想アドレスとユーザー空間からの保証されていないバッファを渡すのは非常に危険</span>なので、フォントデータをユーザー空間のヒープと安全なバッファコピーをし、そのポインタをFreeTypeに渡すように</b>修正した。<br>&nbsp;</p><p><b><font color="#ef8632" size="5">結果は！？</font></b></p><p>&nbsp;</p><p><font color="#ea3323" size="5"><b>フォントの描画ができた！！</b></font></p><p><font size="5"><b>けど</b></font></p><p><font color="#ea3323" size="5"><b>韓国語だけ上手く表示されてない！！</b></font><br><a href="https://stat.ameba.jp/user_images/20260322/01/miku-jk-jb/cf/82/j/o1080081015763003579.jpg"><img alt="image" height="315" src="https://stat.ameba.jp/user_images/20260322/01/miku-jk-jb/cf/82/j/o1080081015763003579.jpg" width="420"></a><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">原因は？</span></b><br><br><b style="font-weight:bold;">原因は使用しているフォントのNotoSans-JPとNotoSansは韓国語(ハングル文字)には完全には対応していないとの事、<span style="color:#ff0000;">なので韓国語専用のNotoSans-KRを追加することにした</span></b><br><a href="https://stat.ameba.jp/user_images/20260322/00/miku-jk-jb/88/99/p/o1917092315762995074.png"><img alt="" height="202" src="https://stat.ameba.jp/user_images/20260322/00/miku-jk-jb/88/99/p/o1917092315762995074.png" width="420"></a><br><br><b style="font-weight:bold;">フォントの追加は少し前に解説した時と一緒で、<span style="color:#ff7f00;">仮想のファイルシステムからフォントを探して読み込み、メモリ上に展開するようにした。</span><br><br><span style="font-size:1.4em;">結果は？</span></b><br><br><a href="https://stat.ameba.jp/user_images/20260323/00/miku-jk-jb/f7/cb/j/o1080081015763384797.jpg"><img alt="image" height="315" src="https://stat.ameba.jp/user_images/20260323/00/miku-jk-jb/f7/cb/j/o1080081015763384797.jpg" width="420"></a><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff0000;">ちゃんとフォントが映った！！</span><br><br><span style="color:#ff7f00;">これで自作OSが多言語とフォントの描画に対応した！！</span></b></span><br><br><b>これが高校生が自作OSをライブラリの改変なしでFreeType経由で文字を描画できるようになった話でした✨</b><br>ということで<b>miku_JK_Jb</b>でした<br><b style="font-weight:bold;">次回は高校生の間に行った自作OSの作業について解説しようかな</b></p></div>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12944590451.html</link>
<pubDate>Mon, 23 Mar 2026 01:53:09 +0900</pubDate>
</item>
<item>
<title>自作OSのデスクトップUIを描画できるようにしたよ</title>
<description>
<![CDATA[ <p>はい、<b style="font-weight:bold;">miku_JK_Jb</b>です</p><p>今回は<span style="color:#ff0000;"><b style="font-weight:bold;">自作OSがユーザー空間でデスクトップUIを描画できるようにした作業</b></span>について解説していくよ</p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">先にデスクトップUIを見せるとこんな感じ</span></b></p><p>&nbsp;</p><p><b style="font-weight:bold;">まずはスタンダードモードだ</b></p><p><a href="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/b7/cd/j/o1920144015743169067.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/b7/cd/j/o1920144015743169067.jpg" width="420"></a></p><p>&nbsp;</p><p><b style="font-weight:bold;">続いてシンプルモードだ</b></p><p><a href="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/f3/86/j/o1920144015743169976.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/f3/86/j/o1920144015743169976.jpg" width="420"></a></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">どうだ！これが自作OSのUIだ！！</span></b></p><p>まぁ<span style="color:#ff7f00;"><b style="font-weight:bold;">シンプルモードで色ずれが発生していたり、アプリケーションバーが表示されていなかったり</b></span>とまだ改善点はたくさんあるんだけどね<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">それじゃあどうやってデスクトップのUIを描けるようになったのかについて解説するぞう🐘</span><br><br><span style="font-size:1.4em;">まず最初にやったのはもろちん設計だ</span></b><br><a href="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/48/6e/j/o3763398415743174090.jpg"><img alt="" height="445" src="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/48/6e/j/o3763398415743174090.jpg" width="420"></a></p><p><b style="font-weight:bold;">設計では主にデザインやどのモードをどのデザインにするか、マウスカーソルの形などを決めた</b><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これがデスクトップUIの設計だ</b></span><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">次にUIのパーツを作っていく</span></b><br>これは<span style="color:#ff7f00;"><b style="font-weight:bold;">ユーザーが自分で好きなUIにカスタマイズできるようにするために各UIのパーツをモジュール化していった</b></span></p><p><br><b style="font-weight:bold;">作ったパーツはこんな感じだ</b></p><ul><li><b style="font-weight:bold;">タスクバー</b></li><li><b style="font-weight:bold;">上部バー</b></li><li><b style="font-weight:bold;">WiFiマーク</b></li><li><b style="font-weight:bold;">サウンドマーク</b></li><li><b style="font-weight:bold;">ハンバーガーメニュー(３本のメニュー線)</b></li><li><b style="font-weight:bold;">電池残量系</b></li><li><b style="font-weight:bold;">通知ベルマーク</b></li></ul><p><b style="font-weight:bold;">これを作成した</b><br><br>正直これは3本のメニュー線(ハンバーガーメニュー)以外の完成度が💩なのでグラフィカルに美しくしたい</p><p>&nbsp;</p><p><span style="color:#ff7f00;"><span style="font-size:1.4em;"><b style="font-weight:bold;">次にUIモードの判別処理を作成した</b></span></span></p><p>これは<b style="font-weight:bold;">デスクトップUIがスタンダードモードなのかシンプルモードなのかユーザーがカスタマイズしたカスタマイズモードなのかを判別してそのモードを表示できるようにする処理を実装した</b><br>まあ今はカスタマイズモードのカスタマイズするアプリを実装していないので、実質スタンダードモードなのかシンプルモードなのかの判別処理になっている</p><p>&nbsp;</p><p><span style="font-size:1.4em;"><span style="color:#ff7f00;"><b style="font-weight:bold;">後はカーネルに追加して終了だ！！</b></span></span><br>まあこれは<b style="font-weight:bold;">単純でカーネルにさっき紹介した作業の関数を呼び出してデスクトップ画面を描画できるようになる処理の実装だ<br><br>これでデスクトップUIが表示できるようになった</b><br><a href="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/b7/cd/j/o1920144015743169067.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/b7/cd/j/o1920144015743169067.jpg" width="420"></a><br><a href="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/f3/86/j/o1920144015743169976.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20260121/16/miku-jk-jb/f3/86/j/o1920144015743169976.jpg" width="420"></a><br><b style="font-weight:bold;">ちなみにこれは完全にカーネル空間から独立してユーザー空間で処理が行われている</b><br>カーネル空間とユーザー空間の分離の作業はすでに終わっているが次回のブログで紹介する<br><b style="font-weight:bold;">今はFreeType経由での多言語化とフォント描画の対応で自作した動的リンカーが動かない問題に四苦八苦している</b><br><br><b style="font-weight:bold;">これが自作OSがユーザー空間でデスクトップの描画ができるようになった作業についての解説でした✨</b><br>ということで<b style="font-weight:bold;">miku_JK_Jb</b>でした<br>次回はFreeType経由で多言語化とフォント描画ができるようになったらいいな🤤</p>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12950954184.html</link>
<pubDate>Tue, 23 Dec 2025 02:39:45 +0900</pubDate>
</item>
<item>
<title>格安のオーディオミキサーは使えるのか！？5段階評価していく</title>
<description>
<![CDATA[ <p>はい、<b style="font-weight:bold;">miku_JK_Jb</b>です<br>今回は<b style="font-weight:bold;">FIFINEのAmpliGameSC3の5段階評価</b>をやっていくよん😉</p><p>&nbsp;</p><p>商品はこんな感じのデザインです</p><p><a href="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/16/ac/p/o1920108015722948539.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/16/ac/p/o1920108015722948539.png" width="420"></a></p><p><span style="font-size:1.4em;"><span style="color:#ff0000;"><b style="font-weight:bold;">これはAmazonのブラックフライデーで5999円と６千円を切っている</b></span></span></p><p>オーディオミキサーとしてはかなり安いよね<br><a href="https://stat.ameba.jp/user_images/20251125/00/miku-jk-jb/16/5d/p/o1920108015722947888.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/00/miku-jk-jb/16/5d/p/o1920108015722947888.png" width="420"></a></p><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%;background-color:#fff;border-radius:4px;padding:8px;box-sizing:border-box"><a id="pXj2WbnwDln3IC5qgVIEO6" class="pickCreative pickLayout2" href="https://d.odsyms15.com/click?aid=pXj2WbnwDln3IC5qgVIEO6" target="_blank" style="box-sizing:border-box;display:block;max-width:100%;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" data-item-id="AZ000001" data-df-item-id="B0CGJ16TDS" data-layout-type="2" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/51H5t1l03DL._SL500_.jpg" data-aid="pXj2WbnwDln3IC5qgVIEO6" data-detail-setting="{&quot;show_item_link&quot;:true,&quot;show_price&quot;:true}"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">FIFINE ゲーミングオーディオミキサー オーディオインターフェース PC/PS4/PS5対応 ゲーム用オーディオミキサー ポッドキャスト ミキサー RGB機能付き ボイスチェンジャーボタン カスタム効果音 配信 実況 白 FIFINE AmpliGame SC3W</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div><div data-eventlabel-end="1764601140" data-eventlabel-itemid="AZ000001" data-eventlabel-start="1763910000" hidden style="padding:4px;color:#d91c0b;font-size:10px;font-weight:bold;line-height:1;background-color:rgba(217, 28, 11, 0.05);border-radius:4px;max-width:-webkit-fit-content; maxWidth: -moz-fit-content; maxWidth: fit-content;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:8px">${EVENT_LABEL_01_TEXT}</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" src="https://m.media-amazon.com/images/I/51H5t1l03DL._SL500_.jpg" height="144" width="144" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" data-img="affiliate"></div></div></a></article></div><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%;background-color:#fff;border-radius:4px;padding:8px;box-sizing:border-box"><a id="fL7tc7VYTbNHZRAOPcQfj6" class="pickCreative pickLayout2" href="https://d.odsyms15.com/click?aid=fL7tc7VYTbNHZRAOPcQfj6" target="_blank" style="box-sizing:border-box;display:block;max-width:100%;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" data-item-id="AZ000001" data-df-item-id="B0C85GC3HV" data-layout-type="2" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/51uNqn3ZjvL._SL500_.jpg" data-aid="fL7tc7VYTbNHZRAOPcQfj6" data-detail-setting="{&quot;show_item_link&quot;:true,&quot;show_price&quot;:true}"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">FIFINE ゲーミングオーディオミキサー オーディオインターフェース PC/PS4/PS5対応 ゲーム用オーディオミキサー ポッドキャスト ミキサー RGB機能付き ボイスチェンジャーボタン カスタム効果音 配信 実況 XLR接続 FIFINE AmpliGame SC3</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div><div data-eventlabel-end="1764601140" data-eventlabel-itemid="AZ000001" data-eventlabel-start="1763910000" hidden style="padding:4px;color:#d91c0b;font-size:10px;font-weight:bold;line-height:1;background-color:rgba(217, 28, 11, 0.05);border-radius:4px;max-width:-webkit-fit-content; maxWidth: -moz-fit-content; maxWidth: fit-content;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:8px">${EVENT_LABEL_01_TEXT}</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" src="https://m.media-amazon.com/images/I/51uNqn3ZjvL._SL500_.jpg" height="144" width="144" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" data-img="affiliate"></div></div></a></article></div><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">さあ、これがどのくらい使えるのかを見ていこうか！！</span></b></p><p>&nbsp;</p><p><span style="color:#ff7f00;"><b style="font-weight:bold;"><span style="font-size:1.4em;">まずは機能を見ていく</span></b></span><br><a href="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/c6/9f/p/o1920108015722948548.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/c6/9f/p/o1920108015722948548.png" width="420"></a><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">主な機能はこんな感じだ</span></b></p><ul><li><span style="font-size:1.4em;"><b style="font-weight:bold;">ボイスチェンジャー (男、女、ロボット、モンスター、赤ちゃん、お年寄り)</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">声のトーンを12基調で変更</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">カスタムボタン(A,B,C,D)で効果音の割り当て</b></span></li></ul><p>と言った感じで値段の割にはかなり高機能と言ったところ<br><br>実際のナレーションの音声やボイチェンの声の変わり方は私のYouTubeを見てね</p><p>&nbsp;</p><div class="ogpCard_root"><article class="ogpCard_wrap" contenteditable="false" style="display:inline-block;max-width:100%"><a class="ogpCard_link" data-ogp-card-log="" href="https://youtu.be/UyvB_HwT-6Q" rel="noopener noreferrer" style="display:flex;justify-content:space-between;overflow:hidden;box-sizing:border-box;width:620px;max-width:100%;height:120px;border:1px solid #e2e2e2;border-radius:4px;background-color:#fff;text-decoration:none" target="_blank"><span class="ogpCard_content" style="display:flex;flex-direction:column;overflow:hidden;width:100%;padding:16px"><span class="ogpCard_title" style="-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;max-height:48px;line-height:1.4;font-size:16px;color:#333;text-align:left;font-weight:bold;overflow:hidden">- YouTube</span><span class="ogpCard_description" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.6;margin-top:4px;color:#757575;text-align:left;font-size:12px">YouTube でお気に入りの動画や音楽を楽しみ、オリジナルのコンテンツをアップロードして友だちや家族、世界中の人たちと共有しましょう。</span><span class="ogpCard_url" style="display:flex;align-items:center;margin-top:auto"><span class="ogpCard_iconWrap" style="position:relative;width:20px;height:20px;flex-shrink:0"><img alt="リンク" class="ogpCard_icon" height="20" loading="lazy" src="https://c.stat100.ameba.jp/ameblo/symbols/v3.20.0/svg/gray/editor_link.svg" style="position:absolute;top:0;bottom:0;right:0;left:0;height:100%;max-height:100%" width="20"></span><span class="ogpCard_urlText" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#757575;font-size:12px;text-align:left">youtu.be</span></span></span></a></article><br>&nbsp;</div><p><b style="font-weight:bold;"><span style="font-size:1.4em;">付いているポートはこんな感じだ</span></b><br><a href="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/93/e4/p/o1920108015722948554.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/93/e4/p/o1920108015722948554.png" width="420"></a></p><ul><li><span style="font-size:1.4em;"><b style="font-weight:bold;">PCに接続するためのUSB Type-Cの接続口</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">マイク、ヘッドフォン、ライン入力、ライン出力の3.5ミリのオーディオジャック</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">ダイナミックマイクとコンデンサーマイクの切り替えスイッチ</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">XLRケーブルの接続端子となっている</b></span></li></ul><div>これはオーディオミキサーの標準的な接続端子だろう(オーディオミキサー自体触るのが初めてなのでそこまでわからないが)</div><div><br><span style="font-size:1.4em;"><b style="font-weight:bold;">付いている付属品はこんな感じだ</b></span></div><div><a href="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/fa/ee/p/o1920108015722948538.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/fa/ee/p/o1920108015722948538.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/d6/b4/p/o1920108015722948540.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/d6/b4/p/o1920108015722948540.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/da/77/p/o1920108015722948542.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251125/01/miku-jk-jb/da/77/p/o1920108015722948542.png" width="420"></a></div><ul><li><span style="font-size:1.4em;"><b style="font-weight:bold;">説明書</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">3.5ミリのオーディオケーブル</b></span></li><li><span style="font-size:1.4em;"><b style="font-weight:bold;">USB Type-C to TypeAのケーブル</b></span></li></ul><div>となっている<br>これはシンプルと言った感じだ</div><div>&nbsp;</div><div><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff0000;">私的に5段階評価をすると5段階中4だ</span><br>4にした理由としては値段よりも高機能で音質も良好だ<br>ただボイスチェンジャーがかなり不自然(声をただ低くしたり高くした感じ)<br>それ以外は特に問題はなく実際に私のYouTubeのナレーションなどで使用しているが不満などが全くない</b></span><br><br>これが<b style="font-weight:bold;">FIFINEのAmpliGameSC3の5段階評価</b>でした</div><div>この商品は<b style="font-weight:bold;">これからもYouTubeのナレーションなどで活用していく</b><br>ということで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした<br><br>使った商品のリンク<p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%;background-color:#fff;border-radius:4px;padding:8px;box-sizing:border-box"><a id="rnMyWyIYMs1KENcAd99492" class="pickCreative pickLayout2" href="https://d.odsyms15.com/click?aid=rnMyWyIYMs1KENcAd99492" target="_blank" style="box-sizing:border-box;display:block;max-width:100%;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" data-item-id="AZ000001" data-df-item-id="B0C85GC3HV" data-layout-type="2" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/51uNqn3ZjvL._SL500_.jpg" data-aid="rnMyWyIYMs1KENcAd99492" data-detail-setting="{&quot;show_item_link&quot;:true,&quot;show_price&quot;:true}"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">FIFINE ゲーミングオーディオミキサー オーディオインターフェース PC/PS4/PS5対応 ゲーム用オーディオミキサー ポッドキャスト ミキサー RGB機能付き ボイスチェンジャーボタン カスタム効果音 配信 実況 XLR接続 FIFINE AmpliGame SC3</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div><div data-eventlabel-end="1764601140" data-eventlabel-itemid="AZ000001" data-eventlabel-start="1763910000" hidden style="padding:4px;color:#d91c0b;font-size:10px;font-weight:bold;line-height:1;background-color:rgba(217, 28, 11, 0.05);border-radius:4px;max-width:-webkit-fit-content; maxWidth: -moz-fit-content; maxWidth: fit-content;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:8px">${EVENT_LABEL_01_TEXT}</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" src="https://m.media-amazon.com/images/I/51uNqn3ZjvL._SL500_.jpg" height="144" width="144" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" data-img="affiliate"></div></div></a></article></div><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%;background-color:#fff;border-radius:4px;padding:8px;box-sizing:border-box"><a id="0Eka819oFI48aEj7dNNjH2" class="pickCreative pickLayout2" href="https://d.odsyms15.com/click?aid=0Eka819oFI48aEj7dNNjH2" target="_blank" style="box-sizing:border-box;display:block;max-width:100%;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" data-item-id="AZ000001" data-df-item-id="B0CGJ16TDS" data-layout-type="2" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/51H5t1l03DL._SL500_.jpg" data-aid="0Eka819oFI48aEj7dNNjH2" data-detail-setting="{&quot;show_item_link&quot;:true,&quot;show_price&quot;:true}"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">FIFINE ゲーミングオーディオミキサー オーディオインターフェース PC/PS4/PS5対応 ゲーム用オーディオミキサー ポッドキャスト ミキサー RGB機能付き ボイスチェンジャーボタン カスタム効果音 配信 実況 白 FIFINE AmpliGame SC3W</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div><div data-eventlabel-end="1764601140" data-eventlabel-itemid="AZ000001" data-eventlabel-start="1763910000" hidden style="padding:4px;color:#d91c0b;font-size:10px;font-weight:bold;line-height:1;background-color:rgba(217, 28, 11, 0.05);border-radius:4px;max-width:-webkit-fit-content; maxWidth: -moz-fit-content; maxWidth: fit-content;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:8px">${EVENT_LABEL_01_TEXT}</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" src="https://m.media-amazon.com/images/I/51H5t1l03DL._SL500_.jpg" height="144" width="144" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" data-img="affiliate"></div></div></a></article></div><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%;background-color:#fff;border-radius:4px;padding:8px;box-sizing:border-box"><a id="oBanapuEQ7AdahchYtkBK5" class="pickCreative pickLayout2" href="https://d.odsyms15.com/click?aid=oBanapuEQ7AdahchYtkBK5" target="_blank" style="box-sizing:border-box;display:block;max-width:100%;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" data-item-id="RK000001" data-df-item-id="fifine:10000006" data-layout-type="2" data-img-size="medium" data-img-url="https://thumbnail.image.rakuten.co.jp/@0_mall/fifine/cabinet/11105359/11244866/imgrc0331848175.jpg" data-aid="oBanapuEQ7AdahchYtkBK5" data-detail-setting="{&quot;show_item_link&quot;:true,&quot;show_price&quot;:true}"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">【公式ブランド・1年保証】オーディオミキサー オーディオインターフェース ポッドキャスター ボイスチェンジャー デジタルミキサー サウンドカード XLR接続 パソコン スマホ 生配信 ゲーム実況 白 ホワイト 「 送料無料 1年保証 」 FIFINE AmpliGame SC3</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">楽天市場</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" src="https://thumbnail.image.rakuten.co.jp/@0_mall/fifine/cabinet/11105359/11244866/imgrc0331848175.jpg" height="144" width="144" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" data-img="affiliate"></div></div></a></article></div><p>&nbsp;</p></div>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12947930715.html</link>
<pubDate>Tue, 25 Nov 2025 01:16:52 +0900</pubDate>
</item>
<item>
<title>iPhone17Proを1ヶ月使って感じたメリットとデメリット</title>
<description>
<![CDATA[ <p>はい、<b>miku_JK_Jb</b>です</p><p>今回は<b><font color="#ef8632">iPhone17Proを1ヶ月使った感想</font></b>について話していきます</p><p>&nbsp;</p><p>今回購入したiPhone17Proはこんな感じ</p><div><a href="https://stat.ameba.jp/user_images/20251114/00/miku-jk-jb/ac/92/j/o0960170615716096531.jpg"><img alt="" border="0" height="710" src="https://stat.ameba.jp/user_images/20251114/00/miku-jk-jb/ac/92/j/o0960170615716096531.jpg" width="400"></a></div><p>&nbsp;</p><p><b><font color="#ea3323">スペックは256GBの一番安いモデルだね</font></b></p><p>まあ今まで128GBのスマホを使っていた身としては2倍になったので、困ることはないかな。</p><p>前の128GBでも全然足りたし</p><p>&nbsp;</p><p><b><font size="5">ちなみにお値段は17万9800円と高い！！</font></b></p><p><b><font color="#ea3323" size="5">高校生だけど漢の1活払い😤</font></b></p><p>&nbsp;</p><p><font size="5"><span style="caret-color: rgb(234, 51, 35);"><b>それじゃあ1ヶ月使った感想を話していく</b></span></font></p><p><span style="caret-color: rgb(234, 51, 35);">ここからは超個人的な感想です</span></p><p><span style="caret-color: rgb(234, 51, 35);">今まで使っていたスマホはGoogle Pixel6aと言うことも頭に入れておいてね</span></p><p>&nbsp;</p><p><b style="caret-color: rgb(234, 51, 35);">まずはメリットから</b></p><ul><li><b style="caret-color: rgb(234, 51, 35);">バッテリー持ちがめっちゃ良い</b></li><li><b style="caret-color: rgb(234, 51, 35);">発熱が全く気にならずめっちゃ冷える</b></li><li><b style="caret-color: rgb(234, 51, 35);">カメラがクッソ綺麗</b></li></ul><div><span style="caret-color: rgb(234, 51, 35);">これがメリットだね</span></div><div><span style="caret-color: rgb(234, 51, 35);">順番に話していくよ</span></div><div>&nbsp;</div><div><span style="caret-color: rgb(234, 51, 35);"><b>まずは<font color="#ef8632">バッテリー持ちがめっちゃ良いこと</font>について話す</b></span></div><div><span style="caret-color: rgb(234, 51, 35);">これはもうねホントにバッテリー持ちがいいの(語彙力)だって<b><font color="#ea3323">1日フルで使っても46%だよ！？</font></b></span></div><p>&nbsp;</p><div><div><a href="https://stat.ameba.jp/user_images/20251114/00/miku-jk-jb/6a/e7/j/o1080029115716096532.jpg"><img alt="" border="0" height="107" src="https://stat.ameba.jp/user_images/20251114/00/miku-jk-jb/6a/e7/j/o1080029115716096532.jpg" width="400"></a></div></div><p>&nbsp;</p><div>&nbsp;</div><div><span style="caret-color: rgb(234, 51, 35);">確かに前のスマホのバッテリーが劣化していたとしてもエグくないか😅</span></div><div><span style="caret-color: rgb(234, 51, 35);"><b>2時間半くらい2台のPCにテザリングしたり、移動中にYouTube見たり、ポケモンGOをプレイしたりしても全然バッテリーが持つ</b></span></div><div><span style="caret-color: rgb(234, 51, 35);">1日外に出てないと全然バッテリーが減らないので2日半くらいは行けるはず(充電しなければ)</span></div><div>&nbsp;</div><div><span style="caret-color: rgb(234, 51, 35);"><b>次に<font color="#ef8632">発熱が全くないと感じること</font>について解説する</b></span></div><div><span style="caret-color: rgb(234, 51, 35);">これは自分が重いゲーム(原神とか)をしないのでそこまで発熱しないってのはあるけど</span></div><div><span style="caret-color: rgb(234, 51, 35);"><b>TikTokとかInstagramの動画は大体スマホで撮影と編集をしているけど発熱が全然気にならん</b></span></div><div><span style="caret-color: rgb(234, 51, 35);">ベイパーチャンバーエグいな🙄</span></div><div><span style="caret-color: rgb(234, 51, 35);">前のPixel6aはすーぐにホックホクになって動作もガクガクになったけど今回は全然熱を持たないので気にせずガンガン動画の撮影や編集に使うことができるね</span></div><div><span style="caret-color: rgb(234, 51, 35);"><b><font color="#ea3323">経年劣化でドンドン爆熱化していくかもしれないけど</font></b></span></div><div>&nbsp;</div><div><span style="caret-color: rgb(234, 51, 35);"><b>次は<font color="#ef8632">カメラがクッソ綺麗なこと</font>について解説する</b></span></div><div><span style="caret-color: rgb(234, 51, 35);"><b>これは8倍ズームがでも鬼綺麗なこと</b></span></div><div><span style="caret-color: rgb(234, 51, 35);">今回このiPhone17Proを購入した理由でもある(あとベイパーチャンバー)</span></div><div><span style="caret-color: rgb(234, 51, 35);"><b>見てよこの写真</b></span></div><p>&nbsp;</p><div><div><a href="https://stat.ameba.jp/user_images/20251114/00/miku-jk-jb/e9/c9/j/o1080081015716096535.jpg"><img alt="" border="0" height="300" src="https://stat.ameba.jp/user_images/20251114/00/miku-jk-jb/e9/c9/j/o1080081015716096535.jpg" width="400"></a></div><p><b><font color="#ea3323">これ8倍ズームで撮ったけどバカ綺麗じゃない！？</font></b></p><p><b>自分は動画の撮影で少しズームをして撮影するんだけど8倍もあれば2倍とかのズームも鬼綺麗だろ</b>っていう結構安直な理由で買ったんだけど8倍ズームでこれはもう1眼レフカメラとかドンドン消えていくのでは？って言う疑問が生まれたね</p><p>&nbsp;</p><p><b>これがメリット</b></p><p>世の中全ての製品に良い所と悪い所がある</p><p><b>次はその<font color="#ef8632">デメリット</font>について解説しよう</b></p><p><b style="font-weight:bold;">デメリットはこんな感じだ</b></p><ul><li><b style="font-weight:bold;">結構重たい(重量が)</b></li><li><b style="font-weight:bold;">カメラボタンそこまで使わん</b></li><li><b style="font-weight:bold;">右にも戻るボタンが欲しい</b></li></ul><p>これがデメリットだ<br><span style="color:#ff7f00;"><b style="font-weight:bold;">３番目の右にも戻るボタンが欲しいのは今まで使っていたPixelの名残だ</b></span><br>それじゃあ順番に解説していこう</p><p>&nbsp;</p><p><b style="font-weight:bold;">まずは<span style="color:#ff7f00;">重量が結構重いこと</span>だ</b><br>これは言葉通りで重量が重い<br>使っているiFaceなども主な原因になっているだろう<br>それにしてもまあ重い。今まで使っていたPixelがポケットティッシュくらいの重さに感じてしまう。<br>腕や手首の筋トレになるのなら、メリットに入れてやってもいいだろう</p><p>&nbsp;</p><p><b style="font-weight:bold;">次は<span style="color:#ff7f00;">カメラボタンをそこまで使わない</span>ことだ</b><br>これはiPhone16にも言えてしまうが<b style="font-weight:bold;">「わーー！！やべー！！カメラカメラ！！」ってなることがあるなら、カメラボタンがあってもイイだろう。</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">でもさ、そんな場面って多いか？</b></span>って言われたら<b style="font-weight:bold;">「うん。ほぼない」</b>って言えてしまう。<br><b style="font-weight:bold;">あと地味にズームの微調整がしずらいのでいらない。</b><br><br><b style="font-weight:bold;">最後に<span style="color:#ff7f00;">右にも戻るボタンが無いこと</span>だ</b><br>これは<b style="font-weight:bold;">Pixel6aを使用した癖</b>でもあるのだが。<br><b style="font-weight:bold;">右にクイッと画面をスワイプするとiPhoneの場合では進む(PCのマウスで言う)<br>Pixelでは戻るだった(PCのマウスで言う)。</b>正直iPhoneも同じだろうと思って購入したのだが、まさかの逆だった。まあこれは慣れればいいだろう<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これがiPhone17Proを1ヶ月使用して感じた感想だ</b></span><br><br>徐々に慣れて大事に使っていきますよ<br>ということで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした。<br><br>今回購入した商品はこちらから</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%"><a class="pickCreative pickLayout2" data-aid="eEmgS6HLC5Z1WsA9NyHrr7" data-detail-setting="{&quot;show_price&quot;:false}" data-df-item-id="B0FPCGVZ8B" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/31H6K3OsxsL._SL500_.jpg" data-item-id="AZ000001" data-layout-type="2" href="https://d.odsyms15.com/click?aid=eEmgS6HLC5Z1WsA9NyHrr7" id="eEmgS6HLC5Z1WsA9NyHrr7" style="background-color:#fff;border-radius:4px;box-sizing:border-box;display:block;max-width:100%;padding:4px 8px;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" target="_blank"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">iFace MagSafe 対応 First Class Standard iPhone 17 Pro ケース MagSynq (ホワイト)【アイフェイス 17proアイフォン 17pro用 iphone17pro カバー 耐衝撃 マグネット搭載 マグセーフ対応 スマホケース ストラップホール】</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" data-img="affiliate" height="144" src="https://m.media-amazon.com/images/I/31H6K3OsxsL._SL500_.jpg" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" width="144"></div></div></a></article><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%"><a class="pickCreative pickLayout2" data-aid="81vLqvjxweHNqonwWxLwwp" data-detail-setting="{&quot;show_price&quot;:false}" data-df-item-id="B09NLK1HT6" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/31tANZeJVbL._SL500_.jpg" data-item-id="AZ000001" data-layout-type="2" href="https://d.odsyms15.com/click?aid=81vLqvjxweHNqonwWxLwwp" id="81vLqvjxweHNqonwWxLwwp" style="background-color:#fff;border-radius:4px;box-sizing:border-box;display:block;max-width:100%;padding:4px 8px;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" target="_blank"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">スマホリング goBelt C1 黒 薄型 1mm ワイヤレス充電対応 スマホスタンド ドイツ製 ブラック 1個</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" data-img="affiliate" height="144" src="https://m.media-amazon.com/images/I/31tANZeJVbL._SL500_.jpg" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" width="144"></div></div></a></article><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0"><article class="pickCreative_wrap" contenteditable="false" style="display:inline-block;max-width:100%"><a class="pickCreative pickLayout2" data-aid="EnpubQB8tPjfEvmRoSWTzA" data-detail-setting="{&quot;show_price&quot;:false}" data-df-item-id="B0F8QTQNYV" data-img-size="medium" data-img-url="https://m.media-amazon.com/images/I/41sI0MmDp5L._SL500_.jpg" data-item-id="AZ000001" data-layout-type="2" href="https://d.odsyms15.com/click?aid=EnpubQB8tPjfEvmRoSWTzA" id="EnpubQB8tPjfEvmRoSWTzA" style="background-color:#fff;border-radius:4px;box-sizing:border-box;display:block;max-width:100%;padding:4px 8px;text-decoration:none;width:450px;font-family:ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, ＭＳ Ｐゴシック, Helvetica, Arial, sans-serif;line-height:1;font-weight:normal;font-style:normal;word-break:break-all" target="_blank"><div class="pickLayout2_inner" style="display:flex"><div class="pickLayout2_info" style="flex:1 1 0%;overflow:hidden;min-width:56px"><div class="pickLayout2_title pickLayout2_title--medium" style="font-weight:bold;margin-bottom:8px;overflow:hidden;color:#333;text-align:left;white-space:normal;text-overflow:ellipsis;font-size:14px;line-height:1.3;max-height:3em;-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;margin-top:19px">【覗き見防止】MAGIC JOHN 対応 iPhone 17 Pro ガラスフィルム 2枚セット マジックガイド枠付き 自動吸着 貼り付け簡単 ズレなく 気泡レス 指紋防止 飛散防止 耐衝撃 9H硬度 強化ガラス 保護フィルム</div><div class="pickLayout2_advertiser pickLayout2_advertiser--medium" style="font-size:10px;color:#757575;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis">Amazon（アマゾン）</div><div class="pickLayout2_price pickLayout2_price--medium" style="color:#333;text-align:left;font-size:14px;margin-top:12px;margin-bottom:12px">&nbsp;</div></div><div class="pickLayout2_imgWrapper pickLayout2_imgWrapper--medium" style="padding:4px 0;position:relative;margin-left:16px;width:144px;height:144px;flex-shrink:0"><img alt="" class="pickLayout2_img" data-img="affiliate" height="144" src="https://m.media-amazon.com/images/I/41sI0MmDp5L._SL500_.jpg" style="width:auto;height:auto;margin:auto; margin: auto;position:absolute;top:0;left:0;right:0;bottom:0;max-width:100%;max-height:100%" width="144"></div></div></a></article></div><p>&nbsp;</p></div><p>&nbsp;</p><div class="pickCreative_root" style="font-size:0">&nbsp;</div><div class="pickCreative_root" style="font-size:0">&nbsp;</div><br>&nbsp;</div><p>&nbsp;</p></div>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12945491193.html</link>
<pubDate>Fri, 14 Nov 2025 00:39:01 +0900</pubDate>
</item>
<item>
<title>自作OSが画面描画をできるようになった</title>
<description>
<![CDATA[ <p>はい、<b>miku_JK_Jb</b>です<br>今回は<span style="color:#ff0000;"><b style="font-weight:bold;">自作OSが画面描画をできるようにした</b></span>作業を紹介していくよ。<br><br>先に見せておくとこんな感じだよ<br><a href="https://stat.ameba.jp/user_images/20251103/23/miku-jk-jb/6c/7c/j/o0640036015709017998.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251103/23/miku-jk-jb/6c/7c/j/o0640036015709017998.jpg" width="420"></a><br>図形なども描画できるようにしたよ<br><br>画面描画をできるようにする前に<span style="font-size:1.4em;"><span style="color:#ff7f00;"><b style="font-weight:bold;">前回のブログで発生したカーネルパニックの修正について</b></span></span>解説していこう<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">まずはカーネルパニックとは何なのかについて解説しよう</span></b><br>カーネルパニックとは<b style="font-weight:bold;"><span style="color:#ff0000;">カーネルが致命的なエラーを起こして、OSが正常に動作することができない状態</span></b>のことだ<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">次にカーネルパニックが起こる原因について解説しよう</span></b></p><ul><li><b style="font-weight:bold;">メモリ管理のミス</b></li><li><b style="font-weight:bold;">ハードウェアの故障</b></li><li><b style="font-weight:bold;">ドライバのバグ</b></li><li><b style="font-weight:bold;">回復不可能なエラー</b></li></ul><p>これが<b style="font-weight:bold;"><span style="color:#ff7f00;">主にカーネルパニックを引き起こす原因</span></b>である<br><b style="font-weight:bold;"><span style="color:#ff0000;">簡単に言えばカーネルが予測していない例外が起こった</span></b>と考えればいいだろう<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">それでは順番に解説していこうか</b></span><br><span style="color:#ff7f00;"><b style="font-weight:bold;">まずはメモリ管理のミスについて解説していこう</b></span><br>これはカーネルが使用できない未マップ領域にアクセスしてしまうと例外が発生してカーネルパニックを引き起こしてしまう。<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にドライバのバグについて解説していく</b></span><br>これは互換性のないドライバを使用したり、するとメモリ管理のミスと同様に未マップの領域にカーネルがアクセスしてしまう。その例外を処理することができないとカーネルパニックを引き起こす。<br>また、デバイスの初期化や解放処理が行われず、カーネルの状態が崩れてしまい、カーネルパニックを引き起こしてしまうことがある。<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にハードウェアの故障について解説しよう</b></span><br>これはメモリ、CPU、ストレージ、マザーボードや電源の故障などでもカーネルパニックを引き起こす。<br>そもそもカーネルはハードウェアが正常に動作するのが前提として開発されているので、故障したハードウェアが返す不正な値はカーネルが処理できずにパニックを起こす。<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">最後に回復不可能なエラーについて解説しよう</b></span><br>これはカーネルがこれは安全に復旧することができないと判断したエラーで、これ以上動作を続けてしまうと、データの破壊などと言った致命的なダメージが起こりうる際にもカーネルパニックが発動する<br><br><b style="font-weight:bold;">これがカーネルパニックの原因だな😁<br><br><span style="font-size:1.4em;">それじゃあどうやってカーネルパニックを修正したかについて解説していこう</span></b><br>私の自作OSのカーネルパニックの原因はこんな感じだった</p><ul><li><b style="font-weight:bold;">bssセクション、dataセクションが正しくマップされていなかった</b></li><li><b style="font-weight:bold;">ページングの初期化漏れ</b></li><li><b style="font-weight:bold;">NULLやゴミアドレスに参照していた</b></li></ul><p><br><b style="font-weight:bold;"><span style="font-size:1.4em;">それじゃあ順番修正内容を解説していくぜ</span><br><br><span style="color:#ff7f00;">まずは未マップ領域のアクセスとページングの修正について解説しよう</span></b><br>これはリンカスクリプトとページングの初期化を修正した。<br>これにより、未マップ領域にアクセスしたりカーネルが使うメモリの範囲がページングされていないという問題は無くなった。<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これがカーネルパニックの修正だ！！</b></span><br><br>ただ、カーネルパニックは直ったが、<b style="font-weight:bold;">カーネルが起動しているかを一目で確認するのは難しいので、</b><span style="font-size:1.4em;"><span style="color:#ff0000;"><b style="font-weight:bold;">カーネルが起動かを確認する処理</b></span></span>を追加した<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">それじゃあ解説していく</b></span><br>これはUEFIブートローダーから受け渡されたFrameBufferを使用して白い画面を映すようにした。これが成功するとカーネルが起動している且つカーネルにFrameBufferが受け渡されているということが分かる。他にも解像度や物理アドレス、ピクセルフォーマットも正常に受け渡されているということが分かる。<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">てことで見ていこう</b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20251024/00/miku-jk-jb/bf/25/p/o1920108015702151637.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251024/00/miku-jk-jb/bf/25/p/o1920108015702151637.png" width="420"></a><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">変わらず起動しなかった</b></span></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">えーー( ﾟДﾟ)</b></span><br><br><b style="font-weight:bold;">原因を探ると</b><br><a href="https://stat.ameba.jp/user_images/20251104/23/miku-jk-jb/b8/e7/p/o0473019615709726668.png"><img alt="" height="174" src="https://stat.ameba.jp/user_images/20251104/23/miku-jk-jb/b8/e7/p/o0473019615709726668.png" width="420"></a><br><br><span style="color:#ff0000;"><b style="font-weight:bold;">前回ブートローダーに搭載したMS x64 ABIからSysV ABIに変換する処理がカーネルにもあった</b></span><br><br>これがあると<span style="color:#ff7f00;"><b style="font-weight:bold;">カーネルがSysV ABIに変換する処理を行おうとするが、すでに変換されているので、MS x64 ABIが発見できずにパニックになってしまう</b></span><br>全く可愛い子だな🤭<br><br>ってことで<b style="font-weight:bold;">カーネル側の変換処理を削除</b><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">すると</b></span><br><a href="https://stat.ameba.jp/user_images/20251104/23/miku-jk-jb/0e/c0/j/o0640036015709731131.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251104/23/miku-jk-jb/0e/c0/j/o0640036015709731131.jpg" width="420"></a><br><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">ちゃんとカーネルが起動した！！</b></span></span><br><br><b style="font-weight:bold;">これでカーネルパニックの修正は終了！！<br><br><span style="color:#ff7f00;"><span style="font-size:1.4em;">次はカーネルのシリアル出力の対応化解説していくぜ</span></span></b><br>まずはシリアル出力に対応させるために行った作業を紹介しよう</p><ul><li><b style="font-weight:bold;">IOポートにアクセスする処理の実装</b></li><li><b style="font-weight:bold;">シリアルの初期化処理の実装</b></li><li><b style="font-weight:bold;">文字列などの送信処理の実装</b></li></ul><p><span style="font-size:1.4em;"><b style="font-weight:bold;">それじゃあ順番に解説していこうか</b></span><br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">まずはIOポートにアクセス処理の実装について解説する</span></b><br>これは<b style="font-weight:bold;">マザボのなどのUSBやらシリアルポートの端子やらにアクセスする処理だ</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">これを行わないとそもそもカーネルがシリアルにアクセスすることすらできない。</b></span><br>なので<b style="font-weight:bold;">x86_64アーキテクチャのCPUではメモリ空間とは別でIOポートの空間があるので、そこにアクセスを行うように処理を実装した</b>というわけだ<br><b style="font-weight:bold;">アクセス方法はinとoutでinがデバイスにデータを読み込む命令、outがデバイスにデータを書き込む命令となっている</b><br>名前通りだな😁<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にシリアルの初期化の実装について解説しよう</b></span><br>これは<b style="font-weight:bold;">通信速度、データビット数、パリティ、ストップビットを設定したり、FIFOバッファや制御信号線を正しく立てて、送受信できる状態にする、UARTを有効化する処理だ</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">初期化の手順は</b></span><b style="font-weight:bold;"><span style="color:#ff0000;">、</span>最初に割り込みを無効化してボーレート(周波数)を115200bpsに設定し、通信フォーマットの設定を8ビットに設定してFIFOを有効化して受信と送信をクリアにして、モデム制御でDTR RTS OUT2を有効化する</b><br>かなり手順が多いがこれらを行うことによってシリアルを初期化できるってわけだ😁<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次に文字列などの送信処理の実装について解説する</b></span><br>これは<b style="font-weight:bold;">シリアルポートから文字列を送信して、受信側に文字列が映るようにする処理だ</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">送信処理の手順は、</b></span><b style="font-weight:bold;">送信レジスタが空いているかをLSRで確認、文字化け防止のためにビットを5に設定して送信バッファを空にするぜ</b><br>これで文字が送信されるってわけだな😁<br><br>それじゃあシリアル出力がでるかを見ようか<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20251105/00/miku-jk-jb/0f/55/p/o1919101415709763074.png"><img alt="" height="222" src="https://stat.ameba.jp/user_images/20251105/00/miku-jk-jb/0f/55/p/o1919101415709763074.png" width="420"></a><br><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">やったね！！ちゃんと表示された！！</b></span></span><br><br>ちなみに環境は自作OSの動作確認用のPCとノートPCを繋いでノートPC側のTeraTermを使っている<br><br><b style="font-weight:bold;">これでシリアル出力の対応化は終了！！</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">最後に図形の描画を行うようにした作業を紹介するぜ</b></span><br>まずは行った作業を紹介する</p><ul><li><b style="font-weight:bold;">長方形、正方形、三角系、円形、線の描画対応</b></li><li><b style="font-weight:bold;">色補正処理の実装</b></li><li><b style="font-weight:bold;">描画処理の高速化</b></li></ul><div><span style="font-size:1.4em;"><b style="font-weight:bold;">それじゃあ順番に解説していこうか</b></span><br>&nbsp;</div><div><span style="color:#ff7f00;"><b style="font-weight:bold;">まずは長方形、正方形、三角形、円形、線の描画に対応させた作業について解説する</b></span><br>これは<b style="font-weight:bold;">図形を描画できるようにしたって感じだ</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">描き方としては、</b></span><b style="font-weight:bold;">画面を一個一個塗って点を描き、直線を隣り合うマスを順に決めて塗っていき、四角や三角は高さを計算して一個一個塗っていく描き方で、図形を描画させた</b><br>まあチマチマと描かせている感じだ😫<br><br><b style="font-weight:bold;">それじゃあ図形を描画できるようになったから見ていこう</b><br><a href="https://stat.ameba.jp/user_images/20251105/00/miku-jk-jb/af/e7/j/o0640036015709801852.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251105/00/miku-jk-jb/af/e7/j/o0640036015709801852.jpg" width="420"></a><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">こんな感じでしっかりと描画ができている！！</b></span><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次に色補正処理の実装だ</b></span><br><b style="font-weight:bold;">色補正とは人によって色の見え方は違うから、それに合わせてOSの表示する色も変えるといった感じだ。画面一つ一つのピクセルはRGB、赤(R)、緑(G)、青(B)の組み合わせで色を表している。色補正処理ではそれを特別なルールで混ぜ直している。そして画面を混ぜ直した色で描画するといった処理だ</b><br><span style="color:#ff0000;"><b style="font-weight:bold;">実装のやり方は、</b></span>さっきも言ったが、画面一つ一つのRGB、赤(R)、緑(G)、青(B)の組み合わせの色を混ぜ直している感じだな。<br><br><b style="font-weight:bold;">色補正を行ったので見ていこうか</b><br><a href="https://stat.ameba.jp/user_images/20251103/23/miku-jk-jb/6c/7c/j/o0640036015709017998.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251103/23/miku-jk-jb/6c/7c/j/o0640036015709017998.jpg" width="420"></a></div><div>左が色補正なしで、右が色補正ありだ<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">分かりにくいが、右側のほうが色が暗い！！</span></b><br>しっかりと色補正も効いているな<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">最後に画面描画の高速化について解説する</b></span><br>これは<b style="font-weight:bold;">今まではチマチマと一個一個ピクセルを塗っていったが、高速化するために横一列を筆で一気に描くようにまとめて塗り、図形は横直線の集合として一気に描画するようにして、バックバッファ(画面の裏)で先に描画し、画面の幅や内部幅が一致したなら描画した物を一気にまとめてコピーし、表示するようにした</b><br>これによって<span style="color:#ff0000;"><b style="font-weight:bold;">カーネルの命令量が少なくなり、メモリの効率化ができて結果的に描画が早くなる</b></span>わけだ<br>つまり三菱ラリーアートのアートバージョンってとこだな😁(自分でも何言ってんのか分かんなくなってきたわ)<br><br>結果はさっき見せた画像と変わらないので省略する。<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff0000;">ただ、これはあくまでもテストだ！！</span><br><br>FrameBufferがカーネルに受け渡されているかのテストだ！！<br><br>えーー( ﾟДﾟ)</b></span><br><br><span style="color:#ff7f00;"><span style="font-size:1.4em;"><b style="font-weight:bold;">実はカーネル側でUIなどを描くとセキュリティや安定性の面で劣るのだ！！</b></span></span><br><b style="font-weight:bold;">これじゃあ安心と愉しさが無いじゃないか！！</b>ってことで<br><span style="color:#ff0000;"><b style="font-weight:bold;">UIなどはユーザーランド側で描き、カーネル側ではFrameBufferの管理とさっき解説した描画処理の高速化のバックバッファのコピー作業だけ</b></span>を行うということにする。<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">こうすることで安定性とセキュリティを保てるのだ！！</b></span><br><br>設計は次回に紹介する<br><br>ということで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした</div>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12943042248.html</link>
<pubDate>Tue, 04 Nov 2025 01:32:01 +0900</pubDate>
</item>
<item>
<title>自作OSをセキュアブートに対応させてみた また、セキュアブートとは何なのか解説</title>
<description>
<![CDATA[ <p>はい、<b>miku_JK_Jb</b>です<br>今回は<span style="color:#ff0000;"><b style="font-weight:bold;">自作OSをセキュアブートに対応させたり、ブートローダーの機能を大幅に強化した</b></span><b style="font-weight:bold;">作業を紹介</b>していくよ。<br><br>また久しぶりの自作OS関連のブログ更新だな笑<br>まあ、開発に時間がめっちゃかかるからしょうがないか<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">まずはセキュアブートとは何なのかについて解説しようか</b></span><br><span style="font-size:1em;"><b style="font-weight:bold;">セキュアブートとはPCが起動する際に</b>、<span style="color:#ff7f00;"><b style="font-weight:bold;">UEFI環境で</b></span></span><span style="color:#ff7f00;"><b>信頼されたソフトウェアのみの読み込みを許可</b><b style="font-weight:bold;">し、システムを保護するための重要なセキュリティ機能</b></span><b style="font-weight:bold;">の事だ</b><br><span style="font-size:1em;"><b style="font-weight:bold;">また、セキュアブートはUEFIの機能であり、従来のBIOSでは使えない</b></span><br>要するにホテルのルームキーみたいなものと言えば分かりやすいだろうか<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">自作OSをセキュアブートに対応させると何が良いのか？</b></span><br><span style="font-size:1em;">セキュアブートに対応させることで、<b style="font-weight:bold;">OSが起動する</b></span><b style="font-weight:bold;">前の最も弱っチー</b>🤓<b>段階</b><b style="font-weight:bold;">で、</b><b>システム全体のセキュリティと信頼性</b>を守ることができるようになる<br><b style="font-weight:bold;">主にマルウェアやの実行を阻止する</b>ことができる<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">セキュアブートに対応させるために必要な物は？</b></span></p><ul><li><b style="font-weight:bold;"><span style="font-size:1em;">UEFIのファームウェア</span></b></li><li><b>鍵ファイル</b></li><li><b>署名付きのバイナリファイル</b></li><li><b>SBAT情報</b></li></ul><p><b><b style="font-weight:bold;">となっている</b></b><br>意外と少ないでしょ？<br><br><b style="font-weight:bold;"><span style="font-size:1.4em;">それじゃあ順番に解説していこうか</span><br><span style="color:#ff7f00;">まずはUEFIのファームウェアから解説しよう</span></b><br>これはさっきも書いているが<b style="font-weight:bold;">、セキュアブートはUEFIの機能なので、従来のBIOSでは使うことができない。そのためUEFIに対応するマザーボードなどが必要になってくる<br><br><span style="color:#ff7f00;">次に鍵ファイルについて解説しよう</span><br>鍵ファイルはソフトウェアが信頼できる製作者によって作成される改ざんされていないことを証明する認証システムだ</b><br>また、<b style="font-weight:bold;">鍵ファイルは主に2つで構成される</b></p><p><b style="font-weight:bold;"><span style="color:#ff0000;">秘密鍵と公開鍵だ</span></b><br><a href="https://stat.ameba.jp/user_images/20251023/23/miku-jk-jb/2e/a7/j/o4032302415702113910.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20251023/23/miku-jk-jb/2e/a7/j/o4032302415702113910.jpg" width="420"></a><br><b style="font-weight:bold;">秘密鍵は自作OSのブートローダーなどのバイナリファイルに製作者が「これは自分が作成したオリジナルのファイルです」と証明する</b>ための物だ<br>また、<b style="font-weight:bold;"><span style="color:#ff0000;">秘密鍵は絶対に外部に漏らしてはいけない物</span>だ<br>万が一漏らしてしまうと、<span style="color:#ff0000;">第三者が「正規品に見える不正なコード」</span>を作れてしまう</b><br>要はぼんくらがパチモンを作っても騙せちゃうってことだな😁<br><br><b style="font-weight:bold;">公開鍵は秘密鍵を検証する</b>ための物だ<br>PCを起動するときに、<b style="font-weight:bold;">UEFIがブートローダーに付与された秘密鍵を検証する必要があるこの検証をするために秘密鍵に対応する公開鍵がUEFIの「信頼しているデータベースに登録されるのだ</b><br>これらを行うことによって<b style="font-weight:bold;">UEFIが署名を復号・チェックして、ブートローダーが本物であることを確認するのだ</b><br><br><b><span style="color:#ff7f00;">次に署名付きのバイナリファイルについて解説しよう</span></b><br><b style="font-weight:bold;">これは起動させたいブートローダーなどのソフトウェア自身だ<br>こいつらはさっき解説した</b><b>秘密鍵</b><b style="font-weight:bold;">で署名されている必要がある</b><br>また、UEFIはこれらのバイナリファイルが読み込まれる際に署名を検証するのだ<br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">最後にSBAT情報について解説しよう</span></b><br>これは<b>既知の脆弱性</b><b style="font-weight:bold;">に対処するために重要となるもので、ブートローダーのバージョン情報を示すメタデータ</b>だ。<br>また、<b style="font-weight:bold;">古いブートローダーを無効化させるもので、セキュリティ問題が発見された時に、古いバージョンを<span style="color:#ff0000;">「禁止リスト」</span>に登録することで新しい署名鍵を発行しなくても、脆弱性のある古いバージョンでの起動を防ぐ</b>ものだ<br>要するに古いバージョンの物を出禁にするってことだな😁<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">では自作OSをどうやってセキュアブートに対応させたかについて解説しよう</b></span><br><span style="font-size:1em;">主に行った作業はこんな感じだ</span></p><ul><li><span style="font-size:1.4em;"><b style="font-weight:bold;">鍵ファイルの作成</b></span></li><li><span style="font-size: 22.4px;"><b>SBATセクションの作成</b></span></li><li><span style="font-size: 22.4px;"><b>ブートローダーの署名</b></span></li><li><span style="font-size: 22.4px;"><b>ShimとMokManagerの導入</b></span></li><li><span style="font-size: 22.4px;"><b>公開鍵の登録</b></span></li></ul><p><span style="font-size:1em;">これも意外と少ないでしょ？</span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これも順番に解説していこうか</b></span><br><br><span style="font-size:1em;"><span style="color:#ff7f00;"><b style="font-weight:bold;">まずは鍵ファイルの作成だ</b></span><br>これは<b style="font-weight:bold;">秘密鍵と公開鍵を作成した</b><br><b style="font-weight:bold;">作成自体は簡単でWSLのコマンドを使用して作成した</b><br>ちなみに<b style="font-weight:bold;">公開鍵は有効期限を設定する</b>必要があるので<b style="font-weight:bold;">15年間有効</b>に設定した<br>秘密鍵には有効期限が無いが、<span style="color:#ff0000;"><b style="font-weight:bold;">流出したらすぐに失効する必要</b></span>がある<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にSBATセクションの作成だ</b></span><br><b style="font-weight:bold;">これも作成自体は簡単でWSLのコマンドを使用して作成した</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にブートローダーの署名だ</b></span><br>これも<b style="font-weight:bold;">同じく簡単でWSLのコマンド</b>を使用して署名した<br>署名する際は<b style="font-weight:bold;">秘密鍵と公開鍵、署名したブートローダーの出力先を設定して</b>署名を行う<br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次にShimとMokManagerの導入だ</b></span><br><b style="font-weight:bold;">Shimはセキュアブートの環境で、自作や配布元が違うブートローダーを起動させる</b>ものだ。<span style="color:#ff0000;"><b style="font-weight:bold;">Ubuntuなども利用している</b></span><br>また、<b style="font-weight:bold;">ShimはMicrosoftに署名されているので、セキュアブート有効環境では必ずと言ってもいいくらい起動</b>する<br><b style="font-weight:bold;">MokManagerは鍵の登録を行う際</b>に使用する。また、<b style="font-weight:bold;">MokManagerは</b></span><b style="font-weight:bold;">Shimがロードされる過程で</b>起動する<br>ただし、<span style="color:#ff0000;"><b style="font-weight:bold;">ShimとMokManagerは開発時の際に使用し、リリースする際はMicrosoft UEFI Third-Party CAに署名してもらうことにする</b></span><br><b style="font-weight:bold;">Microsoft UEFI Third-Party CAは一般の個人開発者でも受け付けしている</b><br>ちなみにMicrosoft UEFI Third-Party CAに署名してもらう際は、ブートローダーをMicrosoftが出している署名条件に満たす必要が出てくる<br><b style="font-weight:bold;">まあ、私は最初から視野に入れていたから今の状態でも条件を満たしているんだな😁</b><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">最後に公開鍵の登録だ</b></span><br><b style="font-weight:bold;">これはPCを起動させて、ShimがMokManagerを起動させる。<br>起動したMokManagerで公開鍵の登録を行う</b><br>ちなみに鍵ファイルを登録したら再起動する必要がある<br>登録している所は私のYouTubeの動画から見てくださーい<br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これが自作OSをセキュアブートに対応させるために行った作業だ！！</b></span><br><span style="font-size:1em;">全体的に簡単な作業が多いというイメージだった</span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">次は自作OSのブートローダーの機能を強化した作業について解説しよう</b></span><br><br><span style="font-size:1em;">ブートローダーの機能を強化するために行ったはこんな感じだ</span></p><ul><li><span style="font-size:1em;"><b style="font-weight:bold;">ELFローダーで.text .data .bssセクションを物理メモリに展開させる処理の追加</b></span></li><li><span style="font-size:1em;"><b style="font-weight:bold;">MSx64 ABIからSysV ABIに変換する処理の追加</b></span></li><li><span style="font-size:1em;"><b style="font-weight:bold;">ブートローダーのシリアル出力の追加</b></span></li><li><span style="font-size:1em;"><b style="font-weight:bold;">スタック領域の確保を行う処理の追加</b></span></li><li><span style="font-size:1em;"><b style="font-weight:bold;">CR3に新しいPML4のロードの追加</b></span></li><li><span style="font-size:1em;"><b style="font-weight:bold;">SysV ABIに合わせてカーネルを起動させる処理の追加</b></span></li></ul><p><span style="font-size:1em;">こんな感じで、かなり大幅にブートローダーの機能を向上させたね</span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">それじゃあ順番に解説していこうか</b></span><br><br><span style="font-size:1em;"><b style="font-weight:bold;"><span style="color:#ff7f00;">まずはELFローダーで.text .data .bssセクションを物理メモリに展開させる処理の追加について解説していこう</span></b><br>これは<b style="font-weight:bold;">ELF形式のカーネルを解析して、実行に必要なセクションを正しい物理アドレスに配置する</b>ようにした<br>これを行うことにより、<b style="font-weight:bold;">実際にカーネルが期待するメモリのレイアウト再現することができ、カーネルがデータなどに正しくアクセスすることができる</b>ようになる<br>また<b style="font-weight:bold;">、.textセクションはカーネルが行う命令で、.dataセクションは初期値を持つグローバル変数や、静的変数が格納されたもので、.bssセクションは初期値を持たないグローバル変数や、静的変数が書くのされたもの<br><br><span style="color:#ff7f00;">次はMSx64 ABIからSysV ABIに変換する処理の追加について解説しよう</span></b><br>これは<b style="font-weight:bold;">UEFIは、MSx64 ABIで動いているが、自作OSのカーネルはSysV AVIを前提に書いているので、この差をなくすためにMSx64 ABIからSysV ABIに変換する処理だ</b><br>これを行うことにより、<b style="font-weight:bold;">カーネルがUEFIに縛られずに移植性や拡張性が上がるのだ</b></span><br><br><span style="color:#ff7f00;"><b style="font-weight:bold;">次は</b><span style="font-size:1em;"><b style="font-weight:bold;">ブートローダーのシリアル出力の追加について解説しよう</b></span></span></p><p><span style="font-size:1em;">これは元々実装してあったが、<b style="font-weight:bold;">エラーが発生した際にしか表示されなかったが、<br>今回の変更によって、ブートローダーの処理がどこまで進んだかを分かるようにした<br><br><span style="color:#ff7f00;">次はスタック領域の確保を行う処理の追加について解説しよう</span></b><br>これは<b style="font-weight:bold;">カーネルの実行用の専用スタックを確保し、カーネルにジャンプする前にRSPを切り替える処理だ<br>RSPとは64bit環境のCPUで、スタックポインタとして機能する汎用型のレジスタの事だ。</b>また、<b style="font-weight:bold;">スタックはメモリ上に確保される特別なデータ構造</b>だ　　　<br><b style="font-weight:bold;">カーネル実行用のスタックを確保することにより、UEFI側のスタックを汚さずに済んで、カーネルが安定して動作し、カーネル側の関数の呼び出しや割り込み処理の基礎が整う<br><br><span style="color:#ff7f00;">次はCR3に新しいPML4のロードの追加について解説しよう</span></b><br>これは<b style="font-weight:bold;">自作のページテーブルをCPUに適用させて、仮想アドレス空間をカーネル用に切り替える処理だ<br>CR3とは主にIntel,AMDのCPUが持つコントロールレジスタの1つで、メモリ管理においてとても重要な役割を持っている。また、主にページングや仮想アドレス空間の切り替えを行う<br>PML4はx86_64で使用される、ページングの構造の最上位レベルのテーブルだ</b><br>レクサスで言うLSってとこだな😁<br><br><b style="font-weight:bold;"><span style="color:#ff7f00;">次はSysV ABIに合わせてカーネルを起動させる処理の追加について解説しよう</span></b></span><br>これは<b style="font-weight:bold;">今まではただカーネルのアドレスにジャンプさせるだけで、カーネルを起動させていたが、今回からはSysV ABIの規約に従って引数をレジスタにセットし、カーネルを起動させるように変更した<br>これにより、カーネルが期待通りの初期引数を受け取り、初期化や描画処理などを自力で始めることができるようになる　　　　　<br><br><span style="font-size:1.4em;">これがブートローダーの機能を大幅に強化した作業だ！！</span><br><br><span style="font-size:1.4em;">実際にブートローダーが動くとこんな感じになる</span></b><br><br><a href="https://stat.ameba.jp/user_images/20251024/00/miku-jk-jb/bf/25/p/o1920108015702151637.png"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20251024/00/miku-jk-jb/bf/25/p/o1920108015702151637.png" width="420"></a><br>ちなみに赤・黄・水色・紫・オレンジ色の小さい四角が表示されているが、<br>これはブートローダーの処理ががどこまで進んだかを簡単に分かるようにしている<br><br><b style="font-weight:bold;">ちなみに画像ではカーネルは起動していない<br>理由は<br><a href="https://stat.ameba.jp/user_images/20251024/01/miku-jk-jb/7e/1a/p/o0895036815702163788.png"><img alt="" height="173" src="https://stat.ameba.jp/user_images/20251024/01/miku-jk-jb/7e/1a/p/o0895036815702163788.png" width="420"></a><br>＿人人人人人人人人人人人人人人人＿<br>＞　カーネルパニックを起こした　＜<br>￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^￣</b><br><br>ってことで<b style="font-weight:bold;">次回カーネルパニックを直して画面を描画できるようになった</b>乞うご期待<br>ということで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした</p>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12940610877.html</link>
<pubDate>Fri, 24 Oct 2025 01:16:23 +0900</pubDate>
</item>
<item>
<title>【新型】iPhone17Pro買いました！！【高校生】</title>
<description>
<![CDATA[ <p>はい、<b style="font-weight:bold;">miku_JK_Jb</b>です<br>今回はつい最近発売された<b style="font-weight:bold;"><span style="color:#ff0000;">iPhone17Pro</span></b>を買いました！！<br><a href="https://stat.ameba.jp/user_images/20250924/01/miku-jk-jb/f8/df/p/o2268081415681133612.png"><img alt="" height="151" src="https://stat.ameba.jp/user_images/20250924/01/miku-jk-jb/f8/df/p/o2268081415681133612.png" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;">もちろんポケットマネーで一括で支払いました☆</b></span><br>高校生だけど凄いでしょ😤<br>まさか<b style="font-weight:bold;">の発売日から2日後に買っただけで1ヶ月近く届くのが遅くなる</b>とは笑<br>まあ、気長に待ちましょ。</p>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12932869321.html</link>
<pubDate>Wed, 24 Sep 2025 01:13:31 +0900</pubDate>
</item>
<item>
<title>自作OSを色々なPCに対応させたよ</title>
<description>
<![CDATA[ <p>&nbsp;</p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-aid="OvyQyUvDW4dAypYfcsjJ14" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" data-layout-type="302" data-slot="injected" data-tag-id="AD000001" data-tag-type="auto_ad" style="display:inline-block;max-width:100%;width:323px;height:114px"><span style="display:inline-block;"><img alt="" data-img="affiliate" height="114" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_302.jpg" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%" width="323"></span></div></div><p>はい、<b>miku_JK_Jb</b>です<br>今回は<b style="font-weight:bold;"><span style="color:#ff0000;">自作OSを色々なPCに対応させるため</span>に行った作業</b>を紹介していくよ</p><p>&nbsp;</p><p>これまた久しぶりのブログ更新だな。いつも通り自作OSのエラーが多かったり私生活が忙しかったので投稿が遅くなった🥺</p><p>&nbsp;</p><p><b>自作OSが起動したこと</b>が気になると思うので<b>先に起動した画面</b>を見せるとしよう</p><p>&nbsp;</p><p><b><font color="#ff9e10" size="5">これが自作OSが起動した画面だ！！</font></b></p><p><br>まずは検証用のPC<br><a href="https://stat.ameba.jp/user_images/20250624/17/miku-jk-jb/25/52/j/o4032302415622503764.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250624/17/miku-jk-jb/25/52/j/o4032302415622503764.jpg" width="420"></a></p><p>&nbsp;</p><p>前使っていたサブ機<br><a href="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg" width="420"></a><br><br>CHUWIのミニPC</p><p><a href="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg" width="420"></a></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-aid="fUNBvjramdpMMeLzdNLSr2" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" data-layout-type="301" data-slot="injected" data-tag-id="AD000001" data-tag-type="auto_ad" style="display:inline-block;max-width:100%;width:300px;height:250px"><span style="display:inline-block;"><img alt="" data-img="affiliate" height="250" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_301.png" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%" width="300"></span></div></div><p>&nbsp;</p><p><b>は？？起動しているの？？</b></p><p>&nbsp;</p><p>っと見ている人は思っただろう。</p><p>&nbsp;</p><p>&nbsp;</p><p><b><font size="5">大丈夫だ問題ない</font></b>。</p><p>&nbsp;</p><p><span style="font-size:1.4em;">これが<font color="#ff2a1a"><b>正常</b></font>だ。</span></p><p>&nbsp;</p><p><b>理由はカーネルが起動した後にグラフィックを描画するようにしていないから</b>だ。</p><p><br><b><font size="5">じゃあこの - みたいなのは何だって?</font></b></p><p><b>これはUEFIブートローダーで設定されたフレームバッファの状態がそのまま表示されている</b>のだ。</p><p>&nbsp;</p><p><b>カーネルを起動したら画面をクリアするようにしたら消える。</b></p><p>&nbsp;</p><p>ただ、私はカーネルが起動しているかを確認するために消していない<br><br><span style="color:#ff7f00;"><b><font size="5">じゃあこの - みたいなのが無いのもあるって?</font></b></span></p><p><br><b style="font-weight:bold;"><span style="font-size:1em;">これはUEFIの仕様によって出るPCと出ないPCがある</span><br>ASRock</b><strong>P67固有のUEFI仕様・制限・初期化順序がログ出力や描画を妨げている状態</strong><br>&nbsp;</p><p><font size="5">さて、<b>自作OSが起動した画面を見せたのでそろそろ開発記録を紹介</b>していくとするか</font></p><p>&nbsp;</p><p><span style="font-size:1.4em;">まずは<b>1日目</b></span></p><p><!--EndFragment --><!--StartFragment --></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">この日は前使っていたサブ機で自作OSが起動するかを試した</span></b></p><div class="pickTag_root" style="text-align:center;">&nbsp;</div><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/18/miku-jk-jb/6b/36/j/o4032302415636346586.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/18/miku-jk-jb/6b/36/j/o4032302415636346586.jpg" width="420"></a><br><span style="font-size:1.4em;"><span style="color:#ff0000;"><b style="font-weight:bold;">PCに自作OSの存在すら認識されなかった😭</b></span><br><br><b style="font-weight:bold;">原因はマザボのメーカーが違うので上手くELFを読めてない？</b></span><br><span style="font-size:1em;">ちなみに前回自作OSが起動したときに使ったメーカーはASRock P67Pro3で</span><br><span style="font-size:1em;">今回検証したPCのマザボのメーカーがASUS P8Z77-V</span><br><br><b style="font-weight:bold;"><span style="font-size:1.4em;"><span style="color:#ff7f00;">ELFを上手く読ませるためにUEFIアプリケーションで使用されるファイルを読み込んでメモリ上に展開する処理を追加し、カーネルに読み込む処理に統合した</span></span></b></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">これによりブートローダーがカーネルのバイナリを取得でき、<br>二日目に実装するELFヘッダを解析し、<br>セグメントをメモリに展開する処理の前提となる</span></b><br><br>処理の中身はこんな感じ<br><b style="font-weight:bold;"><span style="font-size:1.4em;">・ファイルサイズを取得する<br>・ファイルサイズ分のメモリを確保<br>・ファイル内容をメモリに読み込む<br>・読み込んだバッファとサイズを呼び出し元に返す</span></b></p><p><span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">この処理をカーネルを読み込む処理と統合したことで、<br>カーネルの読み込み処理が、よりスムーズに行えるようになった</span></b></span><br><b style="font-weight:bold;">この日は二日目に実装するELFの解析まで実装したかったけど<br>風邪をひいて熱が出ていたので作業を中断した</b></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-aid="fuUJdH707aPSWihdZTEdK5" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" data-layout-type="301" data-slot="injected" data-tag-id="AD000001" data-tag-type="auto_ad" style="display:inline-block;max-width:100%;width:300px;height:250px"><span style="display:inline-block;"><img alt="" data-img="affiliate" height="250" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_301.png" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%" width="300"></span></div></div><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">2日目</b></span><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">この日はELFを解析する処理を追加し、BootServiceから抜ける処理と統合した</b></span></p><p><br><span style="font-size:1em;">処理の流れはこんな感じ</span></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">・ELF形式のカーネルを読み込む<br>・プログラムヘッダーに従って必要なセグメントをメモリに配置<br>・BootServicesから抜ける処理を呼び出してUEFIの制御を終了</span></b><br><br><b style="font-weight:bold;"><span style="color:#ff7f00;"><span style="font-size:1.4em;">この処理を追加することで、ELF形式のバイナリを<br>実行可能なメモリレイアウトに変換しカーネルが実行可能な状態になる</span></span></b><br><br><b style="font-weight:bold;">これが2日目に行った作業だ</b><br><br>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-aid="MOtBv5yGxIoHPeHT4z6Gq1" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" data-layout-type="301" data-slot="injected" data-tag-id="AD000001" data-tag-type="auto_ad" style="display:inline-block;max-width:100%;width:300px;height:250px"><span style="display:inline-block;"><img alt="" data-img="affiliate" height="250" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_301.png" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%" width="300"></span></div></div><p>&nbsp;</p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">3日目</b></span></p><p><br><span style="font-size:1.4em;"><b style="font-weight:bold;">この日は自作OSが起動するかをリベンジした<br><br>結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/18/miku-jk-jb/5e/e3/j/o4032302415636352335.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/18/miku-jk-jb/5e/e3/j/o4032302415636352335.jpg" width="420"></a><br><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">BIOSに戻された😭😭</b></span></span><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">ちなみにBIOSから抜けると一瞬だけ画面が表示されて<br>またすぐにBIOSに戻される</b></span><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">原因を探っていくと以下のものが判明した<br>・ブートローダーに.relocセクションが無い<br>・ELFを解析する処理でPIEに対応していない</b></span><br><br><b style="font-weight:bold;">ブートローダーに.relocセクションが無いと、ブートローダーがPIE形式のカーネルが正しくリロケーションされず、ブートローダーがクラッシュする可能性がある</b><br><br><b style="font-weight:bold;">また、ELFを解析する処理でPIEに対応していないとそもそも、リロケーションの処理すらできない</b><br><br>PIEとは位置独立実行形式と言って、任意のメモリアドレスにロードされても正しく動作するバイナリ形式だ<br><br><b style="font-weight:bold;">ブートローダーに.relocセクションを追加するために行った作業はこんな感じ<br><span style="font-size:1.4em;">・ブートローダーに.relocセクションを追加した</span></b><br>relocセクションを追加した理由は、カーネルをどこにロードされても動くようになるから<br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">relocセクションを追加した作業は、使用するリンカを変更しリンカオプションの調整を行って追加した</b></span><br><br>ちなみに本来は.relocセクションを避けるのが一般的だが、.reloc特有のアドレスを補正を活用して、異なるUEFIでもブートローダーの挙動が安定するようにした<br>relocセクションが避けられる理由は、<br>本来のUEFIブートローダーは固定アドレスでロードされる設計なので<br>そもそもアドレスの補正が不要且つ、挙動が不安定になる場合があるからだ。<br><br><b style="font-weight:bold;">では何故避けられる.relocセクションを追加したのか？</b><br>UEFIの挙動はマザボやFWによって異なるので、万が一カーネルをロードするアドレスがずれた場合に.reloc特有のアドレス補正を使って、正しい場所にロードできるようにしたからだ<br>&nbsp;</p><p><b style="font-weight:bold;">これは完全に.relocセクションの弱点を逆手にとって、&nbsp;ブートローダーの安定性と柔軟性を高めた</b><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">次にELFを解析する処理でPIEに対応させた作業について</b></span><br>行った作業はこんな感じ<br><span style="font-size:1.4em;"><b style="font-weight:bold;">・カーネルをPIE形式でビルドされるように変更<br>・ELFファイル内に.relaセクションの追加<br>・ブートローダーに.relaをパースして再配置処理を追加<br>・仮想アドレスから実アドレスに補正させる処理を追加</b></span><br><br><b style="font-weight:bold;">この処理を追加することで万が一カーネルが違う場所にロードされても、正しいアドレスに補正してくれてるようになった</b><br>これが3日目に行った作業だ</p><p>&nbsp;</p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-aid="ZAwf7cMo3SdOr9J0gz6pr1" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" data-layout-type="301" data-slot="injected" data-tag-id="AD000001" data-tag-type="auto_ad" style="display:inline-block;max-width:100%;width:300px;height:250px"><span style="display:inline-block;"><img alt="" data-img="affiliate" height="250" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_301.png" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%" width="300"></span></div></div><p><br><span style="font-size:1.4em;"><b style="font-weight:bold;">4日目</b></span></p><p><br><span style="font-size:1.4em;"><b style="font-weight:bold;">この日は3日目に追加した処理がちゃんと動いて自作OSが起動するかを試した</b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff0000;">ちゃんと起動した</span><br>画面が黒いのは序盤で説明したから説明は不要だよね<br><br>次にミニPCでも起動するかを試した</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/18/miku-jk-jb/6e/31/j/o4032302415636357078.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/18/miku-jk-jb/6e/31/j/o4032302415636357078.jpg" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;">結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/19/miku-jk-jb/d3/d8/j/o4032302415636357409.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/19/miku-jk-jb/d3/d8/j/o4032302415636357409.jpg" width="420"></a><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff0000;">エラーが出て起動しなかった😭</span><br><br>原因はPCIを使用したGPUの特定とELFの解析でエラーが出ている</b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff7f00;">まずはPCIを使用したGPUの特定のエラーを修正していくぞ</span></b></span><br><span style="font-size:1em;"><b style="font-weight:bold;">エラーの原因はこんな感じ</b></span></p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">・PCI上にGPUが無い場合は処理を中断していた</span></b></p><p><br><b style="font-weight:bold;">このせいでPCI上にGPUが無いPCでは内臓GPUを使うことができずに<br>ブートローダーがクラッシュしてしまう状態になっていた<br><br><span style="font-size:1.4em;">エラーを修正するために行った作業はこんな感じ<br>・GPUが見つからなくても処理を中断しない<br>・見つからない場合はGOPを使用して描画</span></b></p><p>&nbsp;</p><p><span style="font-size:1em;"><b style="font-weight:bold;">こうすることでPCI上にGPUが無くても、</b></span></p><p><span style="font-size:1em;"><b style="font-weight:bold;">内臓GPUを利用して画面を描画することができるようになり、グラボが無いPCにも対応させた</b></span><br>&nbsp;</p><p><span style="font-size: 22.4px;"><b>PCIを使用したGPUの特定のエラーを解決したので<br>起動するかを試した</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/19/miku-jk-jb/28/62/j/o4032302415636361953.jpg"><img alt="" contenteditable="inherit" height="315" src="https://stat.ameba.jp/user_images/20250718/19/miku-jk-jb/28/62/j/o4032302415636361953.jpg" width="420"></a><br><b style="font-weight:bold;"><span style="font-size:1.4em;">結果はGPUの特定エラーが直り、ELFの解析のエラーだけ残った状態になった<br><br><span style="color:#ff7f00;">それじゃあELFの解析のエラーを修正していくぞ</span><br>・.relaセクションの補足で0x25になっていたので正しい0x08に変更&nbsp;<br>・セグメントマッピングの追加<br>・未確保領域への書き込みを防止追加<br>・セグメントごとの実アドレスを正確に算出するように変更</span></b><br><br><b style="font-weight:bold;">こうすることで未確保領域への書き込みを防止し、<br>どんなメモリ配置でも起動可能になり、再配置処理が設計に統合され実機に対する対応力が上がった</b><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">ELFの解析のエラーを修正したので起動するかを試した<br><br>結果は</b></span><br><a href="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250718/16/miku-jk-jb/ee/70/j/o4032302415636285849.jpg" width="420"></a><br><span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">ちゃんと起動した</span></b></span><span style="font-size:1.4em;">😉<br><b style="font-weight:bold;">画面が黒いのはさっきと同じ</b></span><br>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">これが自作OSを色々なPCで、起動するようにした作業だよ</b></span><br><br>次回は<b style="font-weight:bold;">セキュアブートに対応</b>させたいな<br><br>ということで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした</p><p>&nbsp;</p><p>&nbsp;</p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-aid="DUjcknl9akF9awgRnlz187" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" data-layout-type="302" data-slot="injected" data-tag-id="AD000001" data-tag-type="auto_ad" style="display:inline-block;max-width:100%;width:323px;height:114px"><span style="display:inline-block;"><img alt="" data-img="affiliate" height="114" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_302.jpg" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%" width="323"></span></div></div><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><!--EndFragment --></p>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12917328823.html</link>
<pubDate>Fri, 18 Jul 2025 19:34:50 +0900</pubDate>
</item>
<item>
<title>ついに自作OSが起動したので作業内容を紹介</title>
<description>
<![CDATA[ <p><br></p><p><br></p><p><br></p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-slot="injected" data-aid="RKEzDzzT9WoqKL9wFz2X41" data-tag-type="auto_ad" data-tag-id="AD000001" data-layout-type="301" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" style="display:inline-block;max-width:100%;width:300px;height:250px" data-eid="1"><span style="display:inline-block;"><img data-img="affiliate" alt="" width="300" height="250" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_301.png" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%"></span></div></div><p><br></p><p><br></p><p><br></p><br>はい、<b style="font-weight:bold;">miku_JK_Jb</b>です<p></p><p>今回は<b><font color="#ff2a1a">自作OSを起動させる</font>ことができたので、起動させるまでの開発記録</b>を紹介していく</p><p>これまた久しぶりのブログ更新だな。自作OSのエラーが多かったり私生活が忙しかったので投稿が遅くなった🥺</p><p>&nbsp;</p><p><b>自作OSが起動したこと</b>が気になると思うので<b>先に起動した画面</b>を見せるとしよう。</p><p>&nbsp;</p><p><b><font color="#ff9e10" size="5">これが自作OSが起動した画面だ！！</font></b></p><p><a href="https://stat.ameba.jp/user_images/20250624/17/miku-jk-jb/25/52/j/o4032302415622503764.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250624/17/miku-jk-jb/25/52/j/o4032302415622503764.jpg" width="420"></a></p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">は？？起動しているの？？</b></span></p><p>&nbsp;</p><p>っと見ている人は思っただろう。</p><p>&nbsp;</p><p>&nbsp;</p><p><b><font size="5">大丈夫だ問題ない</font></b>。</p><p>&nbsp;</p><p><span style="font-size:1.4em;">これが<font color="#ff2a1a"><b>正常</b></font>だ。</span></p><p>&nbsp;</p><p><b>理由はカーネルが起動した後にグラフィックを描画するようにしていないから</b>だ。</p><p><b><font size="5">じゃあこの - みたいなのは何だって？</font></b></p><p><b>これはUEFIブートローダーで設定されたフレームバッファの状態がそのまま表示されている</b>のだ。</p><p>&nbsp;</p><p><b>カーネルを起動したら画面をクリアするようにしたら消える。</b></p><p>&nbsp;</p><p>ただ、私はカーネルが起動しているかを確認するために消していない</p><p>&nbsp;</p><p><b><font color="#ff9e10">動画でも自作OSが動いているのを見ることができるよ</font></b></p><p><iframe allow="fullscreen" frameborder="0" height="276" scrolling="no" src="https://static.blog-video.jp/?v=MCNvHQfu5ub8mTYuwLEKZuvgjw" width="276"></iframe></p><p>&nbsp;</p><p><font size="5">さて、<b>自作OSが起動した画面を見せたのでそろそろ開発記録を紹介</b>していくとするか</font></p><p>&nbsp;</p><p><span style="font-size:1.4em;">まずは<b style="font-weight:bold;">1日目</b></span></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">この日は以前ビルドしていたブートローダーとカーネルを実機で起動するかを検証した</span></b><br><br>↓検証した際の動画</p><p><iframe allow="fullscreen" frameborder="0" height="276" scrolling="no" src="https://static.blog-video.jp/?v=MCvDZclBq3B0dZdCPoOnhc5J2Y" width="276"></iframe></p><p>ちなみに<b style="font-weight:bold;">なぜ実機で検証しているのか</b>と言うと、<b style="font-weight:bold;">QEMUなどの仮想マシンとかを使うよりも開発している雰囲気が出るじゃん？笑</b></p><p>&nbsp;</p><p><b><font color="#ff9e10" size="5">検証結果は</font><font size="5">PCにそもそも自作OSの存在を認識されなかった🤪</font></b></p><p>クソが😮‍💨</p><p>&nbsp;</p><p>ってことで<font size="5" style="font-weight: bold;">エラーの理由を探っていく</font><font style="">と<font size="5"><b>すぐに<font color="#ff2a1a">エラーの原因</font>を発見</b></font></font></p><p>&nbsp;</p><p>&nbsp;</p><div><b><font size="5">そもそもカーネルのパスを間違っていた🤪</font></b></div><p><font style=""><a href="https://stat.ameba.jp/user_images/20250625/09/miku-jk-jb/d7/30/p/o0496024315622705936.png"><img alt="" height="243" src="https://stat.ameba.jp/user_images/20250625/09/miku-jk-jb/d7/30/p/o0496024315622705936.png" width="496"></a></font></p><div style="font-size: x-large; font-weight: bold;"><font style="">あとRootを開く処理を実装していなかった😱</font></div><div style=""><font style=""><b>Rootを開く処理とはOSがファイルを操作する下準備といった感じ</b></font></div><div style=""><font style="">処理の流れはYoutubeにて解説しているよ</font></div><div style=""><font style=""><b>こんな大事な処理を実装していなかったのは自分でも謎である</b></font></div><div style="">&nbsp;</div><div style=""><font style=""><b><font color="#ff9e10" size="5">そしてRootを開く処理を実装中に気づく</font></b></font></div><div style=""><font style=""><b><font size="5">ExitBootServiceの前に最新のメモリマップを取得していない</font></b></font></div><div style="">&nbsp;</div><div style=""><font style=""><b>これの何が問題かというと古いメモリマップを使用してしまうとカーネルが誤ったメモリ領域にアクセスしてしまうので<font color="#ff2a1a">クラッシュ</font>や<font color="#ff2a1a">フリーズ</font>が起きてしまう</b></font></div><div style="">&nbsp;</div><div style=""><font style=""><b><font size="5">ってことですぐに修正と再ビルド</font></b></font></div><div style="">&nbsp;</div><div style=""><font style=""><b><font size="5">これ1日目に行った作業の内容</font></b></font></div><div style=""><font style=""><b>結構抜けがあった感じだな</b></font></div><div style="">&nbsp;</div><div style=""><font style=""><font size="5"><b>2日目</b></font></font></div><div style="">&nbsp;</div><div style=""><font style=""><b><font size="5">2日目は1日目に修正したブートローダーが動くかをテスト</font></b></font></div><div style="">&nbsp;</div><div style=""><font style="">↓検証した動画</font></div><div style=""><font style=""><iframe allow="fullscreen" frameborder="0" height="276" scrolling="no" src="https://static.blog-video.jp/?v=MC38XMSPmIDglEEEJwBxY0UDvp" width="276"></iframe></font><div><font style="">ちなみに<b>1日目とは違うPCを使って検証している</b></font></div><div><font style="">理由は<b>1日目の検証で使用したPCは設定が面倒</b>なため</font></div><div>&nbsp;</div><div><font style=""><font size="5"><b>結果は<font color="#ff2a1a">黒い画面に赤い点線が出た</font></b></font></font></div><div><a href="https://stat.ameba.jp/user_images/20250625/21/miku-jk-jb/c1/9e/j/o4032302415623249342.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250625/21/miku-jk-jb/c1/9e/j/o4032302415623249342.jpg" width="420"></a><div style="">&nbsp;</div><div style=""><font style=""><font size="5"><b>考えられる原因はフレームバッファの描画処理で問題が起こっている？</b></font></font></div><div style=""><span style="font-size:1.4em;"><b style="font-weight:bold;">もしくはカーネルのビルド設定に問題がある？</b></span></div></div><div style="">&nbsp;</div></div><p>ってことで<font size="5" style="font-weight: bold;">エラーの理由を探っていく</font><font style="">と<span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">致命的なミスを発見</span></b></span></font></p><p><a href="https://stat.ameba.jp/user_images/20250626/00/miku-jk-jb/0a/83/j/o1080060815623313430.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20250626/00/miku-jk-jb/0a/83/j/o1080060815623313430.jpg" width="420"></a><br><span style="font-size:1em;"><b style="font-weight:bold;">写真にもデカデカと書かれているが</b></span><span style="color:#ff0000;"><span style="font-size:1.4em;"><b style="font-weight:bold;">カーネルを静的リンクではなく動的リンクにしていた</b></span></span><br>はぁ😮‍💨このお馬鹿さんは一体何をやっているのか😩</p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">ってことでカーネルを静的リンクで再ビルド</span></b><br>&nbsp;</p><p><b style="font-weight:bold;"><span style="color:#ff7f00;"><span style="font-size:1.4em;">で、結果は</span></span></b></p><p><a href="https://stat.ameba.jp/user_images/20250625/21/miku-jk-jb/c1/9e/j/o4032302415623249342.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250625/21/miku-jk-jb/c1/9e/j/o4032302415623249342.jpg" width="420"></a></p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">全く変わらず黒い画面上部に赤い点線が出る状態に</span></b></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">ってことで別の方法で試すことに</span></b></p><p><br><b style="font-weight:bold;"><span style="font-size:1em;">考えられる原因は検証用PCにグラボが刺さっているから、GPUを特定してGOPを取得する幅を広げればいいのではと考えた</span></b><br>&nbsp;</p><p><span style="font-size:1em;">GOPを超簡単に説明するとOSがグラフィックを描くようにする奴</span><br><br><b style="font-weight:bold;">処理の流れはこんな感じ</b></p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">PCIデバイスのスキャン<br>↓<br>スキャンで取得したクラスコードを元に手動で検出<br>↓<br>GPUを見つけたらBARを読み込みメモリを初期化</b></span></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1em;">流れとしては最初にPCIデバイスのスキャンを行い、取得したクラスコードもとに手動で検出、GPUを見つけたらBARを読み込み、メモリを初期化といった流れ</span></b></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1em;">こうすることで内蔵GPUと外部GPUの両方が存在しても、それぞれを識別して任意に選べて、複数のGPUがぶら下がってても、優先順位を決めて描画デバイスを選べるはず！！</span></b></p><p>&nbsp;</p><p><span style="font-size:1em;">中々実装も大変で1週間以上かかった。PCIのクラスコードの取得やBARを取得の機能自体は元々実装してあったのでそこだけは唯一の救いだった</span></p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">だが、結果は全く変わらなかった</b></span><br>&nbsp;</p><p><span style="font-size:1em;">次に<b style="font-weight:bold;">カーネルのようにブートローダーにもビルドミスが無いかをチェックした</b></span><br><br><b style="font-weight:bold;"><span style="color:#ff7f00;"><span style="font-size:1.4em;">結果は</span></span></b></p><p><a href="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/39/c8/p/o1920013215624399924.png"><img alt="" height="29" src="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/39/c8/p/o1920013215624399924.png" width="420"></a><br><span style="font-size:1.4em;"><span style="color:#ff0000;"><b style="font-weight:bold;">ブートローダーがEFI形式ではなく、ELF形式でビルドされていた＼(^o^)／</b></span></span></p><p>&nbsp;</p><p>ってことで修正していく</p><p><br><b style="font-weight:bold;">修正した内容は以下の通り</b></p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">・コンパイラ g++からclang++に変更<br>・リンカ ldからld.lldに変更<br>・リンカスクリプトを独自に変更<br>・ターゲット形式 .EFI固定から elfからEFI形式に変換するように変更</b></span><br><br><b style="font-weight:bold;">こうすることで</b><span style="color:#ff0000;"><b style="font-weight:bold;">しっかりとブートローダーをEFI形式でビルドすることができた</b></span><br><a href="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/ac/aa/p/o1920108015624404657.png"><img alt="" contenteditable="inherit" height="236" src="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/ac/aa/p/o1920108015624404657.png" width="420"></a></p><p>ちなみにコンパイラの変更やリンカの変更を行ったので3週間近く掛かってしまった</p><p>&nbsp;</p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">だが、それでも変わらなかった。</b></span></p><p>&nbsp;</p><p><span style="font-size: 22.4px;"><b>次に描画設定を詰め込む処理を修正した</b></span></p><p>&nbsp;</p><p><b style="font-weight:bold;">詰め込んでいる描画処理の設定はこんな感じ</b><br><span style="font-size:1.4em;"><b style="font-weight:bold;">・ピクセルの書き込み先アドレス<br>・解像度<br>・1ラインあたりのピクセル数</b></span></p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">・&nbsp;ピクセルの並び順</b></span></p><p>&nbsp;</p><p>ピクセルの書き込み先アドレスや1ラインあたりのピクセル数が分からない人向けに説明すると<br><span style="font-size:1.4em;"><b style="font-weight:bold;">ピクセルの書き込み先アドレス = 画面<br>1ラインあたりのピクセル数 = ピッチ<br>ピクセルの並び順 = RGBなど</b></span><br>&nbsp;</p><p><span style="font-size:1em;"><b style="font-weight:bold;">修正した内容は以下の通り</b></span><br><span style="font-size:1.4em;"><b style="font-weight:bold;">・戻り値をvoid型からEFI_STATUSを返すように修正</b></span></p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">・GOP, FBC に対してNULLチェックをするように修正</b></span></p><p><span style="font-size:1.4em;"><b style="font-weight:bold;">・汎用ポインタで扱えるように修正</b></span><br>&nbsp;</p><p>修正内容をざっくりと伝えると</p><p>&nbsp;</p><p><b style="font-weight:bold;">戻り値をVOID型からEFI_STATUSを返すように修正して関数の呼び出し元が、<br>「何が悪かったか」を明確に検出できるようになった<br><br>GOP, FBCにたいしてNULLチェックを行うことでクラッシュした時の耐性を向上させた</b></p><p>&nbsp;</p><p><b style="font-weight:bold;">汎用ポインタで扱えるようにして、読み書き型依存性をなくすようにした</b><br>&nbsp;</p><p><b style="font-weight:bold;"><span style="font-size:1.4em;">尚、結果は変わらない模様</span><br><br><span style="font-size:1.4em;">最後にBIOSの設定でフルスクリーンロゴを有効にさせた</span></b><br><a href="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/74/5b/j/o1920108015624413573.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/74/5b/j/o1920108015624413573.jpg" width="420"></a><br><br>フルスクリーンロゴはこんな感じ<br><a href="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/3f/f5/j/o1920108015624414471.jpg"><img alt="" height="236" src="https://stat.ameba.jp/user_images/20250627/18/miku-jk-jb/3f/f5/j/o1920108015624414471.jpg" width="420"></a><br><br><span style="color:#ff0000;"><b style="font-weight:bold;"><span style="font-size:1.4em;">フルスクリーンロゴを有効にした所、無事に起動した</span></b></span><br><a href="https://stat.ameba.jp/user_images/20250624/17/miku-jk-jb/25/52/j/o4032302415622503764.jpg"><img alt="" height="315" src="https://stat.ameba.jp/user_images/20250624/17/miku-jk-jb/25/52/j/o4032302415622503764.jpg" width="420"></a></p><p><br><b style="font-weight:bold;"><span style="font-size:1.4em;">では、なぜフルスクリーンロゴを有効にしたら起動したのだろうか？<br><br>原因は主に2つ<br>・GOPが初期化されていない<br>・コンソールモードの初期状態が異なる<br><br>GOPが初期化されていない点について解説していくと</span></b></p><ul><li><span style="font-size:1.4em;"><b style="font-weight:bold;">フルスクリーンロゴが有効な場合だと、UEFIが自動的にGOPを初期化してくれ、</b><b style="font-weight:bold;">画面を表示する準備をしてくれるので、先にGOPの初期化が済んでいる状態になる</b></span></li></ul><p><b style="font-weight:bold;">ちなみにフルスクリーンロゴが無効な場合だと、UEFIがGOPの初期化をしないことがあるので、ブートローダーでもGOPの取得に失敗することがある</b><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">コンソールモードの初期状態が異なる点ついて解説していくと</b></span></p><ul><li><b style="font-weight:bold;"><span style="font-size:1.4em;">フルスクリーンロゴを有効にすると、UEFIが最初にコンソール出力を非表示にして、ロゴを表示させるので、<br>文字出力やフォントの扱いに独特な状態遷移が起こる</span></b></li></ul><p><span style="font-size:1em;"><b style="font-weight:bold;">ちなみにフルスクリーンロゴを無効にすると、設定が異なるので、コンソールの出力ポインタであるConOutと、コンソールの出力モードのSetModeの呼び出しが崩れてしまう</b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;"><span style="color:#ff7f00;">そう考えると意外とフルスクリーンロゴを有効にすることって大事なんだな</span><br><br>尚、EFI形式でビルドした後のソースコードを修正を行わずに、フルスクリーンロゴの設定を有効にした状態で、起動するか検証したが、起動することはなかった。</b></span><br><br><span style="font-size:1.4em;"><b style="font-weight:bold;">これが自作OSのカーネルを起動するまでの作業内容だったよ</b></span><br><span style="font-size: 22.4px;"><b>これでようやくスタートラインに立った</b></span></p><p>&nbsp;</p><p><span style="font-size: 22.4px;"><b>​​​</b></span>次回は<b style="font-weight:bold;">ブートローダーの開発で苦労した点について解説していくよ</b><br>ということで以上<b style="font-weight:bold;">miku_JK_Jb</b>でした</p><p><br></p><p><br></p><p><br></p><div class="pickTag_root" style="text-align:center;"><div class="pickTag" contenteditable="false" data-slot="injected" data-aid="3dKDN9KcGxuqaIBycHbSe1" data-tag-type="auto_ad" data-tag-id="AD000001" data-layout-type="301" data-img-size="" data-img-url="https://stat.agekun.ameba.jp/ad/amebapick/omakase/omakase_ad_thumbnail.png" style="display:inline-block;max-width:100%;width:300px;height:250px" data-eid="2"><span style="display:inline-block;"><img data-img="affiliate" alt="" width="300" height="250" src="https://ssl-stat.amebame.com/pub/content/9477400408/amebapick/item/picktag_autoAd_301.png" style="box-sizing:border-box;border:1px solid rgba(8, 18, 26, 0.08);border-radius:4px;max-width:100%;max-height:100%"></span></div></div><p><br></p><p><br></p><p><br></p><br><br><p></p>
]]>
</description>
<link>https://ameblo.jp/miku-jk-jb/entry-12912323527.html</link>
<pubDate>Fri, 27 Jun 2025 19:07:55 +0900</pubDate>
</item>
</channel>
</rss>
