そもりーんのおうち

雑多な記事多め。多趣味。

seccamp2018-まとめ-

セキュリティキャンプ2018年 

8月14日〜8月18日経済産業省共済セキュリティキャンプ全国大会に行ってきました(*゚▽゚)ノ私は集中コースでみっちりOS開発のお勉強を積んでました。その全てを書けるだけ書きます。結果的に13000文字ほどの超長文になってしまったので少々読みづらいかも(笑)専門用語も多いし、わからないところは飛ばし読みしてください(*゚▽゚)

www.ipa.go.jp

f:id:sonohenmori:20180820115300j:plain

(*゚▽゚)ノ

YIトラック OS開発ゼミ「Linux開発者になろう」

そもりーんはこの辺に生息していました。

そうなんです。集中開発コースは選択コースと全く毛色が違ったらしいです。

私は最初セキュリティへの関心は少しあったくらいです。セキュリティ(*゚▽゚)ポカーンって感じでしたっ!!でも、他の参加者から話聞いてるとセキュリティ分野も興味出まくりでしたよ。OS開発ゼミで盛り上がってる話にもほとんどついていけなかったんだけどね(*゚▽゚)ポカーンお話めっちゃ聞いたあとで専門用語めっちゃ調べた(*゚▽゚)ポカーン

 どっちみちおもしろかったから良し( ̄ー ̄)bグッ!

 3日間みっちり講師をしてくれた武内 覚さんこと、通称satさんの記事はこちら。

blog.cybozu.io

 Twitter所感

感想

とんでもない5日間が終わりました。Linux kernel周りのお勉強とか検証とか実装とかしてもくもくしてました。ほんとは独自のアルゴリズムでTaskSchedulerを作りたかったけど力及ばず、最終的にカーネル内タイマーAPIを使って、10秒後にkernel logにメッセージをだすサンプルプログラムを実行し、改造してkernel modulesの実装をしてました。あまりにも多くのことを吸収したせいで2日たってようやっと文章化してます。
それにしても周りの人達全員が非常にレベルが高く、ここでしかできない話ができた。なんだろう、なんかぶっ飛んでる人がほとんどで安心した(笑)
行ってよかった。いい感じに安心してぶっ壊れてきた。

しかし、終わった感が全くないのが不思議でto be continuedな感じです。

ぜひもっと成長してまた来たい。そして開発と勉強を上手く継続してアウトプットを出していきたい。

ちなみに。

初日はこんなでした↓

  • どうしよう間違って異世界に来ちゃった💦
  • 自分浮いてない??専門技術の話題に全くついていけん。
  • 事前課題ほとんどできなかったのに来て大丈夫かよ。

終了後の自分↓

  • viエディタかわええ(*゚▽゚)ノ
  • 目指せ変態くそツイッタラ
  • LinuxKernel完全に理解した

見事に成長をしてることが皆さんに伝わるかと思います。

 

ぼくのせきゅりてぃきゃんぷ(*゚▽゚)ノ

 ここからは自分の経験したことをまとめて行きます。0 dayはキャンプが始まる前ということで応募する前のところから語ります。1~5 dayは自身のキャンプでの経験とやったことや反省点をまとめます。to be continuedは自分のこれからについて語ります。

5日間のスケジュールはこちら↓

セキュリティ・キャンプ全国大会2018 プログラム:IPA 独立行政法人 情報処理推進機構

0 day攻防戦

 応募理由

 きっかけはOSの授業でなんかOS好きかもと思ったからかな。インフラ勉強会*1でOS自作のセッションを聞いた時その人がセキュリティキャンプを紹介してた。確か、セッションしてたのは内田さんだったかな。実はセキュリティキャンプの存在は2年前から知ってたけど、その時は敷居の高さを感じて挑戦すらしなかった。でも、気づいたら応募するって宣言して応募用紙に1万文字以上書き込んでいたw

 選考を通るか通らないかはどうでもよく単純に自分の気持ちをぶちまけたいと本気でそうしたら、選考通ってました(笑)ちなみに応募回答は勢いで書いてしまって、ポエミー&変態発言が多用されています( T_T)\(^-^ )

キャンプ中にちょっと心が挫折して、初めて応募回答見返したら吹き出して悶えてしまったほどの威力です。 satさんはじめ、講師の人全員にこれを晒したかと思うと挫折とかどうでもよくなりました(*゚▽゚)

さて、応募の時の問題を下に貼っておきます*2

ぼくは選択の部分も全て書きました。どこに行きたいかと言われても全部行きたかったので全て記入しました。

 事前課題*3

 事前課題は取り組む時間が取れず8月に入ってから取り組みました。圧倒的に時間が足りない。さらにGit実用的に使ったことないし、開発慣れてないなど不確定要素たっぷりでした。最初は質問も思うようにできませんでした。さて、自分は最初のGit cloneで詰まりましたwww

迫り来るエラー。ミス。みるみるうちに時間は消えていく。

 原因は明らかにしました。Linuxカーネルはcloneが重くて回線のせいもあって30分くらいかかるのですが、PCの省電力設定でなんと記憶媒体がスリープしてcloneが途切れてエラー出ていました。気づくのに3日かかりましたwその間色々なクローンの仕方を試していました。そして、得意なエディタを用意するや正規表現を使えるようにするという個人課題も手をつけられず、きゃんぷに行くことに。

 この時点でキャンプ中は各自好きなものを実装しようという計画だったんですが、進捗をみてモジュールの実装をすることに変更しました*4 

 私の独自スケジューラ作りたいという目標はキャンプ後の課題ですね。スケジューラはクソきついらしいです。うーん、一人で取り組めるだろうか!?ちなみにゼミ生のもう一人は事前課題スパーンって進んでslab allocatorの中身をすでに開発してました。OSも一度自作しているらしくすごい楽しそうに開発する姿はこちらもモチベが上がりました。

 そんなこんなで0dayは一瞬で過ぎました。

 その他のキャンプ前準備

  • 名刺の作成

somoriiin.hatenablog.com

  • 新幹線切符
  • 荷物準備

ちなみに一番ひどかった勘違いはこれ↓

 大阪行きの新幹線切符予約するとこでした。

1 day攻防戦

 さて0 dayの攻防戦は相当ひどい結果でしたが、本番はどうでしょう。

f:id:sonohenmori:20180820115300j:plain

これがエンジニア生産缶詰工場と呼ばれる場所ですね。さあ、駅から迷子になって一緒に歩いた人と名刺交換して入場です。名刺と共に塩分補給あめ貰いました。ちなみに食べたのは最終日

でした。

  • 監獄内

f:id:sonohenmori:20180820134018j:plain

  • まずは昼飯

f:id:sonohenmori:20180820132852j:plain

 

講演:「セキュリティ基礎」

セキュリティ基礎 
講師: 園田 道夫

 情報漏洩の原因をデータで見てほとんど誤操作が原因である事実から物事のミスについて徹底追及したいい講演でした。グループの仲間と議論する時間があったのもなかなかよかった。ミスをどう防止するか。失敗学という学問の存在も知りました。

「人間はすべてを台無しにする権限をもつ」は心にずっと留めておこうと思った。

講演:「自由なエンジニアとは何か〜OSCを全国各地で150回以上やってわかったこと〜」

特別講演(1)「 自由なエンジニアとは何か ~OSCを全国各地で150回以上やって分かったこと~ 」 
講演者: 宮原 徹

 コミュニティとか興味あったのでこういうお話も聞けたのはすごい楽しかった。後のグループワークの時間に宮原さんに直接コミュニティのお話を聞けたのもすごいよかった。テンパって何話してたのかあんまり覚えてないけど...ぜひ、OSCに参加できる機会ができたら参加したい。

講演:「ハッカーは法律を破るのか」

特別講演(2)「ハッカーは法律を破るのか」 
講演者: 北條 孝佳

 興味深い話をしてもらった。パイオニア(先駆者)であれば、いずれ法的にどう判断されるのか理解している必要があると確信した。問題が先進的なもので周囲の理解を得られにくいものだと、判断が複雑になり、すごいややこしいことがわかった。ちゃんと法律のことを勉強すべきだと自己啓発を促すいい機会になった。北條さんともっと個人的に話しを聞きたかった。

  • 夕飯(牛肉苦手なのに食べちゃって翌日からお腹不調)

f:id:sonohenmori:20180820132954j:plain

ゆっくり夕飯食べてたら交流会のスイーツが全然なくなってて焦ったった。交流そっちのけで食い漁ってた。っひゃー!f:id:sonohenmori:20180820132950j:plain

LT大会

 私は申し込みしなかった。やりたかったけど余裕が全くなかった。でも、見るのがとても楽しくてむしろ見ることに集中できてよかったかも。でも、なんかやりたかったな。同時開催だから、どこ行っていいかわかんなくなったw

 内容がわからなくても発表者がだいたいおもしろい♪

グループワーク

 何したか曖昧にしか覚えてない。確か、講師の方達と名刺交換してずっとお喋りしてたっけな〜。テンパって支離滅裂発言しまくった。でも、面白かった。

  • お部屋

f:id:sonohenmori:20180820133851j:plain

2 day攻防戦

 今日から本格的に集中開発コースが始まる。選択コースもゼミも始まる。

  • 朝(寝ぼけて撮影)&迷走した朝ごはん

f:id:sonohenmori:20180820134203j:plainf:id:sonohenmori:20180820140626j:plain

 OS開発ゼミ「Linux開発者になろう」第1回目

 まず、事前課題で詰まってた部分からスタート。ちなみに私のゼミは個々で別々のことをやっていた。講師のsatさんを真ん中に両方から参加者で挟む形に落ち着き、ずっともくもく開発してた。

自分で任意の名前をつけてLinux kernelをビルドすることに成功しました。事前課題では必要なパッケージをインストールできてなくて、詰まってました。でも、無事に達成!!めっちゃ新しいコマンド覚えまくった。何回かカーネルビルドを練習した。そのおれさまカーネルでbootした。ちなみにカーネルの割り当てコア数でビルド時間が短くなると知って検証した。VBでコア数を1→2にしたら、ビルド時間も約二倍短くなった。

  • Kernel moduleをビルドして実装(HelloWorld)

ここまで進めるだけでも相当大変だった。bashとか普段から自分であまり書かないし。でも、調べ方もだんだん慣れてきた。モジュールを実装するやり方も何回か練習した。しかし、ここで一番ヤバかったのはUbuntu上でテキストエディタを起動するとマウス操作ができなくなるバグだった。つまり、エディタを起動するとGUI操作できなくなるwww。仕方なくローカルでssh接続を覚えた。エスパーだが、自分のカーネルをビルドした時必要なモジュールが欠けていたのかもしれない。

  •  Kernel Panicの検証

目的:「OS開発に置けるバグが大きな脆弱性になりうる危険性をはらむものだと実感すること」

カーネルパニック:Windowsのブルースクリーンのようなもの。操作が何もできなくなる。リセットボタン押すしかなくなる状態。

 さて、どうやってカーネルパニックを起こすかというとNull Pointerを参照すれば良い。しかし、いきなりカーネルにコードを仕込むのは芸がない。そこで、まずプロセス空間で普通にコンパイルして試してみた。NULLを参照するコードをコンパイルして実行してみたが、カーネルにはアラートが流れるだけで致命的なエラーとはならなかった。次にKernelModuleにNULLを参照するコードをrmmod(モジュールをアンインストール)する時に呼ばれる関数に仕込んでカーネルに実装してみた。すると、Kernelモジュールはアンインストールされたはずなのにメモリに残り続けた(ゾンビ化)。そして、Kernel内プログラムにバグコードを仕込んで実験した。するとカーネルパニックになることがわかった。OS開発のバグが怖いところはここである。もしそのつくったOSが複数ユーザーが利用するコンピュータに入っていた場合、全ての作業が停止する。さらにそのバグが脆弱性になり、クラッカーに狙われる。

 上記のようなことを実感でき、OS開発はセキュリティそのものであると考えるに至った。OS developerは専門的にセキュリティの思考を持つことが確実に必要だと理解した。

f:id:sonohenmori:20180820174636j:plain

この通りLinux Kernel Developerの道を完全に理解した。(あまりにも疲れて逃げたくなって、気づいたらなんか写真のようなものを錬成していた)

  • 夜飯

f:id:sonohenmori:20180820170401j:plain

結局、今日は脳内メモリをmake cleanすることはできなかった。

 

3 day攻防戦

 若干お腹の調子がよくなかった。起床時間が昨日よりも15分遅くなっている。この素晴らしく健康的な生活は半年ぶりな気がする。

OS開発ゼミ「Linux開発者になろう」第2回目

 まずViエディタと仲良くなるためにキーマップを印刷することから始めた。今日やることはこれに似たようなことを独自環境なしでやる↓

カーネルモジュール作成によるlinuxカーネル開発入門 - 第二回 一定時間後に処理をする(タイマー)

 LinuxKernel APIを用いて、一定時間後に処理を動作させるタイマーを作るというテーマである。まずはサンプルコードを入力して実行した...。嘘です。実行できなかった。関数がないというエラーが出てきてしまった。でも、原因がわからない。相談してしばらくして原因がわかった。結局、この原因はAPIの仕様変更だった。自分は全く想像もつかなかった。しかし、よく考えればコミュニティで開発が進んでいるため改変も早い。サンプルコードに使われていたAPIは見事新バージョンでは削除されていた。自分も仕様を見つけ出し、読むと昨年からinit_timer()が廃止されていたことがわかった(´;ω;`)「教訓:APIを使うときは仕様が変わることを意識しよう」代用としてmod_timer()とtimer_setup()を使った。

 ここからが大変でサンプルコードを見て動作を理解して新しい処理を作らなければならなかったからだ。「C言語開発に慣れてない、マクロってなに?、ポインタの理解が追いつかない、構造体ってどう使うんだっけ、処理を追えない、図式化して整頓できない」など様々な障壁があった。一人では絶対に手に負えない状態だった。ヒント出してもらったり、手厚く教えてもらってやっと少しずつ進めた。しかし、頭が熱暴走し始めた(マジで)

 timer3.cを実装したあたりで確か終わった気がする。

 この日は17:00辺りから頭痛が始まって記憶が曖昧になってた。

  • 夕飯

f:id:sonohenmori:20180820175023j:plain

もうこれを食べた時の記憶が全くないwww 写真だけが残ってる(笑えねえ)。なんかやたらフラついてたらしいw

会員企業のお仕事紹介

 なんか聞きたい企業を選べるアンケートがあったらしいがすっぽかした自分は適当に配属されていた。まあ、なんとか意識保ってたレベルなのでほとんど聴けてない。

どちらとも名刺交換する気力すら無かった。

グループワーク

なにやったっけ??(°▽°)

 確か交流の時間も頭がいっぱいいっぱいで技術的な話は一切したく無かったし、考えたく無かったので会場にいたカメラマンさんとだべってた。 でも、結構人生考える上でこのカメラマンさん達はさりげにすごかった。すごい印象に残ってる。人生の話をしてくれたが、とても面白かった。

 あ、自分を撮ってもらうの忘れてた。

ホームルーム

この時間は全トラックごとに自由に与えられた時間である。ほとんどのトラックが自由解散や自己紹介をする中、Yトラックは一言...

「じゃ、開発で」

はい。もくもくもくもくようび。

ちなみに私はこの時間お部屋に戻って休みました。色々限界だったみたいです。確か「寝ましょう!」って言われてそのままお部屋に帰った気がします。

でも、寝付けなくて結局寝たのは夜中2時ごろ。

しかも、OS開発してる夢見た。ポインタから離れられなくなってた。

4 day攻防戦

 また起床時刻が15分遅くなってたw

  • 朝飯

f:id:sonohenmori:20180820181808j:plain

 あれ?こんなん食べたっけ?記憶になくて写真だけ残ってる。

 

OS開発ゼミ「Linux開発者になろう」最終&ゼミ内成果発表

f:id:sonohenmori:20180820182312j:plain

写真はマサカリですね。。。

なぜか2日目にAmazonでマサカリが発注され、3日目に届いた。つまり、昨日から有った。これで講師陣が一芸してました(笑)ちなみに「マサカリを投げる」とは鋭い意見を投げつけることをさすことのようです。まさかまさかり(物理)がすぐに届いてしまうとは。。。

それにしても昨日からマサカリが当然のように飾られてる異空間になってた。全然気にする余裕なくて今日気づいた。あれ?なんかこの部屋変じゃない?ということに。そうです。これがOS開発ゼミですw。

 さてさて、今日はやることが多い。発表準備もある。私は昨日の続きで複数タイマーを同時に動かし、メッセージをだすプログラムを書くことにしました。そして知ることになるのです。マクロという深淵の呪文を...。しかし、とても心強い方が参戦してくれました。E4講師の半田さんです。なにやらポインタやマクロの説明を一瞬でわかりやすくしてくれました。頭の中にすっと知識が入ってくる感覚やばいです。理解が鬼のように進みました。

  • タイマーの実装でKernel Panicを起こしてしまう現象の理解。

 timer2でモジュール実装(insmod)後すぐにアンインストール(rmmod)する。するとタイマーだけ動き、10秒後アンインストールしてしまったNULL(なにもない場所)を参照してKernel Panicとなる。

  • 10秒後にメッセージをだし、さらにメッセージを出した数をカウントするタイマーを2つ実装。

2つのタイマーを構造体で作る。プログラムの流れをしっかりと追う。まずはわかりやすいようにstaticなプログラムを作る。

  • 上記の複数タイマープログラムをcontainer_ofマクロを使用するようにして実装し直す。

staticなプログラムを改造。構造体を使ってカウントとタイマーを一纏めにしてcontainer_ofで呼び出し、コーディング量を短くする。

  • 発表準備

- やったこと、その目的
- 技術的な挑戦
- 成果
- 得たもの(ゼミで取り組んだことでも講師や他の参加者とかについての話でも、キャンプ関連ならなんでもよい)

以上のようなものをネタにすることを参考に資料作成。

  • 発表5分

いつも通りテンパったwww

他の人の発表聞くのもとても面白かった。全然内容理解できなかったけど。一定の誇れる成果を出している人もたくさんいた。残念ながら発表は選考で選ばれなかった。でも、そんなことよりたくさん面白い発表が聞けてとても楽しかった。

  • 昼飯

f:id:sonohenmori:20180820190740j:plain

  • 夕飯

f:id:sonohenmori:20180820190843j:plain

ここまでくるとすごく晴れやかな気持ちで余裕ができた。

すると、ここで思い出した。

交流全然してないことに!!!!

お部屋にこもってもくもく開発してたからほとんど部屋の人たちとも喋ってないし!!!昨日は死んでたし、今日しかない!!!

そう思った私は怒涛の勢いで名刺を配った。

会員企業のお仕事紹介

自分のミスで今日も希望の会社でないところに行くことに...

 新人のスウェーデンの方が話してた。結構面白かった。でも、自分の自己紹介してたな。うん。会社のことはよくわからんw。

グループワーク

 昨日の交流で将来のことをインタビューして、キャンプの後のことを考える時間らしい。まあ、私は昨日死んでたのでそんなことできなかった。全力で企業様中心に突撃して名刺交換と雑談をした。

そこで気の合う人を見つけ、ディープな話をした。まあ、人生どうにかなりそうだなと自信をもらった。

 なんかプレゼントもらった。なんか疲れてて適当に取ってしまった。もうちょっとちゃんと選びたかったな(笑)

f:id:sonohenmori:20180820200556j:plain

ホームルーム

 もう講師satさんとこの部屋で喋るのも最後。明日は発表を残すだけ。このキャンプもっともお世話になったsatさんにありがたい言葉を頂いてその場を後にした。

 他のトラックに遊びに行けなかったのですぐさま部屋以外の講師方々のところに行き、たくさん面白いお話を聞かせてもらった。たまたま居合わせたPanasonicの方ともお話できてIot関連のセキュリティの話をしていた。企業側の意見を直接聞けてなかなか為になった。

その後

ホームルームも終わり、部屋に戻ろうにも疲れたなとソファで横になってたらやたら参加者が集まっていた。とりあえず、全員と名刺交換した。どうやら参加者のなかでCTFチーム作らないかというお誘いに集まってきた人たちらしい。自分はなんか混ざってた。とりあえず、おもしろそうなので話に乗った。

 0時過ぎるまで楽しく話してた。最後の最後にこれだけ交流できたから満足だった。

5 day攻防戦

 今日で最後かと思うとちょっと名残惜しい。それでも少しばかり晴れやかな気持ちだった。最近後ろ向きだったけど少し前向きになれたかもしれない。

  • 朝飯

f:id:sonohenmori:20180820200806j:plain

朝から講師3人の席にたまたま座って教育の話を真剣にしてた。本当ありがとうございました。ここでも名刺交換できたし、面白かった。

発表

 他のトラックが何をしていたのか知ることができてとても楽しかった。リバースエンジニアリングゼミとかZトラックもすごい面白かった。そっちも行きたかったかも。発表が終わったあとでZトラックの講師の忠鉢さん本人に内容を教えてもらった。やはりどこも楽しそうだ。

~ To be continued ~

これから自分が何をしてどう生きて行くのか想像はできてもわからない。それでも今回様々な学びがあった。satさんが今回の通して学んで欲しかったことを最後に説明してくれた。

- なんらかの機能を使うときは仕様をわかった上で使うこと
- 開発/トラブルシューティングの技法: 変更は一度にひとつづつ、二分探索をする、などなど 
- 開発はインクリメンタルに: モチベーションを保つため、および、のちのちの
  トラブルシューティングを楽にするため
- わからなくなったら人に相談をする 
 自分はまだまだこれからだろうけど、徐々に意図を汲み取れ始めたくらいだと思う。自分がその学びを実感したから。さらにアウトプットの大切さも教わった。当面は自分の目標である英語資格IELTS6.5スコア獲得を目指し、奮闘しようと考えている。技術系の目標はゆっくりと続けられるペースでやって行けばいいと考えている。流石にセキュリテイキャンプの勢いでやったら、すぐに潰れる。たくさんの講師やチューターの技術的なサポートもあって、他の参加者の意欲を借りられたりしたからこれだけ頑張れた。
 無理せず、今日の昼飯は何を作ろうかくらいの余裕を残して励むのが一番バランスが良い。実はこれこそが自分にとって一番の学びだったのかもしれない。
 最後に自分に直接関わってくれた人、間接的にでも関わってくれた人、ありがとうございました。
 これからもよろしくお願いします。

f:id:sonohenmori:20180820205955p:plain

 

*1:

wp.infra-workshop.tech

 

*2:

OS開発ゼミ

このゼミでは、OSの面白さや奥深さを学生の皆さんに沢山伝えたくて、いろいろな講義を計画しています。
恐らく皆さんも、こういった講師の熱い思いに惹かれて、このゼミに興味を持ってくれたのではないでしょうか。
どの設問も、皆さんの知識や技術力を問うのではなく(その辺りは事前学習で講師がフォローします!)、皆さんのOSに対する興味やモチベーションを聞いてます。それを意識して回答してみてください。
回答は、最低限のことだけでなく、膨らませて沢山書いていただいて大丈夫です(むしろ歓迎!)

共通問題A、B、C、D、選択問題S1-3について回答してください。

■共通問題A
我々講師は、普段いくつかのOSを使っていますが、使い込むうちに色々な発見をします。
皆さんもきっとそういう体験があると思います。
あなたが普段使っているOSで、好きな機能と改善してほしい部分について、思いのたけを聞かせてください。
この問では、皆さんが普段どの程度興味を持って既存OSを観察しているかを評価します。

■共通問題B
皆さんが仮にOSを作るとしたら、「どんなOS(やOSの機能)を作ってみたい」でしょうか?
(既にOSを作った事がある人は、その特徴を書いてくれても構いません。)
そして、なぜそれを作ってみたいと思ったのでしょうか?
皆さんが心の中で夢描いているであろう、ワクワクするようなOS像を教えてください。
※「Linux開発者を目指そう!」テーマを受講したいと思っている方は「どんなLinuxカーネルの機能を作ってみたいか」を答えてください。

■共通問題C
ほとんどのプログラマが興味があったり実際に作ったりしているのはユーザが直接使うアプリケーションです。
そんな中、みなさんがOS開発に興味を持ってくれたことは、講師としてとても嬉しいです。
OS開発を通してアプリケーション開発ではできないどのようなことをしたいのかを是非教えてください!

■選択問題について
受講したいテーマすべての選択問題に回答してください。
(合格した場合、回答したテーマのいずれかに配属されます)

■選択問題S1 テーマ「フルスクラッチOSを書こう!」(内田講師)
現代のパソコンではPCIバス(ソフトウェア互換性のあるPCIeバスも含む)を使ってほとんどの周辺機器が接続されており、PCIバスはとても重要な存在になっています。
PCIバスが制御できるようになると、SATAやNVMeの読み書き、USBの制御などができるようになります。

以下3つについて詳しく答えてください。
1. 今現在、あなたがPCIバスについて知っていること(PCIバスについて何も知らなくても問題ないので、その場合はそう書いてくださいね!)

2. PCIバスについて知識を深めるために調べて分かったこと

3. どうやってその情報を調べたか(○○の記事を検索して見つけた、Linux上で実験コマンドを使った、とか)

調べる取っ掛かりになるキーワードを挙げておきます。いくつかを調べてみると良いと思います。
PCIe、PCIコンフィギュレーション空間、BAR、IRQMSIAPICSATAxHCI

■選択問題S2 テーマ「最先端OS談義」(粟本講師)
世の中には、発想が面白かったり、アプリケーションの性能を大幅に向上させるような「独創的かつ実用的なOS」が沢山あります。
皆さんも何時か、こういった「凄いOS」を作れるようになりたいですよね!
そこで、 http://raphine.hatenablog.com/entry/seccamp2018_exercise を読み、ここに書かれている内容について思った事や、皆さん自身でこれらを更に膨らませたアイディア等を自由に書いてください!

■選択問題S3 テーマ「Linux開発者を目指そう!」(武内講師)
Linuxカーネルについて知りたいこと、それについてこれまで調べたこと、
つまづいたことを教えてください。最終的に解決しなかったとしてもOKです。
技術力が優れているかではなく、どれだけ試行錯誤したかという観点で採点をします。
「この機能のこのコードの意味がわからなかった」という高度なものでもいいですし、
「そもそも何から手を付けていいのかもわからなかった」というものでも構いません。

*3:

課題1. 自分だけのカーネルのビルド

0. grubの設定 

1. カーネルソースの準備
2. 現時点での最新linuxカーネルをもとに独自のbranchを作ります 

4. 自分だけのcommitをする

5. ビルドします。

6. インストール

7. 再起動して4.14-<手順4で決めた名前>というカーネルでブート 

8. 正しく独自カーネルで起動しているかの確認 

 

課題2: ビルド時間の測定 

0. 独自カーネルではなくdistroカーネルでシステムをブートさせてください。 

1. 以下のようにしてカーネルビルドにかかる時間を測定してください。

2. distroカーネルの設定ファイルとほぼ同じ設定ファイルを作る 3. ビルドして所要時間を測定4. ビルド時間が違う原因は何? 所要時間を計測して手順1のものと比較しましょう。なぜ違いが発生するかを教えてください。

*4:

キャンプ中のやるつもりだったもの↓

0. スケジューラが何をするものなのか、どういうインターフェースのものを作ればいいのか、自分はどういう独自性を出したいのかをかんがえる

1. ほとんど何もしない独自のプロセススケジューラをlinuxに組み込む

    - 既存のSCHED_IDLEを参考にする

2. プロセスを当該スケジューリングクラスにして動くかどうか確認

3. 少し機能追加。2に戻る

キャンプ中のやること↓

これは第5回まであり、これを順にやって行くことにしました。 

qiita.com