投稿

2014の投稿を表示しています

ブートローダーは4行で実装される

この記事は UEFI Advent Calender と 自作OS Advent Calender のためにかかれました。 22日(+3日)の記事です。 遅れてもうしわけないです。 ブートローダー まず、自作OSにはブートローダーによってカーネルをロードしなければはじまりません。 特段複雑なローダーがなくとも、たとえばBIOSから直接起動するのなら そのための形式で用意せねばなりません。 しかし、これが自作の入口としてかなりの関門になってしまっているのではないでしょうか。 なので自作OSからはちょっと離れますが、ブートローダーについて書きます。 UEFI ということで、UEFI Appsとしてブートローダーを実装する話です。 まず、UEFIとは何かについては UEFI Advent Calender 1日目の記事 を、 そしてこの作業の前知識として UEFI Advent Calender 12日目の記事 を参照していただけると良いです。 一応ざっとUEFIについて触れておくと、 BIOSの代替規格のファームウェアで、多機能かつ高機能。また、可搬性も考えられています。 UEFIのファームウェア上で直接動作できるUEFI Appを記述するには、 tianocoreがBSDLで公開しているEDKというツールキットか、 Gnu toolchainと合わせて使えるgnu-efiというBSDLのライブラリを用います。 EDKでも一応gcc等が使えます。 EDKは、パッケージとして豊富にライブラリが揃っており、libcやbsd socket、pythonがつかえます。 gnu-efiは、Linux/OS Xの上で開発するにはEDKより手軽にはじめる事ができます。 UEFI AppはWindows同様PE形式のバイナリなので、 実はEDKやgnu-efiがなくとも*.dllなバイナリ(つまりrelocatableでsharedなPEバイナリ)を作成してから、objcopyコマンドとかで必要な部分だけ取り出して拡張子がefiのファイルにするとかでも一応動作できるバイナリを作る事は可能です(が、面倒です) UEFIのAPIであるProtocolは初期状態でもFile I/OやGraphicsの処理まで揃っていますが、

UEFIアプリケーションのはじめかた

UEFI Advent Calender 12日目だったoruminです 盛大に遅刻かましてもはや遅刻とさえ言えない感じです。 UEFIのアプリケーション、まずどう作るかわからない方も多いかと思います。 まず、UEFIが実行できる実行形式について、これはWindowsと同じPEバイナリです。 また、EDKのようなツールキットを用いる必要がありますが、 今回はgnu-efiで説明します。 gnu-efiとは、BSDLなEFIアプリケーション開発用ライブラリです。 LinuxやBSDでの開発に親和性が高いと思われます。 これは最近だとaptやpacmanでそのままバイナリインストールが可能です。 そして、次にこのようなファイルを用意します 前者がUEFIでのHello, World!です。efi_mainがエントリポイント、 ImageHandleもSystemTableもUEFIのAPI(Protocol)を呼び出し、使うのに必要なパラメータとなります。 今回は、gnu-efiの初期化をしてから文字列を出力するだけなので特に使用していません。 デバッグ文字列出力は SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello, EFI!\n"); でも良いのですが。 後者のMakefileについては、書いてある通りです。 ライブラリとインクルードファイルの指定、 それにリンカスクリプトやスタートアップルーチンはgnu-efiのものを使うように指定。 shared objectな実行ファイルを作ってから、 objcopyコマンドで必要な部分を抜き出す(ELFヘッダは要らないので) という流れになります。 CFLAGSについては、色々ごちゃっと指定してますが、 まず必須なのは-fPICと-fshort-wchar、そしてx86_64であれば-DEFI_FUNCTION_WRAPPERだけで、あとのは特段必ず指定しないといけないものではないです。 さて、これでmakeをしますと、hello.efiが作成されるので、 あとはEFIシステムパーティション直下にでも置いてあげて、起動時にUEFI Sh

@toshi_aにTLを大破させられて1年がたちました……

mikutter Advent Calender 9日目の記事です. みなさん,去年のAdventCalenderは覚えておいででしょうか.きっと, 全部覚えてる人は少ないでしょう. @toshi_a被害者の会 http://orumin.blogspot.jp/2013/12/toshia.html mikutter Advent Calender 2013 8日目の記事の様子です. TLを壊されました.そしてささやかな復讐をしました. そう,あれから1年がたったのです. 何か記念(怒)に書こうと思ったのですがネタが特に思い付きませんでした. 適当に今年の振り返りでも書きます. あれから色々ありました. まずなぜか@toshi_aさんにフォローされました. そして, とりあえず私がひっこしたおかげでイベントとかに参加しやすくなったので, つくもたんでそういえばだけど本棚の上はこーなってるんですよ。奥はとしぁさんから頂いて手前はぺんぎんさんから頂きました pic.twitter.com/vLz5QVYfbg — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 12月 9 なんか貰ったんですね,初夏の京都のOSCで. おかげで部屋に彩りが増えました. ありがとうございました とくにそれからはmikutter関連でなにかあったりはしてないのですが, mikutterそのものは3系になりさらに進化して良いです. ArchLinuxユーザーの私は新しいmikutterをすぐに使えてとても有り難いですね. ということでArchをつかおう! あれ,なんかArchの宣伝になってしまった,まあいいや,oruminでした.

Ruby on OSv

これは OSv Advent Calender 2+1日目の記事 です. グアムの ハワイのワイキキビーチで書き上げたからまだ12/2という"てい"でよろしくおねがいします. 〜 OSvのCRuby移植担当してたoruminです. OSv1日目の記事 で @syuu1228 さんが説明されていた通り,現在OSvで 複数の言語ランタイム/アプライアンスが動作します. CRubyも移植は一応の完成を見ることができ,動作させる事が可能です. 今回は動作方法について書きます. じゅんび まずはリポジトリのcloneから. $ git clone http://github.com/cloudius-systems/osv.git osv その後,忘れずsubmoduleをinit & updateしましょう $ cd osv && git submodule --init update ビルドのためには,いくつかパッケージが必要です. https://github.com/cloudius-systems/osv/blob/master/README.md に必要なパッケージはFedora,Debian,Archについて記述されています. しかし,Fedora20を用意できるのであれば,osvのディレクトリで, $ sudo ./script/setup.py と実行すれば必要なパッケージを全て準備してくれます. ビルド  ビルドは単純です. $ make -j`nprocs` image=ruby-example このようにしたら,あとはビルドが終わるまで待機です. なお,rubyのビルド中にエラーで失敗する時は,-jフラグを外してもう一度やってみてください. まだrubyとosv kernelの並列ビルドがうまくいかない時があるようです(すみません) 実行 次のスクリプトでOSvは実行できます $ ./script/run.py どうでしょうか? うまくいけば OSv v0.16-814d434 eth0: 192.168.1.89 Hello, world! のように表示されます. また, $ ./script/run.py

What's UEFI

UEFI Advent Calender 一日目,oruminです. 初っ端なのでまずUEFIとは何かについて書こうと思います. ・UEFIとは? UEFIとは,ファームウェアの一種です. 一般的なPCはBIOSからOSを起動している事はご存知だと思われますが, 実はBIOSは最早過去の遺物となりました. BIOSの代替として2000年頃からIntelが開発していたEFIは, 多くの企業とコンソーシアムを立ち上げ,現在UEFIとして規格が策定されています. 2010年頃からはIntelのマザーボードを皮切りとして一般向けにも採用され, 現在市場にあるPCのほぼ全てがUEFIでしょう. BIOSの設定画面だと思っているそれは 最早UEFIです ・BIOSとの違いは? 大きな違いはデファクトスタンダードとしてなんとなしに採用されてきたBIOSと違い, 多くの企業のコンセサスの元策定された 規格が存在し,閲覧が可能 である事です. この規格は,ブートローダや診断ツールといったものの開発が容易であるよう, プログラミングのためのインターフェイス,APIが規定され公開されています. これを扱うためのSDKが公開されているため,C言語やPythonといったもので 診断ツール等を記述可能になっています. なんと,UEFIのAPIを用いて記述したアプリケーションプログラムは,OSが起動する前の段階(pre-OS Environment)で UEFI内蔵のShell から起動する事ができます. また,IBM-PCの時に作られたBIOSは16bit Intel CPU前提のアークテクチャであるため, 多くの制限がありましたが, UEFIの場合はこの制限が無くなり ,CPUのアーキテクチャに非依存です.Intel CPUのReal modeでないとBIOSから起動できない,などという事がないためブートローダーも16bitでなく32bitプロセッサなら32bit,64bitプロセッサなら64bitの命令がつかえるため,メモリも潤沢に使えます. 現在はx86,x86_64,AArch64のUEFI実装が存在します. そして,一番のBIOSとの違いはブートシーケンスにあるのではないでしょうか. ・UEFIのブートシーケンス

オーディオアンプを作ってみました。

イメージ
初アンプ自作。 ぺるけさんの FET作動式ヘッドフォンアンプ を作成。 ぺるけさんの作例をそのまま使わせてもらってます。 ただ、シャーシの穴開けをボール盤使える環境にある友人に依頼した時、依頼ミスで左右が反転したのでラグの位置等もそのようになってます。おかげで音量ツマミが左側になりましたが些細な事でしょう。 結局他にいくつか穴を開ける必要出てきて結局電動ドリル買いました。 ぺるけさんはオーディオクラスでないパーツを使っておられましたが、私はなんとなーくコンデンサを東信工業のUTSJにしてみました。初アンプ自作ですしオーディオに対して無知なのでこのコンデンサにしてどうとかあんまりわからんのですが。 一発で音が出て感動してますし、個人的には結構良いように思えます。 あとはボリューム抵抗のシャフトを切る道具もってなくてツマミをつけず裸のままにしてるのをなんとかしたいです

電気式華憐音楽集団2nd Live "Gig Detonator"

イメージ
表題通りのライヴに参加してきました。 グッズ類 BLACK BOX、white box、Red Box ライヴ、あまり行ったことなかったのですがなかなか楽しめました。 良いものですね。

ガジェットってどんどん増えますよね

イメージ
最近買ったガジェットとかマシンとか。 まずPC-98 ええ、最近、最近買ったマシンです。 キーボードはPTOSキーボードなのでALPS電機の黄軸メカニカル! PPC Mac (G5) 画像中央、スカイセンサー5800の台になっちゃてるやつです。 ええ、これも最近入手しました。はい。 3D対応シアターで使われてる3Dメガネ。ジャンク屋で入手 秋葉原の三月兎ですぐ売り切れたと話題の、PC-98やx68k向けCF2SxSI変換機、日本橋仕様。 生産中止した古い型のUSB TrackPointキーボード(US配列) それと最近お気にいりのガラクタ屋でコントローラ付で1000円だったスーパーファミコン という感じでなんか自宅のほうがジャンク屋になりかけている……むしろジャンク屋が自宅説

ちくわパフェだよ☆CKP!

事の発端。 ちくわパフェつくるか — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 特に意味も切っ掛けもない。ふと、思い付いた。 その後30分に渡りちくわちくわずっとtweetする。 ちくわ大明神 — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 余こそちくわ第五セクター議長である — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 ああちくわ、どうして貴方はちくわなの — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 全知全能たるちくわの名の元にここに第五インターナショナルちくわ主義会議の開催を宣告する — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 ちくわは円形をしており、これは平和の象徴である。また、縦に見たときそれは剣に見立てられ、平和を脅かす物を打ち砕く破邪の象徴である。そしてちくわに存在する空洞は何者にも囚われない柔軟さを示しており、よってちくわとは聖なる象徴なのである。 — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 聖ちくわ法王猊下は右手にちくわ、左手にもちくわを持ち、レコンギスタ<熱狂的ちくわ征服>の開始を宣下なされた — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 ちくわ原理主義者が修正ちくわ主義者に自己批判を要求するシーンは涙なしには語れない — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 ちくわ狂想曲 — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 ちくわは棒状であるが空洞も持つ。男根と女陰両方のシンボルになりうるちくわは錬金術の両性具有<アンドロギュノス>が象徴する完全なるもの、第五元素、第一質料、すなわち哲学者の石を示すのだ。 — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 11月 11 抜粋。何のことだかさっぱりだと思う。なんだろうこれ。よくわからないテンションだった。 この調子でずっと居たので、この後出掛けて、帰り

BtrFSが死んだ。

10/27、突如ラップトップの/homeがRead-Onlyに。 Linux3.17.1をつかっており、FSはすべてbtrfs。 /homeだけは一時間に一度スナップショットを取っていた。 @kotatsu_mi ここをな、読むんじゃ https://t.co/43YPQnSH0V — このアイコンはておくれアイコンと言います (@naota344) 2014, 10月 27 アッ…… スナップショットとるとトランザクションが壊れるバグが3.17.0と3.17.1に発生してたらしい。 3.16.xから3.17.xにupdateして、24時間も経たぬ出来事であった。 @kotatsu_mi そのFS、これが原因だとするとsnapshotにさわると死ぬ病気になってるからintegrationのfsck動かしてね integration はここに書いてる https://t.co/ceChw3y3n2 — このアイコンはておくれアイコンと言います (@naota344) 2014, 10月 27 なるほどね? うぇい pic.twitter.com/THSTXyKNfi — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 10月 27 いや、確認にもう一度btrfsckしたらとんでもなく大量にエラー流れてる……? pic.twitter.com/O0rRLp6vl3 — 側転幼女おるみんちゃん (@kotatsu_mi) 2014, 10月 27 btrfsckで事無きを得たと思ったけど、backrefが死んでいた。 この状態でも普通にログインしてデータをR/Wして、と出来ていたのだが、 backrefについてのエラーがずっとdmesgに流れるのは精神衛生上よろしくない。 @kotatsu_mi blockが「blockを参照しているblock」をbackrefとして持つんだけど、元からの参照が見つからないみたいな — このアイコンはておくれアイコンと言います (@naota344) 2014, 10月 27 @kotatsu_mi まあそもそもbtrfsckはあのへんがあれなのでrefあたりは結構しんようならん — このアイコンはておくれアイコンと言います (@n

ニキシー管工作

イメージ
夏のコミックマーケット(C86)でニキシー管時計のハウツーと部品を頒布しておられる 方( @euc_ さん)がいたので、おもわずゲット。 8月の終わりに工作してみました。 開始風景 http://nixie-tube.com  で販売されてる昇圧回路をつかいます。 表面実装だけなのでラクちん。 点灯確認。これだけでめっちゃテンション上がりました。 ニキシー管は足が13本もあるのでブレッドボードに載せるだけで苦労…… たぶんユニバーサル基板にニキシー管を8本載せるってあたりが一番苦労しました。 今度やる時は基板をEagleかなんかで実装してからやって配線はプリントでしたほうが良いと思う。 奥から、昇圧回路、フォトカプラでスイッチングするやつ、ニキシー管、Arduino uno、Arduinoのシールド。これらを接続 デン。 はい、ということでちゃんとダイバージェンスメーターみたいになりました! いまこれ時計として使ってます。 ニキシー管は浪漫。

タモリカレー

イメージ
夏のある日、思い立って作りました。 http://www.1101.com/curry_club/pdf/recipe.pdf のレシピをそのまま参考に。 これが材料。 以下調理風景ダイジェスト そして完成 手込んだことしただけあって、達成感。

Google Summer of Code 2014

イメージ
無事終了しました。 今回私は Cloudius Systems の作る OSv の開発に参加しました。 これはクラウド向けに最適化されたOSで、ハイパーバイザをターゲットにしているものです。 元々はJVMの起動だけをサポートしてましたが、これにCRubyの移植を行ないました。 現在OSvは Open beta をリリースしているので、是非試してみてください。

IIJmio

イメージ
しばらく書いてなかったブログに書いていこうと思います。 8月頭まで遡りますが、Nexus7のためにIIJmioのSIM買いました。 ついでにNTT西日本からのレンタルでLTE対応の光ポータブルというポータブルWi-Fiも入手。 捗る。

UEFIシステムパーティション

# gdisk /dev/sda パーティションタイプはEF00 # mkfs.vfat -F 32 /dev/sda1 おわり

LinuxでもrEFIndしたい!

以前UEFIについてpostした時はGRUBで説明しました. しかし,そもそもが複数ブートローダーをインストールでき,しかもブートメニューそのものをもつUEFIにとって,GRUBのような旧来のマルチブートの巨大な仕組みは必要でしょうか. それと,MacユーザーがrEFInt/rEFIndつかってるのかっこいい ということでrEFIndをLinuxでもつかおう!

Linux カーネルコンフィグ 晒し

TLで今カーネルコンフィグの話になってたから自分のカーネルコンフィグ置いてみる. マシンはThinkPad Edge E145 (A4-5000) です 今回はこれだけのネタでした. 他の人はどんなコンフィグにしてるとか,このコンフィグこうしたらいいんじゃない?とか,募集してます.

UNIX and 2BSD on PDP11(SIMH) その2

前回 からの続きなので前回から読んでること前提です BSDを入れる前に BSD関連についてはこちらを参考にした http://gitter.matrix.jp/simh-for-unix/v6-unix-on-simh/ 情報がよくまとまって非常にかりやすいサイトである. インストールしたUNIXv6に2BSDをインストールする. また阪大のミラーから ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/UnixArchive/PDP-11/Distributions/ucb/2bsd.tar.gz 2BSDのtarballを入手. ftp://ftp.ics.es.osaka-u.ac.jp/mirrors/UnixArchive/PDP-11/Bug_Fixes/V6enb/v6enb.tar.gz からv6enbを入手し,解凍.cc -o enblock enblock.cとすることでenblockコマンドを作成. gunzip -d 2bsd.tar.gz | ./enblock > 2bsd.tap とすることで,tar形式でアーカイブされた2bsdのテープイメージ(simh用形式に変換済み)が手に入る.これを,UNIXv6に入れてアーカイブを解凍するだけ……なのだが問題がある. tarコマンドはUNIXv7より追加されたコマンドでUNIXv6にはtpコマンドしかない. tpコマンドも使うとtarにかなりよくにたオプションであることがわかる. とりあえず, 前回 の記事にあるSoftwareKitからもってきたUNIXv7のイメージを用いる. その前に起動スクリプトであるUV7に修正が必要. 2bsd.tapをUV7とかと同じフォルダにコピーしてきて, UV7に att tm0 2bsd.tap att tm1 tape.tap と書く.これで2bsd.tapはtm0にアタッチされ,tape.tapというテープイメージは新しく作られた上でtm1にアタッチされる. そして, # cd /tmp # tar xv0 tar # tp rm1 tar としてやるとtm1にあるtape.tapにtarが書き込まれる. ちょっとウンチク. tarのxv

UNIX and 2BSD on PDP11(SIMH) その1

2010年ぐらいに初めてsimh-pdp11に触れてから, ちょいちょいancient UNIXで遊ぶのですが毎回色々忘れてググってるのでメモ まず普通にsoftware kitからUNIX v7を実行する方法 http://simh.trailing-edge.com/software.html SIMHの公式ページの,Software Kitは様々なアーキテクチャの様々なOSをアーカイブしている ここからUNIX v5〜v7を入手可能 uv7swre.zipをダウンロードしたら解凍し, simh-pdp11(ArchLinux以外でビルドしたりしたらpdp11ってコマンドだと思う)をつかって, $ simh-pdp11 UV7 で起動.UV7は起動スクリプト,simhのコマンド用のスクリプト @プロンプトが表示されたら, @boot で起動 そして :プロンプトで :rl(0,0)rl2unix として RL11な0番目のディスクの,ルートにあるrl2unixというカーネルファイルを指定することで, カーネルをブート まずは#なプロンプトに落ちてシングルユーザーモードになるので, ^D(Ctrl-D)でマルチユーザーモードに移行 user:root password:root でログイン可能. あとはmailもつかえるし各種UNIXコマンドもつかえるし,困らない exitコマンドではexitせず,^Dでログアウト エミュレータの終了はCtrl-Eでsimhのプロンプトに抜けた後,simhのqコマンドを発行 次にUNIXv6をテープイメージからインストールする方法 http://d.hatena.ne.jp/oraccha/20101101/1288582382 を参考.oracchaさんが紹介されてるインストール手順のファイルは消えちゃってるけど, http://shuntavista.jimdo.com/2013/01/05/unix-v6-%E3%82%92-simh-pdp11-%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%83%A1%E3%83%A2-%E7%B0%A1%E7%95%A5%E7%89%88/ のブログで手順

Google Summer of Code starting up now

イメージ
今年の Google Summer of Code もはじまって2週間が経ちました. 私も今年のGSoCに参加することになりまして,libcと格闘しています. どうにか死なない程度にがんばって完遂させたいと思います.

マシンの更新

イメージ
ThinkPad x121e(E-300)を愛用していましたが, 実家のマシンがWindows XPしかなかったのでこいつを実家のマシンにする変わりに ThinkPad Edge E145(A4-5000)を使いはじめました 奥がThinkPad x121e,手前がThinkPad Edge E145 (わざとですが)パッと見よく似てます EFI System Partitionが/dev/sda2にあるのはびっくりしました,が,問題ありません RadeonなGPUですしx121eからほぼそのままE145にLinux環境移しても問題なく動作しています ただ,wi-fiのドライバがOSSが存在せずプロプライエタリなものを使うことになりました broadcom-wlです. 以上雑記

[解決済み] UEFI nvramが壊れた

ごぶさたです. ネタあったけどしばらく投稿してませんでした. 4月頭の話です UEFIではマシンがbootmenuというブートローダーみたいなのを持ち, *.efiなブートローダーもしくはOSカーネルへのパスエントリとエントリの名前とをセットで保存でき, HDDやUSB-HDD,FDD,CD/DVDを含めたそれらエントリの起動優先順をbootorderの形で保持しています.これらはnvramに記録されます. ひとつ前のefibootmgr(0.7.0のひとつ前)の時,libefivarがブッ壊れてたっぽいことがありました. そしてこいつがnvramに保持されたbootmenuへのデータを壊してしまったのです. 以下その顛末

ArchLinux + XfceでもシステムヴォイスをCV:丹下桜に

イメージ
最近知りましたが,Linux-HA JapanさんがUbuntuやCinnamon用にサウンドテーマを公開しているようです. リンク Ubuntu用,とはありますが,/usr/share/sounds/に配置する形のフォルダ構造/ファイル名で, 実はこれFreeDesktop.org準拠なデスクトップ環境ならだいたい使えるはずです. ということでこれをXfceで使ってみようというのが今回の趣旨です. CV:丹下桜さんですよ! ゴウランガ! はじめに @lindwurm_ さんがブログでUbuntuやCinnamon用に設定方法をブログで紹介されております. 該当する環境の方はそれを参考にすると良いでしょう. http://blog.lindwurm.biz/2013/07/use-sound-theme.html http://blog.lindwurm.biz/2013/12/cinnamon-sounds-setting.html Ubuntuを使用していてもXubuntuユーザーならこっちの記事が参考にできるかもしれません. だうんろ〜ど 記事冒頭で挙げたリンクからダウンロードしましょう Xfceで使用するのはUbuntu用と書いてあるほうです. そして, $ sudo tar xvf kayo-theme.tar.gz -C /  としてインストール.次は設定ですね 必要ソフトウェア と,設定の前に必要なソフトウェアをインストールせねばなりません. GUIでなにか行動した時,イベントサウンドを発行するのは Libcanberra です また,このイベントサウンドを実際に再生するのは, SoX です ちなみにSoXはplayというコマンドをつかってCUIで多種多様な音声ファイルを再生できる上に CUIなのにレベルメーターが見れます. インストールは, $ sudo pacman -S libcanberra libcanberra-pulse libcanberra-gstreamer sox でOK. PulseAudioを使わずにALSAしかつかってない人はlibcanberra-pulseなくて良し なんのことかわからない人はとりあえずインストールしておきましょう. も