組み込みOSと汎用OS
組み込みOSには、主に最適化されたLinuxが利用される。
汎用OSはカーネルと必須アプリケーションから構成され、Windows・macOS・Ubuntu等が存在する。
汎用OSでは任意のアプリケーションが実行され、システムコールAPI・仮想メモリ・スケジューリング等が必要である。
UNIX
UNIXはベル研究所で開発された汎用OSであり、BSDとSystemVに分派した。
UNIXのシステムコールAPIはPOSIXで定義される。
正統なUNIXでは無いがPOSIXに準拠したOSはUNIXライクと呼び、ソースコードの移植性を持つ。
GNU/Linuxディストリビューション
LinuxとGNUアプリケーションを組み合わせた汎用OSをGNU/Linuxディストリビューションと呼ぶ。
POSIXについて、Linuxは機能を提供し、glibcはAPIを実装する為、GNU/LinuxディストリビューションはUNIXライクである。
ビルドコマンド
# プリプロセッサ(cpp)
$ gcc -E hello.c > hello.i
# コンパイラ(cc1)
$ gcc -S hello.i -o hello.s
# アセンブラ(as)
$ gcc -c hello.s -o hello.o
# リンカ(ld)
$ gcc hello.o -o hello
# ビルドコマンドの確認
$ gcc -v hello.c -o hello
その他
ソースコードの開発者を知ると、効率的に検索できる場合がある。
#includeの時、ダブルクォーテーションを使用するとカレントディレクトリから、山括弧を使用するとインクルードパスから検索する。
libc.aは静的ライブラリ、libc.soは共有ライブラリであり、readelfやobjdumpで解析できる。