linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

2016-03-18から1日間の記事一覧

CPU操作 - per_cpu()

cpu

概要 指定したCPU個別の値を取得する 詳細 per_cpu_ptr()で指定したCPU個別の値を保持するアドレスを取得し、そのアドレスに保存されている値を返す

CPU操作 - per_cpu_ptr()

cpu

概要 指定したCPU個別の値を保持するアドレス取得する 詳細 以下の引数を取得する CPU個別の値を示すポインタ : ptr CPU番号を示す : cpu CONFIG_SMPの値によって以下のように処理が異なる 有効 __verify_pcpu_ptr()でptrの値が有効なアドレスか確認し、SHIF…

CPU操作 - VERIFY_PERCPU_PTR()

cpu

概要 受け取ったアドレスが有効な値か確認する 詳細 __verify_pcpu_ptr()で引数の値が有効なアドレスか確認し、カーネルアドレス空間からアクセス可能なポインタに変換する

per_cpu_offset()

cpu

概要 CPU個別の値を保持する領域へのオフセットを取得する 詳細 __per_cpu_offsetから、指定したCPU番号のメンバの値を取得することでCPU個別の値を保持する領域へのオフセットを取得する

CPU操作 - __per_cpu_offset

cpu

概要 CPU個別の値を保持する領域のオフセットを保持する変数 詳細 コンパイル時にはBOOT_PERCPU_OFFSETで初期化され、EXPORT_SYMBOL()によりmoduleからもアクセス可能な値となる この値はsetup_per_cpu_areas()により実行時に適切な値で初期化される

モジュール - EXPORT_SYMBOL()

概要 moduleからアクセス可能なシンボルを生成する 詳細 カーネルとしてコンパイルされており、かつCONFIG_MODULESが有効な場合は__EXPORT_SYMBOL()を実行するが、それ以外の場合は何もしない

モジュール - __EXPORT_SYMBOL()

概要 moduleからアクセス可能なシンボルを生成する 詳細 以下の通りに適切なセクションに適切な値を保存し、モジュールから宣言したシンボルにアクセスできるようにする __CRC_SYMBOL()でmoduleのチェックサムを算出するための値を保存する __ksymtab_string…

vmlinux - VMLINUX_SYMBOL_STR()

概要 vmlinuxに出力するシンボル名の文字列を生成する 詳細 __VMLINUX_SYMBOL_STR()のwrapperマクロ

vmlinux - __VMLINUX_SYMBOL_STR()

概要 vmlinuxに出力するシンボル名の文字列を生成する 詳細 CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIXが有効な場合は引数の文字列の前に_(アンダースコア)を付加した文字列を、無効な場合は引数の文字列を生成する

モジュール - __CRC_SYMBOL()

概要 moduleのバージョン確認に使用するチェックサム計算するための値を保持する 詳細 このマクロでは以下の引数を取得する セクション名を示す文字列 : sec 対応するシンボル名を示す文字列 : sym CONFIG_MODVERSIONSが無効な場合は何も行わないが、有効な…

CPU操作 - SHIFT_PERCPU_PTR()

cpu

概要 CPU固有のデータを保持するアドレスを取得する 詳細 RELOC_HIDE()でCPU固有のデータを保持するアドレスを取得するが、__force_属性を付加することで異なるアドレス空間(percpuとkernel)でのメモリのアクセスを強制する

CPU操作 - RELOC_HIDE()

cpu

概要 CPU個別のデータを保持するアドレスを取得する 詳細 以下の場合で処理が異なる(優先度は上から順) intelのコンパイラを使用している場合 gccのコンパイラを使用している場合 上記以外 intelのコンパイラを使用している場合と処理内容は同じ x86のCPUはi…