Xeon E3-1275V2マシン

現在のCore2マシンがだんだんと使いにくくなってきたので、思い切ってPC自作することにした そしてパーツ選びに迷い、いろいろ調べてメモった 予算:7万 用途:「OpenStackで遊ぶ」+「通常のPC」 備考:なるべく安く。ドライブは現在のマシンのものを流用す…

続buildrootによるinitramfsのビルド(2)

gccがデフォルトではインストールされていなかったので、gccを追加するオプションを探したところ、 なぜか見つからないググったところ、 "development files in target filesystem"のような項目があるので'y'としておくとgccを追加するオプションが現れるよ…

続buildrootによるinitramfsのビルド

udevを使うとカーネルパニックが発生する問題を解決 udevを使うとカーネルパニックが発生する現象に遭遇したので 使用するbuildrootのバージョンを上げた.ステーブルなバージョン(2011.11,2011.08)だとうまく行かないので,スナップショットを持ってきてビ…

buildrootインストール

buildrootのインストール buildrootは組み込み用途のLinuxを簡単にビルドするためのツール 今回はこのツールを使って高機能なinitramfsを作る 説明 initramfsはディスクをルートにマウントする前の一時的なファイルシステムだと思うけど, initramfsに必要な…

initrd/initramfs

initramfsの中身を調べる 方法としては initramfsを解凍する方法もあるが,改変することを考えるとソースとなるディレクトリを知る必要がある 使用したディストリビューションはArch Linux. ソースディレクトリの特定 カーネルビルドにおいてmake installを…

2>&1の意味

2>&1の意味を今まで知らなかった例えば,あるコマンド(command)の標準出力と標準エラー出力をlessで表示するには以下のようにする. $ command 2>&1 | lessまあおまじないみたいなものだと思ってきたでもlessじゃなくてファイルに出力したい時に問題に直面…

getrusage

Linux kernel 2.6.38.7で時間を計測する必要があり、多少調べたソースはMANPAGE http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/time.7.htmlgetrusageを使うとtickよりも高い精度で時間測定ができるらしいので使ってみた 結果は以下のようになった …

.configファイルの生成方法

Linuxカーネルを構築する上で最も苦労するのは.configを生成するところじゃないだろうか? make oldconfigでインストール時の.configを使い回すのは楽ちんだが、大量の不要なドライバが入っていてコンパイルに時間がかかる 手動で.configをつくる場合、デバ…

Kernelの初期化について

x86_64のカーネル初期化ルーチンを追ってみた マルチコアは最初に起動するコアをBSPと呼び、それ以外をAPと呼ぶ BSPはBIOSとブートローダを経て、カーネルの入り口であるstartup_64にたどり着き、 その後INITプロセスを実行するまでハードウェアの初期化を中…

/proc/interrupts

Linuxにおける割り込み処理について調べている /proc/interruptを表示していみて気づいたことを書いてみる CPU0 CPU1 0: 51 13 IO-APIC-edge timer 1: 1671 1363 IO-APIC-edge i8042 8: 1 0 IO-APIC-edge rtc0 9: 0 0 IO-APIC-fasteoi acpi 12: 3 1 IO-APIC-…

kexecのpurgatory

kexecはメモリ上にカーネル一式(カーネル本体、コマンドライン引数、initrdなど)を展開する また同時に特別な領域としてpurgatoryというものを展開するpurgatoryはカーネルに入る前の代替初期化ルーチンらしい cold bootの場合、CPUのモードの初期化などが…

kexec、kdump[2]

kexecの各セグメント(bzImageとか)の展開先の指定方法について調べている。 (1)kexec-toolsのオプションであるmem-minとmem-maxで指定可能だとか あと(2)カーネルオプションのcrashkernel=ss@nnでも可能である (1)(2)の方法で試しにやってみる 前提としてK…

kexec、kdump

kexec/kdumpについて調べている。 Kexecはウォームブートといって電源を落とさずに再起動するツール。Linuxカーネルのメインラインに入っている。 Kdumpはカーネルクラッシュの際にkexecで新しいカーネルを起動して、ダンプ内容からデバッグを行うツール。Ke…

拡張機能を公開してみた

以前から少し拡張機能を作っていたのだが、それを思い切って公開してみた https://chrome.google.com/webstore/detail/cmoeidhkjfldpenpckoddbelajajjncl# 公開するのに$5かかるとはね・・・何ができるのかというとCtr-cでコピーした文字列をバッファーに蓄…

newlibの導入(2)

前回newlibの導入はできたと思って記事を書いたけれど、間違いだった 今回はgcc4.2.3をコンパイルできたのでnewlibのコンパイルにも成功した newlibをコンパイルしてインストールするとインストール先にlib/とinclude/フォルダができる lib/にはcygmon-crt0.…

newlibの導入

newlibというのは軽量なライブラリです。 libc,libmなどをユーザプロセスが使うために導入します。newlibを作成する環境はi686なんですが、自作OSはi486なので、合わせないといけない(多分。実際は分からないだけ//) なのでconfigure --target=i386-elfし…

文字列表示

先日、画面の解像度を1024x768に変更した それまではキャラクタディスプレイだったので 文字の表示はハードウェア任せだったそこで文字列を表示する関数およびフォントが必要となった そこでフォントは30日OSから持ってきたもの(hankaku.bin)を使った hankak…

今後の予定

これまで今までやってきたことの中で30日OSとの違うところ 開発環境をLinuxに移した C++,nasm GRUBで起動できるようにした 仮想メモリ IPC メモリ管理(kmalloc,new,delete) IDEドライバ fork Ext2 elfローダ exec プロテクトモードでの画面モード切り替え …

画面の解像度を上げる

今まで解像度を320x200のまま使ってきた 簡単に文字が表示できるのでいいのだが、表示できる文字数が少ないのがネックそこで解像度を上げる 30日OSの方法をパクろうかと思ったが自作OSは現在GRUBを使っているのでBIOSを使ってビデオモードを変更できな…

exec実装

execが実装できた(かなり適当なものだけど) そのためにやったことは まずelf形式ファイルの扱い型の勉強 リンカスクリプトを書いて、自作OSのメモリマップに合わせる elfヘッダの指示どおりのアドレスに実行ファイルの内容を読み込む エントリポイントへジ…

execの実装計画

ハードディスクからファイルを読めるようになったので execを実装して、実行ファイルからプロセスを起動できるようにするローダは実行ファイルの各セクションをメモリ空間に配置する 実行ファイルの形式はELFフォーマットにするローダ以外に必要なのこと普通…

githubを使ってみた

研究室の友人がgithubを使っているのをみて、面白そうなので使ってみることにした まずはアカウントの作成だが、一瞬でできてしまいビックリ(紹介もいらず 登録作業もおよそ1、2分というところ)その後も指示通りにSSHの公開鍵を登録して、手順を踏めばリポ…

Ext2の実装

ハードディスクのドライバを他の人が作っている自作OSから自分のOSに移植したので 本格的にファイルシステムを作ってみようと思う 実装するファイルシステムはExt2 参考にしたサイトー>http://wiki.osdev.org/Ext2自分のOSは現在、ハードディスクのイメー…

ソートされていない整数6個で構成される配列があったとしよう。 このうち小さい順に3個は数値を1増やすとする。 例えば{4,5,6,1,2,3}が与えられたとき これを{4,5,6,2,3,4}とする そのためにはどうするかと考えた結果、これらの数値へのポインターで構成され…

ChromeExtensionを作りながらJavascriptの勉強ある要素をDOMから削除する操作下記の要素がページに含まれているとする <div id="target">remove this element</div> この要素を下記のコードで削除する var targetDiv=document.getElementById("target"); targetDiv.parentNode.remov…

フレーム内の要素にアクセスする方法を調べた Firefoxにおいて動くコードをまず作った しかしこれがChromeでは動かない・・なぜだろうFirefoxでフレーム内のリンク数を調べるJavascripttest.html frame1.html frame2.htmlをそれぞれ同じフォルダに作成し tes…

タブを左右に移動する

ChromeExtensionにおいてタブを左右に移動するためのスクリプトを書いてみた //isAbsoluteがfalseのときは現在のタブから相対的にtabNum個分だけ右に移動する //isAbsoluteがtrueのときは一番左から1,2,3、…、と数えた場合のtabNum個目のタブを選択する…

contentscriptにおけるiframeの扱い

Chromeのcontentscriptを書いていると、なぜかiframeを操作できないことに気付いた http://d.hatena.ne.jp/KYudy/20100716/1279266322セキュリティーに配慮した仕様なんだろうか? ざっと探したところそれらしい記述も見つからないし、代替手段も思いつかな…

Javascript勉強(2)

引き続きChromeExtensionsのためにJavascriptを勉強戻る、進むをJavascriptから実行する方法 function gobackHistory(){history.back();} function gofwrdHistory(){history.forward();} すごく簡単スクロール function scrollDown(){window.scrollBy(0,50);…

Javascript勉強

ChromeExtensionsの開発のためにJavascriptを勉強した まずブラウザの表示部分の左上に常にコマンドの表示がしたいので ある要素を常に左上に表示するためのスクリプトを書いてみたある要素を絶対位置指定して配置したい場合 var adiv=document.createElemen…