Linux(Ubuntu)サーバとダーツを愛する中年サラリーマンの日記。

Linuxサーバより愛を込めて。

Linuxサーバ

Linuxカーネルの概略を見る

ダウンロードしたカーネルの中身を見てみる

まずは「/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言語で書かれた大量のソースがあるじゃないですか!

 

もちろん読んでも理解できませんけどね。

 

これをちゃんと読めるようになると少しはプログラムのこともわかるのかな?わからないかな・・・?

 

まとめ

前回ダウンロードしたカーネルについて、ざっくりと中身を見てみました。その結果

 

  1. 個々に役割を持ったディレクトリが格納されている
  2. その中のKconfigファイルを見ると各ディレクトリの概要が分かりそう
  3. 各ディレクトリにはCで記述されたソースが大量に眠っている

 

ぐらいのことがわかりました。

 

ドキュメントについてはGoogle翻訳に頼りながら、Cで書かれたソースについては少しずつ勉強しながら、それぞれ読み進めていくことにします。

 

素人同然ですがVBAに触れる機会もあるので、多少でもその経験がCを学ぶのに役立てばいいなぁ・・・と思いながら。

オススメの記事

-Linuxサーバ
-, ,

Copyright© Linuxサーバより愛を込めて。 , 2021 All Rights Reserved.