ダウンロードしたカーネルの中身を見てみる
まずは「/var/soft/linux/linux-3.16.3」直下を見る
前回ダウンロードしたカーネルの中身を確認してみることにします。といっても、中のファイルをいきなり覗いてもわけが分からない気がするのでまずは大雑把に見ていきます。
ダウンロードしたディレクトリは「/var/soft/linux/linux-3.16.3」であったので、端末にて以下のとおり入力してみます。
# ls /var/soft/linux/linux-3.16.3 ↓結果は以下のとおりでした COPYING Makefile drivers kernel security CREDITS README firmware lib sound Documentation REPORTING-BUGS fs mm tools Kbuild arch include net usr Kconfig block init samples virt MAINTAINERS crypto ipc scripts
予想通りというかよく分からない物体が並んでいます。まずは「README」を眺めてみたんですが、英語が分からない自分には何のことやらさっぱり・・・。
が、どうやらLinuxカーネルに関する簡単な説明とカーネルのビルドのやり方などが書かれているように見受けられました。
コイツをきちんと理解するだけでもLinuxについて少し理解できそうな気がしてきました。理解できればですが。
他に「fs」ディレクトリの中を見ると「ext3」とか「ext4」などと書かれています。ということはファイルシステムに関するディレクトリ?
調べてみるとその中の「Kconfig」というファイルにそのディレクトリの役割が書かれているというような話を見かけましたので
# cat /var/soft/linux/linux-3.16.3/fs/Kconfig | more # # File system configuration # menu "File systems" # Use unaligned word dcache accesses config DCACHE_WORD_ACCESS bool if BLOCK source "fs/ext2/Kconfig" source "fs/ext3/Kconfig" source "fs/ext4/Kconfig" config FS_XIP # execute in place bool depends on EXT2_FS_XIP default y source "fs/jbd/Kconfig" source "fs/jbd2/Kconfig" config FS_MBCACHE # Meta block cache for Extended Attributes (ext2/ext3/ext4) tristate default y if EXT2_FS=y && EXT2_FS_XATTR default y if EXT3_FS=y && EXT3_FS_XATTR default y if EXT4_FS=y default m if EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4_FS source "fs/reiserfs/Kconfig" source "fs/jfs/Kconfig" --More--(以下続く)
うだうだと英語で書かれていますが、やはりファイルシステムに関するディレクトリなのは間違いなさそうです。
Kconfigファイルを探してみる
全てのディレクトリに存在するかどうかは定かでありませんが、Kconfigファイルを読むとそのディレクトリの役割を把握できるかも?と感じたので検索をかけてみることにします。
# find /var/soft/linux/linux-3.16.3 -name Kconfig | more /var/soft/linux/linux-3.16.3/mm/Kconfig /var/soft/linux/linux-3.16.3/Kconfig /var/soft/linux/linux-3.16.3/crypto/async_tx/Kconfig /var/soft/linux/linux-3.16.3/crypto/Kconfig /var/soft/linux/linux-3.16.3/crypto/asymmetric_keys/Kconfig /var/soft/linux/linux-3.16.3/net/mac80211/Kconfig /var/soft/linux/linux-3.16.3/net/netfilter/Kconfig /var/soft/linux/linux-3.16.3/net/netfilter/ipset/Kconfig /var/soft/linux/linux-3.16.3/net/netfilter/ipvs/Kconfig /var/soft/linux/linux-3.16.3/net/ax25/Kconfig /var/soft/linux/linux-3.16.3/net/x25/Kconfig /var/soft/linux/linux-3.16.3/net/dcb/Kconfig /var/soft/linux/linux-3.16.3/net/ipv4/netfilter/Kconfig /var/soft/linux/linux-3.16.3/net/ipv4/Kconfig /var/soft/linux/linux-3.16.3/net/sched/Kconfig /var/soft/linux/linux-3.16.3/net/ceph/Kconfig /var/soft/linux/linux-3.16.3/net/Kconfig /var/soft/linux/linux-3.16.3/net/openvswitch/Kconfig /var/soft/linux/linux-3.16.3/net/netlink/Kconfig /var/soft/linux/linux-3.16.3/net/dsa/Kconfig /var/soft/linux/linux-3.16.3/net/can/Kconfig /var/soft/linux/linux-3.16.3/net/sctp/Kconfig /var/soft/linux/linux-3.16.3/net/dns_resolver/Kconfig /var/soft/linux/linux-3.16.3/net/mac802154/Kconfig /var/soft/linux/linux-3.16.3/net/rxrpc/Kconfig /var/soft/linux/linux-3.16.3/net/hsr/Kconfig /var/soft/linux/linux-3.16.3/net/batman-adv/Kconfig /var/soft/linux/linux-3.16.3/net/dccp/Kconfig /var/soft/linux/linux-3.16.3/net/dccp/ccids/Kconfig /var/soft/linux/linux-3.16.3/net/rfkill/Kconfig /var/soft/linux/linux-3.16.3/net/irda/Kconfig /var/soft/linux/linux-3.16.3/net/irda/irnet/Kconfig /var/soft/linux/linux-3.16.3/net/irda/irlan/Kconfig /var/soft/linux/linux-3.16.3/net/irda/ircomm/Kconfig /var/soft/linux/linux-3.16.3/net/ipv6/netfilter/Kconfig --More--
腐るほどのディレクトリと、そこに格納されたKconfigファイルが現れました。。。
これらを少しずつ読み進めていきたいと思います。。。
fsディレクトリの中身をざっと見る
今度はさっきから見ているfsディレクトリの中を確認してみます。
# ls /var/soft/linux/linux-3.16.3/fs 9p binfmt_aout.c cifs drop_caches.c fcntl.c hpfs locks.c no-block.c qnx4 stat.c Kconfig binfmt_elf.c coda ecryptfs fhandle.c hppfs logfs notify qnx6 statfs.c Kconfig.binfmt binfmt_elf_fdpic.c compat.c efivarfs file.c hugetlbfs mbcache.c ntfs quota super.c Makefile binfmt_em86.c compat_binfmt_elf.c efs file_table.c inode.c minix ocfs2 ramfs sync.c adfs binfmt_flat.c compat_ioctl.c eventfd.c filesystems.c internal.h mount.h omfs read_write.c sysfs affs binfmt_misc.c configfs eventpoll.c freevxfs ioctl.c mpage.c open.c readdir.c sysv afs binfmt_script.c coredump.c exec.c fs-writeback.c isofs namei.c openpromfs reiserfs timerfd.c aio.c binfmt_som.c cramfs exofs fs_struct.c jbd namespace.c pipe.c romfs ubifs anon_inodes.c block_dev.c dcache.c exportfs fscache jbd2 ncpfs pnode.c select.c udf attr.c btrfs dcookies.c ext2 fuse jffs2 nfs pnode.h seq_file.c ufs autofs4 buffer.c debugfs ext3 gfs2 jfs nfs_common posix_acl.c signalfd.c utimes.c bad_inode.c cachefiles devpts ext4 hfs kernfs nfsd proc splice.c xattr.c befs ceph direct-io.c f2fs hfsplus libfs.c nilfs2 proc_namespace.c squashfs xfs bfs char_dev.c dlm fat hostfs lockd nls pstore stack.c
おぉ、C言語で書かれた大量のソースがあるじゃないですか!
もちろん読んでも理解できませんけどね。
これをちゃんと読めるようになると少しはプログラムのこともわかるのかな?わからないかな・・・?
まとめ
前回ダウンロードしたカーネルについて、ざっくりと中身を見てみました。その結果
- 個々に役割を持ったディレクトリが格納されている
- その中のKconfigファイルを見ると各ディレクトリの概要が分かりそう
- 各ディレクトリにはCで記述されたソースが大量に眠っている
ぐらいのことがわかりました。
ドキュメントについてはGoogle翻訳に頼りながら、Cで書かれたソースについては少しずつ勉強しながら、それぞれ読み進めていくことにします。
素人同然ですがVBAに触れる機会もあるので、多少でもその経験がCを学ぶのに役立てばいいなぁ・・・と思いながら。