livaの雑記帳(2016/09)

9/30

  • ACPIのテーブルをきちんと初期化してみたものの、やはり223個しかコアを認識できない。。。。

 

9/28

  • メインの開発環境がLinuxになったのだけど、LinuxからVirtualBoxにUSBメモリを繋ぐには設定が必要だった→参考
    • あとで開発環境構築のページに追記せねば
  • マルチスレッド間で変数を共有する際は、volatileでは上手く動かない事がある
    • コンパイラが良しなにやってくれちゃうので
    • 今日は_atomic builtinを使ってみたが、パット見動いている感じ
      • memorderがイマイチよくわかっていないが
    • _sync builtinを使っている箇所はとっとと_atomic builtinに書き換えねばなぁ
  • Xeon Phi対応をしている。しかし72*4=288コア見えるはずが、なんか中途半端な数しか見えない
    • ACPIが全部情報を取れてないのだろうか。困った
  • PCIのIDからデバイス名を表示するためのリストが意外とC言語にやさしくなかった

 

9/26

  • LinuxにはSparseという静的解析ツールがあり、異なるメモリ領域へ代入してないか等をチェックできるらしい。うらやま

 

9/25

  • __buitin_setjmpや__buitin_longjmpという関数の存在を知った。
  • 最近、上手いエラー処理の方法が思いつかなくて悩んでいる
    • c++なら例外を使うのが定石だが、google c++ coding規約にあるとおり、例外を使うのはあまり良い手法とは言えない。でも、cの戻り値でエラー処理を分けるのは最悪である
    • 今考えているのは、setjmpを使えば例外モドキが使う事。この例外モドキはc++の例外と違って、明示的にコンテクストを関数に渡さなければならない。(コンパイラが暗黙的に処理してくれない)これならgoogle coding規約で書かれている問題がかなり改善されるのではないか。
  • gccの拡張機能をひたすら見ていたら、__restrict__を見つけた
    • c99のrestrictと同じ。といっても雑魚いのでそもそもc99のrestrictを知らなかった。メモリの参照者が一変数である事を保証する、というものと理解。以前コンパイラを書いた時にこういう制約がポインタに欲しいと(最適化が捗る)思った事を思い出した。

 

9/22

 

9/21

  • なるだけ早くバイナリをロードできるようにしたいので、FATドライバをインポートする事にした。使うのはこれ→http://elm-chan.org/fsw/ff/00index_j.html
    • ext4じゃないのは、ext4が動く適当なライブラリが無かったから
    • いつものごとくFreeBSDから取ってこなかったのは、時間が掛かるから
  • しかしこのFATドライバ、ファイルシステム層まで実装してしまっていて、組み込み用途としては素晴らしいのだけど、僕にとってはちょっと使い勝手が悪いなぁ
  • そもそもバイナリをロードするだけなら、grubを使えば良いのでは説がある

 

9/20

  • Raph_KernelにCIを導入した
    • 今はビルドが通るかどうかはチェックするだけ。submoduleの存在確認くらいには使える

 

9/17

  • いろいろうつつを抜かしているため、進捗があまり生まれてない
  • 相変わらずATA周りを実装中
    • GPで落ちたのは、ヌルポを踏んだせい(初期化忘れ)
    • Writeも動いた
    • セクタサイズとセクタ数が取得できた
      • ディスクサイズが取得できた
  • FreeBSDのコードを読んでいると、どうしても仕様と違って納得できない部分が出て来る。そういう時はLinuxのコードも読むと良い
    • これが俗に言うセカンドオピニオンである
    • ちなみに、十中八九自分が仕様を読み間違えている
      • ほんの些細なキーワードの読み落とし、とかね
  • とりあえずAHCIが実装できたので、ファイルフォーマットをなるはやで実装したい
    • とりあえずこれをインポートするというのが近道な気がする
      • 本当はext4が使いたいのだけど、手頃なのがない
  • git submoduleを使っているのだけど、時々トラブルが起きる
    • 今回は、forkしてくれた人(hikaliumさん)がgit submoduleを自分のリポジトリに書き換えた場合、どうするのか問題
      • とりあえずhikalimさんにはこれをやってもらった。一応上手くいったっぽい
      • こんなのを使ってみるのも解決策になるかも(未検証)

 

9/11

  • まだいろいろ足りない部分はあるけど、ひとまずAHCI(SATA)が動いた
    • %e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-11-10-12-39 %e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-11-10-12-14
    • ドライバはFreeBSDからの移植
    • 上がディスクイメージをバイナリダンプした所。下がRaph KernelからATAパケットを投げた結果
      • GPで落ちてるのはご愛嬌
  •  これでまた一つ、FreeBSDからのドライバ移植に成功した事になる

 

9/10

 

9/7

  • 届いた→9/3
    • p_20160907_005223
  • Raspberry Pi 3も手付かずなので、早い事今のタスクを処理したい
  • CubietruckのSATAについて調べて気づいた事
    • 2.5inch HDD/SSDを使いたい→5V電源のみを使用
    • 3.5inch HDDを使いたい→別売り基盤から12VをCubietruckに供給し、Cubietruckから12Vと5V両方HDDに供給する
    • 或いは、電源は別系統から供給する
    • 電源供給面倒だし、暫くは2.5inch HDDでデバッグかな

 

9/5

 

9/4

  • Xeon Phi(Knights Landing)対応したい。いろいろ面白い事ができそう
    • てか対応しないと半年後死ぬ事が決定済み
    • 動きそうな気配はある。
  • Cubietruck(Cubieboard3)を検証用に購入。SATAの性能測定等をしたいので、Cubietruck Plus(Cubieboard5)ではなく、こちらにした。
    • Cubieboard5のSATAはUSB接続。性能はこちらの方が良いのだけどね
    • https://wiki.freebsd.org/FreeBSD/arm/Allwinner
      • FreeBSDのサポート状況。ドライバとか流用したいので、大事
      • Allwinner A20は全サポートな模様。イイネ!
    • 組み込み向けのボードはいろいろあるらしい。

 

9/3

 

9/2

  • 書いた→HPETACPICA
  • 読む。https://people.freebsd.org/~gibbs/ARTICLE-0001.html
  • FreeBSDのAHCIドライバ移植
    • resource_int_valueが何をやっているのか(resultをどこで取得しているのか)さっぱり分からなかったのだけど、なるほど、手動で設定するのか。とりあえず互換関数ではresultには触らずエラーを返しておけば良い。→参考
    • target_idは0で良い

 

9/1

  • なんとなくFreeBSDのAHCIのコードが読めてきた。
  • シン・ゴジラを見た。二回目。
    • P_20160901_133745

 

広告