タグ

カーネルに関するatm_09_tdのブックマーク (22)

  • Ubuntu で Linux カーネルのバージョンを変更する - CUBE SUGAR CONTAINER

    たまに、新しい機能が使いたいなどの理由で、Linux カーネルのバージョンを新しくしたいときがある。 そんなとき、Ubuntu であればビルド済みのパッケージが提供されているため、比較的容易にカーネルを入れ替えることができる。 使った環境は次のとおり。 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy $ uname -srm Linux 5.15.0-33-generic aarch64 もくじ もくじ 下準備 パッケージをダウンロードする インストールする 下準備 パッケージをダウンロードするために、あらかじめ wget をインストールしておく。 $ sudo apt-get

    Ubuntu で Linux カーネルのバージョンを変更する - CUBE SUGAR CONTAINER
  • Linuxがブートするまで

    普段Linuxを使っていながら、vmlinuzやinitrd.imgというファイルは何なのか、 あやふやにしか理解していなかったので、一通りLinuxマシンのブートの仕組みを 勉強してみた結果を書き留めておく。なお、BIOSとGRUB Legacyの環境を前提としている。 EFIやGRUB2を使った環境については、今後いずれ勉強していきたい。 基的にOSの起動は、単純・低機能なプログラムが、より複雑・高機能なプログラムを 読み込み起動するという処理を連鎖的に行う仕組みになっている。 Linuxでは、下記のプログラムが順に起動していく: BIOSブートローダ (GRUB)Stage 1Stage 1.5Stage 2LinuxカーネルInit以下では、それぞれのプログラムについて順に要約して述べていく。 1. BIOS現在一般的なx86/x86-64 CPUは、電源が投入されると、0xff

  • netmap でわかる Linux カーネルハック入門 - かーねるさんとか

    以前のエントリー*1で、netmap API を使ったアプリケーションを作成する方法やデータ構造についてとりあげました。今回は少しレイヤーを下げて、カーネルのどのような機能を使って、netmap API が作られているのかについてまとめました。 Linux カーネルハックを始めてみたいけれど、何から手をつければよいかわからないという方にとって、netmap で使われているカーネルハックの方法について知ることは、とても良い導入の一つだと思います。 Linux カーネルハック netmap は、キャラクタデバイスのカーネルモジュールとして実装されています。今回はキャラクタデバイスのカーネルモジュールで何ができるのか、ということと、netmap がそれらをどのように使っているかについて説明します。 カーネルハックで、Linux カーネルに新しい機能を追加する場合に、カーネルのソースコードを直接変

    netmap でわかる Linux カーネルハック入門 - かーねるさんとか
  • プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る

    書籍の中から有用な技術情報をピックアップして紹介するシリーズ。今回は、秀和システム発行の書籍『ハロー“Hello, World” OSと標準ライブラリのシゴトとしくみ(2015年9月11日発行)』からの抜粋です。 ご注意:稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。 ※編集部注:前回記事「エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね?」はこちら Linuxカーネルの処理を見てみよう ここまでは主にglibcが持つスタートアップと終了処理について見てきた。 しかしOSカーネルの中では、プログラムの起動時にはどのような処理が行われているのだろうか。 例えばプログラムの実行はエントリ・ポイントから開始される、という説明をした。ということはエントリ

    プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る
  • カーネルエクスプロイト入門 - Linuxカーネル解析の基礎 - - るくすの日記 ~ Out_Of_Range ~

    0. はじめに 記事は、Linuxを対象としたカーネルエクスプロイトの入門記事です。 カーネルエクスプロイトというのは、Linuxや*BSD、Windowsを始めとするカーネル自身の脆弱性を突くエクスプロイトです。 基的にカーネルはシステム内で最高権限を持つ特権モードで動作しているので、ここを悪用されるとシステムの大部分(ほぼ全て)を掌握されてしまいます。 エクスプロイトと言うと、普通はユーザー空間で動作しているアプリケーションのバグをつく物が多いですが、これだと限られたレベルの権限しか奪えません。 SELinuxやjailを始めとする、OSレベルでの保護機構に阻まれるとたちまち効力を失ったりします。 しかし、カーネル自体の脆弱性をつくカーネルエクスプロイトを利用すると最高権限での任意コード実行が可能なため、大抵の保護機構はものともしません。 このカーネルエクスプロイトが特に効力を発揮

    カーネルエクスプロイト入門 - Linuxカーネル解析の基礎 - - るくすの日記 ~ Out_Of_Range ~
  • Linuxプロセスとカーネル読解のとっかかり - Qiita

    概要 Linux Kernelを読み解くためのとっかかりとしてLinuxのプロセスの理解(SoftwareDesign2014年8月号の特集参照)に焦点をあててみたいと思います。プロセス、スレッド、CPUについての話の後、最新カーネルのダウンロードからちょっとした中身の確認までやります。サンプルコードもありますが、サービス影響のあるサーバでは実行しないでください。 プロセスとスレッド プロセスとは Linux上で動いているプログラム スレッドが無い時はプロセスが実行単位 スレッドとは Linuxプロセスにおけるスレッド 「1つのプロセスの中で複数の実行単位を持てるように機能拡張したもの」(SoftwareDesign2014年8月号) CPUにおけるスレッド 「最小の処理単位」 プロセス2が終わった後に処理できるプロセス3がある例 スレッドを利用しない場合(左図) プロセス2の処理が終わる

    Linuxプロセスとカーネル読解のとっかかり - Qiita
  • GRUBで簡単なOSカーネルを動かしてみる - ももいろテクノロジー

    「x86 bootloaderから簡単なOSカーネルを動かしてみる」では、bootloaderを作った上で簡単なOSカーネルを動かした。 ここでは、GRUBをbootloaderとして利用してOSカーネルを動かしてみる。 環境 Ubuntu 14.04.3 LTS 64bit版、QEMU 2.0.0 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.3 LTS Release: 14.04 Co

    GRUBで簡単なOSカーネルを動かしてみる - ももいろテクノロジー
  • Linux Insides : カーネル起動プロセス part5(終) | POSTD

    カーネルの展開 カーネルの起動処理( Kernel booting process )シリーズの第5弾です。 前回 は、64ビットモードへの移行を見てきましたが、今回はその続きを説明していきたいと思います。カーネル展開の前準備と再配置、実際のカーネル展開処理のコードにジャンプする前の、最後のステップを見ていきます。それでは、カーネルコードの世界に再び飛び込んでいきましょう。 カーネル展開の前準備 前回は64ビットのエントリポイント startup_64 にジャンプする直前まででした。これは arch/x86/boot/compressed/head_64.S のソースコードファイルの中にあります。すでに startup_32 での startup_64 へのジャンプは見てきましたね。 pushl $__KERNEL_CS leal startup_64(%ebp), %eax ... ..

    Linux Insides : カーネル起動プロセス part5(終) | POSTD
  • Linux Insides : カーネル起動プロセス part4 | POSTD

    64ビットモードへの移行 Kernel booting process もパート4になりました。4回目の今回は、 プロテクトモード での最初の一歩についてご紹介します。CPUがサポートする ロングモード 、 SSE(ストリーミングSIMD拡張命令) 、 ページング方式 、そしてページテーブルの初期化やロングモードへの移行のお話しです。 注:このパートでは、アセンブリ言語のソースコードが頻出しますので、知識がない方は、事前に参考書を読むなどして理解を深めておいてください。 前回の パート では、 arch/x86/boot/pmjump.S 内にある32ビットのエントリーポイントにジャンプするところで終了しました。

    Linux Insides : カーネル起動プロセス part4 | POSTD
  • Linux Insides : カーネル起動プロセス part1 | POSTD

    ブートローダからカーネルまで これまでの私の ブログ投稿 を読まれた方はご存じかと思いますが、しばらく前から低水準言語を使うようになりました。Linux用x8664アセンブリ言語プログラミングについても書いています。また、同時にLinuxのソースコードにも触れるようになりました。下層がどのように機能しているのか、コンピュータでプログラムがどのように実行されるのか、どのようにメモリに配置されるのか、カーネルがどのように処理や記憶をするのか、下層でネットワークスタックがどのように動くのかなどなど、多くのことを理解しようと意欲が湧いています。これをきっかけに、 **x8664** 版Linuxカーネルについてシリーズを書いてみようと思いました。 私はプロのカーネルプログラマではないことと、仕事でもカーネルのコードを書いていないことをご了承ください。個人的な趣味です。私は下層で何が起きているのかと

    Linux Insides : カーネル起動プロセス part1 | POSTD
  • カーネル空間までコード追っていこう@Linux

    こんにちは。@kokukumaです。 これは、KLab Advent Calendar6日目の記事です。6番手も緊張しますね(棒読み)。 今日はLinuxでプログラムの挙動を追って行く時に、便利なコマンド達を紹介したいと思います。 コードを追っていく流れに合わせて、6つのパートに分けて紹介していきます。 ユーザ 計測する(ユーザ) コードを読む(ユーザ) 挙動を把握する(ユーザ) カーネル 計測する(カーネル) コードを読む(カーネル) 挙動を把握する(カーネル) 環境はdebian前提で話しています、あしからず。 ユーザ空間で計測する コードを追おうと思う人の目的は、「そのコードを速くしたい」がほとんどでしょう。 そんなとき、いきなりコード読んでも心が折れるだけなので、この辺のツールを使ってどこが遅いのか調べます。 time 誰でも知ってるtimeコマンド。とりあえず時間測って比較すると

    カーネル空間までコード追っていこう@Linux
  • perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog

    Linuxでddで1GBのファイルを作成し perf でプロファイリングし、Flame Graph (炎のグラフ?)にして可視化したものです。 Flame Graphs は perf(Linux)、SystemTap(Linux)、DTrace(Solaris、Oracle Linux(UEK)、Mac OS X、FreeBSD)、XPerf.exe(Windows) などでのプロファイリング結果を可視化して最も使われているコードパスを早く正確に特定することができます。実体はプロファイリング結果をグラフ(SVG)に変換する Perl スクリプトです。 下から上に行くほどコールスタックが深く、左から関数名のアルファベット順でソートされています。一番上で横幅が広い関数がCPUを長く使っています。今回は "_aesni_enc1" つまり暗号化がボトルネックになっていることがわかります。 システ

    perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog
  • Linuxカーネルに関する技術ドキュメント「Linux internals」の第2部が公開される | ソフトアンテナ

    Linuxハッカーを目指す技術者に役立ちそうな技術ドキュメント「Linux internals」の第2部が公開されています(Hacker News)。これは前回紹介した第1部の続編となるドキュメントで、カーネルのセットアップが完了し、アセンブラ言語からC言語のmain関数がよびだされた後、を解説するものとなっています。 具体的には、プロテクトモード、起動パラメーターのzeropageへのコピー、コンソールの初期化、ヒープの初期化、CPUの検証、メモリの検出、キーボードの検出、Querying(様々な情報の取得)などのトピック関して解説されています。 次回第3部は、ビデオモードの設定と、その他プロテクトモードへ移行する前に行う各種準備、プロテクトモードへの移行を解説する予定となっています。

    Linuxカーネルに関する技術ドキュメント「Linux internals」の第2部が公開される | ソフトアンテナ
  • 30日でできない 自作Linuxクローン開発 - るくすの日記 ~ Out_Of_Range ~

    この記事は 自作OS Advent Calendar 2014 - Adventar 12/25の記事です。 一ヶ月程前からLinuxカーネルのコードを読み始めたので、解読ついでに自分でもカーネルを作ってみました。 とはいっても、まだ半分も完成してないです() 当初は、30日でできる 自作Linuxクローン開発 を予定していたのですが、 予想以上の規模で、解読とフルスクラッチ開発を併行するのは結構大変でした... という訳で、現在実装できている所まで紹介します。 開発レポジトリはこちらです。 RKX1209/Abyon · GitHub (インストール方法や実行方法はここに書いてます) 実装した機能 プロセススケジューラー Runキュー ハードウェア割り込み(PIC 8259A) 遅延割り込み Tasklet グローバルタイマー(PIT) タイマーリスト 仮想ページング(IA-32 MMU

    30日でできない 自作Linuxクローン開発 - るくすの日記 ~ Out_Of_Range ~
  • Linux Torvalds、最近のCPUのPage Faultのコストにご不満の様子

    Linus Torvalds - Google+ - One of the things I end up doing is do a lot of performance… Linus Torvaldsが、最近のIntelのCPUは、通常以外の処理のコスト、つまりPage faultのコストが上がっているので、問題であるとしている。 俺はよくカーネルコードのパフォーマンスプロファイリングをやる。特に、VMとかファイルシステム周りに対してだ。 俺がよくやるのは、「うまくいってるとき」に対する計測だ。つまり、だいたいほぼ完璧にキャッシュされてる状況だな。というのも、俺はもちろんIOのことは気にかけているが、俺の個人的なワークロードはたいてい、うまくキャッシュされてるからだ。たとえば、俺にとってよくあるロードは、pullした後のフルカーネルビルドだ。これにどのくらいの時間がかかるかが問題になる

  • 「テキトーーク!!(TechyTalk) Vol.2 低レイヤー芸人」で話したこと - ablog

    2014/4/24に社内で低レイヤー芸人*1として、ターミナルを開いてコマンドを打ちながら話したときのメモ。口頭でしゃべったことやホワイトボードに書いたことは書いていません、当にただのメモです。 ねらい 知らない世界に案内し、興味を持ってもらう(時間も短いので網羅性より面白さ重視) 何がわかるようになるか iowait は idle である CPU使用率が高いのは必ずしも悪ではない CPU使用率が高くなくてもランキューの値が大きくなることがあるのはなぜか CPU使用率が高い場合のドリルダウン方法 コア別、プロセス別、スレッド別、カーネル(sys,irq,soft...) or ユーザー(usr,nice...)、システムコール別、ライブラリ関数別、ユーザー関数別、 いろいろコマンドはあるが、実体はカーネルの構造体から取得している。 Oracle Database で言うと、V$→X$→共

    「テキトーーク!!(TechyTalk) Vol.2 低レイヤー芸人」で話したこと - ablog
  • 読み取り権限がなく実行権限だけのファイルが実行できる仕組みをstraceで追ってみた · DQNEO日記

    "読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む - - 型の蓄音機は 1 分間に 45 回にゃあと鳴く" こちらの記事が大変素晴らしかったので、実際の実行時システムコール呼び出しを追ってみました。 平たく言うと、strace・システムコールの入門です。 バイナリ実行するのに読み取り権限は必要ないことを実験で確かめる C言語でhello worldを書いてみます。 hello.c #include <stdio.h> int main() { printf("hello world\n"); return 0; } コンパイルして、パーミッションを100にします。 $ gcc hello.c -o hello $ chmod 0100 hello $ ls -l 合計 12 ---x------ 1 vagrant vagrant 6417 3

  • 読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む - - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    きっかけはこのツイート。 基礎的なことなんだろうけど理解できてないこと。 読み取り権限のない実行権限だけのファイルってどういう扱いになるんだろう。— ゑぬぽい改@電探が出(ん)たん? (@NPoi) March 27, 2014 実際にやってみるとわかるけど、実行権限だけついてるファイルは実行可能です。でも、「読み込めないのに実行できる」というのは直感に反するような気もしますね。だって、実行するためにはプログラムをメモリに読み込む必要がありますから!ではなぜ実行権限だけのファイルが実行できるのか、その仕組みを解説します。 実行とはなにか、どういう仕組みなのか Linux において実行とは「forkしてexecする」です(そのへんの詳しい話は プロセスさん を読もう!)。 fork も exec もシステムコール(正確には execve がシステムコールで exec はそのフロントエンドだけ

    読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む - - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
  • Linuxカーネル解読室輪講@はてな 第15章 - Tous Les Jours 攻防記

    VFSのところを担当してきました。 SlideView more presentations from Kazki Matsumoto.

    Linuxカーネル解読室輪講@はてな 第15章 - Tous Les Jours 攻防記
  • GRUBのセットアップ

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。