From 016ab7e4ccc07d4b228cf5c497eb3f6d8b5d35a7 Mon Sep 17 00:00:00 2001 From: zmr961006 <1797763610@qq.com> Date: Wed, 19 Apr 2017 01:37:17 +0800 Subject: [PATCH] add --- IO_port/README.md | 45 ++ IO_port/code/.short.ko.cmd | 1 + IO_port/code/.short.mod.o.cmd | 587 +++++++++++++++++++ IO_port/code/.short.o.cmd | 836 +++++++++++++++++++++++++++ IO_port/code/.tmp_versions/short.mod | 2 + IO_port/code/Makefile | 11 + IO_port/code/short.c | 278 +++++++++ IO_port/code/short_load | 33 ++ IO_port/code/short_unload | 16 + IO_port/copy/.short.ko.cmd | 1 + IO_port/copy/.short.mod.o.cmd | 587 +++++++++++++++++++ IO_port/copy/.short.o.cmd | 836 +++++++++++++++++++++++++++ IO_port/copy/.tmp_versions/short.mod | 2 + IO_port/copy/Makefile | 11 + IO_port/copy/Module.symvers | 0 IO_port/copy/file | 1 + IO_port/copy/modules.order | 1 + IO_port/copy/short.c | 692 ++++++++++++++++++++++ IO_port/copy/short.ko | Bin 0 -> 279096 bytes IO_port/copy/short.mod.c | 21 + IO_port/copy/short.mod.o | Bin 0 -> 63784 bytes IO_port/copy/short.o | Bin 0 -> 219440 bytes IO_port/copy/short_load | 61 ++ IO_port/copy/short_unload | 16 + IO_port/image/ss.png | Bin 0 -> 27905 bytes README.md | 6 + 26 files changed, 4044 insertions(+) create mode 100644 IO_port/README.md create mode 100644 IO_port/code/.short.ko.cmd create mode 100644 IO_port/code/.short.mod.o.cmd create mode 100644 IO_port/code/.short.o.cmd create mode 100644 IO_port/code/.tmp_versions/short.mod create mode 100644 IO_port/code/Makefile create mode 100644 IO_port/code/short.c create mode 100755 IO_port/code/short_load create mode 100755 IO_port/code/short_unload create mode 100644 IO_port/copy/.short.ko.cmd create mode 100644 IO_port/copy/.short.mod.o.cmd create mode 100644 IO_port/copy/.short.o.cmd create mode 100644 IO_port/copy/.tmp_versions/short.mod create mode 100644 IO_port/copy/Makefile create mode 100644 IO_port/copy/Module.symvers create mode 100644 IO_port/copy/file create mode 100644 IO_port/copy/modules.order create mode 100644 IO_port/copy/short.c create mode 100644 IO_port/copy/short.ko create mode 100644 IO_port/copy/short.mod.c create mode 100644 IO_port/copy/short.mod.o create mode 100644 IO_port/copy/short.o create mode 100755 IO_port/copy/short_load create mode 100644 IO_port/copy/short_unload create mode 100644 IO_port/image/ss.png diff --git a/IO_port/README.md b/IO_port/README.md new file mode 100644 index 0000000..4b8afe3 --- /dev/null +++ b/IO_port/README.md @@ -0,0 +1,45 @@ +## IO 通信 + +每种外设都能通过读写寄存器进行控制。大部分外设都有几个寄存器。不管在内存地址还是IO地址空间都是连续的。 + +ISA设备 IO端口方案 + +PCI设备 将寄存器映射到内存区段 + +### io寄存器和传统内存对比 + + +IO寄存器和传统内存对比 + 尽管硬件寄存器和内存之间有很强的相似性, 程序员在存取 I/O 寄存器的时候还是要格外小心,避免被CPU(或者编译器)优化所迷惑, 因为它可能修改你期待的 I/O 行为. + I/O 寄存器和 RAM 一个主要的不同是:I/O 操作会带来副作用, 而内存操作没有。一个内存写操作的唯一效果是存储一个值到某个地址, 并且一个内存读操作返回上次写到该地址的值. 由于内存存取速度对CPU 性能是至关重要的, 这种无副作用的操作已被多种方式优化: 值被缓存, 并且读/写指令被重新编排.编译器能够缓存数据值到CPU 寄存器而不写到内存, 并且即使数据值已经存储到内存, 读和写操作都能够在缓冲内存中进行而不是直接接触物理RAM. 此外,指令重编排可能在编译器级别或在硬件级别发生: 很多情况下,如果一个指令以不同于在程序文本中出现的顺序来执行(例如, 为避免在 RISC 流水线中的互锁),它能够执行得更快,对于传统内存(至少在单处理器系统)来说,这些优化是透明和有益的。驱动直接存取I/O寄存器的主要目的是能提高CPU性能。然而,这些优化对正确的 I/O 操作可能是致命的. 处理器无法预见这种情形, 一些其他的操作(在一个独立处理器上运行, 或者发生在一个 I/O 控制器的事情)依赖内存存取的顺序. 编译器或者 CPU 可能只尽力胜过你并且重编排你请求的操作; 结果可能是奇怪的错误而非常难于调试. 因此, 一个驱动必须确保没有进行缓冲并且在存取寄存器时没有发生读或写的重编排. + + +### 解决方法:内存屏障(解决IO 寄存器被优化的问题) + +内存屏障(Memory Barriers) +一方面,CPU由于采用指令流水线和超流水线技术,可能导致CPU虽然顺序取指令、但有可能会出现“乱序”执行的情况,当然,对于” a++;b = f(a);c = f”等存在依赖关系的指令,CPU则会在“b= f(a)”执行阶段之前被阻塞;另一方面,编译器也有可能将依赖关系很近“人为地”拉开距离以防止阻塞情况的发生,从而导致编译器乱序,如“a++ ;c = f;b = f(a)”。 +一个CPU对指令顺序提供如下保证: + +(1) On any given CPU, dependent memory accesses will be issued in order, with respect to itself.如Q = P; D = *Q;将保证其顺序执行 + +(2) Overlapping loads and stores within a particular CPU will appear to be ordered within that CPU.重叠的Load和Store操作将保证顺序执行(目标地址相同的Load、Store),如:a = *X; *X = b; + +(3) It _must_not_ be assumed that independent loads and stores will be issued in the order given. + +(4) It _must_ be assumed that overlapping memory accesses may be merged or discarded.如*A = X; Y = *A; => STORE *A = X; Y = LOAD *A; / or STORE *A = Y = X; + +由此可见,无关的内存操作会被按随机顺序有效的得到执行,但是在CPU与CPU交互时或CPU与IO设备交互时, 这可能会成为问题. 我们需要一些手段来干预编译器和CPU, 使其限制指令顺序。内存屏障就是这样的干预手段. 他们能保证处于内存屏障两边的内存操作满足部分有序.(译注: 这里"部分有序"的意思是, 内存屏障之前的操作都会先于屏障之后的操作, 但是如果几个操作出现在屏障的同一边, 则不保证它们的顺序.) +(1) 写(STORE)内存屏障。在写屏障之前的STORE操作将先于所有在写屏障之后的STORE操作。 +(2) 数据依赖屏障。两条Load指令,第二条Load指令依赖于第一条Load指令的结果,则数据依赖屏障保障第二条指令的目标地址将被更新。 +(3) 读(LOAD)内存屏障。读屏障包含数据依赖屏障的功能, 并且保证所有出现在屏障之前的LOAD操作都将先于所有出现在屏障之后的LOAD操作被系统中的其他组件所感知. +(4) 通用内存屏障. 通用内存屏障保证所有出现在屏障之前的LOAD和STORE操作都将先于所有出现在屏障之后的LOAD和STORE操作被系统中的其他组件所感知. +(5) LOCK操作.它的作用相当于一个单向渗透屏障.它保证所有出现在LOCK之后的内存操作都将在LOCK操作被系统中的其他组件所感知之后才能发生. 出现在LOCK之前的内存操作可能在LOCK完成之后才发生.LOCK操作总是跟UNLOCK操作配对出现. +(6) UNLOCK操作。它保证所有出现在UNLOCK之前的内存操作都将在UNLOCK操作被系统中的其他组件所感知之前发生. + +### 简单IO端口访问程序结构 + +ps: struct file -> path -> dentry -> inode + +ps : disabled rmmove https://lwn.net/Articles/380931/ + +![ss](./image/ss.png) \ No newline at end of file diff --git a/IO_port/code/.short.ko.cmd b/IO_port/code/.short.ko.cmd new file mode 100644 index 0000000..cfd7918 --- /dev/null +++ b/IO_port/code/.short.ko.cmd @@ -0,0 +1 @@ +cmd_/home/hacker/git/Linux_Scull/IO_port/code/short.ko := ld -r -m elf_x86_64 -T ./scripts/module-common.lds --build-id -o /home/hacker/git/Linux_Scull/IO_port/code/short.ko /home/hacker/git/Linux_Scull/IO_port/code/short.o /home/hacker/git/Linux_Scull/IO_port/code/short.mod.o diff --git a/IO_port/code/.short.mod.o.cmd b/IO_port/code/.short.mod.o.cmd new file mode 100644 index 0000000..7dff046 --- /dev/null +++ b/IO_port/code/.short.mod.o.cmd @@ -0,0 +1,587 @@ +cmd_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o := gcc -Wp,-MD,/home/hacker/git/Linux_Scull/IO_port/code/.short.mod.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -mno-80387 -mno-fp-ret-in-387 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fvar-tracking-assignments -g -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(short.mod)" -D"KBUILD_MODNAME=KBUILD_STR(short)" -DMODULE -c -o /home/hacker/git/Linux_Scull/IO_port/code/short.mod.o /home/hacker/git/Linux_Scull/IO_port/code/short.mod.c + +source_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o := /home/hacker/git/Linux_Scull/IO_port/code/short.mod.c + +deps_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o := \ + $(wildcard include/config/module/unload.h) \ + include/linux/module.h \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/module/sig.h) \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + $(wildcard include/config/livepatch.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + include/uapi/linux/types.h \ + arch/x86/include/uapi/asm/types.h \ + include/uapi/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + include/uapi/asm-generic/int-ll64.h \ + arch/x86/include/uapi/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/uapi/asm-generic/bitsperlong.h \ + include/uapi/linux/posix_types.h \ + include/linux/stddef.h \ + include/uapi/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + $(wildcard include/config/kprobes.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc5.h \ + $(wildcard include/config/arch/use/builtin/bswap.h) \ + arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + arch/x86/include/uapi/asm/posix_types_64.h \ + include/uapi/asm-generic/posix_types.h \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/uapi/linux/const.h \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/atomic/sleep.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/panic/timeout.h) \ + $(wildcard include/config/ring/buffer.h) \ + /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stdarg.h \ + include/linux/linkage.h \ + include/linux/stringify.h \ + include/linux/export.h \ + $(wildcard include/config/have/underscore/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/bitops.h \ + arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + arch/x86/include/asm/asm.h \ + arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/x86/debugctlmsr.h) \ + arch/x86/include/asm/segment.h \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + arch/x86/include/asm/page_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/kasan.h) \ + $(wildcard include/config/randomize/base.h) \ + $(wildcard include/config/randomize/base/max/offset.h) \ + arch/x86/include/uapi/asm/ptrace.h \ + arch/x86/include/uapi/asm/ptrace-abi.h \ + arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + arch/x86/include/uapi/asm/processor-flags.h \ + arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/paravirt/debug.h) \ + arch/x86/include/asm/desc_defs.h \ + arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/mem/soft/dirty.h) \ + $(wildcard include/config/proc/fs.h) \ + arch/x86/include/asm/pgtable_64_types.h \ + arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/sparsemem.h) \ + arch/x86/include/asm/spinlock_types.h \ + $(wildcard include/config/paravirt/spinlocks.h) \ + $(wildcard include/config/nr/cpus.h) \ + include/asm-generic/qrwlock_types.h \ + include/asm-generic/ptrace.h \ + arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/feature/names.h) \ + $(wildcard include/config/x86/debug/static/cpu/has.h) \ + arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + $(wildcard include/config/matom.h) \ + arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/x86/intel/mpx.h) \ + arch/x86/include/asm/rmwcc.h \ + arch/x86/include/asm/barrier.h \ + $(wildcard include/config/x86/ppro/fence.h) \ + arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/le.h \ + arch/x86/include/uapi/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/uapi/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + include/uapi/linux/swab.h \ + arch/x86/include/uapi/asm/swab.h \ + include/linux/byteorder/generic.h \ + include/asm-generic/bitops/ext2-atomic-setbit.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/message/loglevel/default.h) \ + $(wildcard include/config/early/printk.h) \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/broken/rodata.h) \ + $(wildcard include/config/lto.h) \ + include/linux/kern_levels.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/uapi/linux/kernel.h \ + include/uapi/linux/sysinfo.h \ + include/linux/dynamic_debug.h \ + include/linux/stat.h \ + arch/x86/include/uapi/asm/stat.h \ + include/uapi/linux/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/seqlock.h \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/preempt.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/count.h) \ + $(wildcard include/config/context/tracking.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + arch/x86/include/asm/preempt.h \ + arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + include/linux/bug.h \ + arch/x86/include/asm/bug.h \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/ia32/emulation.h) \ + arch/x86/include/asm/page.h \ + arch/x86/include/asm/page_64.h \ + $(wildcard include/config/debug/virtual.h) \ + $(wildcard include/config/flatmem.h) \ + $(wildcard include/config/x86/vsyscall/emulation.h) \ + include/linux/range.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + include/asm-generic/getorder.h \ + arch/x86/include/asm/processor.h \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/xen.h) \ + arch/x86/include/asm/vm86.h \ + arch/x86/include/uapi/asm/vm86.h \ + arch/x86/include/asm/math_emu.h \ + arch/x86/include/asm/sigcontext.h \ + arch/x86/include/uapi/asm/sigcontext.h \ + arch/x86/include/asm/current.h \ + arch/x86/include/asm/msr.h \ + arch/x86/include/uapi/asm/msr.h \ + arch/x86/include/uapi/asm/msr-index.h \ + include/uapi/linux/ioctl.h \ + arch/x86/include/uapi/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/uapi/asm-generic/ioctl.h \ + arch/x86/include/uapi/asm/errno.h \ + include/uapi/asm-generic/errno.h \ + include/uapi/asm-generic/errno-base.h \ + arch/x86/include/asm/cpumask.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + include/uapi/linux/string.h \ + arch/x86/include/asm/string.h \ + arch/x86/include/asm/string_64.h \ + arch/x86/include/asm/paravirt.h \ + arch/x86/include/asm/special_insns.h \ + include/linux/personality.h \ + include/uapi/linux/personality.h \ + include/linux/math64.h \ + $(wildcard include/config/arch/supports/int128.h) \ + arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + arch/x86/include/asm/irqflags.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + $(wildcard include/config/generic/atomic64.h) \ + arch/x86/include/asm/atomic.h \ + arch/x86/include/asm/cmpxchg.h \ + arch/x86/include/asm/cmpxchg_64.h \ + arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/preempt_mask.h \ + include/linux/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/lock/stat.h) \ + $(wildcard include/config/prove/rcu.h) \ + include/linux/rwlock_types.h \ + arch/x86/include/asm/spinlock.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + arch/x86/include/asm/jump_label.h \ + arch/x86/include/asm/qrwlock.h \ + include/asm-generic/qrwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/uninline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/time64.h \ + include/uapi/linux/time.h \ + include/linux/uidgid.h \ + $(wildcard include/config/user/ns.h) \ + include/linux/highuid.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/cma.h) \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/isolation.h) \ + $(wildcard include/config/memcg.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/have/memblock/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/page/extension.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/numa/balancing.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/have/memoryless/nodes.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/wait.h \ + include/uapi/linux/wait.h \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/nodemask.h \ + $(wildcard include/config/movable/node.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + $(wildcard include/config/have/bootmem/info/node.h) \ + include/linux/notifier.h \ + include/linux/errno.h \ + include/uapi/linux/errno.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/mutex/spin/on/owner.h) \ + include/linux/osq_lock.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/spin/on/owner.h) \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + arch/x86/include/asm/rwsem.h \ + include/linux/srcu.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/trace.h) \ + $(wildcard include/config/rcu/stall/common.h) \ + $(wildcard include/config/rcu/user/qs.h) \ + $(wildcard include/config/rcu/nocb/cpu.h) \ + $(wildcard include/config/tasks/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/rcu/nocb/cpu/all.h) \ + $(wildcard include/config/no/hz/full/sysidle.h) \ + include/linux/completion.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/rcutree.h \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/uapi/linux/timex.h \ + include/uapi/linux/param.h \ + arch/x86/include/uapi/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/uapi/asm-generic/param.h \ + arch/x86/include/asm/timex.h \ + arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/timekeeping.h \ + arch/x86/include/asm/mmzone.h \ + arch/x86/include/asm/mmzone_64.h \ + arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + $(wildcard include/config/debug/nmi/selftest.h) \ + arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + arch/x86/include/asm/mpspec_def.h \ + arch/x86/include/asm/x86_init.h \ + arch/x86/include/uapi/asm/bootparam.h \ + include/linux/screen_info.h \ + include/uapi/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/uapi/linux/apm_bios.h \ + include/linux/edd.h \ + include/uapi/linux/edd.h \ + arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + arch/x86/include/uapi/asm/e820.h \ + $(wildcard include/config/intel/txt.h) \ + include/linux/ioport.h \ + arch/x86/include/asm/ist.h \ + arch/x86/include/uapi/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + include/uapi/video/edid.h \ + arch/x86/include/asm/apicdef.h \ + arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/vt/console/sleep.h) \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/clk.h) \ + $(wildcard include/config/pm/generic/domains.h) \ + arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/paravirt/clock.h) \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/intel/mid.h) \ + arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi.h) \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + arch/x86/include/asm/mmu.h \ + arch/x86/include/asm/realmode.h \ + $(wildcard include/config/acpi/sleep.h) \ + arch/x86/include/asm/io.h \ + $(wildcard include/config/mtrr.h) \ + arch/x86/include/generated/asm/early_ioremap.h \ + include/asm-generic/early_ioremap.h \ + $(wildcard include/config/generic/early/ioremap.h) \ + include/asm-generic/iomap.h \ + $(wildcard include/config/has/ioport/map.h) \ + $(wildcard include/config/pci.h) \ + $(wildcard include/config/generic/iomap.h) \ + include/asm-generic/pci_iomap.h \ + $(wildcard include/config/no/generic/pci/ioport/map.h) \ + $(wildcard include/config/generic/pci/iomap.h) \ + include/linux/vmalloc.h \ + include/linux/rbtree.h \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + $(wildcard include/config/xen/pvh.h) \ + include/xen/interface/xen.h \ + arch/x86/include/asm/xen/interface.h \ + arch/x86/include/asm/xen/interface_64.h \ + arch/x86/include/asm/pvclock-abi.h \ + arch/x86/include/asm/xen/hypervisor.h \ + arch/x86/include/asm/pvclock.h \ + include/linux/clocksource.h \ + $(wildcard include/config/arch/clocksource/data.h) \ + $(wildcard include/config/clocksource/watchdog.h) \ + $(wildcard include/config/clksrc/of.h) \ + arch/x86/include/asm/clocksource.h \ + arch/x86/include/uapi/asm/vsyscall.h \ + include/asm-generic/fixmap.h \ + arch/x86/include/asm/idle.h \ + arch/x86/include/asm/io_apic.h \ + arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/have/kvm.h) \ + include/linux/topology.h \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + $(wildcard include/config/sched/smt.h) \ + include/linux/smp.h \ + $(wildcard include/config/up/late/init.h) \ + include/linux/llist.h \ + $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/sysctl.h \ + $(wildcard include/config/sysctl.h) \ + include/uapi/linux/sysctl.h \ + include/linux/elf.h \ + arch/x86/include/asm/elf.h \ + $(wildcard include/config/x86/x32/abi.h) \ + arch/x86/include/asm/user.h \ + arch/x86/include/asm/user_64.h \ + arch/x86/include/uapi/asm/auxvec.h \ + arch/x86/include/asm/vdso.h \ + $(wildcard include/config/x86/x32.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ + $(wildcard include/config/have/cmpxchg/double.h) \ + $(wildcard include/config/have/aligned/struct/page.h) \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + include/uapi/linux/auxvec.h \ + include/linux/uprobes.h \ + $(wildcard include/config/uprobes.h) \ + arch/x86/include/asm/uprobes.h \ + include/uapi/linux/elf.h \ + include/uapi/linux/elf-em.h \ + include/linux/kobject.h \ + $(wildcard include/config/uevent/helper.h) \ + $(wildcard include/config/debug/kobject/release.h) \ + include/linux/sysfs.h \ + include/linux/kernfs.h \ + $(wildcard include/config/kernfs.h) \ + include/linux/idr.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + $(wildcard include/config/have/mod/arch/specific.h) \ + $(wildcard include/config/modules/use/elf/rel.h) \ + $(wildcard include/config/modules/use/elf/rela.h) \ + include/linux/vermagic.h \ + include/generated/utsrelease.h \ + +/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o: $(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o) + +$(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o): diff --git a/IO_port/code/.short.o.cmd b/IO_port/code/.short.o.cmd new file mode 100644 index 0000000..2a95917 --- /dev/null +++ b/IO_port/code/.short.o.cmd @@ -0,0 +1,836 @@ +cmd_/home/hacker/git/Linux_Scull/IO_port/code/short.o := gcc -Wp,-MD,/home/hacker/git/Linux_Scull/IO_port/code/.short.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -mno-80387 -mno-fp-ret-in-387 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fvar-tracking-assignments -g -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(short)" -D"KBUILD_MODNAME=KBUILD_STR(short)" -c -o /home/hacker/git/Linux_Scull/IO_port/code/short.o /home/hacker/git/Linux_Scull/IO_port/code/short.c + +source_/home/hacker/git/Linux_Scull/IO_port/code/short.o := /home/hacker/git/Linux_Scull/IO_port/code/short.c + +deps_/home/hacker/git/Linux_Scull/IO_port/code/short.o := \ + include/linux/module.h \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/module/sig.h) \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + $(wildcard include/config/livepatch.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + include/uapi/linux/types.h \ + arch/x86/include/uapi/asm/types.h \ + include/uapi/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + include/uapi/asm-generic/int-ll64.h \ + arch/x86/include/uapi/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/uapi/asm-generic/bitsperlong.h \ + include/uapi/linux/posix_types.h \ + include/linux/stddef.h \ + include/uapi/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + $(wildcard include/config/kprobes.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc5.h \ + $(wildcard include/config/arch/use/builtin/bswap.h) \ + arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + arch/x86/include/uapi/asm/posix_types_64.h \ + include/uapi/asm-generic/posix_types.h \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/uapi/linux/const.h \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/atomic/sleep.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/panic/timeout.h) \ + $(wildcard include/config/ring/buffer.h) \ + /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stdarg.h \ + include/linux/linkage.h \ + include/linux/stringify.h \ + include/linux/export.h \ + $(wildcard include/config/have/underscore/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/bitops.h \ + arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + arch/x86/include/asm/asm.h \ + arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/x86/debugctlmsr.h) \ + arch/x86/include/asm/segment.h \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + arch/x86/include/asm/page_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/kasan.h) \ + $(wildcard include/config/randomize/base.h) \ + $(wildcard include/config/randomize/base/max/offset.h) \ + arch/x86/include/uapi/asm/ptrace.h \ + arch/x86/include/uapi/asm/ptrace-abi.h \ + arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + arch/x86/include/uapi/asm/processor-flags.h \ + arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/paravirt/debug.h) \ + arch/x86/include/asm/desc_defs.h \ + arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/mem/soft/dirty.h) \ + $(wildcard include/config/proc/fs.h) \ + arch/x86/include/asm/pgtable_64_types.h \ + arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/sparsemem.h) \ + arch/x86/include/asm/spinlock_types.h \ + $(wildcard include/config/paravirt/spinlocks.h) \ + $(wildcard include/config/nr/cpus.h) \ + include/asm-generic/qrwlock_types.h \ + include/asm-generic/ptrace.h \ + arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/feature/names.h) \ + $(wildcard include/config/x86/debug/static/cpu/has.h) \ + arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + $(wildcard include/config/matom.h) \ + arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/x86/intel/mpx.h) \ + arch/x86/include/asm/rmwcc.h \ + arch/x86/include/asm/barrier.h \ + $(wildcard include/config/x86/ppro/fence.h) \ + arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/le.h \ + arch/x86/include/uapi/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/uapi/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + include/uapi/linux/swab.h \ + arch/x86/include/uapi/asm/swab.h \ + include/linux/byteorder/generic.h \ + include/asm-generic/bitops/ext2-atomic-setbit.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/message/loglevel/default.h) \ + $(wildcard include/config/early/printk.h) \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/broken/rodata.h) \ + $(wildcard include/config/lto.h) \ + include/linux/kern_levels.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/uapi/linux/kernel.h \ + include/uapi/linux/sysinfo.h \ + include/linux/dynamic_debug.h \ + include/linux/stat.h \ + arch/x86/include/uapi/asm/stat.h \ + include/uapi/linux/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/seqlock.h \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/preempt.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/count.h) \ + $(wildcard include/config/context/tracking.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + arch/x86/include/asm/preempt.h \ + arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + include/linux/bug.h \ + arch/x86/include/asm/bug.h \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/ia32/emulation.h) \ + arch/x86/include/asm/page.h \ + arch/x86/include/asm/page_64.h \ + $(wildcard include/config/debug/virtual.h) \ + $(wildcard include/config/flatmem.h) \ + $(wildcard include/config/x86/vsyscall/emulation.h) \ + include/linux/range.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + include/asm-generic/getorder.h \ + arch/x86/include/asm/processor.h \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/xen.h) \ + arch/x86/include/asm/vm86.h \ + arch/x86/include/uapi/asm/vm86.h \ + arch/x86/include/asm/math_emu.h \ + arch/x86/include/asm/sigcontext.h \ + arch/x86/include/uapi/asm/sigcontext.h \ + arch/x86/include/asm/current.h \ + arch/x86/include/asm/msr.h \ + arch/x86/include/uapi/asm/msr.h \ + arch/x86/include/uapi/asm/msr-index.h \ + include/uapi/linux/ioctl.h \ + arch/x86/include/uapi/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/uapi/asm-generic/ioctl.h \ + arch/x86/include/uapi/asm/errno.h \ + include/uapi/asm-generic/errno.h \ + include/uapi/asm-generic/errno-base.h \ + arch/x86/include/asm/cpumask.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + include/uapi/linux/string.h \ + arch/x86/include/asm/string.h \ + arch/x86/include/asm/string_64.h \ + arch/x86/include/asm/paravirt.h \ + arch/x86/include/asm/special_insns.h \ + include/linux/personality.h \ + include/uapi/linux/personality.h \ + include/linux/math64.h \ + $(wildcard include/config/arch/supports/int128.h) \ + arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + arch/x86/include/asm/irqflags.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + $(wildcard include/config/generic/atomic64.h) \ + arch/x86/include/asm/atomic.h \ + arch/x86/include/asm/cmpxchg.h \ + arch/x86/include/asm/cmpxchg_64.h \ + arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/preempt_mask.h \ + include/linux/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/lock/stat.h) \ + $(wildcard include/config/prove/rcu.h) \ + include/linux/rwlock_types.h \ + arch/x86/include/asm/spinlock.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + arch/x86/include/asm/jump_label.h \ + arch/x86/include/asm/qrwlock.h \ + include/asm-generic/qrwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/uninline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/time64.h \ + include/uapi/linux/time.h \ + include/linux/uidgid.h \ + $(wildcard include/config/user/ns.h) \ + include/linux/highuid.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/cma.h) \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/isolation.h) \ + $(wildcard include/config/memcg.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/have/memblock/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/page/extension.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/numa/balancing.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/have/memoryless/nodes.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/wait.h \ + include/uapi/linux/wait.h \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/nodemask.h \ + $(wildcard include/config/movable/node.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + $(wildcard include/config/have/bootmem/info/node.h) \ + include/linux/notifier.h \ + include/linux/errno.h \ + include/uapi/linux/errno.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/mutex/spin/on/owner.h) \ + include/linux/osq_lock.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/spin/on/owner.h) \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + arch/x86/include/asm/rwsem.h \ + include/linux/srcu.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/trace.h) \ + $(wildcard include/config/rcu/stall/common.h) \ + $(wildcard include/config/rcu/user/qs.h) \ + $(wildcard include/config/rcu/nocb/cpu.h) \ + $(wildcard include/config/tasks/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/rcu/nocb/cpu/all.h) \ + $(wildcard include/config/no/hz/full/sysidle.h) \ + include/linux/completion.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/rcutree.h \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/uapi/linux/timex.h \ + include/uapi/linux/param.h \ + arch/x86/include/uapi/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/uapi/asm-generic/param.h \ + arch/x86/include/asm/timex.h \ + arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/timekeeping.h \ + arch/x86/include/asm/mmzone.h \ + arch/x86/include/asm/mmzone_64.h \ + arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + $(wildcard include/config/debug/nmi/selftest.h) \ + arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + arch/x86/include/asm/mpspec_def.h \ + arch/x86/include/asm/x86_init.h \ + arch/x86/include/uapi/asm/bootparam.h \ + include/linux/screen_info.h \ + include/uapi/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/uapi/linux/apm_bios.h \ + include/linux/edd.h \ + include/uapi/linux/edd.h \ + arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + arch/x86/include/uapi/asm/e820.h \ + $(wildcard include/config/intel/txt.h) \ + include/linux/ioport.h \ + arch/x86/include/asm/ist.h \ + arch/x86/include/uapi/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + include/uapi/video/edid.h \ + arch/x86/include/asm/apicdef.h \ + arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/vt/console/sleep.h) \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/clk.h) \ + $(wildcard include/config/pm/generic/domains.h) \ + arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/paravirt/clock.h) \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/intel/mid.h) \ + arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi.h) \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + arch/x86/include/asm/mmu.h \ + arch/x86/include/asm/realmode.h \ + $(wildcard include/config/acpi/sleep.h) \ + arch/x86/include/asm/io.h \ + $(wildcard include/config/mtrr.h) \ + arch/x86/include/generated/asm/early_ioremap.h \ + include/asm-generic/early_ioremap.h \ + $(wildcard include/config/generic/early/ioremap.h) \ + include/asm-generic/iomap.h \ + $(wildcard include/config/has/ioport/map.h) \ + $(wildcard include/config/pci.h) \ + $(wildcard include/config/generic/iomap.h) \ + include/asm-generic/pci_iomap.h \ + $(wildcard include/config/no/generic/pci/ioport/map.h) \ + $(wildcard include/config/generic/pci/iomap.h) \ + include/linux/vmalloc.h \ + include/linux/rbtree.h \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + $(wildcard include/config/xen/pvh.h) \ + include/xen/interface/xen.h \ + arch/x86/include/asm/xen/interface.h \ + arch/x86/include/asm/xen/interface_64.h \ + arch/x86/include/asm/pvclock-abi.h \ + arch/x86/include/asm/xen/hypervisor.h \ + arch/x86/include/asm/pvclock.h \ + include/linux/clocksource.h \ + $(wildcard include/config/arch/clocksource/data.h) \ + $(wildcard include/config/clocksource/watchdog.h) \ + $(wildcard include/config/clksrc/of.h) \ + arch/x86/include/asm/clocksource.h \ + arch/x86/include/uapi/asm/vsyscall.h \ + include/asm-generic/fixmap.h \ + arch/x86/include/asm/idle.h \ + arch/x86/include/asm/io_apic.h \ + arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/have/kvm.h) \ + include/linux/topology.h \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + $(wildcard include/config/sched/smt.h) \ + include/linux/smp.h \ + $(wildcard include/config/up/late/init.h) \ + include/linux/llist.h \ + $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/sysctl.h \ + $(wildcard include/config/sysctl.h) \ + include/uapi/linux/sysctl.h \ + include/linux/elf.h \ + arch/x86/include/asm/elf.h \ + $(wildcard include/config/x86/x32/abi.h) \ + arch/x86/include/asm/user.h \ + arch/x86/include/asm/user_64.h \ + arch/x86/include/uapi/asm/auxvec.h \ + arch/x86/include/asm/vdso.h \ + $(wildcard include/config/x86/x32.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ + $(wildcard include/config/have/cmpxchg/double.h) \ + $(wildcard include/config/have/aligned/struct/page.h) \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + include/uapi/linux/auxvec.h \ + include/linux/uprobes.h \ + $(wildcard include/config/uprobes.h) \ + arch/x86/include/asm/uprobes.h \ + include/uapi/linux/elf.h \ + include/uapi/linux/elf-em.h \ + include/linux/kobject.h \ + $(wildcard include/config/uevent/helper.h) \ + $(wildcard include/config/debug/kobject/release.h) \ + include/linux/sysfs.h \ + include/linux/kernfs.h \ + $(wildcard include/config/kernfs.h) \ + include/linux/idr.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + $(wildcard include/config/have/mod/arch/specific.h) \ + $(wildcard include/config/modules/use/elf/rel.h) \ + $(wildcard include/config/modules/use/elf/rela.h) \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/no/hz/common.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting/native.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/memcg/kmem.h) \ + $(wildcard include/config/virt/cpu/accounting/gen.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/bcache.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/no/hz/full.h) \ + $(wildcard include/config/stack/growsup.h) \ + include/uapi/linux/sched.h \ + include/linux/sched/prio.h \ + include/linux/capability.h \ + include/uapi/linux/capability.h \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/cputime.h \ + arch/x86/include/generated/asm/cputime.h \ + include/asm-generic/cputime.h \ + $(wildcard include/config/virt/cpu/accounting.h) \ + include/asm-generic/cputime_nsecs.h \ + include/linux/sem.h \ + include/uapi/linux/sem.h \ + include/linux/ipc.h \ + include/uapi/linux/ipc.h \ + arch/x86/include/uapi/asm/ipcbuf.h \ + include/uapi/asm-generic/ipcbuf.h \ + arch/x86/include/uapi/asm/sembuf.h \ + include/linux/shm.h \ + include/uapi/linux/shm.h \ + arch/x86/include/uapi/asm/shmbuf.h \ + include/uapi/asm-generic/shmbuf.h \ + arch/x86/include/asm/shmparam.h \ + include/linux/signal.h \ + $(wildcard include/config/old/sigaction.h) \ + include/uapi/linux/signal.h \ + arch/x86/include/asm/signal.h \ + arch/x86/include/uapi/asm/signal.h \ + include/uapi/asm-generic/signal-defs.h \ + arch/x86/include/uapi/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/uapi/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/have/arch/seccomp/filter.h) \ + $(wildcard include/config/seccomp/filter.h) \ + include/uapi/linux/seccomp.h \ + arch/x86/include/asm/seccomp.h \ + arch/x86/include/asm/seccomp_64.h \ + include/uapi/linux/unistd.h \ + arch/x86/include/asm/unistd.h \ + arch/x86/include/uapi/asm/unistd.h \ + arch/x86/include/generated/uapi/asm/unistd_64.h \ + arch/x86/include/generated/asm/unistd_64_x32.h \ + arch/x86/include/asm/ia32_unistd.h \ + arch/x86/include/generated/asm/unistd_32_ia32.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/resource.h \ + include/uapi/linux/resource.h \ + arch/x86/include/uapi/asm/resource.h \ + include/asm-generic/resource.h \ + include/uapi/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + include/linux/key.h \ + include/linux/assoc_array.h \ + $(wildcard include/config/associative/array.h) \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/uapi/linux/magic.h \ + include/linux/fs.h \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fs/dax.h) \ + $(wildcard include/config/migration.h) \ + include/linux/kdev_t.h \ + include/uapi/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/lockref.h \ + $(wildcard include/config/arch/use/cmpxchg/lockref.h) \ + include/linux/path.h \ + include/linux/list_lru.h \ + include/linux/shrinker.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/uapi/linux/fiemap.h \ + include/linux/migrate_mode.h \ + include/linux/percpu-rwsem.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/cgroup.h) \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/uapi/linux/fs.h \ + include/uapi/linux/limits.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/uapi/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/projid.h \ + include/uapi/linux/quota.h \ + include/linux/nfs_fs_i.h \ + include/linux/fcntl.h \ + include/uapi/linux/fcntl.h \ + arch/x86/include/uapi/asm/fcntl.h \ + include/uapi/asm-generic/fcntl.h \ + include/linux/delay.h \ + arch/x86/include/asm/delay.h \ + include/asm-generic/delay.h \ + include/linux/slab.h \ + $(wildcard include/config/slab/debug.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + include/linux/kasan.h \ + $(wildcard include/config/kasan/shadow/offset.h) \ + include/linux/mm.h \ + $(wildcard include/config/ppc.h) \ + $(wildcard include/config/parisc.h) \ + $(wildcard include/config/metag.h) \ + $(wildcard include/config/ksm.h) \ + $(wildcard include/config/shmem.h) \ + $(wildcard include/config/debug/vm/rb.h) \ + $(wildcard include/config/debug/pagealloc.h) \ + $(wildcard include/config/hugetlbfs.h) \ + include/linux/debug_locks.h \ + $(wildcard include/config/debug/locking/api/selftests.h) \ + include/linux/page_ext.h \ + $(wildcard include/config/page/owner.h) \ + include/linux/stacktrace.h \ + $(wildcard include/config/stacktrace.h) \ + $(wildcard include/config/user/stacktrace/support.h) \ + arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/have/arch/soft/dirty.h) \ + arch/x86/include/asm/pgtable_64.h \ + include/asm-generic/pgtable.h \ + include/linux/page-flags.h \ + $(wildcard include/config/pageflags/extended.h) \ + $(wildcard include/config/arch/uses/pg/uncached.h) \ + $(wildcard include/config/memory/failure.h) \ + $(wildcard include/config/swap.h) \ + include/linux/huge_mm.h \ + include/linux/vmstat.h \ + $(wildcard include/config/vm/event/counters.h) \ + $(wildcard include/config/debug/tlbflush.h) \ + $(wildcard include/config/debug/vm/vmacache.h) \ + include/linux/vm_event_item.h \ + $(wildcard include/config/memory/balloon.h) \ + $(wildcard include/config/balloon/compaction.h) \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/uapi/linux/irqnr.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + include/linux/vtime.h \ + include/linux/context_tracking_state.h \ + include/linux/static_key.h \ + arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + $(wildcard include/config/hyperv.h) \ + include/linux/irq.h \ + $(wildcard include/config/irq/domain/hierarchy.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + $(wildcard include/config/hardirqs/sw/resend.h) \ + $(wildcard include/config/generic/irq/legacy/alloc/hwirq.h) \ + $(wildcard include/config/generic/irq/legacy.h) \ + include/linux/irqhandler.h \ + include/linux/io.h \ + arch/x86/include/asm/irq.h \ + arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + $(wildcard include/config/sparse/irq.h) \ + $(wildcard include/config/handle/domain/irq.h) \ + arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/irq/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/intel/usercopy.h) \ + $(wildcard include/config/debug/strict/user/copy/checks.h) \ + arch/x86/include/asm/smap.h \ + $(wildcard include/config/x86/smap.h) \ + arch/x86/include/asm/uaccess_64.h \ + include/linux/poll.h \ + include/uapi/linux/poll.h \ + arch/x86/include/uapi/asm/poll.h \ + include/uapi/asm-generic/poll.h \ + +/home/hacker/git/Linux_Scull/IO_port/code/short.o: $(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.o) + +$(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.o): diff --git a/IO_port/code/.tmp_versions/short.mod b/IO_port/code/.tmp_versions/short.mod new file mode 100644 index 0000000..e003bc4 --- /dev/null +++ b/IO_port/code/.tmp_versions/short.mod @@ -0,0 +1,2 @@ +/home/hacker/git/Linux_Scull/IO_port/code/short.ko +/home/hacker/git/Linux_Scull/IO_port/code/short.o diff --git a/IO_port/code/Makefile b/IO_port/code/Makefile new file mode 100644 index 0000000..511f5a6 --- /dev/null +++ b/IO_port/code/Makefile @@ -0,0 +1,11 @@ +obj-m := short.o +CURRENT_PATH := ${shell pwd} +CURRENT_KERNEL_PATH := ${shell uname -r} +LINUX_KERNEL_PATH := /usr/src/kernels/$(CURRENT_KERNEL_PATH) + +all: + make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules +clean: + rm *.o *.order *.symvers *.mod.c *.ko + + diff --git a/IO_port/code/short.c b/IO_port/code/short.c new file mode 100644 index 0000000..8fc7b3a --- /dev/null +++ b/IO_port/code/short.c @@ -0,0 +1,278 @@ +/************************************************************************* + > File Name: short.c + > Author: + > Mail: + > Created Time: 2017年04月19日 星期三 01时07分49秒 + ************************************************************************/ + +#include +#include +#include + +#include +#include /* printk() */ +#include /* everything... */ +#include /* error codes */ +#include /* udelay */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define SHORT_NR_PORTS 8 /* use 8 ports by default */ +/* + * all of the parameters have no "short_" prefix, to save typing when + * specifying them at load time + */ +static int major = 0; /* dynamic by default */ +module_param(major, int, 0); + +static int use_mem = 0; /* default is I/O-mapped */ +module_param(use_mem, int, 0); + +/* default is the first printer port on PC's. "short_base" is there too + because it's what we want to use in the code */ +static unsigned long base = 0x378; +unsigned long short_base = 0; +module_param(base, long, 0); + +/* The interrupt line is undefined by default. "short_irq" is as above */ +static int irq = -1; +volatile int short_irq = -1; +module_param(irq, int, 0); + +static int probe = 0; /* select at load time how to probe irq line */ +module_param(probe, int, 0); + +static int wq = 0; /* select at load time whether a workqueue is used */ +module_param(wq, int, 0); + +static int tasklet = 0; /* select whether a tasklet is used */ +module_param(tasklet, int, 0); + +static int share = 0; /* select at load time whether install a shared irq */ +module_param(share, int, 0); + + +MODULE_LICENSE("Dual BSD/GPL"); + + + +int short_open (struct inode *inode, struct file *filp) +{ + + return 0; +} + + +int short_release (struct inode *inode, struct file *filp) +{ + return 0; +} + + +/* first, the port-oriented device */ + +enum short_modes {SHORT_DEFAULT=0, SHORT_PAUSE, SHORT_STRING, SHORT_MEMORY}; + +ssize_t do_short_read (struct inode *inode, struct file *filp, char __user *buf, + size_t count, loff_t *f_pos) +{ + int retval = count, minor = iminor (inode); + unsigned long port = short_base + (minor&0x0f); + void *address = (void *) short_base + (minor&0x0f); + int mode = (minor&0x70) >> 4; + unsigned char *kbuf = kmalloc(count, GFP_KERNEL), *ptr; + + if (!kbuf) + return -ENOMEM; + ptr = kbuf; + + if (use_mem) + mode = SHORT_MEMORY; + + switch(mode) { + case SHORT_STRING: + insb(port, ptr, count); + rmb(); + break; + + case SHORT_DEFAULT: + while (count--) { + *(ptr++) = inb(port); + rmb(); + } + break; + + case SHORT_MEMORY: + while (count--) { + *ptr++ = ioread8(address); + rmb(); + } + break; + case SHORT_PAUSE: + while (count--) { + *(ptr++) = inb_p(port); + rmb(); + } + break; + + default: /* no more modes defined by now */ + retval = -EINVAL; + break; + } + if ((retval > 0) && copy_to_user(buf, kbuf, retval)) + retval = -EFAULT; + kfree(kbuf); + return retval; +} + + +/* + * Version-specific methods for the fops structure. FIXME don't need anymore. + */ +ssize_t short_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos) +{ + return do_short_read(filp->f_path.dentry->d_inode, filp, buf, count, f_pos); +} + + + +ssize_t do_short_write (struct inode *inode, struct file *filp, const char __user *buf, + size_t count, loff_t *f_pos) +{ + int retval = count, minor = iminor(inode); + unsigned long port = short_base + (minor&0x0f); + void *address = (void *) short_base + (minor&0x0f); + int mode = (minor&0x70) >> 4; + unsigned char *kbuf = kmalloc(count, GFP_KERNEL), *ptr; + + if (!kbuf) + return -ENOMEM; + if (copy_from_user(kbuf, buf, count)) + return -EFAULT; + ptr = kbuf; + + if (use_mem) + mode = SHORT_MEMORY; + + switch(mode) { + case SHORT_PAUSE: + while (count--) { + outb_p(*(ptr++), port); + wmb(); + } + break; + + case SHORT_STRING: + outsb(port, ptr, count); + wmb(); + break; + + case SHORT_DEFAULT: + while (count--) { + outb(*(ptr++), port); + wmb(); + } + break; + + case SHORT_MEMORY: + while (count--) { + iowrite8(*ptr++, address); + wmb(); + } + break; + + default: /* no more modes defined by now */ + retval = -EINVAL; + break; + } + kfree(kbuf); + return retval; +} + + +ssize_t short_write(struct file *filp, const char __user *buf, size_t count, + loff_t *f_pos) +{ + return do_short_write(filp->f_path.dentry->d_inode, filp, buf, count, f_pos); +} + + + + +unsigned int short_poll(struct file *filp, poll_table *wait) +{ + return POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM; +} + + + + + + +struct file_operations short_fops = { + .owner = THIS_MODULE, + .read = short_read, + .write = short_write, + .poll = short_poll, + .open = short_open, + .release = short_release, +}; + + +int short_init(void) +{ + int result; + + short_base = base; + short_irq = irq; + + /* Get our needed resources. */ + if (!use_mem) { + if (! request_region(short_base, SHORT_NR_PORTS, "short")) { + printk(KERN_INFO "short: can't get I/O port address 0x%lx\n", + short_base); + return -ENODEV; + } + + } else { + if (! request_mem_region(short_base, SHORT_NR_PORTS, "short")) { + printk(KERN_INFO "short: can't get I/O mem address 0x%lx\n", + short_base); + return -ENODEV; + } + + /* also, ioremap it */ + short_base = (unsigned long) ioremap(short_base, SHORT_NR_PORTS); + /* Hmm... we should check the return value */ + } + /* Here we register our device - should not fail thereafter */ + result = register_chrdev(major, "short", &short_fops); + if (result < 0) { + printk(KERN_INFO "short: can't get major number\n"); + release_region(short_base,SHORT_NR_PORTS); /* FIXME - use-mem case? */ + return result; + } + + + printk("the major :%d\n",result); + + + + return 0; +} + +void short_cleanup(void) +{ + +} +module_init(short_init); +module_exit(short_cleanup); + diff --git a/IO_port/code/short_load b/IO_port/code/short_load new file mode 100755 index 0000000..4419979 --- /dev/null +++ b/IO_port/code/short_load @@ -0,0 +1,33 @@ +#!/bin/sh +module="short" +device="short" +mode="664" + +# Group: since distributions do it differently, look for wheel or use staff +if grep '^staff:' /etc/group > /dev/null; then + group="staff" +else + group="wheel" +fi + + +# invoke insmod with all arguments we got +# and use a pathname, as newer modutils don't look in . by default +/sbin/insmod ./$module.ko $* || exit 1 + +major=`cat /proc/devices | awk "\\$2==\"$module\" {print \\$1}"` + +# Create 8 entry points, as SHORT_NR_PORTS is 8 by default +rm -f /dev/${device}0 +echo ${device} +mknod /dev/${device}0 c $major 0 + + +chgrp $group /dev/${device} +chmod $mode /dev/${device} + + + + + + diff --git a/IO_port/code/short_unload b/IO_port/code/short_unload new file mode 100755 index 0000000..7cf64dc --- /dev/null +++ b/IO_port/code/short_unload @@ -0,0 +1,16 @@ +#!/bin/sh +module="short" +device="short" + +# invoke rmmod with all arguments we got +/sbin/rmmod $module $* || exit 1 + +# Remove stale nodes + +rm -f /dev/${device}[0-7] /dev/${device}[0-7][ps] \ + /dev/${device}int /dev/${device}print + + + + + diff --git a/IO_port/copy/.short.ko.cmd b/IO_port/copy/.short.ko.cmd new file mode 100644 index 0000000..cfd7918 --- /dev/null +++ b/IO_port/copy/.short.ko.cmd @@ -0,0 +1 @@ +cmd_/home/hacker/git/Linux_Scull/IO_port/code/short.ko := ld -r -m elf_x86_64 -T ./scripts/module-common.lds --build-id -o /home/hacker/git/Linux_Scull/IO_port/code/short.ko /home/hacker/git/Linux_Scull/IO_port/code/short.o /home/hacker/git/Linux_Scull/IO_port/code/short.mod.o diff --git a/IO_port/copy/.short.mod.o.cmd b/IO_port/copy/.short.mod.o.cmd new file mode 100644 index 0000000..7dff046 --- /dev/null +++ b/IO_port/copy/.short.mod.o.cmd @@ -0,0 +1,587 @@ +cmd_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o := gcc -Wp,-MD,/home/hacker/git/Linux_Scull/IO_port/code/.short.mod.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -mno-80387 -mno-fp-ret-in-387 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fvar-tracking-assignments -g -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(short.mod)" -D"KBUILD_MODNAME=KBUILD_STR(short)" -DMODULE -c -o /home/hacker/git/Linux_Scull/IO_port/code/short.mod.o /home/hacker/git/Linux_Scull/IO_port/code/short.mod.c + +source_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o := /home/hacker/git/Linux_Scull/IO_port/code/short.mod.c + +deps_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o := \ + $(wildcard include/config/module/unload.h) \ + include/linux/module.h \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/module/sig.h) \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + $(wildcard include/config/livepatch.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + include/uapi/linux/types.h \ + arch/x86/include/uapi/asm/types.h \ + include/uapi/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + include/uapi/asm-generic/int-ll64.h \ + arch/x86/include/uapi/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/uapi/asm-generic/bitsperlong.h \ + include/uapi/linux/posix_types.h \ + include/linux/stddef.h \ + include/uapi/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + $(wildcard include/config/kprobes.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc5.h \ + $(wildcard include/config/arch/use/builtin/bswap.h) \ + arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + arch/x86/include/uapi/asm/posix_types_64.h \ + include/uapi/asm-generic/posix_types.h \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/uapi/linux/const.h \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/atomic/sleep.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/panic/timeout.h) \ + $(wildcard include/config/ring/buffer.h) \ + /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stdarg.h \ + include/linux/linkage.h \ + include/linux/stringify.h \ + include/linux/export.h \ + $(wildcard include/config/have/underscore/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/bitops.h \ + arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + arch/x86/include/asm/asm.h \ + arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/x86/debugctlmsr.h) \ + arch/x86/include/asm/segment.h \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + arch/x86/include/asm/page_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/kasan.h) \ + $(wildcard include/config/randomize/base.h) \ + $(wildcard include/config/randomize/base/max/offset.h) \ + arch/x86/include/uapi/asm/ptrace.h \ + arch/x86/include/uapi/asm/ptrace-abi.h \ + arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + arch/x86/include/uapi/asm/processor-flags.h \ + arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/paravirt/debug.h) \ + arch/x86/include/asm/desc_defs.h \ + arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/mem/soft/dirty.h) \ + $(wildcard include/config/proc/fs.h) \ + arch/x86/include/asm/pgtable_64_types.h \ + arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/sparsemem.h) \ + arch/x86/include/asm/spinlock_types.h \ + $(wildcard include/config/paravirt/spinlocks.h) \ + $(wildcard include/config/nr/cpus.h) \ + include/asm-generic/qrwlock_types.h \ + include/asm-generic/ptrace.h \ + arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/feature/names.h) \ + $(wildcard include/config/x86/debug/static/cpu/has.h) \ + arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + $(wildcard include/config/matom.h) \ + arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/x86/intel/mpx.h) \ + arch/x86/include/asm/rmwcc.h \ + arch/x86/include/asm/barrier.h \ + $(wildcard include/config/x86/ppro/fence.h) \ + arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/le.h \ + arch/x86/include/uapi/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/uapi/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + include/uapi/linux/swab.h \ + arch/x86/include/uapi/asm/swab.h \ + include/linux/byteorder/generic.h \ + include/asm-generic/bitops/ext2-atomic-setbit.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/message/loglevel/default.h) \ + $(wildcard include/config/early/printk.h) \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/broken/rodata.h) \ + $(wildcard include/config/lto.h) \ + include/linux/kern_levels.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/uapi/linux/kernel.h \ + include/uapi/linux/sysinfo.h \ + include/linux/dynamic_debug.h \ + include/linux/stat.h \ + arch/x86/include/uapi/asm/stat.h \ + include/uapi/linux/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/seqlock.h \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/preempt.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/count.h) \ + $(wildcard include/config/context/tracking.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + arch/x86/include/asm/preempt.h \ + arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + include/linux/bug.h \ + arch/x86/include/asm/bug.h \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/ia32/emulation.h) \ + arch/x86/include/asm/page.h \ + arch/x86/include/asm/page_64.h \ + $(wildcard include/config/debug/virtual.h) \ + $(wildcard include/config/flatmem.h) \ + $(wildcard include/config/x86/vsyscall/emulation.h) \ + include/linux/range.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + include/asm-generic/getorder.h \ + arch/x86/include/asm/processor.h \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/xen.h) \ + arch/x86/include/asm/vm86.h \ + arch/x86/include/uapi/asm/vm86.h \ + arch/x86/include/asm/math_emu.h \ + arch/x86/include/asm/sigcontext.h \ + arch/x86/include/uapi/asm/sigcontext.h \ + arch/x86/include/asm/current.h \ + arch/x86/include/asm/msr.h \ + arch/x86/include/uapi/asm/msr.h \ + arch/x86/include/uapi/asm/msr-index.h \ + include/uapi/linux/ioctl.h \ + arch/x86/include/uapi/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/uapi/asm-generic/ioctl.h \ + arch/x86/include/uapi/asm/errno.h \ + include/uapi/asm-generic/errno.h \ + include/uapi/asm-generic/errno-base.h \ + arch/x86/include/asm/cpumask.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + include/uapi/linux/string.h \ + arch/x86/include/asm/string.h \ + arch/x86/include/asm/string_64.h \ + arch/x86/include/asm/paravirt.h \ + arch/x86/include/asm/special_insns.h \ + include/linux/personality.h \ + include/uapi/linux/personality.h \ + include/linux/math64.h \ + $(wildcard include/config/arch/supports/int128.h) \ + arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + arch/x86/include/asm/irqflags.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + $(wildcard include/config/generic/atomic64.h) \ + arch/x86/include/asm/atomic.h \ + arch/x86/include/asm/cmpxchg.h \ + arch/x86/include/asm/cmpxchg_64.h \ + arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/preempt_mask.h \ + include/linux/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/lock/stat.h) \ + $(wildcard include/config/prove/rcu.h) \ + include/linux/rwlock_types.h \ + arch/x86/include/asm/spinlock.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + arch/x86/include/asm/jump_label.h \ + arch/x86/include/asm/qrwlock.h \ + include/asm-generic/qrwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/uninline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/time64.h \ + include/uapi/linux/time.h \ + include/linux/uidgid.h \ + $(wildcard include/config/user/ns.h) \ + include/linux/highuid.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/cma.h) \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/isolation.h) \ + $(wildcard include/config/memcg.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/have/memblock/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/page/extension.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/numa/balancing.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/have/memoryless/nodes.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/wait.h \ + include/uapi/linux/wait.h \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/nodemask.h \ + $(wildcard include/config/movable/node.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + $(wildcard include/config/have/bootmem/info/node.h) \ + include/linux/notifier.h \ + include/linux/errno.h \ + include/uapi/linux/errno.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/mutex/spin/on/owner.h) \ + include/linux/osq_lock.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/spin/on/owner.h) \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + arch/x86/include/asm/rwsem.h \ + include/linux/srcu.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/trace.h) \ + $(wildcard include/config/rcu/stall/common.h) \ + $(wildcard include/config/rcu/user/qs.h) \ + $(wildcard include/config/rcu/nocb/cpu.h) \ + $(wildcard include/config/tasks/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/rcu/nocb/cpu/all.h) \ + $(wildcard include/config/no/hz/full/sysidle.h) \ + include/linux/completion.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/rcutree.h \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/uapi/linux/timex.h \ + include/uapi/linux/param.h \ + arch/x86/include/uapi/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/uapi/asm-generic/param.h \ + arch/x86/include/asm/timex.h \ + arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/timekeeping.h \ + arch/x86/include/asm/mmzone.h \ + arch/x86/include/asm/mmzone_64.h \ + arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + $(wildcard include/config/debug/nmi/selftest.h) \ + arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + arch/x86/include/asm/mpspec_def.h \ + arch/x86/include/asm/x86_init.h \ + arch/x86/include/uapi/asm/bootparam.h \ + include/linux/screen_info.h \ + include/uapi/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/uapi/linux/apm_bios.h \ + include/linux/edd.h \ + include/uapi/linux/edd.h \ + arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + arch/x86/include/uapi/asm/e820.h \ + $(wildcard include/config/intel/txt.h) \ + include/linux/ioport.h \ + arch/x86/include/asm/ist.h \ + arch/x86/include/uapi/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + include/uapi/video/edid.h \ + arch/x86/include/asm/apicdef.h \ + arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/vt/console/sleep.h) \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/clk.h) \ + $(wildcard include/config/pm/generic/domains.h) \ + arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/paravirt/clock.h) \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/intel/mid.h) \ + arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi.h) \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + arch/x86/include/asm/mmu.h \ + arch/x86/include/asm/realmode.h \ + $(wildcard include/config/acpi/sleep.h) \ + arch/x86/include/asm/io.h \ + $(wildcard include/config/mtrr.h) \ + arch/x86/include/generated/asm/early_ioremap.h \ + include/asm-generic/early_ioremap.h \ + $(wildcard include/config/generic/early/ioremap.h) \ + include/asm-generic/iomap.h \ + $(wildcard include/config/has/ioport/map.h) \ + $(wildcard include/config/pci.h) \ + $(wildcard include/config/generic/iomap.h) \ + include/asm-generic/pci_iomap.h \ + $(wildcard include/config/no/generic/pci/ioport/map.h) \ + $(wildcard include/config/generic/pci/iomap.h) \ + include/linux/vmalloc.h \ + include/linux/rbtree.h \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + $(wildcard include/config/xen/pvh.h) \ + include/xen/interface/xen.h \ + arch/x86/include/asm/xen/interface.h \ + arch/x86/include/asm/xen/interface_64.h \ + arch/x86/include/asm/pvclock-abi.h \ + arch/x86/include/asm/xen/hypervisor.h \ + arch/x86/include/asm/pvclock.h \ + include/linux/clocksource.h \ + $(wildcard include/config/arch/clocksource/data.h) \ + $(wildcard include/config/clocksource/watchdog.h) \ + $(wildcard include/config/clksrc/of.h) \ + arch/x86/include/asm/clocksource.h \ + arch/x86/include/uapi/asm/vsyscall.h \ + include/asm-generic/fixmap.h \ + arch/x86/include/asm/idle.h \ + arch/x86/include/asm/io_apic.h \ + arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/have/kvm.h) \ + include/linux/topology.h \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + $(wildcard include/config/sched/smt.h) \ + include/linux/smp.h \ + $(wildcard include/config/up/late/init.h) \ + include/linux/llist.h \ + $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/sysctl.h \ + $(wildcard include/config/sysctl.h) \ + include/uapi/linux/sysctl.h \ + include/linux/elf.h \ + arch/x86/include/asm/elf.h \ + $(wildcard include/config/x86/x32/abi.h) \ + arch/x86/include/asm/user.h \ + arch/x86/include/asm/user_64.h \ + arch/x86/include/uapi/asm/auxvec.h \ + arch/x86/include/asm/vdso.h \ + $(wildcard include/config/x86/x32.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ + $(wildcard include/config/have/cmpxchg/double.h) \ + $(wildcard include/config/have/aligned/struct/page.h) \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + include/uapi/linux/auxvec.h \ + include/linux/uprobes.h \ + $(wildcard include/config/uprobes.h) \ + arch/x86/include/asm/uprobes.h \ + include/uapi/linux/elf.h \ + include/uapi/linux/elf-em.h \ + include/linux/kobject.h \ + $(wildcard include/config/uevent/helper.h) \ + $(wildcard include/config/debug/kobject/release.h) \ + include/linux/sysfs.h \ + include/linux/kernfs.h \ + $(wildcard include/config/kernfs.h) \ + include/linux/idr.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + $(wildcard include/config/have/mod/arch/specific.h) \ + $(wildcard include/config/modules/use/elf/rel.h) \ + $(wildcard include/config/modules/use/elf/rela.h) \ + include/linux/vermagic.h \ + include/generated/utsrelease.h \ + +/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o: $(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o) + +$(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.mod.o): diff --git a/IO_port/copy/.short.o.cmd b/IO_port/copy/.short.o.cmd new file mode 100644 index 0000000..2a95917 --- /dev/null +++ b/IO_port/copy/.short.o.cmd @@ -0,0 +1,836 @@ +cmd_/home/hacker/git/Linux_Scull/IO_port/code/short.o := gcc -Wp,-MD,/home/hacker/git/Linux_Scull/IO_port/code/.short.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -mno-80387 -mno-fp-ret-in-387 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fvar-tracking-assignments -g -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(short)" -D"KBUILD_MODNAME=KBUILD_STR(short)" -c -o /home/hacker/git/Linux_Scull/IO_port/code/short.o /home/hacker/git/Linux_Scull/IO_port/code/short.c + +source_/home/hacker/git/Linux_Scull/IO_port/code/short.o := /home/hacker/git/Linux_Scull/IO_port/code/short.c + +deps_/home/hacker/git/Linux_Scull/IO_port/code/short.o := \ + include/linux/module.h \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/module/sig.h) \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + $(wildcard include/config/livepatch.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + include/uapi/linux/types.h \ + arch/x86/include/uapi/asm/types.h \ + include/uapi/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + include/uapi/asm-generic/int-ll64.h \ + arch/x86/include/uapi/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/uapi/asm-generic/bitsperlong.h \ + include/uapi/linux/posix_types.h \ + include/linux/stddef.h \ + include/uapi/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + $(wildcard include/config/kprobes.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc5.h \ + $(wildcard include/config/arch/use/builtin/bswap.h) \ + arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + arch/x86/include/uapi/asm/posix_types_64.h \ + include/uapi/asm-generic/posix_types.h \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/uapi/linux/const.h \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/atomic/sleep.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/panic/timeout.h) \ + $(wildcard include/config/ring/buffer.h) \ + /usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stdarg.h \ + include/linux/linkage.h \ + include/linux/stringify.h \ + include/linux/export.h \ + $(wildcard include/config/have/underscore/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/bitops.h \ + arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + arch/x86/include/asm/asm.h \ + arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/x86/debugctlmsr.h) \ + arch/x86/include/asm/segment.h \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + arch/x86/include/asm/page_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/kasan.h) \ + $(wildcard include/config/randomize/base.h) \ + $(wildcard include/config/randomize/base/max/offset.h) \ + arch/x86/include/uapi/asm/ptrace.h \ + arch/x86/include/uapi/asm/ptrace-abi.h \ + arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + arch/x86/include/uapi/asm/processor-flags.h \ + arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/paravirt/debug.h) \ + arch/x86/include/asm/desc_defs.h \ + arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/mem/soft/dirty.h) \ + $(wildcard include/config/proc/fs.h) \ + arch/x86/include/asm/pgtable_64_types.h \ + arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/sparsemem.h) \ + arch/x86/include/asm/spinlock_types.h \ + $(wildcard include/config/paravirt/spinlocks.h) \ + $(wildcard include/config/nr/cpus.h) \ + include/asm-generic/qrwlock_types.h \ + include/asm-generic/ptrace.h \ + arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/feature/names.h) \ + $(wildcard include/config/x86/debug/static/cpu/has.h) \ + arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + $(wildcard include/config/matom.h) \ + arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/x86/intel/mpx.h) \ + arch/x86/include/asm/rmwcc.h \ + arch/x86/include/asm/barrier.h \ + $(wildcard include/config/x86/ppro/fence.h) \ + arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/le.h \ + arch/x86/include/uapi/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/uapi/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + include/uapi/linux/swab.h \ + arch/x86/include/uapi/asm/swab.h \ + include/linux/byteorder/generic.h \ + include/asm-generic/bitops/ext2-atomic-setbit.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/message/loglevel/default.h) \ + $(wildcard include/config/early/printk.h) \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/broken/rodata.h) \ + $(wildcard include/config/lto.h) \ + include/linux/kern_levels.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/uapi/linux/kernel.h \ + include/uapi/linux/sysinfo.h \ + include/linux/dynamic_debug.h \ + include/linux/stat.h \ + arch/x86/include/uapi/asm/stat.h \ + include/uapi/linux/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/seqlock.h \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/preempt.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/count.h) \ + $(wildcard include/config/context/tracking.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + arch/x86/include/asm/preempt.h \ + arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + include/linux/bug.h \ + arch/x86/include/asm/bug.h \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/ia32/emulation.h) \ + arch/x86/include/asm/page.h \ + arch/x86/include/asm/page_64.h \ + $(wildcard include/config/debug/virtual.h) \ + $(wildcard include/config/flatmem.h) \ + $(wildcard include/config/x86/vsyscall/emulation.h) \ + include/linux/range.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + include/asm-generic/getorder.h \ + arch/x86/include/asm/processor.h \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/xen.h) \ + arch/x86/include/asm/vm86.h \ + arch/x86/include/uapi/asm/vm86.h \ + arch/x86/include/asm/math_emu.h \ + arch/x86/include/asm/sigcontext.h \ + arch/x86/include/uapi/asm/sigcontext.h \ + arch/x86/include/asm/current.h \ + arch/x86/include/asm/msr.h \ + arch/x86/include/uapi/asm/msr.h \ + arch/x86/include/uapi/asm/msr-index.h \ + include/uapi/linux/ioctl.h \ + arch/x86/include/uapi/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/uapi/asm-generic/ioctl.h \ + arch/x86/include/uapi/asm/errno.h \ + include/uapi/asm-generic/errno.h \ + include/uapi/asm-generic/errno-base.h \ + arch/x86/include/asm/cpumask.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + include/uapi/linux/string.h \ + arch/x86/include/asm/string.h \ + arch/x86/include/asm/string_64.h \ + arch/x86/include/asm/paravirt.h \ + arch/x86/include/asm/special_insns.h \ + include/linux/personality.h \ + include/uapi/linux/personality.h \ + include/linux/math64.h \ + $(wildcard include/config/arch/supports/int128.h) \ + arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + arch/x86/include/asm/irqflags.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + $(wildcard include/config/generic/atomic64.h) \ + arch/x86/include/asm/atomic.h \ + arch/x86/include/asm/cmpxchg.h \ + arch/x86/include/asm/cmpxchg_64.h \ + arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/preempt_mask.h \ + include/linux/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/lock/stat.h) \ + $(wildcard include/config/prove/rcu.h) \ + include/linux/rwlock_types.h \ + arch/x86/include/asm/spinlock.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + arch/x86/include/asm/jump_label.h \ + arch/x86/include/asm/qrwlock.h \ + include/asm-generic/qrwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/uninline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/time64.h \ + include/uapi/linux/time.h \ + include/linux/uidgid.h \ + $(wildcard include/config/user/ns.h) \ + include/linux/highuid.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/cma.h) \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/isolation.h) \ + $(wildcard include/config/memcg.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/have/memblock/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/page/extension.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/numa/balancing.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/have/memoryless/nodes.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/wait.h \ + include/uapi/linux/wait.h \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/nodemask.h \ + $(wildcard include/config/movable/node.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + $(wildcard include/config/have/bootmem/info/node.h) \ + include/linux/notifier.h \ + include/linux/errno.h \ + include/uapi/linux/errno.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/mutex/spin/on/owner.h) \ + include/linux/osq_lock.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/spin/on/owner.h) \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + arch/x86/include/asm/rwsem.h \ + include/linux/srcu.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/trace.h) \ + $(wildcard include/config/rcu/stall/common.h) \ + $(wildcard include/config/rcu/user/qs.h) \ + $(wildcard include/config/rcu/nocb/cpu.h) \ + $(wildcard include/config/tasks/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/rcu/nocb/cpu/all.h) \ + $(wildcard include/config/no/hz/full/sysidle.h) \ + include/linux/completion.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/rcutree.h \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/uapi/linux/timex.h \ + include/uapi/linux/param.h \ + arch/x86/include/uapi/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/uapi/asm-generic/param.h \ + arch/x86/include/asm/timex.h \ + arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/timekeeping.h \ + arch/x86/include/asm/mmzone.h \ + arch/x86/include/asm/mmzone_64.h \ + arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + $(wildcard include/config/debug/nmi/selftest.h) \ + arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + arch/x86/include/asm/mpspec_def.h \ + arch/x86/include/asm/x86_init.h \ + arch/x86/include/uapi/asm/bootparam.h \ + include/linux/screen_info.h \ + include/uapi/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/uapi/linux/apm_bios.h \ + include/linux/edd.h \ + include/uapi/linux/edd.h \ + arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + arch/x86/include/uapi/asm/e820.h \ + $(wildcard include/config/intel/txt.h) \ + include/linux/ioport.h \ + arch/x86/include/asm/ist.h \ + arch/x86/include/uapi/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + include/uapi/video/edid.h \ + arch/x86/include/asm/apicdef.h \ + arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/vt/console/sleep.h) \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/clk.h) \ + $(wildcard include/config/pm/generic/domains.h) \ + arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/paravirt/clock.h) \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/intel/mid.h) \ + arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi.h) \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + arch/x86/include/asm/mmu.h \ + arch/x86/include/asm/realmode.h \ + $(wildcard include/config/acpi/sleep.h) \ + arch/x86/include/asm/io.h \ + $(wildcard include/config/mtrr.h) \ + arch/x86/include/generated/asm/early_ioremap.h \ + include/asm-generic/early_ioremap.h \ + $(wildcard include/config/generic/early/ioremap.h) \ + include/asm-generic/iomap.h \ + $(wildcard include/config/has/ioport/map.h) \ + $(wildcard include/config/pci.h) \ + $(wildcard include/config/generic/iomap.h) \ + include/asm-generic/pci_iomap.h \ + $(wildcard include/config/no/generic/pci/ioport/map.h) \ + $(wildcard include/config/generic/pci/iomap.h) \ + include/linux/vmalloc.h \ + include/linux/rbtree.h \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + $(wildcard include/config/xen/pvh.h) \ + include/xen/interface/xen.h \ + arch/x86/include/asm/xen/interface.h \ + arch/x86/include/asm/xen/interface_64.h \ + arch/x86/include/asm/pvclock-abi.h \ + arch/x86/include/asm/xen/hypervisor.h \ + arch/x86/include/asm/pvclock.h \ + include/linux/clocksource.h \ + $(wildcard include/config/arch/clocksource/data.h) \ + $(wildcard include/config/clocksource/watchdog.h) \ + $(wildcard include/config/clksrc/of.h) \ + arch/x86/include/asm/clocksource.h \ + arch/x86/include/uapi/asm/vsyscall.h \ + include/asm-generic/fixmap.h \ + arch/x86/include/asm/idle.h \ + arch/x86/include/asm/io_apic.h \ + arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/have/kvm.h) \ + include/linux/topology.h \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + $(wildcard include/config/sched/smt.h) \ + include/linux/smp.h \ + $(wildcard include/config/up/late/init.h) \ + include/linux/llist.h \ + $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/sysctl.h \ + $(wildcard include/config/sysctl.h) \ + include/uapi/linux/sysctl.h \ + include/linux/elf.h \ + arch/x86/include/asm/elf.h \ + $(wildcard include/config/x86/x32/abi.h) \ + arch/x86/include/asm/user.h \ + arch/x86/include/asm/user_64.h \ + arch/x86/include/uapi/asm/auxvec.h \ + arch/x86/include/asm/vdso.h \ + $(wildcard include/config/x86/x32.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ + $(wildcard include/config/have/cmpxchg/double.h) \ + $(wildcard include/config/have/aligned/struct/page.h) \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + include/uapi/linux/auxvec.h \ + include/linux/uprobes.h \ + $(wildcard include/config/uprobes.h) \ + arch/x86/include/asm/uprobes.h \ + include/uapi/linux/elf.h \ + include/uapi/linux/elf-em.h \ + include/linux/kobject.h \ + $(wildcard include/config/uevent/helper.h) \ + $(wildcard include/config/debug/kobject/release.h) \ + include/linux/sysfs.h \ + include/linux/kernfs.h \ + $(wildcard include/config/kernfs.h) \ + include/linux/idr.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + $(wildcard include/config/have/mod/arch/specific.h) \ + $(wildcard include/config/modules/use/elf/rel.h) \ + $(wildcard include/config/modules/use/elf/rela.h) \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/no/hz/common.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting/native.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/memcg/kmem.h) \ + $(wildcard include/config/virt/cpu/accounting/gen.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/bcache.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/no/hz/full.h) \ + $(wildcard include/config/stack/growsup.h) \ + include/uapi/linux/sched.h \ + include/linux/sched/prio.h \ + include/linux/capability.h \ + include/uapi/linux/capability.h \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/cputime.h \ + arch/x86/include/generated/asm/cputime.h \ + include/asm-generic/cputime.h \ + $(wildcard include/config/virt/cpu/accounting.h) \ + include/asm-generic/cputime_nsecs.h \ + include/linux/sem.h \ + include/uapi/linux/sem.h \ + include/linux/ipc.h \ + include/uapi/linux/ipc.h \ + arch/x86/include/uapi/asm/ipcbuf.h \ + include/uapi/asm-generic/ipcbuf.h \ + arch/x86/include/uapi/asm/sembuf.h \ + include/linux/shm.h \ + include/uapi/linux/shm.h \ + arch/x86/include/uapi/asm/shmbuf.h \ + include/uapi/asm-generic/shmbuf.h \ + arch/x86/include/asm/shmparam.h \ + include/linux/signal.h \ + $(wildcard include/config/old/sigaction.h) \ + include/uapi/linux/signal.h \ + arch/x86/include/asm/signal.h \ + arch/x86/include/uapi/asm/signal.h \ + include/uapi/asm-generic/signal-defs.h \ + arch/x86/include/uapi/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/uapi/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/have/arch/seccomp/filter.h) \ + $(wildcard include/config/seccomp/filter.h) \ + include/uapi/linux/seccomp.h \ + arch/x86/include/asm/seccomp.h \ + arch/x86/include/asm/seccomp_64.h \ + include/uapi/linux/unistd.h \ + arch/x86/include/asm/unistd.h \ + arch/x86/include/uapi/asm/unistd.h \ + arch/x86/include/generated/uapi/asm/unistd_64.h \ + arch/x86/include/generated/asm/unistd_64_x32.h \ + arch/x86/include/asm/ia32_unistd.h \ + arch/x86/include/generated/asm/unistd_32_ia32.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/resource.h \ + include/uapi/linux/resource.h \ + arch/x86/include/uapi/asm/resource.h \ + include/asm-generic/resource.h \ + include/uapi/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + include/linux/key.h \ + include/linux/assoc_array.h \ + $(wildcard include/config/associative/array.h) \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/uapi/linux/magic.h \ + include/linux/fs.h \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fs/dax.h) \ + $(wildcard include/config/migration.h) \ + include/linux/kdev_t.h \ + include/uapi/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/lockref.h \ + $(wildcard include/config/arch/use/cmpxchg/lockref.h) \ + include/linux/path.h \ + include/linux/list_lru.h \ + include/linux/shrinker.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/uapi/linux/fiemap.h \ + include/linux/migrate_mode.h \ + include/linux/percpu-rwsem.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/cgroup.h) \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/uapi/linux/fs.h \ + include/uapi/linux/limits.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/uapi/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/projid.h \ + include/uapi/linux/quota.h \ + include/linux/nfs_fs_i.h \ + include/linux/fcntl.h \ + include/uapi/linux/fcntl.h \ + arch/x86/include/uapi/asm/fcntl.h \ + include/uapi/asm-generic/fcntl.h \ + include/linux/delay.h \ + arch/x86/include/asm/delay.h \ + include/asm-generic/delay.h \ + include/linux/slab.h \ + $(wildcard include/config/slab/debug.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + include/linux/kasan.h \ + $(wildcard include/config/kasan/shadow/offset.h) \ + include/linux/mm.h \ + $(wildcard include/config/ppc.h) \ + $(wildcard include/config/parisc.h) \ + $(wildcard include/config/metag.h) \ + $(wildcard include/config/ksm.h) \ + $(wildcard include/config/shmem.h) \ + $(wildcard include/config/debug/vm/rb.h) \ + $(wildcard include/config/debug/pagealloc.h) \ + $(wildcard include/config/hugetlbfs.h) \ + include/linux/debug_locks.h \ + $(wildcard include/config/debug/locking/api/selftests.h) \ + include/linux/page_ext.h \ + $(wildcard include/config/page/owner.h) \ + include/linux/stacktrace.h \ + $(wildcard include/config/stacktrace.h) \ + $(wildcard include/config/user/stacktrace/support.h) \ + arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/have/arch/soft/dirty.h) \ + arch/x86/include/asm/pgtable_64.h \ + include/asm-generic/pgtable.h \ + include/linux/page-flags.h \ + $(wildcard include/config/pageflags/extended.h) \ + $(wildcard include/config/arch/uses/pg/uncached.h) \ + $(wildcard include/config/memory/failure.h) \ + $(wildcard include/config/swap.h) \ + include/linux/huge_mm.h \ + include/linux/vmstat.h \ + $(wildcard include/config/vm/event/counters.h) \ + $(wildcard include/config/debug/tlbflush.h) \ + $(wildcard include/config/debug/vm/vmacache.h) \ + include/linux/vm_event_item.h \ + $(wildcard include/config/memory/balloon.h) \ + $(wildcard include/config/balloon/compaction.h) \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/uapi/linux/irqnr.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + include/linux/vtime.h \ + include/linux/context_tracking_state.h \ + include/linux/static_key.h \ + arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + $(wildcard include/config/hyperv.h) \ + include/linux/irq.h \ + $(wildcard include/config/irq/domain/hierarchy.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + $(wildcard include/config/hardirqs/sw/resend.h) \ + $(wildcard include/config/generic/irq/legacy/alloc/hwirq.h) \ + $(wildcard include/config/generic/irq/legacy.h) \ + include/linux/irqhandler.h \ + include/linux/io.h \ + arch/x86/include/asm/irq.h \ + arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + $(wildcard include/config/sparse/irq.h) \ + $(wildcard include/config/handle/domain/irq.h) \ + arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/irq/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/intel/usercopy.h) \ + $(wildcard include/config/debug/strict/user/copy/checks.h) \ + arch/x86/include/asm/smap.h \ + $(wildcard include/config/x86/smap.h) \ + arch/x86/include/asm/uaccess_64.h \ + include/linux/poll.h \ + include/uapi/linux/poll.h \ + arch/x86/include/uapi/asm/poll.h \ + include/uapi/asm-generic/poll.h \ + +/home/hacker/git/Linux_Scull/IO_port/code/short.o: $(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.o) + +$(deps_/home/hacker/git/Linux_Scull/IO_port/code/short.o): diff --git a/IO_port/copy/.tmp_versions/short.mod b/IO_port/copy/.tmp_versions/short.mod new file mode 100644 index 0000000..e003bc4 --- /dev/null +++ b/IO_port/copy/.tmp_versions/short.mod @@ -0,0 +1,2 @@ +/home/hacker/git/Linux_Scull/IO_port/code/short.ko +/home/hacker/git/Linux_Scull/IO_port/code/short.o diff --git a/IO_port/copy/Makefile b/IO_port/copy/Makefile new file mode 100644 index 0000000..511f5a6 --- /dev/null +++ b/IO_port/copy/Makefile @@ -0,0 +1,11 @@ +obj-m := short.o +CURRENT_PATH := ${shell pwd} +CURRENT_KERNEL_PATH := ${shell uname -r} +LINUX_KERNEL_PATH := /usr/src/kernels/$(CURRENT_KERNEL_PATH) + +all: + make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules +clean: + rm *.o *.order *.symvers *.mod.c *.ko + + diff --git a/IO_port/copy/Module.symvers b/IO_port/copy/Module.symvers new file mode 100644 index 0000000..e69de29 diff --git a/IO_port/copy/file b/IO_port/copy/file new file mode 100644 index 0000000..ce542ef --- /dev/null +++ b/IO_port/copy/file @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/IO_port/copy/modules.order b/IO_port/copy/modules.order new file mode 100644 index 0000000..d726682 --- /dev/null +++ b/IO_port/copy/modules.order @@ -0,0 +1 @@ +kernel//home/hacker/git/Linux_Scull/IO_port/code/short.ko diff --git a/IO_port/copy/short.c b/IO_port/copy/short.c new file mode 100644 index 0000000..1422519 --- /dev/null +++ b/IO_port/copy/short.c @@ -0,0 +1,692 @@ +/* + * short.c -- Simple Hardware Operations and Raw Tests + * short.c -- also a brief example of interrupt handling ("short int") + * + * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet + * Copyright (C) 2001 O'Reilly & Associates + * + * The source code in this file can be freely used, adapted, + * and redistributed in source or binary form, so long as an + * acknowledgment appears in derived source files. The citation + * should list that the code comes from the book "Linux Device + * Drivers" by Alessandro Rubini and Jonathan Corbet, published + * by O'Reilly & Associates. No warranty is attached; + * we cannot take responsibility for errors or fitness for use. + * + * $Id: short.c,v 1.16 2004/10/29 16:45:40 corbet Exp $ + */ + +/* + * FIXME: this driver is not safe with concurrent readers or + * writers. + */ + + +#include +#include +#include + +#include +#include /* printk() */ +#include /* everything... */ +#include /* error codes */ +#include /* udelay */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define SHORT_NR_PORTS 8 /* use 8 ports by default */ + +/* + * all of the parameters have no "short_" prefix, to save typing when + * specifying them at load time + */ +static int major = 0; /* dynamic by default */ +module_param(major, int, 0); + +static int use_mem = 0; /* default is I/O-mapped */ +module_param(use_mem, int, 0); + +/* default is the first printer port on PC's. "short_base" is there too + because it's what we want to use in the code */ +static unsigned long base = 0x378; +unsigned long short_base = 0; +module_param(base, long, 0); + +/* The interrupt line is undefined by default. "short_irq" is as above */ +static int irq = -1; +volatile int short_irq = -1; +module_param(irq, int, 0); + +static int probe = 0; /* select at load time how to probe irq line */ +module_param(probe, int, 0); + +static int wq = 0; /* select at load time whether a workqueue is used */ +module_param(wq, int, 0); + +static int tasklet = 0; /* select whether a tasklet is used */ +module_param(tasklet, int, 0); + +static int share = 0; /* select at load time whether install a shared irq */ +module_param(share, int, 0); + +MODULE_AUTHOR ("Alessandro Rubini"); +MODULE_LICENSE("Dual BSD/GPL"); + + +unsigned long short_buffer = 0; +unsigned long volatile short_head; +volatile unsigned long short_tail; +DECLARE_WAIT_QUEUE_HEAD(short_queue); + +/* Set up our tasklet if we're doing that. */ +void short_do_tasklet(unsigned long); +DECLARE_TASKLET(short_tasklet, short_do_tasklet, 0); + +/* + * Atomicly increment an index into short_buffer + */ +static inline void short_incr_bp(volatile unsigned long *index, int delta) +{ + unsigned long new = *index + delta; + barrier(); /* Don't optimize these two together */ + *index = (new >= (short_buffer + PAGE_SIZE)) ? short_buffer : new; +} + + +/* + * The devices with low minor numbers write/read burst of data to/from + * specific I/O ports (by default the parallel ones). + * + * The device with 128 as minor number returns ascii strings telling + * when interrupts have been received. Writing to the device toggles + * 00/FF on the parallel data lines. If there is a loopback wire, this + * generates interrupts. + */ + +int short_open (struct inode *inode, struct file *filp) +{ + extern struct file_operations short_i_fops; + + if (iminor (inode) & 0x80) + filp->f_op = &short_i_fops; /* the interrupt-driven node */ + return 0; +} + + +int short_release (struct inode *inode, struct file *filp) +{ + return 0; +} + + +/* first, the port-oriented device */ + +enum short_modes {SHORT_DEFAULT=0, SHORT_PAUSE, SHORT_STRING, SHORT_MEMORY}; + +ssize_t do_short_read (struct inode *inode, struct file *filp, char __user *buf, + size_t count, loff_t *f_pos) +{ + int retval = count, minor = iminor (inode); + unsigned long port = short_base + (minor&0x0f); + void *address = (void *) short_base + (minor&0x0f); + int mode = (minor&0x70) >> 4; + unsigned char *kbuf = kmalloc(count, GFP_KERNEL), *ptr; + + if (!kbuf) + return -ENOMEM; + ptr = kbuf; + + if (use_mem) + mode = SHORT_MEMORY; + + switch(mode) { + case SHORT_STRING: + insb(port, ptr, count); + rmb(); + break; + + case SHORT_DEFAULT: + while (count--) { + *(ptr++) = inb(port); + rmb(); + } + break; + + case SHORT_MEMORY: + while (count--) { + *ptr++ = ioread8(address); + rmb(); + } + break; + case SHORT_PAUSE: + while (count--) { + *(ptr++) = inb_p(port); + rmb(); + } + break; + + default: /* no more modes defined by now */ + retval = -EINVAL; + break; + } + if ((retval > 0) && copy_to_user(buf, kbuf, retval)) + retval = -EFAULT; + kfree(kbuf); + return retval; +} + + +/* + * Version-specific methods for the fops structure. FIXME don't need anymore. + */ +ssize_t short_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos) +{ + return do_short_read(filp->f_path.dentry->d_inode, filp, buf, count, f_pos); +} + + + +ssize_t do_short_write (struct inode *inode, struct file *filp, const char __user *buf, + size_t count, loff_t *f_pos) +{ + int retval = count, minor = iminor(inode); + unsigned long port = short_base + (minor&0x0f); + void *address = (void *) short_base + (minor&0x0f); + int mode = (minor&0x70) >> 4; + unsigned char *kbuf = kmalloc(count, GFP_KERNEL), *ptr; + + if (!kbuf) + return -ENOMEM; + if (copy_from_user(kbuf, buf, count)) + return -EFAULT; + ptr = kbuf; + + if (use_mem) + mode = SHORT_MEMORY; + + switch(mode) { + case SHORT_PAUSE: + while (count--) { + outb_p(*(ptr++), port); + wmb(); + } + break; + + case SHORT_STRING: + outsb(port, ptr, count); + wmb(); + break; + + case SHORT_DEFAULT: + while (count--) { + outb(*(ptr++), port); + wmb(); + } + break; + + case SHORT_MEMORY: + while (count--) { + iowrite8(*ptr++, address); + wmb(); + } + break; + + default: /* no more modes defined by now */ + retval = -EINVAL; + break; + } + kfree(kbuf); + return retval; +} + + +ssize_t short_write(struct file *filp, const char __user *buf, size_t count, + loff_t *f_pos) +{ + return do_short_write(filp->f_path.dentry->d_inode, filp, buf, count, f_pos); +} + + + + +unsigned int short_poll(struct file *filp, poll_table *wait) +{ + return POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM; +} + + + + + + +struct file_operations short_fops = { + .owner = THIS_MODULE, + .read = short_read, + .write = short_write, + .poll = short_poll, + .open = short_open, + .release = short_release, +}; + +/* then, the interrupt-related device */ + +ssize_t short_i_read (struct file *filp, char __user *buf, size_t count, loff_t *f_pos) +{ + int count0; + DEFINE_WAIT(wait); + + while (short_head == short_tail) { + prepare_to_wait(&short_queue, &wait, TASK_INTERRUPTIBLE); + if (short_head == short_tail) + schedule(); + finish_wait(&short_queue, &wait); + if (signal_pending (current)) /* a signal arrived */ + return -ERESTARTSYS; /* tell the fs layer to handle it */ + } + /* count0 is the number of readable data bytes */ + count0 = short_head - short_tail; + if (count0 < 0) /* wrapped */ + count0 = short_buffer + PAGE_SIZE - short_tail; + if (count0 < count) count = count0; + + if (copy_to_user(buf, (char *)short_tail, count)) + return -EFAULT; + short_incr_bp (&short_tail, count); + return count; +} + +ssize_t short_i_write (struct file *filp, const char __user *buf, size_t count, + loff_t *f_pos) +{ + int written = 0, odd = *f_pos & 1; + unsigned long port = short_base; /* output to the parallel data latch */ + void *address = (void *) short_base; + + if (use_mem) { + while (written < count) + iowrite8(0xff * ((++written + odd) & 1), address); + } else { + while (written < count) + outb(0xff * ((++written + odd) & 1), port); + } + + *f_pos += count; + return written; +} + + + + +struct file_operations short_i_fops = { + .owner = THIS_MODULE, + .read = short_i_read, + .write = short_i_write, + .open = short_open, + .release = short_release, +}; + +irqreturn_t short_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct timeval tv; + int written; + + do_gettimeofday(&tv); + + /* Write a 16 byte record. Assume PAGE_SIZE is a multiple of 16 */ + written = sprintf((char *)short_head,"%08u.%06u\n", + (int)(tv.tv_sec % 100000000), (int)(tv.tv_usec)); + BUG_ON(written != 16); + short_incr_bp(&short_head, written); + wake_up_interruptible(&short_queue); /* awake any reading process */ + return IRQ_HANDLED; +} + +/* + * The following two functions are equivalent to the previous one, + * but split in top and bottom half. First, a few needed variables + */ + +#define NR_TIMEVAL 512 /* length of the array of time values */ + +struct timeval tv_data[NR_TIMEVAL]; /* too lazy to allocate it */ +volatile struct timeval *tv_head=tv_data; +volatile struct timeval *tv_tail=tv_data; + +static struct work_struct short_wq; + + +int short_wq_count = 0; + +/* + * Increment a circular buffer pointer in a way that nobody sees + * an intermediate value. + */ +static inline void short_incr_tv(volatile struct timeval **tvp) +{ + if (*tvp == (tv_data + NR_TIMEVAL - 1)) + *tvp = tv_data; /* Wrap */ + else + (*tvp)++; +} + + + +void short_do_tasklet (unsigned long unused) +{ + int savecount = short_wq_count, written; + short_wq_count = 0; /* we have already been removed from the queue */ + /* + * The bottom half reads the tv array, filled by the top half, + * and prints it to the circular text buffer, which is then consumed + * by reading processes + */ + + /* First write the number of interrupts that occurred before this bh */ + written = sprintf((char *)short_head,"bh after %6i\n",savecount); + short_incr_bp(&short_head, written); + + /* + * Then, write the time values. Write exactly 16 bytes at a time, + * so it aligns with PAGE_SIZE + */ + + do { + written = sprintf((char *)short_head,"%08u.%06u\n", + (int)(tv_tail->tv_sec % 100000000), + (int)(tv_tail->tv_usec)); + short_incr_bp(&short_head, written); + short_incr_tv(&tv_tail); + } while (tv_tail != tv_head); + + wake_up_interruptible(&short_queue); /* awake any reading process */ +} + + +irqreturn_t short_wq_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + /* Grab the current time information. */ + do_gettimeofday((struct timeval *) tv_head); + short_incr_tv(&tv_head); + + /* Queue the bh. Don't worry about multiple enqueueing */ + schedule_work(&short_wq); + + short_wq_count++; /* record that an interrupt arrived */ + return IRQ_HANDLED; +} + + +/* + * Tasklet top half + */ + +irqreturn_t short_tl_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + do_gettimeofday((struct timeval *) tv_head); /* cast to stop 'volatile' warning */ + short_incr_tv(&tv_head); + tasklet_schedule(&short_tasklet); + short_wq_count++; /* record that an interrupt arrived */ + return IRQ_HANDLED; +} + + + + +irqreturn_t short_sh_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + int value, written; + struct timeval tv; + + /* If it wasn't short, return immediately */ + value = inb(short_base); + if (!(value & 0x80)) + return IRQ_NONE; + + /* clear the interrupting bit */ + outb(value & 0x7F, short_base); + + /* the rest is unchanged */ + + do_gettimeofday(&tv); + written = sprintf((char *)short_head,"%08u.%06u\n", + (int)(tv.tv_sec % 100000000), (int)(tv.tv_usec)); + short_incr_bp(&short_head, written); + wake_up_interruptible(&short_queue); /* awake any reading process */ + return IRQ_HANDLED; +} + +void short_kernelprobe(void) +{ + int count = 0; + do { + unsigned long mask; + + mask = probe_irq_on(); + outb_p(0x10,short_base+2); /* enable reporting */ + outb_p(0x00,short_base); /* clear the bit */ + outb_p(0xFF,short_base); /* set the bit: interrupt! */ + outb_p(0x00,short_base+2); /* disable reporting */ + udelay(5); /* give it some time */ + short_irq = probe_irq_off(mask); + + if (short_irq == 0) { /* none of them? */ + printk(KERN_INFO "short: no irq reported by probe\n"); + short_irq = -1; + } + /* + * if more than one line has been activated, the result is + * negative. We should service the interrupt (no need for lpt port) + * and loop over again. Loop at most five times, then give up + */ + } while (short_irq < 0 && count++ < 5); + if (short_irq < 0) + printk("short: probe failed %i times, giving up\n", count); +} + +irqreturn_t short_probing(int irq, void *dev_id, struct pt_regs *regs) +{ + if (short_irq == 0) short_irq = irq; /* found */ + if (short_irq != irq) short_irq = -irq; /* ambiguous */ + return IRQ_HANDLED; +} + +void short_selfprobe(void) +{ + int trials[] = {3, 5, 7, 9, 0}; + int tried[] = {0, 0, 0, 0, 0}; + int i, count = 0; + + /* + * install the probing handler for all possible lines. Remember + * the result (0 for success, or -EBUSY) in order to only free + * what has been acquired + */ + for (i = 0; trials[i]; i++) + tried[i] = request_irq(trials[i], short_probing, + IRQF_SHARED, "short probe", NULL); + + do { + short_irq = 0; /* none got, yet */ + outb_p(0x10,short_base+2); /* enable */ + outb_p(0x00,short_base); + outb_p(0xFF,short_base); /* toggle the bit */ + outb_p(0x00,short_base+2); /* disable */ + udelay(5); /* give it some time */ + + /* the value has been set by the handler */ + if (short_irq == 0) { /* none of them? */ + printk(KERN_INFO "short: no irq reported by probe\n"); + } + /* + * If more than one line has been activated, the result is + * negative. We should service the interrupt (but the lpt port + * doesn't need it) and loop over again. Do it at most 5 times + */ + } while (short_irq <=0 && count++ < 5); + + /* end of loop, uninstall the handler */ + for (i = 0; trials[i]; i++) + if (tried[i] == 0) + free_irq(trials[i], NULL); + + if (short_irq < 0) + printk("short: probe failed %i times, giving up\n", count); +} + + + +/* Finally, init and cleanup */ + +int short_init(void) +{ + int result; + + /* + * first, sort out the base/short_base ambiguity: we'd better + * use short_base in the code, for clarity, but allow setting + * just "base" at load time. Same for "irq". + */ + short_base = base; + short_irq = irq; + + /* Get our needed resources. */ + if (!use_mem) { + if (! request_region(short_base, SHORT_NR_PORTS, "short")) { + printk(KERN_INFO "short: can't get I/O port address 0x%lx\n", + short_base); + return -ENODEV; + } + + } else { + if (! request_mem_region(short_base, SHORT_NR_PORTS, "short")) { + printk(KERN_INFO "short: can't get I/O mem address 0x%lx\n", + short_base); + return -ENODEV; + } + + /* also, ioremap it */ + short_base = (unsigned long) ioremap(short_base, SHORT_NR_PORTS); + /* Hmm... we should check the return value */ + } + /* Here we register our device - should not fail thereafter */ + result = register_chrdev(major, "short", &short_fops); + if (result < 0) { + printk(KERN_INFO "short: can't get major number\n"); + release_region(short_base,SHORT_NR_PORTS); /* FIXME - use-mem case? */ + return result; + } + if (major == 0) major = result; /* dynamic */ + + short_buffer = __get_free_pages(GFP_KERNEL,0); /* never fails */ /* FIXME */ + short_head = short_tail = short_buffer; + + /* + * Fill the workqueue structure, used for the bottom half handler. + * The cast is there to prevent warnings about the type of the + * (unused) argument. + */ + /* this line is in short_init() */ + INIT_WORK(&short_wq, (void (*)(void *)) short_do_tasklet); + + /* + * Now we deal with the interrupt: either kernel-based + * autodetection, DIY detection or default number + */ + + if (short_irq < 0 && probe == 1) + short_kernelprobe(); + + if (short_irq < 0 && probe == 2) + short_selfprobe(); + + if (short_irq < 0) /* not yet specified: force the default on */ + switch(short_base) { + case 0x378: short_irq = 7; break; + case 0x278: short_irq = 2; break; + case 0x3bc: short_irq = 5; break; + } + + /* + * If shared has been specified, installed the shared handler + * instead of the normal one. Do it first, before a -EBUSY will + * force short_irq to -1. + */ + if (short_irq >= 0 && share > 0) { + result = request_irq(short_irq, short_sh_interrupt, + IRQF_SHARED,"short", + short_sh_interrupt); + if (result) { + printk(KERN_INFO "short: can't get assigned irq %i\n", short_irq); + short_irq = -1; + } + else { /* actually enable it -- assume this *is* a parallel port */ + outb(0x10, short_base+2); + } + return 0; /* the rest of the function only installs handlers */ + } + + if (short_irq >= 0) { + result = request_irq(short_irq, short_interrupt, + IRQF_SHARED, "short", NULL); + if (result) { + printk(KERN_INFO "short: can't get assigned irq %i\n", + short_irq); + short_irq = -1; + } + else { /* actually enable it -- assume this *is* a parallel port */ + outb(0x10,short_base+2); + } + } + + /* + * Ok, now change the interrupt handler if using top/bottom halves + * has been requested + */ + if (short_irq >= 0 && (wq + tasklet) > 0) { + free_irq(short_irq,NULL); + result = request_irq(short_irq, + tasklet ? short_tl_interrupt : + short_wq_interrupt, + IRQF_SHARED,"short-bh", NULL); + if (result) { + printk(KERN_INFO "short-bh: can't get assigned irq %i\n", + short_irq); + short_irq = -1; + } + } + + return 0; +} + +void short_cleanup(void) +{ + if (short_irq >= 0) { + outb(0x0, short_base + 2); /* disable the interrupt */ + if (!share) free_irq(short_irq, NULL); + else free_irq(short_irq, short_sh_interrupt); + } + /* Make sure we don't leave work queue/tasklet functions running */ + if (tasklet) + tasklet_disable(&short_tasklet); + else + flush_scheduled_work(); + unregister_chrdev(major, "short"); + if (use_mem) { + iounmap((void __iomem *)short_base); + release_mem_region(short_base, SHORT_NR_PORTS); + } else { + release_region(short_base,SHORT_NR_PORTS); + } + if (short_buffer) free_page(short_buffer); +} + +module_init(short_init); +module_exit(short_cleanup); diff --git a/IO_port/copy/short.ko b/IO_port/copy/short.ko new file mode 100644 index 0000000000000000000000000000000000000000..f381cccc594b7fa0521582bd1ad9307a5e05d525 GIT binary patch literal 279096 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 OzGCeEa(e&c@&6B +#include +#include + +MODULE_INFO(vermagic, VERMAGIC_STRING); + +__visible struct module __this_module +__attribute__((section(".gnu.linkonce.this_module"))) = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +static const char __module_depends[] +__used +__attribute__((section(".modinfo"))) = +"depends="; + diff --git a/IO_port/copy/short.mod.o b/IO_port/copy/short.mod.o new file mode 100644 index 0000000000000000000000000000000000000000..281f1dbd399df5fa9cba7c708826b5a5c084d966 GIT binary patch literal 63784 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 literal 0 HcmV?d00001 diff --git a/IO_port/copy/short.o b/IO_port/copy/short.o new file mode 100644 index 0000000000000000000000000000000000000000..bfeafd6e9ad1fffd7bd2fe35417ff7eee8cffe17 GIT binary patch literal 219440 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 literal 0 HcmV?d00001 diff --git a/IO_port/copy/short_load b/IO_port/copy/short_load new file mode 100755 index 0000000..407846c --- /dev/null +++ b/IO_port/copy/short_load @@ -0,0 +1,61 @@ +#!/bin/sh +module="short" +device="short" +mode="664" + +# Group: since distributions do it differently, look for wheel or use staff +if grep '^staff:' /etc/group > /dev/null; then + group="staff" +else + group="wheel" +fi + + +# invoke insmod with all arguments we got +# and use a pathname, as newer modutils don't look in . by default +/sbin/insmod ./$module.ko $* || exit 1 + +major=`cat /proc/devices | awk "\\$2==\"$module\" {print \\$1}"` + +# Create 8 entry points, as SHORT_NR_PORTS is 8 by default +rm -f /dev/${device}[0-7] +mknod /dev/${device}0 c $major 0 +mknod /dev/${device}1 c $major 1 +mknod /dev/${device}2 c $major 2 +mknod /dev/${device}3 c $major 3 +mknod /dev/${device}4 c $major 4 +mknod /dev/${device}5 c $major 5 +mknod /dev/${device}6 c $major 6 +mknod /dev/${device}7 c $major 7 + +rm -f /dev/${device}[0-3][ps] +mknod /dev/${device}0p c $major 16 +mknod /dev/${device}1p c $major 17 +mknod /dev/${device}2p c $major 18 +mknod /dev/${device}3p c $major 19 +mknod /dev/${device}4p c $major 20 +mknod /dev/${device}5p c $major 21 +mknod /dev/${device}6p c $major 22 +mknod /dev/${device}7p c $major 23 + +mknod /dev/${device}0s c $major 32 +mknod /dev/${device}1s c $major 33 +mknod /dev/${device}2s c $major 34 +mknod /dev/${device}3s c $major 35 +mknod /dev/${device}4s c $major 36 +mknod /dev/${device}5s c $major 37 +mknod /dev/${device}6s c $major 38 +mknod /dev/${device}7s c $major 39 + +rm -f /dev/${device}int /dev/${device}print +mknod /dev/${device}int c $major 128 +mknod /dev/${device}print c $major 129 + +chgrp $group /dev/${device}[0-7] /dev/${device}[0-7][ps] /dev/${device}int +chmod $mode /dev/${device}[0-7] /dev/${device}[0-7][ps] /dev/${device}int + + + + + + diff --git a/IO_port/copy/short_unload b/IO_port/copy/short_unload new file mode 100644 index 0000000..7cf64dc --- /dev/null +++ b/IO_port/copy/short_unload @@ -0,0 +1,16 @@ +#!/bin/sh +module="short" +device="short" + +# invoke rmmod with all arguments we got +/sbin/rmmod $module $* || exit 1 + +# Remove stale nodes + +rm -f /dev/${device}[0-7] /dev/${device}[0-7][ps] \ + /dev/${device}int /dev/${device}print + + + + + diff --git a/IO_port/image/ss.png b/IO_port/image/ss.png new file mode 100644 index 0000000000000000000000000000000000000000..270aa7f6a9d1a50d799a33366cdcf85b1c48b8fa GIT binary patch literal 27905 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 aCF{ae^zJW{f%t|Q>6rRSa;BQO*Z%;Wq!4KU literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3266fb1..144ca8a 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,9 @@ *[分配内存](./alloc_mem/README.md) + + +*[IO端口通信](./IO_port/README.md) + + +