uchan note

プログラミングや電子工作の話題を書きます

OS自作入門の入門

この記事では OS 自作の最初の一歩の部分を紹介します.OS 開発を始める前に雰囲気をつかみたい,という方に向けて書いています. 「セキュリティキャンプ 2018」の「OS 開発ゼミ・フルスクラッチ OS を書こう!」の補足資料でもあります.

OS を作る!? 夏の集中開発ゼミ開催!

2018 年の夏季 3 日間で集中して OS を開発するイベントのご紹介です。なんと参加費、交通費、宿泊費など無料なので、学生さんは奮ってご参加ください! 概要 オペレーティングシステム(OS)は IT システムを構成する重要な要素です。しかし OS の中身を知…

【技術書典4】USB 3.0 ホストドライバ自作入門を出します(ダウンロード頒布有)

大人気の技術書オンリーの同人誌即売会「技術書典 4」が、2018/04/22(日)に秋葉原 UDX で開かれます。 今回は「USB 3.0 ホストドライバ自作入門」を出しますので、そのお知らせです。 頒布情報 日時 2018 年 4 月 22 日(日) 場所 秋葉原 UDX アキバ・ス…

seccamp2018

このページはセキュリティキャンプ全国大会 2018 の集中開発コース「OS 開発ゼミ」の紹介ページです. OS 開発ゼミ 基本情報 OS 開発ゼミの基本的な情報は以下の通りです。 イベント:セキュリティキャンプ全国大会 2018 コース:集中開発コース トラック:…

x86-64 モードのプログラミングではスタックのアライメントに気を付けよう

x86-64 モードというのは x86 系 CPU の動作モードの一つです.64 ビットモードとかロングモードと呼ばれることもあります. x86-64 モードではページングが必須だったり,セグメント CS や DS に設定するベースアドレスやリミットが無視されるなど,CPU 自…

How to reset NVRAM of MinnowBoard Turbot

This article expresses how to reset a NVRAM of a MinnowBoard Turbot. MinnowBoard Turbot is a x86_64 board for embedded use. Why this article is useful Enabling fast boot in BIOS setup utility will block you to enter to the utility again. Y…

OS 自作に便利な C++ の機能 10 選(後編)

自作 OS Advent Calendar 2017 11 日目の記事です(盛大に遅刻しました). 1 日目の記事 に引き続き,OS を書く際に便利な C++ の機能を紹介していきます.

レガシー BIOS が 2020 年で消えたあとの世界

11 月に入って,Intel が 2020 年までにレガシー BIOS サポートを完全に消そうとしているというニュースが飛び込んできました. www.itmedia.co.jp OS を自作する場合はいまだに BIOS に頼った起動コードを書くことが多いと思います. このニュースが意味す…

mdadm の write-intent bitmap と bad block log を競合させてみる

本記事は Linux Advent Calendar 2017 の 4 日目の記事です. 概要 Linux のソフトウェア RAID の機能を管理するための mdadm コマンドにまつわるバグの再現実験を行います. そのバグとは,次の記事で紹介されている「バグ 1」のことです. blog.cybozu.io

OS 自作に便利な C++ の機能 10 選(前編)

自作 OS Advent Calendar 2017 1 日目の記事です. 筆者が大好きな C++ の機能の中で,OS を書く際に便利なもの 10 個を紹介する予定です.

はてなブログで画像タグが展開されないバグの検証テスト記事

画像タグを張りつける条件によってはタグが展開されないことを確認するテスト.以下の画像をサンプルとして使う スペースによるコードブロック の後だとなぜか展開されない. [f:id:uchan_nos:20171126114150p:plain:w100] 2枚貼っても展開されない. [f:id:…

UEFI + iPXE で自作 OS をネットワーク起動する

概要 開発マシン上に置いた自作 OS のカーネルを,ネットワーク経由でターゲットマシンに読み込ませ,起動させるやり方についての記事です. ディスクイメージをネットワークブートする - Raphine Project の記事を大いに参考にしました.Raphine Project の…

【技術書典3】システムプログラミングハンドブックを出します(ダウンロード販売有)

大人気の技術書オンリーの同人誌即売会「技術書典3」が、10/22(日)に秋葉原 UDX で開かれます。 前回の技術書典2ではLinuxカーネルモジュール自作入門を出しました。 今回は「システムプログラミングハンドブック」を出しますので、そのお知らせです。 頒…

Newlibビルドメモ

Newlibをclangを使って自作OS向けにビルドしたメモ 環境:Ubuntu 16.04、clang 3.8 Newlibバージョン:d6cac3e1da1a117f8a93b91371f3f0a5c071219f Newlibはなぜか、host=targetでconfigureしてしまうと何もビルドが走らない。 たとえホスト環境と同じ環境で…

UEFI Memory Map メモ

UEFI で得られる Memory Map の実例。 機種:qemu-system-x86_64 Index Type PhysicalStart VirtualStart NumberOfPages Attribute 0 3 EfiBootServicesCode 00000000 00000000 1 F 1 7 EfiConventionalMemory 00001000 00000000 9F F 2 7 EfiConventionalMe…

x86 OS自作ゼミの進め方

セキュリティ・キャンプ2017のx86 OS自作ゼミの進め方、最大限の成果を出す方法について思うところを書きます。 3日間は短い! x86 OS自作ゼミは3日間しかありません(それでもセキュリティ・キャンプの中では最長なのですが)。OS自作という壮大なテーマに…

seccamp2017

x86 OS自作ゼミ 基本情報 x86 OS自作ゼミの基本的な情報は以下の通りです。 タイトル:x86 OS自作ゼミ トラック:言語やOSを自作しよう 時間帯:3日間連続 必要機材:PCのみ 事前学習:あり(詳しくは後述) x86 OS自作ゼミ 概要 講師がサポートしつつ、世界…

【技術書典2】Linuxカーネルモジュール自作入門を出します(ダウンロード販売有)

皆さんは 技術書典2 というイベントをご存知でしょうか。2017年4月9日に秋葉原で開催される、技術書オンリーの同人誌即売会です。 この記事では、技術書典2のために書いた 「Linuxカーネルモジュール自作入門」 の目次をご紹介します。最後にダウンロード販…

自作OS Advent Calendar 2016 目次

これは 自作 OS Advent Calendar 2016 の 25 日目の記事です。 1 日目から 24 日目までの記事をまとめた目次になっています。 それぞれの記事のURLの後に書いてある一言紹介は、uchanによるものです。 記事の著者さんに確認を取っておらず、もしかしたら誤っ…

はりぼてOSでELFなアプリを起動する

これは 自作 OS Advent Calendar 2016 の 18 日目の記事です。 概要 『30 日でできる!OS 自作入門』 の「はりぼて OS」が対応している実行可能形式は HRB 形式です。 HRB という名の通り「はりぼて OS」独自の形式で、.text、.data、.bss セクションに相当…

Windows で GCC 6.2.0 をビルドするメモ

これは 自作 OS Advent Calendar 2016 の 8 日目の記事です。 概要 現時点で最新バージョンの GCC 6.2.0 を Windows 上でビルドするメモです。 このメモでは、i386-elf をターゲットにした GCC を作ります。 コンパイラ本体のみが対象で、標準ライブラリ等は…

レベル変換の仕組み(オームの法則からMOS-FETを使ったレベル変換回路まで)

レベル変換 レベル変換とは、電圧の異なる信号線をつなぐ際に電圧を変換することです。 例えば Raspberry Pi という小さな Linux ボードコンピュータの電源電圧は 3.3V です。 そのため GPIO の入出力電圧も 3.3V となっており、電子工作でよくある 5V 駆動…

osdev-jp という自作 OS のコミュニティを作りました

これは 自作 OS Advent Calendar 2016 の初日の記事です。 自作 OS Advent Calendar といいつつ、初日は技術的なことは書かずにコミュニティの紹介をします。期待してくださった方にはすみません(^^;) 自作 OS コミュニティの昔と今 私が自作 OS というもの…

nfcpy で複数の System Code を持つ NFC タグを扱う方法

Linux (Ubuntu 16.04) で nfcpy を使ってみました。落とし穴が多い気がしたので、ここにまとめます。 特に、複数の system code を持つような NFC タグの扱いが複雑ですので、詳しく説明します。 概要 Linux で NFC タグを読み書きするには nfcpy という Pyt…

Python で Markdown 文書を HTML へ変換する

python-markdown2, py-gfm, pygments というライブラリを使って Markdown 文書を HTML へ変換するメモです。 GitHub Flavored Markdown (GFM) の特徴である Fenced Code Block にも対応しています。 インストール $ pip3 install --user python-markdown2 py…

deb パッケージングメモ - alien 編

Ubuntu で deb パッケージを作ろうとして調べ、実験したメモです。 なぜ自作ツールの deb パッケージを作るのか 開発したソフトウェアを Chef や Ansible などでデプロイするのに、apt-get install できると便利です。 deb にすることで、プログラム本体だけ…

楽しい仕様書と生産性に関する考察

結論:楽しい仕様書は将来にわたってチームの生産性を向上させる。 仕様書を書く効果 『Joel on Software』(オーム社 2005)でジョエルはこんなことを書いている。 「仕様書の最も重要な役割はプログラムをデザインすることだ。」 仕様書を書くには設計する…

Git で deb パッケージング

Git で管理しているソフトウェアを deb パッケージにしたいことがあります。 本記事は、1 つの Git リポジトリの中でソフトウェア本体と deb パッケージのメタデータを管理する方法を説明します。 2016/02/29追記:ここで紹介するブランチ構成には問題がある…

KiCad Pcbnew 各レイヤの役割

概要 KiCad のプリント基板エディタ Pcbnew の各レイヤの役割をメモします。 この記事は KiCad 4.0.1-stable を対象に記述しています。古いバージョンではレイヤ名が日本語になっていたりと違いがあるようです。バージョン 4.0.1 に対応した体系的な説明が見…

MOSFET を用いた双方向レベル変換回路の考察

前回の記事 で紹介したレベル変換回路(level shifter)の動作を説明し、MOSFET の機種選択の考慮点を考えます。結論は、MOSFET のゲートしきい値電圧が高い機種は使えないので注意しましょうということです。