livaの雑記帳(2016/12)

12/31

  • 逆アセした時にファイルオフセットを出すには-Fをつけると良い
    • objdump -F -d build/testmodule.elf

    • みたいな
  • ノートPCの備え付けキーボードは今でもi8042で動いてるっぽい
    • ThinkPadだけかもしれないが
  • LinuxのvirtualboxでUSBメモリを認識しない場合の解決策
    • これ
    • 以前も調べたけども忘れてたので

12/30

  • 結構以前から使ってたコマンドだけど、ここに載せてなかったので、記録にのせておく
    • gcc -I./ -D_KERNEL -MG -M sys/hoge.h

    • freebsd/sysの中で打つとヘッダーの依存関係が出る幸せな呪文

12/27

  • あとで読む>ELFの動的リンク(1)

12/26

  • ネットワーク方面も設備増強している
    • p_20161226_111820
    • めっちゃうるさいんだが・・・・

12/25

  • せっかくブログという物がありながら、あまり活用してこなかったと反省中
    • 今後もコンスタントに月に2記事くらいは書きたいなぁ。クオリティは落とさずに
  • 自分へのクリスマスプレゼント
    • p_20161225_164518
    • OS開発とは関係ない

12/24

12/23

  • 現実逃避のために記事を書きまくってる

12/22

  • バグをひたすら修正してる
    • カーネルタスクが上手く実行されないケースのバグ修正
      • ただのロジックミス
      • 赤いマシンのNICのLinkが上がらない問題も解決
        • 通信はなぜかまだできないので、スイッチで切り離した(ルーターがネットワーク上にいない)テストを早急に行う
    • 時折起動時に#GPが発生する問題の修正
      • ハードウェア側のエラー、カーネルのコーディングミス
      • ついでに記事も書いた

12/20

  • pull-request元のコードってどうやって手元でcheckoutすればいいんだろう、というのを悩んでいたら、ぴったしな物を見つけた

12/17

  • hikaliumさんがelfを実装しているのが楽しそうで、僕も触ってみたいと思った結果、進捗を産んでしまった
    • ほら、いろいろ目を向けたくない時ってあるじゃん

12/16

  • アンパンマン!新しいマシンよ!
    • p_20161216_160901
    • Phiちゃん(青)も、仲間(赤)ができて喜んでるわね!
    • 新しいマシンが来たのは良いのだけど、僕の机がどんどんマシンによって占拠されていく。。。。
  • ifconfigってMacとlinuxだと結構出力が違うのね
    • というわけでネットワークブート絡みのコマンドをいろいろ修正した
  • qemu上でAHCIからブートすると遅い問題、とりあえずAHCI上から起動しないようにした
    • しばらくはAHCIを触る事もあるまい
  • 開発機を変えて、どうやってfreebsdのソースコードをダウンロードするか、悩んでしまった
    • たぶんgitからダウンロードするのが早いのだけど、gitのmasterからダウンロードすると、ダウンロードタイミングによって別のコードが手に入る可能性がある
    • release/11.0.1のbranchからzipをダウンロードするのが一番良さそう

12/15

  • 以前qemuの起動が遅いという苦情が入っていたので、調査
    • ついでにCPUが荒ぶってるのでは疑惑も
    • grubから呼び出されるエントリポイント直後にhltを仕掛ける
      • 結果、普通に遅い
      • つまり、grubの問題
    • grubから呼び出されるまで10秒くらい待たされる
      • この間CPUが荒ぶってる
    • grubの設定をいろいろ戻してみる
      • 結果、ディスクをAHCIにしているのが問題と判明
      • う〜ん、設定を戻すべきか、戻さざるべきか

12/14

  • 寸劇
    • アンパンマン!新しいマシンよ!p_20161214_024033
    • でもドラえもん、このマシンUSBメモリ挿せないからOSのデバッグができないよ!p_20161214_024046
    • 大丈夫だ。問題ない
  • ここ数日悩んでいた問題についての記録
    • 症状:一部実機において、iPXEからgrub経由でRaph Kernelが起動しない
      • CPUリセットが掛かる
      • 起動する実機もある
    • grubからmemtestは起動する
      • multiboot kernelの問題かと疑う
        • これはフェイク
    • multiboot kernelがcrashするのであればgrubとiPXEの相性の問題かと思ってgrubを2.02~beta3にアップデートする
      • iPXEではなく、ディスクからのブートもcrashするようになる
    • このタイミングでは新しいgrubでクラッシュする問題とiPXEでクラッシュする問題を切り分けて考えていた
      • これもフェイク
    • とりあえずgrub2.02~beta3環境でqemuデバッグ
    • 落ちる場所はCPUID命令の存在判定の所。具体的にはEFLAGSのID bitが立たない
    • この直前で止めるようにしたらiPXEでもCPUリセットしなくなる
      • 実は2つの問題が繋がってるのではないか疑惑が浮上
    • EFLAGS==2なのが不明で、これまたgrubを疑う
      • 2.02~beta3で変な初期化をするのではないかという予想
        • これもフェイク
    • なんとなく、 grubからカーネルが呼び出された直後で止めるようにしてみる
      • なんかEFLAGSの値が正常
    • このあたりでスタックの値がなんか変だなと思い始める
      • とりあえず検証は後回し
    • どこでEFLAGSの値が不正になってるのかを調べる
      • どうやらスタックを設定する(espに値をセット)あたりっぽい
    • デバッグしていると、スタックをセットした後あたりで止める場合、止まるまでにCPUが荒ぶってるっぽい事がわかる
      • プロテクトモードになった後、リアルモードになってたりとか
    • スタックを設定する部分を眺めていると、ミスに気づく
      • add 0x1000, %espでスタックを4Kずらしているコード
      • add $0x1000, %espが正しい。上のコードでは0x1000というメモリから値を取ってきてespに足す事になってしまう
    • コード修正。すべてが上手く動くようになる
      • 2.02~beta3環境もiPXEブートも
    • すべての謎は解明できないものの、とりあえず終戦
      • スタックずらした直後で止めてるのに、なんでCPUが荒ぶるの
        • espを変にずらして、そのespを元にstackを読みにいって落ちたならまだしも、0x1000を読むだけで荒ぶるのは謎
        • CPUが荒ぶってるのは別の問題では説
          • CPUは荒ぶっていなかった→12/15
      • grubをupdateしてなぜ落ちた?
        • たぶん0x1000に別の値を書き込むようになったんだろう
      • iPXEブートでなぜ落ちた?
        • iPXEが別の値を書き込んだんだろう
    • 未だにこんなやばいバグが残ってたのかと思うと、割と背筋が凍った
  • CPUID命令によるモデル識別について
    • Intel技術資料Vol2 のCPUID命令の項目、INPUT EAX = 01H: Returns Model, Family, Stepping Informationに、Figure 3-6. Version Information Returned by CPUID in EAXがある
    • その下にあるアルゴリズムを用いて、DisplayDamilyとDisplayModelを計算する
    • これとIntel技術資料Vol3のCHAPTER 35 MODEL-SPECIFIC REGISTERS (MSRS)内、

      Table 35-1. CPUID Signature Values of DisplayFamily_DisplayModelを参照

12/13

12/10

  • メモ。そのうちカーネルのメモリの使い方について解説するスライドを作ろう
  • hikaliumさんがelf実装を頑張ってくれている。とりあえず動く感じの物が出来上がってきていて、素晴らしい(もちろん、まだまだ道のりは遠いけど)
    • というわけで、凄く期待しています
    • elf対応はLinux互換という目標への大きな一歩になるので、割と大事なのです
  • 最近ブログに表立って書ける事がないので、記事を書いてみた→gdbによるqemuデバッグ

12/07

  • デバイスドライバを書いていると、よく分からなくなるので、linuxでlspci等を叩きたくなる
    • というわけでqemu上で動くlinuxイメージを探す
    • こんなのがあるが、流石にカーネルだけだと使い勝手が悪い
    • 仕方がないのでubuntuのイメージを探す
    • 結局pre-buildイメージは使わず、LiveCDからインストール
  • 久々にVagrantでの環境構築を行った。途中で落ちた
    • 落ちたらVagrantの旨味半減である。大いに反省
    • 修正ついでにVagrant環境の高速化を図る。参考

12/05

  • Xeon Phiの方はハードウェア構成を元にアルゴリズムを弄ると順調に性能改善ができる
    • 楽しい
    • 一応書いておくと(これくらいなら書いてもいいでしょ)OS屋なので、並列計算アルゴリズムの高速化をやっているわけではない。まあ最終的にはそこに行き着く必要はあるのだけども

12/04

  • 参考コードがあるにも関わらず、怠惰が祟って進捗が生まれない
    • ようやくセーブポイント(?)まで来たけど、QEMUですら動かなかった
    • やっぱ一筋縄ではいきませんよねー
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中