KERNEL CODE

1.1 核心程式碼總覽

LINUX 核心實作了許多核心功能模組,用來管理核心的運作。 以整個作業系統來說,這些模組是使用者看不到的核心內涵,卻是核心運作的重要成員,是作業系統運作的最底層。

linux/Makefile
01 vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE

vmlinux-init 是 $(head-y) $(init-y)。
vmlinux-main 是 $(core-y) $(libs-y) $(drivers-y) $(net-y)。

其中,
head-y 包含 head_32.S、head32.S、head.c、init_task.c,檔案位於 linux/arch/x86/kernel。
init-y 包含目錄 init。
core-y 包含目錄 usr、kernel、mm、fs、ipc、security、crypto、block。
libs-y 包含目錄 lib。
drivers-y 包含目錄 drivers、sound、firmware。
net-y 包含目錄 net。

此外,因為頂層 Makefile 的 include $(srctree)/arch/$(SRCARCH)/Makefile,將與架構有關的程式碼包含進來。 這些程式碼的目錄類似於原始碼根目錄,所有程式碼檔案都和架構有關。
其中有
libs-y += arch/x86/lib/
core-y += arch/x86/
drivers-$(CONFIG_PCI) += arch/x86/pci/
drivers-$(CONFIG_PM) += arch/x86/power/
drivers-$(CONFIG_FB) += arch/x86/video/
這些目錄中的程式碼也都會加入頂層編譯檔的環境變數,一起編譯成作業系統映像。

arch/x86/ 的內容是由 linux/arch/x86/kbuild 所描述,其內容大致如下。

linux/arch/x86/kbuild
01 obj-y += kernel/
01 obj-y += mm/
01 obj-y += crypto/
01 obj-y += vdso/
01 obj-y += platform/
01 obj-y += net/

所有的程式碼檔案都是從這些目錄展開。 雖然如此,目錄之間還是有核心目錄與外圍目錄之分,從目錄 kernel 往外發展。 kernel 的中心是 CPU,mm、fs、ipc 等目錄的中心是 kernel,而 drivers、sound、firmware、net 是更外圍的目錄,負責整個硬體環境的驅動。 通常使用者指感覺到 drivers、sound、net 在動作,因為它們是最接近使用者的程式,舉凡螢幕、鍵盤、滑鼠、磁碟等都是 drivers 的範圍。 核心開發人員則負責維護一個可以讓這些驅動程式運作的穩定核心。

核心目錄關係圖:
下圖中只有包含 vmlinux-main,至於 vmlinux-init 則隨 LINUX 核心啟動完成後,便失去功用。

LINUX

1.2 架構無關的核心程式碼

LINUX 原始碼根目錄中,除 linux/arch 之外的所有程式碼目錄都是與架構無關的核心程式碼。


1.2.1 核心 init 目錄

核心初始化是一連串的步驟,目的是正確啟動 LINUX 核心。 核心初始化程式逐步將核心功能模組初始化,直到執行完核心初始化任務,進入閒置為止。

LINUX 核心初始化程式碼列表。

檔案名稱說明
linux/init/main.c初始化程序主程式。
linux/init/version.c版本程式。
linux/init/initramfs.c初始時期檔案系統。
linux/init/calibrate.c校正程式。
linux/init/do_mounts.c檔案裝置連接器。
linux/init/do_mounts_initrd.c INITRD 檔案裝置連接器。
linux/init/do_mounts_md.cMD 檔案裝置連接器。
linux/init/do_mounts_rd.cRAM 檔案裝置連接器。

1.2.2 核心 kernel 目錄

從編譯檔 linux/kernel/Makefile,我們可以得到 kernel 的程式檔群和目錄群。 這些編譯檔群會編譯成該目錄的 built_in.o,再連結到 linux/vmlinux.o,最後成為 linux/vmlinux。
下表是筆者將編譯檔內有效的描述記錄起來的結果。

編譯檔的環境變數都設定在組態檔 linux/include/generated/autoconf.h。

linux/kernel/Makefile
01 obj-y = sched.o fork.o exec_domain.o panic.o printk.o \
01         cpu.o exit.o itimer.o time.o softirq.o resource.o \
01         sysctl.o sysctl_binary.o capability.o ptrace.o timer.o user.o \
01         signal.o sys.o kmod.o workqueue.o pid.o \
01         rcupdate.o extable.o params.o posix-timers.o \
01         kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
01         hrtimer.o rwsem.o nsproxy.o srcu.o semaphore.o \
01         notifier.o ksysfs.o pm_qos_params.o sched_clock.o cred.o \
01         async.o range.o jump_label.o
01 obj-y += groups.o
01 obj-$(CONFIG_FREEZER) += freezer.o
01 obj-$(CONFIG_PROFILING) += profile.o
01 obj-$(CONFIG_SYSCTL_SYSCALL_CHECK) += sysctl_check.o
01 obj-$(CONFIG_STACKTRACE) += stacktrace.o
01 obj-y += time/
01 obj-$(CONFIG_FUTEX) += futex.o
01 obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
01 obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
01 obj-$(CONFIG_SMP) += smp.o
01 obj-$(CONFIG_SMP) += spinlock.o
01 obj-$(CONFIG_UID16) += uid16.o
01 obj-$(CONFIG_MODULES) += module.o
01 obj-$(CONFIG_KALLSYMS) += kallsyms.o
01 obj-$(CONFIG_PM) += power/
01 obj-$(CONFIG_FREEZER) += power/
01 obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
01 obj-$(CONFIG_KEXEC) += kexec.o
01 obj-$(CONFIG_CGROUPS) += cgroup.o
01 obj-$(CONFIG_CGROUP_FREEZER) += cgroup_freezer.o
01 obj-$(CONFIG_CPUSETS) += cpuset.o
01 obj-$(CONFIG_UTS_NS) += utsname.o
01 obj-$(CONFIG_USER_NS) += user_namespace.o
01 obj-$(CONFIG_PID_NS) += pid_namespace.o
01 obj-$(CONFIG_RESOURCE_COUNTERS) += res_counter.o
01 obj-$(CONFIG_SMP) += stop_machine.o
01 obj-$(CONFIG_AUDIT) += audit.o auditfilter.o
01 obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
01 obj-$(CONFIG_AUDIT_WATCH) += audit_watch.o
01 obj-$(CONFIG_AUDIT_TREE) += audit_tree.o
01 obj-$(CONFIG_KPROBES) += kprobes.o
01 obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
01 obj-$(CONFIG_SECCOMP) += seccomp.o
01 obj-$(CONFIG_TREE_RCU) += rcutree.o
01 obj-$(CONFIG_RELAY) += relay.o
01 obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
01 obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
01 obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
01 obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
01 obj-$(CONFIG_BINFMT_ELF) += elfcore.o
01 obj-$(CONFIG_TRACING) += trace/
01 obj-$(CONFIG_RING_BUFFER) += trace/
01 obj-$(CONFIG_TRACEPOINTS) += trace/
01 obj-$(CONFIG_SMP) += sched_cpupri.o
01 obj-$(CONFIG_IRQ_WORK) += irq_work.o
01 obj-$(CONFIG_PERF_EVENTS) += events/
01 obj-$(CONFIG_CRASH_DUMP) += crash_dump.o

從編譯檔取得 LINUX 核心 kernel/ 程式碼目的檔群,進而取得原始程式碼檔案列表。

01 obj-y = sched.o fork.o exec_domain.o panic.o printk.o cpu.o exit.o itimer.o time.o softirq.o resource.o
02         sysctl.o sysctl_binary.o capability.o ptrace.o timer.o user.o signal.o sys.o kmod.o workqueue.o pid.o
03         rcupdate.o extable.o params.o posix-timers.o kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o
04         hrtimer.o rwsem.o nsproxy.o srcu.o semaphore.o notifier.o ksysfs.o pm_qos_params.o sched_clock.o cred.o
05         async.o range.o jump_label.o groups.o freezer.o profile.o sysctl_check.o stacktrace.o futex.o rtmutex.o
06         dma.o smp.o spinlock.o uid16.o module.o kallsyms.o acct.o kexec.o cgroup.o cgroup_freezer.o cpuset.o utsname.o
07         user_namespace.o pid_namespace.o res_counter.o stop_machine.o audit.o auditfilter.o auditsc.o audit_watch.o 
08         audit_tree.o kprobes.o seccomp.o rcutree.o relay.o utsname_sysctl.o delayacct.o taskstats.o tsacct.o tracepoint.o
09         elfcore.o sched_cpupri.o irq_work.o crash_dump.o
09         irq/ events/ trace/ power/ time/

目錄 kernel/irq: 從編譯檔 linux/kernel/irq/Makefile 取得 LINUX 核心 kernel/irq/ 程式碼目的檔群,進而取得原始程式碼檔案列表。

linux/kernel/irq/Makefile
01 obj-y := irqdesc.o handle.o manage.o spurious.o resend.o chip.o dummychip.o devres.o
01 obj-$(CONFIG_GENERIC_IRQ_PROBE) += autoprobe.o
01 obj-$(CONFIG_PROC_FS) += proc.o
01 obj-$(CONFIG_GENERIC_PENDING_IRQ) += migration.o
01 obj-$(CONFIG_PM_SLEEP) += pm.o

01 obj-y := irqdesc.o handle.o manage.o spurious.o resend.o chip.o 
01     dummychip.o devres.o autoprobe.o proc.o migration.o pm.o

目錄 kernel/events: 從編譯檔 linux/kernel/events/Makefile 取得 LINUX 核心 kernel/events/ 程式碼目的檔群,進而取得原始程式碼檔案列表。

01 obj-y := core.o
01 obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o

01 core.o hw_breakpoint.o

目錄 kernel/trace: 從編譯檔 linux/kernel/trace/Makefile 取得 LINUX 核心 kernel/trace/ 程式碼目的檔群,進而取得原始程式碼檔案列表。

linux/kernel/trace/Makefile
01 obj-y += trace_clock.o
01 obj-$(CONFIG_RING_BUFFER) += ring_buffer.o
01 obj-$(CONFIG_TRACING) += trace.o
01 obj-$(CONFIG_TRACING) += trace_output.o
01 obj-$(CONFIG_TRACING) += trace_stat.o
01 obj-$(CONFIG_TRACING) += trace_printk.o
01 obj-$(CONFIG_CONTEXT_SWITCH_TRACER) += trace_sched_switch.o
01 obj-$(CONFIG_NOP_TRACER) += trace_nop.o
01 obj-$(CONFIG_BLK_DEV_IO_TRACE) += blktrace.o
01 obj-$(CONFIG_EVENT_TRACING) += trace_events.o
01 obj-$(CONFIG_EVENT_TRACING) += trace_export.o
01 ifeq ($(CONFIG_PERF_EVENTS),y)
01 obj-$(CONFIG_EVENT_TRACING) += trace_event_perf.o
01 endif
01 obj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o
01 obj-$(CONFIG_KPROBE_EVENT) += trace_kprobe.o
01 obj-$(CONFIG_TRACEPOINTS) += power-traces.o

01 obj-y += trace_clock.o ring_buffer.o trace.o trace_output.o
01          trace_stat.o trace_printk.o trace_sched_switch.o
01          trace_nop.o blktrace.o trace_events.o trace_export.o
01          trace_event_perf.o trace_events_filter.o trace_kprobe.o power-traces.o

目錄 kernel/power: 從編譯檔 linux/kernel/power/Makefile 取得 LINUX 核心 kernel/power/ 程式碼目的檔群,進而取得原始程式碼檔案列表。

linux/kernel/power/Makefile
01 obj-$(CONFIG_PM)        += main.o
01 obj-$(CONFIG_PM_SLEEP)        += console.o
01 obj-$(CONFIG_FREEZER)        += process.o
01 obj-$(CONFIG_SUSPEND)        += suspend.o
01 obj-$(CONFIG_HIBERNATION)    += hibernate.o snapshot.o swap.o user.o block_io.o
01 obj-$(CONFIG_MAGIC_SYSRQ)    += poweroff.o

01 obj-y=main.o console.o process.o suspend.o hibernate.o snapshot.o
01       swap.o user.o block_io.o poweroff.o

目錄 kernel/time: 從編譯檔 linux/kernel/time/Makefile 取得 LINUX 核心 kernel/time/ 程式碼目的檔群,進而取得原始程式碼檔案列表。

linux/kernel/time/Makefile
01 obj-y += timekeeping.o ntp.o clocksource.o jiffies.o timer_list.o timecompare.o
01 obj-y += timeconv.o posix-clock.o alarmtimer.o
01 obj-$(CONFIG_GENERIC_CLOCKEVENTS_BUILD)        += clockevents.o
01 obj-$(CONFIG_GENERIC_CLOCKEVENTS)        += tick-common.o
01 obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)    += tick-broadcast.o
01 obj-$(CONFIG_TICK_ONESHOT)            += tick-oneshot.o
01 obj-$(CONFIG_TICK_ONESHOT)            += tick-sched.o
01 obj-$(CONFIG_TIMER_STATS)            += timer_stats.o

01 obj-y += timekeeping.o ntp.o clocksource.o jiffies.o timer_list.o timecompare.o
01          timeconv.o posix-clock.o alarmtimer.o clockevents.o tick-common.o tick-broadcast.o
01          tick-oneshot.o tick-sched.o timer_stats.o

核心 kernel 目錄的結論:

目錄目的檔群
kernel sched.c、fork.c、exec_domain.c、panic.c、printk.c、cpu.c、exit.c、 itimer.c、time.c、softirq.c、resource.c、sysctl.c、sysctl_binary.c、 capability.c、ptrace.c、timer.c、user.c、signal.c、sys.c、kmod.c、 workqueue.c、pid.c、rcupdate.c、extable.c、params.c、posix-timers.c、 kthread.c、wait.c、kfifo.c、sys_ni.c、posix-cpu-timers.c、mutex.c hrtimer.c、rwsem.c、nsproxy.c、srcu.c、semaphore.c、notifier.c、 ksysfs.c、pm_qos_params.c、sched_clock.c、cred.c、async.c、range.c、 jump_label.c、groups.c、freezer.c、profile.c、sysctl_check.c、 stacktrace.c、futex.c、rtmutex.c、dma.c、smp.c、spinlock.c、uid16.c、 module.c、kallsyms.c、acct.c、kexec.c、cgroup.c、cgroup_freezer.c、 cpuset.c、utsname.c、user_namespace.c、pid_namespace.c、res_counter.c、 stop_machine.c、audit.c、auditfilter.c、auditsc.c、audit_watch.c、 audit_tree.c、kprobes.c、seccomp.c、rcutree.c、relay.c、utsname_sysctl.c、 delayacct.c、taskstats.c、tsacct.c、tracepoint.c、elfcore.c、 sched_cpupri.c、irq_work.c、crash_dump.c。
kernel/irq irqdesc.c、handle.c、manage.c、spurious.c、resend.c、chip.c、dummychip.c、 devres.c、autoprobe.c、proc.c、migration.c、pm.c。
kernel/events core.c、hw_breakpoint.c。
kernel/trace trace_clock.c、ring_buffer.c、trace.c、trace_output.c、trace_stat.c、 trace_printk.c、trace_sched_switch.c、trace_nop.c、blktrace.c、 trace_events.c、trace_export.c、trace_event_perf.c、 trace_events_filter.c、trace_kprobe.c、power-traces.c。
kernel/power main.c、console.c、process.c、suspend.c、hibernate.c、snapshot.c、 swap.c、user.c、block_io.c、poweroff.c。
kernel/time timekeeping.c、ntp.c、clocksource.c、jiffies.c、timer_list.c、timecompare.c timeconv.c、posix-clock.c、alarmtimer.c、clockevents.c、tick-common.c、tick-broadcast.c tick-oneshot.c、tick-sched.c、timer_stats.c。

1.2.3 核心 mm 目錄

從編譯檔取得 LINUX 核心 mm/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/mm/Makefile 有效部分的內容,並做一些修改。

linux/mm/Makefile
01 mmu-$(CONFIG_MMU)    := fremap.o highmem.o madvise.o memory.o mincore.o \
01                mlock.o mmap.o mprotect.o mremap.o msync.o rmap.o \
01                vmalloc.o pagewalk.o pgtable-generic.o
01 obj-y            := filemap.o mempool.o oom_kill.o fadvise.o \
01                maccess.o page_alloc.o page-writeback.o \
01                readahead.o swap.o truncate.o vmscan.o shmem.o \
01                prio_tree.o util.o mmzone.o vmstat.o backing-dev.o \
01                page_isolation.o mm_init.o mmu_context.o percpu.o \
01                $(mmu-y)
01 obj-y += init-mm.o
01 obj-y += nobootmem.o
01 obj-$(CONFIG_HAVE_MEMBLOCK) += memblock.o
01 obj-$(CONFIG_BOUNCE)    += bounce.o
01 obj-$(CONFIG_SWAP)    += page_io.o swap_state.o swapfile.o thrash.o
01 obj-$(CONFIG_HAS_DMA)    += dmapool.o
01 obj-$(CONFIG_HUGETLBFS)    += hugetlb.o
01 obj-$(CONFIG_SLUB) += slub.o

核心 mm 目錄的結論:

目錄目的檔群
mm filemap.c、mempool.c、oom_kill.c、fadvise.c、maccess.c、page_alloc.c、 page-writeback.c、readahead.c、swap.c、truncate.c、vmscan.c、shmem.c、 prio_tree.c、util.c、mmzone.c、vmstat.c、backing-dev.c、page_isolation.c、 mm_init.c、mmu_context.c、percpu.c、fremap.c、highmem.c、madvise.c、 memory.c、mincore.c、mlock.c、mmap.c、mprotect.c、mremap.c、msync.c、 rmap.c、vmalloc.c、pagewalk.c、pgtable-generic.c、init-mm.c、nobootmem.c 、memblock.c、bounce.c、page_io.c、swap_state.c、swapfile.c、thrash.c 、dmapool.c、hugetlb.c、slub.c。

1.2.4 核心 fs 目錄

從編譯檔取得 LINUX 核心 fs/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/fs/Makefile 有效部分的內容,並做一些修改。

linux/mm/Makefile
01 obj-y :=    open.o read_write.o file_table.o super.o \
01         char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \
01         ioctl.o readdir.o select.o fifo.o dcache.o inode.o \
01         attr.o bad_inode.o file.o filesystems.o namespace.o \
01         seq_file.o xattr.o libfs.o fs-writeback.o \
01         pnode.o drop_caches.o splice.o sync.o utimes.o \
01         stack.o fs_struct.o statfs.o
01 ifeq ($(CONFIG_BLOCK),y)
01 obj-y +=    buffer.o bio.o block_dev.o direct-io.o mpage.o ioprio.o
01 else
01 obj-y +=    no-block.o
01 endif
01 obj-y                += notify/
01 obj-$(CONFIG_EPOLL)        += eventpoll.o
01 obj-$(CONFIG_ANON_INODES)    += anon_inodes.o
01 obj-$(CONFIG_SIGNALFD)        += signalfd.o
01 obj-$(CONFIG_TIMERFD)        += timerfd.o
01 obj-$(CONFIG_EVENTFD)        += eventfd.o
01 obj-$(CONFIG_AIO)               += aio.o
01 obj-$(CONFIG_FILE_LOCKING)      += locks.o
01 obj-$(CONFIG_BINFMT_MISC)    += binfmt_misc.o
01 obj-y                += binfmt_script.o
01 obj-$(CONFIG_BINFMT_ELF)    += binfmt_elf.o
01 obj-$(CONFIG_FS_MBCACHE)    += mbcache.o
01 obj-$(CONFIG_FS_POSIX_ACL)    += posix_acl.o xattr_acl.o
01 obj-$(CONFIG_NFS_COMMON)    += nfs_common/
01 obj-$(CONFIG_GENERIC_ACL)    += generic_acl.o
01 obj-y                += quota/
01 obj-$(CONFIG_PROC_FS)        += proc/
01 obj-y                += partitions/
01 obj-$(CONFIG_SYSFS)        += sysfs/
01 obj-y                += devpts/
01 obj-$(CONFIG_PROFILING)        += dcookies.o
01 obj-$(CONFIG_EXT3_FS)        += ext3/
01 obj-$(CONFIG_JBD)        += jbd/
01 obj-y                += ramfs/
01 obj-$(CONFIG_HUGETLBFS)        += hugetlbfs/
01 obj-$(CONFIG_FAT_FS)        += fat/
01 obj-$(CONFIG_ISO9660_FS)    += isofs/
01 obj-$(CONFIG_NFS_FS)        += nfs/
01 obj-$(CONFIG_LOCKD)        += lockd/
01 obj-$(CONFIG_NLS)        += nls/
01 obj-$(CONFIG_AUTOFS4_FS)    += autofs4/
01 obj-$(CONFIG_DEBUG_FS)        += debugfs/

目錄目的檔群
fs 目的檔群:
open.c、read_write.c、file_table.c、super.cchar_dev.c、stat.c、exec.c、pipe.c、namei.c、fcntl.c、 ioctl.c、readdir.c、select.c、fifo.c、dcache.c、inode.c、attr.c、bad_inode.c、file.c、filesystems.c、 namespace.c、seq_file.c、xattr.c、libfs.c、fs-writeback.c、pnode.c、drop_caches.c、splice.c、 sync.c、utimes.c、stack.c、fs_struct.c、statfs.c、buffer.c、bio.c、block_dev.c、direct-io.c、mpage.c、 ioprio.c、eventpoll.c、anon_inodes.c、signalfd.c、timerfd.c、eventfd.c、aio.c、locks.c、binfmt_misc.c、 binfmt_script.c、binfmt_elf.c、mbcache.c、posix_acl.c、、xattr_acl.c、generic_acl.c、dcookies.c。

目的檔目錄群:
notify/、nfs_common/、ta/、proc/、partitions/、sysfs/、devpts/、ext3/、jbd/、ramfs/、hugetlbfs/、fat/、 isofs/、nfs/、lockd/、nls/、autofs4/、debugfs/。

1.2.5 核心 ipc 目錄

從編譯檔取得 LINUX 核心 ipc/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/ipc/Makefile 有效部分的內容,並做一些修改。

linux/ipc/Makefile
01 obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o ipcns_notifier.o syscall.o
01 obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o
01 obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o
01 obj-$(CONFIG_IPC_NS) += namespace.o
01 obj-$(CONFIG_POSIX_MQUEUE_SYSCTL) += mq_sysctl.o

目錄目的檔群
fs util.c、msgutil.c、msg.c、sem.c、shm.c、ipcns_notifier.c、syscall.c、ipc_sysctl.c、mqueue.c、msgutil.c、 namespace.c、mq_sysctl.c。

1.2.6 核心 lib 目錄

從編譯檔取得 LINUX 核心 lib/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/lib/Makefile 有效部分的內容,並做一些修改。

   linux/lib/Makefile
01 lib-y := ctype.o string.o vsprintf.o cmdline.o \
01      rbtree.o radix-tree.o dump_stack.o timerqueue.o\
01      idr.o int_sqrt.o extable.o prio_tree.o \
01      sha1.o irq_regs.o reciprocal_div.o argv_split.o \
01      proportions.o prio_heap.o ratelimit.o show_mem.o \
01      is_single_threaded.o plist.o decompress.o find_next_bit.o
01 lib-$(CONFIG_MMU) += ioremap.o
01 lib-$(CONFIG_SMP) += cpumask.o
01 lib-y    += kobject.o kref.o klist.o
01 obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \
01      bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \
01      string_helpers.o gcd.o lcm.o list_sort.o uuid.o flex_array.o \
01      bsearch.o find_last_bit.o
01 obj-y += kstrtox.o
01 lib-$(CONFIG_HOTPLUG) += kobject_uevent.o
01 obj-$(CONFIG_GENERIC_IOMAP) += iomap.o
01 obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o
01 obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o
01 lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
01 CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS))
01 obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o
01 ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
01   lib-y += dec_and_lock.o
01 endif
01 obj-$(CONFIG_BITREVERSE) += bitrev.o
01 obj-$(CONFIG_CRC_T10DIF)+= crc-t10dif.o
01 obj-$(CONFIG_CRC32)    += crc32.o
01 obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/
01 obj-$(CONFIG_LZO_COMPRESS) += lzo/
01 obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
01 obj-$(CONFIG_XZ_DEC) += xz/
01 lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
01 lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o
01 lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
01 lib-$(CONFIG_DECOMPRESS_XZ) += decompress_unxz.o
01 lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o
01 obj-$(CONFIG_SMP) += percpu_counter.o
01 obj-$(CONFIG_AUDIT_GENERIC) += audit.o
01 lib-$(CONFIG_GENERIC_BUG) += bug.o
01 obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o
01 obj-$(CONFIG_NLATTR) += nlattr.o
01 obj-$(CONFIG_AVERAGE) += average.o
01 obj-$(CONFIG_CPU_RMAP) += cpu_rmap.o

目錄目的檔群
linux/lib 目地檔群
bcd.c、div64.c、sort.c、parser.c、halfmd4.c、debug_locks.c、random32.c、 bust_spinlocks.c、hexdump.c、kasprintf.c、bitmap.c、scatterlist.c、 string_helpers.c、gcd.c、lcm.c、list_sort.c、uuid.c、flex_array.c、 bsearch.c、find_last_bit.c、kstrtox.c、iomap.c、iomap_copy.c、devres.c、check_signature.c、hweight.c、bitrev.c、 crc-t10dif.c、crc32.c、percpu_counter.c、audit.c、bug.c、syscall.c、nlattr.c、average.c、cpu_rmap.c、 、zlib_inflate/、lzo/、xz/。

函式庫群
ctype.c、string.c、vsprintf.c、cmdline.c、rbtree.c、radix-tree.c、dump_stack.c、timerqueue.c、 idr.c、int_sqrt.c、extable.c、prio_tree.c、sha1.c、irq_regs.c、reciprocal_div.c、argv_split.c、 proportions.c、prio_heap.c、ratelimit.c、show_mem.c、is_single_threaded.c、plist.c、decompress.c、 find_next_bit.c、ioremap.c、cpumask.c、kobject.c、kref.c、klist.c、kobject_uevent.c、rwsem.c、 、decompress_inflate.c、、decompress_bunzip2.c、decompress_unlzma.c、decompress_unxz.c、decompress_unlzo.c、bug.c。

從編譯檔取得 LINUX 核心 block/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/block/Makefile 有效部分的內容,並做一些修改。

linux/block/Makefile
01 obj-$(CONFIG_BLOCK) := elevator.o blk-core.o blk-tag.o blk-sysfs.o \
01             blk-flush.o blk-settings.o blk-ioc.o blk-map.o \
01             blk-exec.o blk-merge.o blk-softirq.o blk-timeout.o \
01             blk-iopoll.o blk-lib.o ioctl.o genhd.o scsi_ioctl.o
01 obj-$(CONFIG_BLK_DEV_BSG)    += bsg.o
01 obj-$(CONFIG_IOSCHED_NOOP)    += noop-iosched.o
01 obj-$(CONFIG_IOSCHED_DEADLINE)    += deadline-iosched.o
01 obj-$(CONFIG_IOSCHED_CFQ)    += cfq-iosched.o

目錄目的檔群
linux/block elevator.c、blk-core.c、blk-tag.c、blk-sysfs.c、blk-flush.c、blk-settings.c、blk-ioc.c、blk-map.c、 blk-exec.c、blk-merge.c、blk-softirq.c、blk-timeout.c、blk-iopoll.c、blk-lib.c、ioctl.c、genhd.c、 scsi_ioctl.c、bsg.c、noop-iosched.c、deadline-iosched.c、cfq-iosched.c。

1.2.8 核心 security 目錄

從編譯檔取得 LINUX 核心 security/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/security/Makefile 有效部分的內容,並做一些修改。

linux/security/Makefile
01 obj-$(CONFIG_KEYS)            += keys/
01 subdir-$(CONFIG_SECURITY_SELINUX)    += selinux
01 obj-y                    += commoncap.o
01 obj-$(CONFIG_MMU)            += min_addr.o
01 obj-$(CONFIG_SECURITY)            += security.o capability.o
01 obj-$(CONFIG_SECURITY_SELINUX)        += selinux/built-in.o
01 obj-$(CONFIG_AUDIT)            += lsm_audit.o

目錄目的檔群
linux/security 目的檔群
commoncap.c、min_addr.c、security.c、capability.c、selinux/built-in.c、lsm_audit.c。

目的檔目錄
keys/。

子目錄
selinux。

1.2.9 核心 crypto 目錄

從編譯檔取得 LINUX 核心 crypto/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/crypto/Makefile 有效部分的內容,並做一些修改。

linux/crypto/Makefile
01 obj-$(CONFIG_CRYPTO) += crypto.o
01 crypto-y := api.o cipher.o compress.o
01 obj-$(CONFIG_CRYPTO_WORKQUEUE) += crypto_wq.o
01 crypto_algapi-$(CONFIG_PROC_FS) += proc.o
01 crypto_algapi-y := algapi.o scatterwalk.o $(crypto_algapi-y)
01 obj-$(CONFIG_CRYPTO_ALGAPI2) += crypto_algapi.o
01 obj-$(CONFIG_CRYPTO_AEAD2) += aead.o
01 crypto_blkcipher-y := ablkcipher.o
01 crypto_blkcipher-y += blkcipher.o
01 obj-$(CONFIG_CRYPTO_BLKCIPHER2) += crypto_blkcipher.o
01 obj-$(CONFIG_CRYPTO_BLKCIPHER2) += chainiv.o
01 obj-$(CONFIG_CRYPTO_BLKCIPHER2) += eseqiv.o
01 crypto_hash-y += ahash.o
01 crypto_hash-y += shash.o
01 obj-$(CONFIG_CRYPTO_HASH2) += crypto_hash.o
01 obj-$(CONFIG_CRYPTO_PCOMP2) += pcompress.o
01 cryptomgr-y := algboss.o testmgr.o
01 obj-$(CONFIG_CRYPTO_MANAGER2) += cryptomgr.o
01 obj-$(CONFIG_CRYPTO_HMAC) += hmac.o
01 obj-$(CONFIG_CRYPTO_MD5) += md5.o
01 obj-$(CONFIG_CRYPTO_SHA1) += sha1_generic.o
01 obj-$(CONFIG_CRYPTO_CBC) += cbc.o
01 obj-$(CONFIG_CRYPTO_DES) += des_generic.o
01 obj-$(CONFIG_CRYPTO_AES) += aes_generic.o
01 obj-$(CONFIG_CRYPTO_ARC4) += arc4.o
01 obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o
01 obj-$(CONFIG_CRYPTO_RNG2) += rng.o
01 obj-$(CONFIG_CRYPTO_RNG2) += krng.o

目錄目的檔群
linux/crypto 目的檔群
crypto.c、crypto_wq.c、crypto_algapi.c、aead.c、crypto_blkcipher.c、chainiv.c、eseqiv.c、 crypto_hash.c、pcompress.c、cryptomgr.c、hmac.c、md5.c、sha1_generic.c、cbc.c、des_generic.c、 aes_generic.c、arc4.c、authenc.c、authencesn.c、rng.c、krng.c。

crypto 目的檔群
api.c、cipher.c、compress.c。

crypto_algapi-y 目的檔群
algapi.c、scatterwalk.c、proc.c。

crypto_blkcipher-y 目的檔群
ablkcipher.c、blkcipher.c。

crypto_hash-y 目的檔群
ahash.c、shash.c。

cryptomgr-y 目的檔群
algboss.c、testmgr.c。

1.2.10 核心 drivers 目錄

從編譯檔取得 LINUX 核心 drivers/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/drivers/Makefile 有效部分的內容,並做一些修改。

linux/drivers/Makefile
01 snd-dummy-objs := dummy.o
01 snd-aloop-objs := aloop.o
01 snd-mtpav-objs := mtpav.o
01 snd-mts64-objs := mts64.o
01 snd-portman2x4-objs := portman2x4.o
01 snd-serial-u16550-objs := serial-u16550.o
01 snd-virmidi-objs := virmidi.o
01 snd-ml403-ac97cr-objs := ml403-ac97cr.o pcm-indirect2.o
01 obj-$(CONFIG_SND) += opl3/ opl4/ mpu401/ vx/ pcsp/

目錄目的檔群
linux/drivers snd-dummy-objs 目的檔群
dummy.c。

snd-aloop-objs 目的檔群
aloop.c。

snd-mtpav-objs 目的檔群
mtpav.c。

snd-mts64-objs 目的檔群
mts64.c。

snd-portman2x4-objs 目的檔群
portman2x4.c。

snd-serial-u16550-objs 目的檔群
serial-u16550.c。

snd-virmidi-objs 目的檔群
virmidi.c。

snd-ml403-ac97cr-objs 目的檔群
ml403-ac97cr.c、pcm-indirect2.c

目的檔目錄群
opl3/、opl4/、mpu401/、vx/、pcsp/。

1.2.11 核心 sound 目錄

從編譯檔取得 LINUX 核心 sound/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/sound/Makefile 有效部分的內容,並做一些修改。

linux/sound/Makefile
01 obj-$(CONFIG_SOUND) += soundcore.o
02 obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ sh/ synth/ usb/ 
03     firewire/ sparc/ spi/ parisc/ pcmcia/ mips/ soc/ atmel/
04 ifeq ($(CONFIG_SND),y)
05   obj-y += last.o
06 endif
07 soundcore-objs  := sound_core.o

目錄目的檔群
linux/sound 目的檔群
soundcore.c。

目的檔目錄群
core/、i2c/、drivers/、isa/、pci/、ppc/、arm/、sh/、synth/、usb/、firewire/、sparc/、spi/、parisc/、pcmcia/、mips/、soc/、atmel/。

soundcore-objs 目的檔群
sound_core.c。

1.2.12 核心 net 目錄

從編譯檔取得 LINUX 核心 net/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/net/Makefile 有效部分的內容,並做一些修改。

linux/sound/Makefile
01 obj-y    := nonet.o
01 obj-$(CONFIG_NET)        := socket.o core/
01 obj-$(CONFIG_LLC)        += llc/
01 obj-$(CONFIG_NET)        += ethernet/ 802/ sched/ netlink/
01 obj-$(CONFIG_NETFILTER)        += netfilter/
01 obj-$(CONFIG_INET)        += ipv4/
01 obj-$(CONFIG_XFRM)        += xfrm/
01 obj-$(CONFIG_UNIX)        += unix/
01 obj-$(CONFIG_NET)        += ipv6/
01 obj-$(CONFIG_PACKET)        += packet/
01 obj-$(CONFIG_SUNRPC)        += sunrpc/
01 obj-$(CONFIG_WIRELESS)        += wireless/
01 obj-$(CONFIG_MAC80211)        += mac80211/
01 obj-$(CONFIG_NETLABEL)        += netlabel/
01 obj-$(CONFIG_RFKILL)        += rfkill/
01 ifeq ($(CONFIG_NET),y)
01 obj-$(CONFIG_SYSCTL)        += sysctl_net.o
01 endif
01 obj-$(CONFIG_DNS_RESOLVER)    += dns_resolver/

目錄目的檔群
linux/fs 目地檔群
socket.c、sysctl_net.c。

目的檔目錄群
core/、llc/、ethernet/、802/、sched/、netlink/、netfilter/、ipv4/、 xfrm/、unix/、ipv6/、packet/、sunrpc/、wireless/、mac80211/、netlabel/、 rfkill/、dns_resolver/。

1.2.13 核心 firmware 目錄

從編譯檔取得 LINUX 核心 firmware/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/firmware/Makefile 有效部分的內容,並做一些修改。

linux/firmware/Makefile
01 fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-6.2.1a.fw \
01                  bnx2/bnx2-rv2p-09-6.0.17.fw \
01                  bnx2/bnx2-rv2p-09ax-6.0.17.fw \
01                  bnx2/bnx2-mips-06-6.2.1.fw \
01                  bnx2/bnx2-rv2p-06-6.0.15.fw
01 fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
01                  e100/d102e_ucode.bin                 
01 fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
01                    tigon/tg3_tso5.bin
01 fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
01 firmware-dirs := $(sort $(addprefix $(objtree)/$(obj)/,$(dir $(fw-external-y) $(fw-shipped-all))))
01 obj-y                 += $(patsubst %,%.gen.o, $(fw-external-y))
01 obj-$(CONFIG_FIRMWARE_IN_KERNEL) += $(patsubst %,%.gen.o, $(fw-shipped-y))

目錄目的檔群
firmware看來這些是在裝置上執行的韌體,筆者還要再了解一下。

1.3 架構有關的核心程式碼

LINUX 原始碼根目錄中的 linux/arch 是與架構有關的核心程式碼,由 linux/arch/x86/Makefile 展開。
包含
libs-y += arch/x86/lib/
core-y += arch/x86/
drivers-$(CONFIG_PCI) += arch/x86/pci/
drivers-$(CONFIG_PM) += arch/x86/power/
drivers-$(CONFIG_FB) += arch/x86/video/

其中 arch/x86/ 的內容是由 linux/arch/x86/kbuild 所描述,其內容大致如下。

linux/arch/x86/kbuild
01 obj-y += kernel/
01 obj-y += mm/
01 obj-y += crypto/
01 obj-y += vdso/
01 obj-y += platform/
01 obj-y += net/


1.3.1 架構 kernel 目錄

架構 kernel 目錄位於 linux/arch/x86/kernel,這個目錄的程式碼是和硬體緊密相關的程式碼, 包括 CPU 的各功能模組以及 CPU 周邊晶片的驅動程式等。

linux/arch/x86/kernel/Makefile
01 obj-y            := process_$(BITS).o signal.o entry_$(BITS).o
01 obj-y            += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o
01 obj-y            += time.o ioport.o ldt.o dumpstack.o
01 obj-y            += setup.o x86_init.o i8259.o irqinit.o jump_label.o
01 obj-$(CONFIG_IRQ_WORK)  += irq_work.o
01 obj-y            += probe_roms.o
01 obj-$(CONFIG_X86_32)    += sys_i386_32.o i386_ksyms_32.o
01 obj-y            += bootflag.o e820.o
01 obj-y            += pci-dma.o quirks.o topology.o kdebugfs.o
01 obj-y            += alternative.o i8253.o pci-nommu.o hw_breakpoint.o
01 obj-y            += tsc.o io_delay.o rtc.o
01 obj-y            += pci-iommu_table.o
01 obj-y            += resource.o
01 obj-y                += trampoline.o trampoline_$(BITS).o
01 obj-y                += process.o
01 obj-y                += i387.o xsave.o
01 obj-y                += ptrace.o
01 obj-$(CONFIG_X86_32)        += tls.o
01 obj-y                += step.o
01 obj-$(CONFIG_ISA_DMA_API)    += i8237.o
01 obj-$(CONFIG_STACKTRACE)    += stacktrace.o
01 obj-y                += cpu/
01 obj-y                += acpi/
01 obj-y                += reboot.o
01 obj-$(CONFIG_X86_32)        += reboot_32.o
01 obj-$(CONFIG_X86_MSR)        += msr.o
01 obj-$(CONFIG_X86_CPUID)        += cpuid.o
01 obj-$(CONFIG_PCI)        += early-quirks.o
01 apm-y                := apm_32.o
01 obj-$(CONFIG_SMP)        += smp.o
01 obj-$(CONFIG_SMP)        += smpboot.o
01 obj-$(CONFIG_SMP)        += tsc_sync.o
01 obj-$(CONFIG_SMP)        += setup_percpu.o
01 obj-$(CONFIG_X86_MPPARSE)    += mpparse.o
01 obj-y                += apic/
01 obj-$(CONFIG_X86_REBOOTFIXUPS)    += reboot_fixups_32.o
01 obj-$(CONFIG_KEXEC)        += machine_kexec_$(BITS).o
01 obj-$(CONFIG_KEXEC)        += relocate_kernel_$(BITS).o crash.o
01 obj-$(CONFIG_CRASH_DUMP)    += crash_dump_$(BITS).o
01 obj-$(CONFIG_KPROBES)        += kprobes.o
01 obj-$(CONFIG_MODULES)        += module.o
01 obj-$(CONFIG_DOUBLEFAULT)     += doublefault_32.o
01 obj-$(CONFIG_VM86)        += vm86_32.o
01 obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
01 obj-$(CONFIG_HPET_TIMER)     += hpet.o
01 obj-$(CONFIG_AMD_NB)        += amd_nb.o
01 obj-$(CONFIG_PCSPKR_PLATFORM)    += pcspeaker.o
01 obj-$(CONFIG_MICROCODE)            += microcode.o
01 obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION) += check.o
01 microcode-y                := microcode_core.o
01 microcode-$(CONFIG_MICROCODE_INTEL)    += microcode_intel.o
01 microcode-$(CONFIG_MICROCODE_AMD)    += microcode_amd.o

目錄目的檔群
linux/arch/x86/kernel 一般目的檔目錄群
process_32.o、signal.o、entry_32.o、traps.o、irq.o、irq_32.o、dumpstack_32.o、 time.o、ioport.o、ldt.o、dumpstack.o、setup.o、x86_init.o、i8259.o、irqinit.o、jump_label.o、 irq_work.o、probe_roms.o、sys_i386_32.o、i386_ksyms_32.o、bootflag.o、e820.o、 pci-dma.o、quirks.o、topology.o、kdebugfs.o、alternative.o、i8253.o、pci-nommu.o、hw_breakpoint.o、 tsc.o、io_delay.o、rtc.o、pci-iommu_table.o、resource.o、trampoline.o、trampoline_32.o、 process.o、i387.o、xsave.o、ptrace.o、tls.o、step.o、i8237.o、stacktrace.o、cpu/、acpi/、reboot.o、 reboot_32.o、msr.o、cpuid.o、early-quirks.o、smp.o、smpboot.o、tsc_sync.o、setup_percpu.o、 mpparse.o、apic/、reboot_fixups_32.o、machine_kexec_32.o、relocate_kernel_32.o、crash.o、 crash_dump_32.o、kprobes.o、module.o、doublefault_32.o、vm86_32.o、early_printk.o、hpet.o、 amd_nb.o、pcspeaker.o、microcode.o、check.o。

apm 目的檔目錄群
apm_32.o、。

microcode 目的檔目錄群
microcode_core.o、microcode_intel.o、microcode_amd.o。

1.3.2 架構 mm 目錄

架構 mm 目錄位於 linux/arch/x86/mm,這個目錄的程式碼是和記憶體有關的程式碼, 包括區塊記憶體管理器、分頁表管理器、轉譯表等。

linux/arch/x86/mm/Makefile
01 obj-y    :=  init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
01         pat.o pgtable.o physaddr.o gup.o setup_nx.o
01 obj-$(CONFIG_X86_PAT)        += pat_rbtree.o
01 obj-$(CONFIG_SMP)        += tlb.o
01 obj-$(CONFIG_X86_32)        += pgtable_32.o iomap_32.o
01 obj-$(CONFIG_HUGETLB_PAGE)    += hugetlbpage.o
01 obj-$(CONFIG_HIGHMEM)        += highmem_32.o
01 obj-$(CONFIG_HAVE_MEMBLOCK)    += memblock.o
01 mmiotrace-y            := kmmio.o pf_in.o mmio-mod.o

目錄目的檔群
linux/arch/x86/kernel 一般目的檔目錄群
init.o、init_32.o、fault.o、ioremap.o、extable.o、pageattr.o、mmap.o、 pat.o、pgtable.o、physaddr.o、gup.o、setup_nx.o、pat_rbtree.o、tlb.o pgtable_32.o、iomap_32.o、hugetlbpage.o、highmem_32.o、memblock.o。

mmiotrace 目的檔目錄群
kmmio.o、pf_in.o、mmio-mod.o。

1.3.3 架構 crypto 目錄

架構 crypto 目錄位於 linux/arch/x86/crypto,這個目錄的程式碼是和密碼學有關, 許多需要加密的資料可以透過密碼學函式庫製作成加密檔,配合鑰匙的使用,解開資料內容。

linux/arch/x86/crypto/Makefile
01 obj-$(CONFIG_CRYPTO_AES_586) += aes-i586.o
01 aes-i586-y := aes-i586-asm_32.o aes_glue.o
01 twofish-i586-y := twofish-i586-asm_32.o twofish_glue.o
01 salsa20-i586-y := salsa20-i586-asm_32.o salsa20_glue.o
01 aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o
01 twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_glue.o
01 salsa20-x86_64-y := salsa20-x86_64-asm_64.o salsa20_glue.o
01 aesni-intel-y := aesni-intel_asm.o aesni-intel_glue.o fpu.o
01 ghash-clmulni-intel-y := ghash-clmulni-intel_asm.o ghash-clmulni-intel_glue.o

目錄目的檔群
linux/arch/x86/kernel 一般目的檔目錄群
aes-i586.o。

aes-i586目的檔目錄群
aes-i586-asm_32.o、aes_glue.o。

twofish-i586目的檔目錄群
twofish-i586-asm_32.o、twofish_glue.o。

salsa20-i586目的檔目錄群
salsa20-i586-asm_32.o、salsa20_glue.o。

aes-x86_64目的檔目錄群
aes-x86_64-asm_64.o、aes_glue.o。

twofish-x86_64目的檔目錄群
twofish-x86_64-asm_64.o、twofish_glue.o。

salsa20-x86_64目的檔目錄群
salsa20-x86_64-asm_64.o、salsa20_glue.o。

aesni-intel目的檔目錄群
aesni-intel_asm.o、aesni-intel_glue.o、fpu.o。

ghash-clmulni-intel目的檔目錄群
ghash-clmulni-intel_asm.o、ghash-clmulni-intel_glue.o。

1.3.4 架構 vdso 目錄

架構 vdso 目錄位於 linux/arch/x86/vdso,這個目錄的程式碼是和動態分享目的檔有關。 VDSO 是 virtual dynamic shared object 的簡寫。

linux/arch/x86/vdso/Makefile
01 VDSO32-$(CONFIG_X86_32)        := y
02 obj-$(VDSO32-y)            += vdso32.o vdso32-setup.o

目錄目的檔群
linux/arch/x86/vdso 一般目的檔目錄群
vdso32.o、vdso32-setup.o。

1.3.5 架構 platform 目錄

架構 platform 目錄位於 linux/arch/x86/platform,這個目錄的程式碼是和平台有關。

linux/arch/x86/plateform/Makefile
01 obj-y    += ce4100/
02 obj-y    += efi/
03 obj-y    += iris/
04 obj-y    += mrst/
05 obj-y    += olpc/
06 obj-y    += scx200/
07 obj-y    += sfi/
08 obj-y    += visws/
09 obj-y    += uv/

目錄目的檔群
linux/arch/x86/plateform/ce4100無目的檔。
linux/arch/x86/plateform/efi一般目的檔目錄群
efi.o、efi_32.o、efi_stub_32.o。
linux/arch/x86/plateform/iris無目的檔。
linux/arch/x86/plateform/mrst無目的檔。
linux/arch/x86/plateform/olpc無目的檔。
linux/arch/x86/plateform/scx200無目的檔。
linux/arch/x86/plateform/sfi無目的檔。
linux/arch/x86/plateform/visws無目的檔。
linux/arch/x86/plateform/uv無目的檔。

1.3.6 架構 net 目錄

net 目錄沒有產生任何目的檔。


1.3.7 架構 drivers

架構 drivers 包括目錄 arch/x86/pci、arch/x86/power、arch/x86/video。

01 linux/arch/x86/pci/Makefile
02 obj-y                := init.o
03 obj-$(CONFIG_PCI_BIOS)        += pcbios.o
04 obj-$(CONFIG_PCI_MMCONFIG)    += mmconfig_$(BITS).o direct.o mmconfig-shared.o
05 obj-$(CONFIG_PCI_DIRECT)    += direct.o
06 obj-y                += fixup.o
07 obj-$(CONFIG_ACPI)        += acpi.o
08 obj-y                += legacy.o irq.o
09 obj-y                += common.o early.o

01 linux/arch/x86/power/Makefile
02 obj-$(CONFIG_PM_SLEEP)        += cpu.o
03 obj-$(CONFIG_HIBERNATION)    += hibernate_$(BITS).o hibernate_asm_$(BITS).o

01 linux/arch/x86/video/Makefile
02 obj-$(CONFIG_FB)               += fbdev.o

目錄目的檔群
linux/arch/x86/pci init.o、pcbios.o、mmconfig_32.o、direct.o、mmconfig-shared.o、direct.o、fixup.o、acpi.o、legacy.o、irq.o、common.o、early.o。
linux/arch/x86/power cpu.o、hibernate_32.o、hibernate_asm_32.o。
linux/arch/x86/video fbdev.o。

1.3.8 架構 lib 目錄

從編譯檔取得 LINUX X86(I386) 架構 lib/ 程式碼目的檔群,進而取得原始程式碼檔案列表。 筆者擷取 linux/arch/x86/lib/Makefile 有效部分的內容,並做一些修改。

01 linux/arch/x86/lib/Makefile
02 obj-$(CONFIG_SMP) += msr-smp.o cache-smp.o
03 lib-y := delay.o
04 lib-y += thunk_$(BITS).o
05 lib-y += usercopy_$(BITS).o getuser.o putuser.o
06 lib-y += memcpy_$(BITS).o
07 lib-$(CONFIG_INSTRUCTION_DECODER) += insn.o inat.o
08 obj-y += msr.o msr-reg.o msr-reg-export.o
09 obj-y += atomic64_32.o
10 lib-y += atomic64_cx8_32.o
11 lib-y += checksum_32.o
12 lib-y += strstr_32.o
13 lib-y += semaphore_32.o string_32.o
14 lib-y += cmpxchg.o

目錄目的檔群
linux/arch/x86/lib 目地檔群
msr-smp.o、cache-smp.o、msr.o msr-reg.o、msr-reg-export.o、atomic64_32.o。

函式庫群
delay.o、thunk_32.o、usercopy_32.o、 getuser.o、 putuser.o、memcpy_32.o、insn.o、inat.o、atomic64_cx8_32.o、 、atomic64_32.o、atomic64_cx8_32.o、checksum_32.o、strstr_32.o、semaphore_32.o、string_32.o、cmpxchg.o。