livaの雑記帳

livaの雑記帳

OSとか作ってみたい

始めてこのページを開いた人へ

基本情報 書いている人:Liva(@liva_jy) 学年:M1 生息域:都内 主に作ってる物: x86向けOS(と言いつつ、今はカーネルだけ) github.com 連絡はtwitterのDMでお願いします。

minimalなlinuxを作りたい、と思ったんだ

以下のツイートが結構反響があったので、どんな事をやったのかまとめておく。自分の勉強用に最小構成のlinuxを作ったので、githubに転がしておく(不要な.cファイルもパッと見つけられる限り削除した)https://t.co/KdTb6zgr8N— Liva (@liva_jy) 2018年2月8…

Pull Requestのレビューはpatchファイルでやるのが吉

凄くくだらない事を書く。 githubで送られてきたPull Requestをレビューするのが辛い。 何が辛いかというと、本質的な部分をレビューしたいのに、変数名の変更みたいな非本質的な要素が無限にあって、つらい。 良さげなレビューツールとか無いのかなー、と思…

HiKey960上でM.2 SSDの性能をゆるーく測定した。

この記事の続き。 raphine.hatenablog.com fioでベンチを取ってみる。 やり方は以下と同様。 raphine.hatenablog.com 上の記事内にあるUFS(HiKey960内蔵のFlashストレージ)の結果をこちらにも転記。 job数が4なので実際の速度はこの4倍。 UFS seq read: 1…

HiKey960のM.2コネクタがSSDを認識するようになった

この記事の続き。 raphine.hatenablog.com この記事を書いた時点では、AOSP(Hisilicon謹製のクローズドソースなブートローダから起動する)ではPCIデバイスが認識されるけど、UEFIからDebianを起動すると認識されなかった。UEFIがきちんとPCIを初期化しない…

HiKey960のM.2コネクタはSSDを認識するのだろうか<その2>

raphine.hatenablog.com これの続き。 Western DigitalのSSD等を買ってきて検証した結果、問題はSSDにあらずという事が分かった。 今手元にあるSSDは三種類。 www.samsung.com www.intel.co.jp あと、これ。 WD Black PCIe SSD | Western Digital(WD) で、…

Hikey960をfactory imageのAOSPに戻す

Debian入れてたけど、一度初期化したくなったので。 まずはBase Firmwareの初期化。 このリポジトリをダウンロードしてくる。 github.com DIPスイッチをRecovery-modeに設定してUSBケーブル2本を作業マシンと接続。(詳細は上のリポジトリのREADMEを参照) …

HiKey960のM.2コネクタはSSDを認識するのだろうか<その1>

HiKey960用にSSDを買ってきた。 www.samsung.com 挿した。 あの、これどうしろと、、、 pic.twitter.com/36oEBF9r1A— Liva (@liva_jy) 2017年12月27日 結局、こうなった。 いい加減フラフラなSSDにイラついてきたので、僕の全技術力を用いてボードを自作した…

Rump Kernelのreadが遅くてハゲかけたので調査

後輩氏から、「Rump Kernelのreadシステムコール、素のNetBSDよりも遅いぞ!ハゲ!」と言われてしまい、まだハゲたくはないので調べたメモ。 ちなみに前提として、既に一度ブロックキャッシュに載ったデータをreadしている事とする。 追記: この調査結果反…

gettimeofdayからclocksourceまでの道のり

clocksource作ってみたけど、gettimeofdayで反映されないぞ! どうせgettimeofdayはclocksourceなんて見てないんだろバーカバーカ! っていう邪悪な気持ちになったので、カーネルソースを追っかけた。 結論:ちゃんと見てる。 本編 linuxカーネル:v4.4.0 ge…

雑記(10月〜12月)

カーネル内変数をファイルシステムから簡単に書き換え可能にする。 #liva_notebookhttps://t.co/ZsGXsXvoHU — Liva (@liva_jy) 2017年10月16日 変数読み書きだけじゃなくて、関数の戻り値食わせたりもしたいですね? https://t.co/GLEZkLP8H2#liva_notebook …

HiKey960のストレージ性能をゆるく測定

この記事の続き。 raphine.hatenablog.com HiKey960の内蔵ストレージであるUFSの性能の測定をfioを用いて行う。 ジョブファイルはこんな感じ [global] direct=1 size=100m bs=4k numjobs=4 runtime=10 directory=/hoge/huga/ [read] rw=read [write] rw=writ…

HiKey960でDebianを起動する。

この記事の続き。 raphine.hatenablog.com DebianをSDカードにインストールする。 ちなみに、USBメモリにインストールしようとしたが、UEFIがUSBメモリを認識しないので、断念。 参考: Hikey960作業メモ5 - はまあさんはブログを使っています。 この記事だ…

HiKey960にUEFIを焼く

開発環境: ubuntu16.04 ボード: HiKey 960 www.96boards.org 最新の4GB版だよ!(11月までは3GBだった) Cortex-A73(2.36GHz) 4-coreとCortex-A53(1.84GHz) 4-coreの octa-core。 あのあの、2.36GHzとか、僕のMacBookPro(13-inch late 2016)のCore i7(2.4G…

僕の💩自作OS💩が研究室のネットワークを破壊するわけがない

出オチです。ごめんなさい。 背景 最近研究室で僕が自分で作ってるOSを起動すると、ラボのネットワークが不安定になるんですよね。YouTubeが見れなくて辛い。 一年くらい前に僕が研究室のネットワーク構築をした時は、僕のOSをインターネッツに繋いだ所で何…

qemuのNVMeが微妙なlegacy割り込みをする話

uio_pci_genericで割り込みが取れない時に確認すべきことってなんなんだ...。OSレベルまでIRQが届いていることは /proc/interrupts で確認できたんだけど…。(もう2日くらい悩んでる)— hikalium (@hikalium) 2017年12月8日 こんな呟きを見かけたので、原因…

USB3.0のデバドラを書いてみた

ザ!車輪の再発明!!って感じですが、いつものごとく懲りずにやってます。 3ヶ月くらい、ありとあらゆる事を放り出してずっとUSBのデバドラ書いてたのですが、途中ソウルジェムを濁らせたりしながらも、ようやく動いたのでブログに書いて供養しようと思い…

uio_pci_genericでデバドラを書く<その3>

その2はこちら。 今回は厳密にはuio_pci_genericの話ではないのだけども、uioでデバドラを書く上で必須となるであろうお話。 当たり前だけど、DMAができないと多くのデバドラは書けない。 DMAするためには良さげなページと物理アドレスが欲しいですよね。 …

uio_pci_genericでデバドラを書く<その2>

その1はこちら。 今回はxHCIのレジスタ空間を触ってみる。 参考になるのは、DPDKのソースとか。 前回やった通り、PCIのレジスタ空間は/sys/class/uio/uio0/device/configをopenしてread/writeすれば良かったのだが、BARが指すPCIデバイスのレジスタ空間につ…

uio_pci_genericでデバドラを書く<その1>

男もすなるuioといふものを、女もしてみむとてするなり。 uio、流行ってますね。というか、今時Ring0でデバイスを制御しても新鮮味がないです。 なのでuioを使ってパパっとデバドラを書けるようにならなきゃなぁ、というぼんやりとした焦りを感じていたので…

Toy OS meets Rump Kernel

Raphine(僕の自作OS)上でRump Kernelを立ち上げる事ができるようになった。 Rump Kernelとはなんぞやという話を簡単にすると、 NetBSDベースのLibraryOS NetBSDのカーネルとアプリケーションをstatic linkして1つのバイナリにできる。(Unikernel) Linux…

c++でfinalつけれる時はつけよう、という話

仮想関数を使うとvtableを呼び出すからオーバーヘッドが生じるのは当たり前の話。だから仮想関数にしなくて良い時は仮想関数を使いたくない。 一方で、インタフェースを明示するためには仮想関数を使わなければいけない。インターフェースをソース内で明示し…

雑記(4月〜7月)

xv6、kernelmemfs使えばオンメモリで動くのか #liva_notebook— Liva (@liva_jy) 2017年4月26日 新マシンで動作検証した結果、見つけた新しいバグ。PCIの初期化をACPICAの初期化後にやろうとすると、ACPICAがPCIを叩いて死ぬっていう。 #liva_notebook— Liva …

Unikernelのすゝめ

以下の記事を読んだ。Single address spaces: design flaw or feature? UnikernelというとMirageOSの論文で最初に出てきた概念で、Rump KernelにもUnikernelで動かすモードがあるのだけど、今回はRump Kernelの事は忘れて、本来のUnikernelの話。(このリポ…

Rump Kernelを実機で動かす

Unikernelをまだ動かしてなかったので、動かす。 ↓これ通りにやれば良い。 Tutorial: Building Rumprun Unikernels · rumpkernel/wiki Wiki · GitHub $ git clone http://repo.rumpkernel.org/rumprun$ cd rumprun$ git submodule update --init$ ./build-rr…

Rump Kernelの起動コードを読む

Rump Kernelのソースコードを読んでいく。 unikernel版(?)で、platformはhw(ベアメタル上で動作する版) ベースとなるコードはここ。 GitHub - rumpkernel/rumprun: The Rumprun unikernel and toolchain for various platforms 僕はアーキテクチャspecific…

Rump Kernelを触った備忘録

いろいろ思う所があって、Rump Kernelを触っている。 Rump KernelはNetBSDベースのlibrary OS(詳しくはおるみんさんの記事を参照)で、2つの使い方がある。 ・basic Rump Kernel (何か公式の呼び名があるのだろうか?) NetBSDカーネルをserverとして立ち…

LinuxのCPU hotplugについて調べてみる。

諸事情によりLinuxのCPU hotplugについて調べてみたくなったので。 とりあえず試してみたいので、やり方を調べた。 NAKAMURA Minoru's Diary (2006年3月) 要するに、rootで以下のようにすれば良いとの事。 # echo 0 > /sys/devices/system/cpu/cpu1/online /…

multibootカーネルにおける画面描画

multiboot specification(このブログでは全てv2を指す)に則ってカーネルを作るとブートローダ周りの諸々を手抜きできるのだけど、今回は特に画面描画辺りのHowToを軽くまとめておく。 最初にmultiboot specificationのおさらいをしておくと、 elfでカーネ…

UEFI対応(その2)

これの続き pf2フォントの解析ができたので、UEFIからブートしようと頑張る。 ACPICAの初期化でクラッシュするので原因究明 UEFI環境下(qemu with OVMF)でACPICAの初期化で落ちる気がするんだけど、ACPICAの問題なのか、それとも移植の問題なのか・・・(8割…