This commit is contained in:
Martijn Scheepers
2017-09-28 08:07:29 +02:00
parent 5796c1b8bc
commit 92655751fd
19 changed files with 2330 additions and 7 deletions

View File

@@ -70,6 +70,11 @@ void fb_open(int fb_num, struct fb_info *fb_info)
ASSERT(ptr != MAP_FAILED);
fb_info->ptr = ptr;
printf("framebuffer at 0x%lx, 0x%x bytes, mapped to %p\n",
fb_info->fix.smem_start,
fb_info->fix.smem_len,
fb_info->ptr);
}
void tty_restore(void){

View File

@@ -138,15 +138,15 @@ int main(int argc, char **argv)
signal(SIGINT, my_handler);
for(i = 0; i < 1; i++){
fb_set_area(&fb_info, 0, 0, 128, 32);
sleep(1);
fb_clear_area(&fb_info, 0, 0, 128, 32);
sleep(1);
//for(i = 0; i < 1; i++){
//fb_set_area(&fb_info, 0, 0, 128, 32);
//sleep(1);
//fb_clear_area(&fb_info, 0, 0, 128, 32);
//sleep(1);
//fb_put_string(&fb_info, 0, 0, "I:", 2, 1, 2);
//fb_put_string(&fb_info, 0, 16, "ABCDEFGHIJKLMNOPQRSTUVW", 26, 1, 2);
//sleep(1);
}
//}
fb_put_string(&fb_info, 0, 0, "I:", 2, 1, 2);
//for(i = 0; i < 10; i++){
@@ -180,7 +180,6 @@ int main(int argc, char **argv)
// printf("interrupt\n");
//}
gpio_state = 0x00;
for(i = 1; i < 9; i++){
gpio_state = gpio_state << 1;

BIN
io-state

Binary file not shown.

913
lkm/.display.o.cmd Normal file
View File

@@ -0,0 +1,913 @@
cmd_/home/pi/io-state/lkm/display.o := gcc -Wp,-MD,/home/pi/io-state/lkm/.display.o.d -nostdinc -isystem /usr/lib/gcc/arm-linux-gnueabihf/6/include -I./arch/arm/include -I./arch/arm/include/generated/uapi -I./arch/arm/include/generated -I./include -I./arch/arm/include/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -fno-dwarf2-cfi-asm -fno-omit-frame-pointer -mapcs -mno-sched-prolog -fno-ipa-sra -mabi=aapcs-linux -mno-thumb-interwork -mfpu=vfp -funwind-tables -marm -D__LINUX_ARM_ARCH__=7 -march=armv7-a -msoft-float -Uarm -fno-delete-null-pointer-checks -Wno-frame-address -O2 --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO -Wframe-larger-than=1024 -fno-stack-protector -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -DMODULE -DKBUILD_BASENAME='"display"' -DKBUILD_MODNAME='"h1502display"' -c -o /home/pi/io-state/lkm/.tmp_display.o /home/pi/io-state/lkm/display.c
source_/home/pi/io-state/lkm/display.o := /home/pi/io-state/lkm/display.c
deps_/home/pi/io-state/lkm/display.o := \
include/linux/mutex.h \
$(wildcard include/config/debug/mutexes.h) \
$(wildcard include/config/mutex/spin/on/owner.h) \
$(wildcard include/config/debug/lock/alloc.h) \
arch/arm/include/generated/asm/current.h \
include/asm-generic/current.h \
include/linux/thread_info.h \
$(wildcard include/config/thread/info/in/task.h) \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
$(wildcard include/config/have/arch/within/stack/frames.h) \
$(wildcard include/config/hardened/usercopy.h) \
include/linux/types.h \
$(wildcard include/config/have/uid16.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/arm/include/asm/types.h \
include/asm-generic/int-ll64.h \
include/uapi/asm-generic/int-ll64.h \
arch/arm/include/generated/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/kasan.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) \
$(wildcard include/config/gcov/kernel.h) \
$(wildcard include/config/arch/use/builtin/bswap.h) \
arch/arm/include/uapi/asm/posix_types.h \
include/uapi/asm-generic/posix_types.h \
include/linux/bug.h \
$(wildcard include/config/generic/bug.h) \
arch/arm/include/asm/bug.h \
$(wildcard include/config/thumb2/kernel.h) \
$(wildcard include/config/debug/bugverbose.h) \
$(wildcard include/config/arm/lpae.h) \
include/linux/linkage.h \
include/linux/stringify.h \
include/linux/export.h \
$(wildcard include/config/have/underscore/symbol/prefix.h) \
$(wildcard include/config/modules.h) \
$(wildcard include/config/modversions.h) \
$(wildcard include/config/trim/unused/ksyms.h) \
$(wildcard include/config/unused/symbols.h) \
arch/arm/include/asm/linkage.h \
arch/arm/include/asm/opcodes.h \
$(wildcard include/config/cpu/endian/be8.h) \
$(wildcard include/config/cpu/endian/be32.h) \
include/linux/swab.h \
include/uapi/linux/swab.h \
arch/arm/include/asm/swab.h \
arch/arm/include/uapi/asm/swab.h \
include/asm-generic/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/generic/bug/relative/pointers.h) \
$(wildcard include/config/smp.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/tracing.h) \
$(wildcard include/config/ftrace/mcount/record.h) \
/usr/lib/gcc/arm-linux-gnueabihf/6/include/stdarg.h \
include/linux/bitops.h \
arch/arm/include/asm/bitops.h \
include/linux/irqflags.h \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
include/linux/typecheck.h \
arch/arm/include/asm/irqflags.h \
$(wildcard include/config/cpu/v7m.h) \
arch/arm/include/asm/ptrace.h \
$(wildcard include/config/arm/thumb.h) \
arch/arm/include/uapi/asm/ptrace.h \
arch/arm/include/asm/hwcap.h \
arch/arm/include/uapi/asm/hwcap.h \
include/asm-generic/irqflags.h \
arch/arm/include/asm/barrier.h \
$(wildcard include/config/cpu/32v6k.h) \
$(wildcard include/config/cpu/xsc3.h) \
$(wildcard include/config/cpu/fa526.h) \
$(wildcard include/config/arm/heavy/mb.h) \
$(wildcard include/config/arm/dma/mem/bufferable.h) \
include/asm-generic/barrier.h \
include/asm-generic/bitops/non-atomic.h \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/sched.h \
include/asm-generic/bitops/hweight.h \
include/asm-generic/bitops/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/lock.h \
include/asm-generic/bitops/le.h \
arch/arm/include/uapi/asm/byteorder.h \
include/linux/byteorder/little_endian.h \
include/uapi/linux/byteorder/little_endian.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/printk.h \
$(wildcard include/config/message/loglevel/default.h) \
$(wildcard include/config/early/printk.h) \
$(wildcard include/config/printk/nmi.h) \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/init.h \
$(wildcard include/config/debug/rodata.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 \
arch/arm/include/asm/cache.h \
$(wildcard include/config/arm/l1/cache/shift.h) \
$(wildcard include/config/aeabi.h) \
arch/arm/include/asm/div64.h \
arch/arm/include/asm/compiler.h \
include/asm-generic/div64.h \
arch/arm/include/asm/thread_info.h \
$(wildcard include/config/crunch.h) \
$(wildcard include/config/arm/thumbee.h) \
arch/arm/include/asm/fpstate.h \
$(wildcard include/config/vfpv3.h) \
$(wildcard include/config/iwmmxt.h) \
arch/arm/include/asm/page.h \
$(wildcard include/config/cpu/copy/v4wt.h) \
$(wildcard include/config/cpu/copy/v4wb.h) \
$(wildcard include/config/cpu/copy/feroceon.h) \
$(wildcard include/config/cpu/copy/fa.h) \
$(wildcard include/config/cpu/sa1100.h) \
$(wildcard include/config/cpu/xscale.h) \
$(wildcard include/config/cpu/copy/v6.h) \
$(wildcard include/config/kuser/helpers.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
arch/arm/include/asm/glue.h \
arch/arm/include/asm/pgtable-2level-types.h \
arch/arm/include/asm/memory.h \
$(wildcard include/config/need/mach/memory/h.h) \
$(wildcard include/config/page/offset.h) \
$(wildcard include/config/highmem.h) \
$(wildcard include/config/dram/base.h) \
$(wildcard include/config/dram/size.h) \
$(wildcard include/config/have/tcm.h) \
$(wildcard include/config/arm/patch/phys/virt.h) \
$(wildcard include/config/phys/offset.h) \
$(wildcard include/config/xip/kernel.h) \
$(wildcard include/config/xip/phys/addr.h) \
include/uapi/linux/const.h \
include/linux/sizes.h \
include/asm-generic/memory_model.h \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/linux/pfn.h \
include/asm-generic/getorder.h \
include/linux/list.h \
$(wildcard include/config/debug/list.h) \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
$(wildcard include/config/page/poisoning/zero.h) \
include/linux/spinlock_types.h \
$(wildcard include/config/generic/lockbreak.h) \
$(wildcard include/config/debug/spinlock.h) \
arch/arm/include/asm/spinlock_types.h \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
include/linux/rwlock_types.h \
include/linux/atomic.h \
$(wildcard include/config/generic/atomic64.h) \
arch/arm/include/asm/atomic.h \
include/linux/prefetch.h \
arch/arm/include/asm/processor.h \
$(wildcard include/config/have/hw/breakpoint.h) \
$(wildcard include/config/arm/errata/754327.h) \
arch/arm/include/asm/hw_breakpoint.h \
arch/arm/include/asm/unified.h \
$(wildcard include/config/arm/asm/unified.h) \
arch/arm/include/asm/cmpxchg.h \
$(wildcard include/config/cpu/sa110.h) \
$(wildcard include/config/cpu/v6.h) \
include/asm-generic/cmpxchg-local.h \
include/asm-generic/atomic-long.h \
include/linux/osq_lock.h \
include/linux/module.h \
$(wildcard include/config/sysfs.h) \
$(wildcard include/config/modules/tree/lookup.h) \
$(wildcard include/config/livepatch.h) \
$(wildcard include/config/module/sig.h) \
$(wildcard include/config/kallsyms.h) \
$(wildcard include/config/tracepoints.h) \
$(wildcard include/config/event/tracing.h) \
$(wildcard include/config/module/unload.h) \
$(wildcard include/config/constructors.h) \
$(wildcard include/config/debug/set/module/ronx.h) \
include/linux/stat.h \
arch/arm/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 \
include/linux/spinlock.h \
$(wildcard include/config/preempt.h) \
include/linux/preempt.h \
$(wildcard include/config/preempt/count.h) \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/preempt/notifiers.h) \
arch/arm/include/generated/asm/preempt.h \
include/asm-generic/preempt.h \
include/linux/bottom_half.h \
arch/arm/include/asm/spinlock.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/math64.h \
$(wildcard include/config/arch/supports/int128.h) \
include/linux/time64.h \
include/uapi/linux/time.h \
include/linux/uidgid.h \
$(wildcard include/config/multiuser.h) \
$(wildcard include/config/user/ns.h) \
include/linux/highuid.h \
include/linux/kmod.h \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
$(wildcard include/config/zone/device.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/memory/isolation.h) \
$(wildcard include/config/compaction.h) \
$(wildcard include/config/cma.h) \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/debug/vm/pgflags.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/zsmalloc.h) \
$(wildcard include/config/memcg.h) \
$(wildcard include/config/memory/hotplug.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/deferred/struct/page/init.h) \
$(wildcard include/config/transparent/hugepage.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/have/memblock/node/map.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/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/wait.h \
include/uapi/linux/wait.h \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
$(wildcard include/config/movable/node.h) \
include/linux/bitmap.h \
$(wildcard include/config/s390.h) \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
include/uapi/linux/string.h \
arch/arm/include/asm/string.h \
$(wildcard include/config/bcm2835/fast/memcpy.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 \
arch/arm/include/generated/asm/errno.h \
include/uapi/asm-generic/errno.h \
include/uapi/asm-generic/errno-base.h \
include/linux/rwsem.h \
$(wildcard include/config/rwsem/spin/on/owner.h) \
$(wildcard include/config/rwsem/generic/spinlock.h) \
include/linux/err.h \
arch/arm/include/generated/asm/rwsem.h \
include/asm-generic/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/tiny/rcu.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/no/hz/full.h) \
$(wildcard include/config/rcu/nocb/cpu.h) \
$(wildcard include/config/tasks/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/prove/rcu.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/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
include/linux/completion.h \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/ktime.h \
include/linux/jiffies.h \
include/linux/timex.h \
include/uapi/linux/timex.h \
include/uapi/linux/param.h \
arch/arm/include/generated/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
include/uapi/asm-generic/param.h \
arch/arm/include/asm/timex.h \
include/generated/timeconst.h \
include/linux/timekeeping.h \
include/linux/rcutree.h \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
$(wildcard include/config/wq/watchdog.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
$(wildcard include/config/no/hz/common.h) \
include/linux/sysctl.h \
$(wildcard include/config/sysctl.h) \
include/linux/rbtree.h \
include/uapi/linux/sysctl.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) \
arch/arm/include/asm/smp.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) \
$(wildcard include/config/have/setup/per/cpu/area.h) \
arch/arm/include/asm/percpu.h \
include/asm-generic/percpu.h \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
arch/arm/include/asm/topology.h \
$(wildcard include/config/arm/cpu/topology.h) \
include/asm-generic/topology.h \
include/linux/elf.h \
arch/arm/include/asm/elf.h \
$(wildcard include/config/vdso.h) \
arch/arm/include/asm/auxvec.h \
arch/arm/include/uapi/asm/auxvec.h \
arch/arm/include/asm/vdso_datapage.h \
arch/arm/include/asm/user.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) \
include/linux/jump_label.h \
$(wildcard include/config/jump/label.h) \
arch/arm/include/asm/jump_label.h \
include/linux/extable.h \
include/linux/rbtree_latch.h \
arch/arm/include/asm/module.h \
$(wildcard include/config/arm/unwind.h) \
$(wildcard include/config/arm/module/plts.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/device.h \
$(wildcard include/config/debug/devres.h) \
$(wildcard include/config/generic/msi/irq/domain.h) \
$(wildcard include/config/pinctrl.h) \
$(wildcard include/config/generic/msi/irq.h) \
$(wildcard include/config/dma/cma.h) \
$(wildcard include/config/of.h) \
$(wildcard include/config/devtmpfs.h) \
$(wildcard include/config/sysfs/deprecated.h) \
include/linux/ioport.h \
include/linux/klist.h \
include/linux/pinctrl/devinfo.h \
$(wildcard include/config/pm.h) \
include/linux/pinctrl/consumer.h \
include/linux/seq_file.h \
include/linux/fs.h \
$(wildcard include/config/fs/posix/acl.h) \
$(wildcard include/config/security.h) \
$(wildcard include/config/cgroup/writeback.h) \
$(wildcard include/config/ima.h) \
$(wildcard include/config/fsnotify.h) \
$(wildcard include/config/fs/encryption.h) \
$(wildcard include/config/epoll.h) \
$(wildcard include/config/file/locking.h) \
$(wildcard include/config/quota.h) \
$(wildcard include/config/fs/dax.h) \
$(wildcard include/config/mandatory/file/locking.h) \
$(wildcard include/config/block.h) \
$(wildcard include/config/migration.h) \
include/linux/kdev_t.h \
include/uapi/linux/kdev_t.h \
include/linux/dcache.h \
include/linux/rculist.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/stringhash.h \
$(wildcard include/config/dcache/word/access.h) \
include/linux/hash.h \
$(wildcard include/config/have/arch/hash.h) \
include/linux/path.h \
include/linux/list_lru.h \
$(wildcard include/config/slob.h) \
include/linux/shrinker.h \
include/linux/radix-tree.h \
$(wildcard include/config/radix/tree/multiorder.h) \
include/linux/pid.h \
include/linux/capability.h \
include/uapi/linux/capability.h \
include/linux/semaphore.h \
include/uapi/linux/fiemap.h \
include/linux/migrate_mode.h \
include/linux/percpu-rwsem.h \
include/linux/rcu_sync.h \
include/linux/blk_types.h \
$(wildcard include/config/blk/cgroup.h) \
$(wildcard include/config/blk/dev/integrity.h) \
include/linux/bvec.h \
include/linux/delayed_call.h \
include/uapi/linux/fs.h \
include/uapi/linux/limits.h \
include/uapi/linux/ioctl.h \
arch/arm/include/generated/asm/ioctl.h \
include/asm-generic/ioctl.h \
include/uapi/asm-generic/ioctl.h \
include/linux/quota.h \
$(wildcard include/config/quota/netlink/interface.h) \
include/linux/percpu_counter.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/arm/include/uapi/asm/fcntl.h \
include/uapi/asm-generic/fcntl.h \
include/linux/cred.h \
$(wildcard include/config/debug/credentials.h) \
$(wildcard include/config/keys.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/linux/pinctrl/pinctrl-state.h \
include/linux/pm.h \
$(wildcard include/config/vt/console/sleep.h) \
$(wildcard include/config/pm/clk.h) \
$(wildcard include/config/pm/generic/domains.h) \
include/linux/ratelimit.h \
include/linux/sched.h \
$(wildcard include/config/sched/debug.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/virt/cpu/accounting/native.h) \
$(wildcard include/config/sched/autogroup.h) \
$(wildcard include/config/bsd/process/acct.h) \
$(wildcard include/config/taskstats.h) \
$(wildcard include/config/audit.h) \
$(wildcard include/config/inotify/user.h) \
$(wildcard include/config/fanotify.h) \
$(wildcard include/config/posix/mqueue.h) \
$(wildcard include/config/perf/events.h) \
$(wildcard include/config/bpf/syscall.h) \
$(wildcard include/config/sched/info.h) \
$(wildcard include/config/task/delay/acct.h) \
$(wildcard include/config/schedstats.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/cgroups.h) \
$(wildcard include/config/cc/stackprotector.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/ubsan.h) \
$(wildcard include/config/task/xacct.h) \
$(wildcard include/config/cpusets.h) \
$(wildcard include/config/futex.h) \
$(wildcard include/config/arch/want/batched/unmap/tlb/flush.h) \
$(wildcard include/config/fault/injection.h) \
$(wildcard include/config/latencytop.h) \
$(wildcard include/config/function/graph/tracer.h) \
$(wildcard include/config/kcov.h) \
$(wildcard include/config/uprobes.h) \
$(wildcard include/config/bcache.h) \
$(wildcard include/config/vmap/stack.h) \
$(wildcard include/config/arch/wants/dynamic/task/struct.h) \
$(wildcard include/config/have/unstable/sched/clock.h) \
$(wildcard include/config/irq/time/accounting.h) \
$(wildcard include/config/proc/fs.h) \
$(wildcard include/config/stack/growsup.h) \
$(wildcard include/config/have/copy/thread/tls.h) \
$(wildcard include/config/have/exit/thread.h) \
$(wildcard include/config/cpu/freq.h) \
include/uapi/linux/sched.h \
include/linux/sched/prio.h \
include/linux/plist.h \
$(wildcard include/config/debug/pi/list.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/kmemcheck.h) \
$(wildcard include/config/userfaultfd.h) \
$(wildcard include/config/pgtable/levels.h) \
$(wildcard include/config/aio.h) \
$(wildcard include/config/mmu/notifier.h) \
$(wildcard include/config/x86/intel/mpx.h) \
include/linux/auxvec.h \
include/uapi/linux/auxvec.h \
include/linux/uprobes.h \
arch/arm/include/asm/mmu.h \
$(wildcard include/config/cpu/has/asid.h) \
include/linux/cputime.h \
arch/arm/include/generated/asm/cputime.h \
include/asm-generic/cputime.h \
$(wildcard include/config/virt/cpu/accounting.h) \
include/asm-generic/cputime_jiffies.h \
include/linux/sem.h \
include/uapi/linux/sem.h \
include/linux/ipc.h \
include/uapi/linux/ipc.h \
arch/arm/include/generated/asm/ipcbuf.h \
include/uapi/asm-generic/ipcbuf.h \
arch/arm/include/generated/asm/sembuf.h \
include/uapi/asm-generic/sembuf.h \
include/linux/shm.h \
include/uapi/linux/shm.h \
arch/arm/include/generated/asm/shmbuf.h \
include/uapi/asm-generic/shmbuf.h \
arch/arm/include/asm/shmparam.h \
include/linux/signal.h \
$(wildcard include/config/old/sigaction.h) \
include/uapi/linux/signal.h \
arch/arm/include/asm/signal.h \
arch/arm/include/uapi/asm/signal.h \
include/uapi/asm-generic/signal-defs.h \
arch/arm/include/uapi/asm/sigcontext.h \
arch/arm/include/generated/asm/siginfo.h \
include/asm-generic/siginfo.h \
include/uapi/asm-generic/siginfo.h \
include/linux/seccomp.h \
$(wildcard include/config/seccomp.h) \
$(wildcard include/config/have/arch/seccomp/filter.h) \
$(wildcard include/config/seccomp/filter.h) \
$(wildcard include/config/checkpoint/restore.h) \
include/uapi/linux/seccomp.h \
arch/arm/include/generated/asm/seccomp.h \
include/asm-generic/seccomp.h \
include/uapi/linux/unistd.h \
arch/arm/include/asm/unistd.h \
$(wildcard include/config/oabi/compat.h) \
arch/arm/include/uapi/asm/unistd.h \
include/linux/rtmutex.h \
$(wildcard include/config/debug/rt/mutexes.h) \
include/linux/resource.h \
include/uapi/linux/resource.h \
arch/arm/include/generated/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/time/low/res.h) \
$(wildcard include/config/timerfd.h) \
include/linux/timerqueue.h \
include/linux/kcov.h \
include/uapi/linux/kcov.h \
include/linux/task_io_accounting.h \
$(wildcard include/config/task/io/accounting.h) \
include/linux/latencytop.h \
include/uapi/linux/magic.h \
include/linux/cgroup-defs.h \
$(wildcard include/config/sock/cgroup/data.h) \
include/linux/percpu-refcount.h \
include/linux/cgroup_subsys.h \
$(wildcard include/config/cgroup/cpuacct.h) \
$(wildcard include/config/cgroup/device.h) \
$(wildcard include/config/cgroup/freezer.h) \
$(wildcard include/config/cgroup/net/classid.h) \
$(wildcard include/config/cgroup/perf.h) \
$(wildcard include/config/cgroup/net/prio.h) \
$(wildcard include/config/cgroup/hugetlb.h) \
$(wildcard include/config/cgroup/pids.h) \
$(wildcard include/config/cgroup/debug.h) \
arch/arm/include/asm/device.h \
$(wildcard include/config/dmabounce.h) \
$(wildcard include/config/iommu/api.h) \
$(wildcard include/config/arm/dma/use/iommu.h) \
$(wildcard include/config/arch/omap.h) \
include/linux/pm_wakeup.h \
include/linux/uaccess.h \
arch/arm/include/asm/uaccess.h \
$(wildcard include/config/have/efficient/unaligned/access.h) \
$(wildcard include/config/cpu/sw/domain/pan.h) \
$(wildcard include/config/cpu/use/domains.h) \
$(wildcard include/config/uaccess/with/memcpy.h) \
arch/arm/include/asm/domain.h \
$(wildcard include/config/io/36.h) \
$(wildcard include/config/cpu/cp15/mmu.h) \
include/linux/kthread.h \
include/linux/delay.h \
arch/arm/include/asm/delay.h \
include/linux/gpio.h \
$(wildcard include/config/gpiolib.h) \
$(wildcard include/config/arch/have/custom/gpio/h.h) \
arch/arm/include/asm/gpio.h \
$(wildcard include/config/arch/nr/gpio.h) \
include/asm-generic/gpio.h \
include/linux/of.h \
$(wildcard include/config/sparc.h) \
$(wildcard include/config/of/dynamic.h) \
$(wildcard include/config/attach/node.h) \
$(wildcard include/config/detach/node.h) \
$(wildcard include/config/add/property.h) \
$(wildcard include/config/remove/property.h) \
$(wildcard include/config/update/property.h) \
$(wildcard include/config/of/numa.h) \
$(wildcard include/config/no/change.h) \
$(wildcard include/config/change/add.h) \
$(wildcard include/config/change/remove.h) \
$(wildcard include/config/of/resolve.h) \
$(wildcard include/config/of/overlay.h) \
include/linux/mod_devicetable.h \
include/linux/uuid.h \
include/uapi/linux/uuid.h \
include/linux/property.h \
include/linux/fwnode.h \
include/linux/gpio/driver.h \
$(wildcard include/config/gpio/generic.h) \
$(wildcard include/config/gpiolib/irqchip.h) \
$(wildcard include/config/of/gpio.h) \
include/linux/irq.h \
$(wildcard include/config/generic/irq/ipi.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/irqreturn.h \
include/linux/irqnr.h \
include/uapi/linux/irqnr.h \
include/linux/io.h \
$(wildcard include/config/have/arch/huge/vmap.h) \
$(wildcard include/config/has/ioport/map.h) \
arch/arm/include/asm/io.h \
$(wildcard include/config/pci.h) \
$(wildcard include/config/need/mach/io/h.h) \
$(wildcard include/config/pcmcia/soc/common.h) \
$(wildcard include/config/isa.h) \
$(wildcard include/config/pccard.h) \
include/asm-generic/pci_iomap.h \
$(wildcard include/config/no/generic/pci/ioport/map.h) \
$(wildcard include/config/generic/pci/iomap.h) \
include/xen/xen.h \
$(wildcard include/config/xen.h) \
$(wildcard include/config/xen/dom0.h) \
$(wildcard include/config/xen/pvh.h) \
include/asm-generic/io.h \
$(wildcard include/config/generic/iomap.h) \
$(wildcard include/config/virt/to/bus.h) \
include/linux/vmalloc.h \
arch/arm/include/asm/irq.h \
$(wildcard include/config/sparse/irq.h) \
$(wildcard include/config/multi/irq/handler.h) \
arch/arm/include/generated/asm/irq_regs.h \
include/asm-generic/irq_regs.h \
include/linux/irqdesc.h \
$(wildcard include/config/irq/preflow/fasteoi.h) \
$(wildcard include/config/handle/domain/irq.h) \
arch/arm/include/asm/hw_irq.h \
include/linux/irqchip/chained_irq.h \
include/linux/irqdomain.h \
$(wildcard include/config/irq/domain.h) \
include/linux/pinctrl/pinctrl.h \
$(wildcard include/config/generic/pinconf.h) \
include/linux/gpio/consumer.h \
$(wildcard include/config/gpio/sysfs.h) \
include/linux/interrupt.h \
$(wildcard include/config/irq/forced/threading.h) \
$(wildcard include/config/generic/irq/probe.h) \
include/linux/hardirq.h \
include/linux/ftrace_irq.h \
$(wildcard include/config/ftrace/nmi/enter.h) \
$(wildcard include/config/hwlat/tracer.h) \
include/linux/vtime.h \
include/linux/context_tracking_state.h \
$(wildcard include/config/context/tracking.h) \
include/linux/static_key.h \
arch/arm/include/asm/hardirq.h \
include/linux/irq_cpustat.h \
include/linux/slab.h \
$(wildcard include/config/debug/slab.h) \
$(wildcard include/config/failslab.h) \
$(wildcard include/config/have/hardened/usercopy/allocator.h) \
$(wildcard include/config/slab.h) \
$(wildcard include/config/slub.h) \
include/linux/kmemleak.h \
$(wildcard include/config/debug/kmemleak.h) \
include/linux/kasan.h \
include/linux/fb.h \
$(wildcard include/config/fb/notify.h) \
$(wildcard include/config/fb/deferred/io.h) \
$(wildcard include/config/fb/tileblitting.h) \
$(wildcard include/config/fb/backlight.h) \
$(wildcard include/config/fb/foreign/endian.h) \
$(wildcard include/config/fb/both/endian.h) \
$(wildcard include/config/fb/big/endian.h) \
$(wildcard include/config/fb/little/endian.h) \
include/linux/kgdb.h \
$(wildcard include/config/have/arch/kgdb.h) \
$(wildcard include/config/kgdb.h) \
$(wildcard include/config/serial/kgdb/nmi.h) \
arch/arm/include/asm/kgdb.h \
include/linux/ptrace.h \
include/linux/pid_namespace.h \
$(wildcard include/config/pid/ns.h) \
include/linux/mm.h \
$(wildcard include/config/have/arch/mmap/rnd/bits.h) \
$(wildcard include/config/have/arch/mmap/rnd/compat/bits.h) \
$(wildcard include/config/mem/soft/dirty.h) \
$(wildcard include/config/arch/uses/high/vma/flags.h) \
$(wildcard include/config/x86.h) \
$(wildcard include/config/x86/intel/memory/protection/keys.h) \
$(wildcard include/config/ppc.h) \
$(wildcard include/config/parisc.h) \
$(wildcard include/config/metag.h) \
$(wildcard include/config/shmem.h) \
$(wildcard include/config/debug/vm/rb.h) \
$(wildcard include/config/page/poisoning.h) \
$(wildcard include/config/debug/pagealloc.h) \
$(wildcard include/config/hibernation.h) \
$(wildcard include/config/hugetlbfs.h) \
include/linux/debug_locks.h \
$(wildcard include/config/debug/locking/api/selftests.h) \
include/linux/range.h \
include/linux/page_ext.h \
$(wildcard include/config/idle/page/tracking.h) \
include/linux/stacktrace.h \
$(wildcard include/config/stacktrace.h) \
$(wildcard include/config/user/stacktrace/support.h) \
include/linux/stackdepot.h \
include/linux/page_ref.h \
$(wildcard include/config/debug/page/ref.h) \
include/linux/page-flags.h \
$(wildcard include/config/arch/uses/pg/uncached.h) \
$(wildcard include/config/memory/failure.h) \
$(wildcard include/config/swap.h) \
$(wildcard include/config/ksm.h) \
include/linux/tracepoint-defs.h \
arch/arm/include/asm/pgtable.h \
$(wildcard include/config/highpte.h) \
arch/arm/include/asm/proc-fns.h \
arch/arm/include/asm/glue-proc.h \
$(wildcard include/config/cpu/arm7tdmi.h) \
$(wildcard include/config/cpu/arm720t.h) \
$(wildcard include/config/cpu/arm740t.h) \
$(wildcard include/config/cpu/arm9tdmi.h) \
$(wildcard include/config/cpu/arm920t.h) \
$(wildcard include/config/cpu/arm922t.h) \
$(wildcard include/config/cpu/arm925t.h) \
$(wildcard include/config/cpu/arm926t.h) \
$(wildcard include/config/cpu/arm940t.h) \
$(wildcard include/config/cpu/arm946e.h) \
$(wildcard include/config/cpu/arm1020.h) \
$(wildcard include/config/cpu/arm1020e.h) \
$(wildcard include/config/cpu/arm1022.h) \
$(wildcard include/config/cpu/arm1026.h) \
$(wildcard include/config/cpu/mohawk.h) \
$(wildcard include/config/cpu/feroceon.h) \
$(wildcard include/config/cpu/v6k.h) \
$(wildcard include/config/cpu/pj4b.h) \
$(wildcard include/config/cpu/v7.h) \
include/asm-generic/pgtable-nopud.h \
arch/arm/include/asm/pgtable-hwdef.h \
arch/arm/include/asm/pgtable-2level-hwdef.h \
arch/arm/include/asm/tlbflush.h \
$(wildcard include/config/smp/on/up.h) \
$(wildcard include/config/cpu/tlb/v4wt.h) \
$(wildcard include/config/cpu/tlb/fa.h) \
$(wildcard include/config/cpu/tlb/v4wbi.h) \
$(wildcard include/config/cpu/tlb/feroceon.h) \
$(wildcard include/config/cpu/tlb/v4wb.h) \
$(wildcard include/config/cpu/tlb/v6.h) \
$(wildcard include/config/cpu/tlb/v7.h) \
$(wildcard include/config/arm/errata/720789.h) \
$(wildcard include/config/arm/errata/798181.h) \
arch/arm/include/asm/pgtable-2level.h \
include/asm-generic/pgtable.h \
$(wildcard include/config/have/arch/soft/dirty.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/nsproxy.h \
include/linux/ns_common.h \
include/uapi/linux/ptrace.h \
include/uapi/linux/fb.h \
include/linux/i2c.h \
$(wildcard include/config/i2c.h) \
$(wildcard include/config/i2c/slave.h) \
$(wildcard include/config/i2c/boardinfo.h) \
$(wildcard include/config/i2c/mux.h) \
$(wildcard include/config/acpi.h) \
include/uapi/linux/i2c.h \
include/linux/backlight.h \
/home/pi/io-state/lkm/display.o: $(deps_/home/pi/io-state/lkm/display.o)
$(deps_/home/pi/io-state/lkm/display.o):

1
lkm/.h1502display.ko.cmd Normal file
View File

@@ -0,0 +1 @@
cmd_/home/pi/io-state/lkm/h1502display.ko := ld -EL -r -T ./scripts/module-common.lds --build-id -o /home/pi/io-state/lkm/h1502display.ko /home/pi/io-state/lkm/h1502display.o /home/pi/io-state/lkm/h1502display.mod.o ; true

453
lkm/.h1502display.mod.o.cmd Normal file
View File

@@ -0,0 +1,453 @@
cmd_/home/pi/io-state/lkm/h1502display.mod.o := gcc -Wp,-MD,/home/pi/io-state/lkm/.h1502display.mod.o.d -nostdinc -isystem /usr/lib/gcc/arm-linux-gnueabihf/6/include -I./arch/arm/include -I./arch/arm/include/generated/uapi -I./arch/arm/include/generated -I./include -I./arch/arm/include/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -fno-dwarf2-cfi-asm -fno-omit-frame-pointer -mapcs -mno-sched-prolog -fno-ipa-sra -mabi=aapcs-linux -mno-thumb-interwork -mfpu=vfp -funwind-tables -marm -D__LINUX_ARM_ARCH__=7 -march=armv7-a -msoft-float -Uarm -fno-delete-null-pointer-checks -Wno-frame-address -O2 --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO -Wframe-larger-than=1024 -fno-stack-protector -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -DKBUILD_BASENAME='"h1502display.mod"' -DKBUILD_MODNAME='"h1502display"' -DMODULE -c -o /home/pi/io-state/lkm/h1502display.mod.o /home/pi/io-state/lkm/h1502display.mod.c
source_/home/pi/io-state/lkm/h1502display.mod.o := /home/pi/io-state/lkm/h1502display.mod.c
deps_/home/pi/io-state/lkm/h1502display.mod.o := \
$(wildcard include/config/module/unload.h) \
include/linux/module.h \
$(wildcard include/config/modules.h) \
$(wildcard include/config/sysfs.h) \
$(wildcard include/config/modules/tree/lookup.h) \
$(wildcard include/config/livepatch.h) \
$(wildcard include/config/unused/symbols.h) \
$(wildcard include/config/module/sig.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/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/have/uid16.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/arm/include/asm/types.h \
include/asm-generic/int-ll64.h \
include/uapi/asm-generic/int-ll64.h \
arch/arm/include/generated/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/kasan.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) \
$(wildcard include/config/gcov/kernel.h) \
$(wildcard include/config/arch/use/builtin/bswap.h) \
arch/arm/include/uapi/asm/posix_types.h \
include/uapi/asm-generic/posix_types.h \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
$(wildcard include/config/page/poisoning/zero.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) \
/usr/lib/gcc/arm-linux-gnueabihf/6/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) \
$(wildcard include/config/trim/unused/ksyms.h) \
arch/arm/include/asm/linkage.h \
include/linux/bitops.h \
arch/arm/include/asm/bitops.h \
include/linux/irqflags.h \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
include/linux/typecheck.h \
arch/arm/include/asm/irqflags.h \
$(wildcard include/config/cpu/v7m.h) \
arch/arm/include/asm/ptrace.h \
$(wildcard include/config/arm/thumb.h) \
$(wildcard include/config/thumb2/kernel.h) \
arch/arm/include/uapi/asm/ptrace.h \
$(wildcard include/config/cpu/endian/be8.h) \
arch/arm/include/asm/hwcap.h \
arch/arm/include/uapi/asm/hwcap.h \
include/asm-generic/irqflags.h \
arch/arm/include/asm/barrier.h \
$(wildcard include/config/cpu/32v6k.h) \
$(wildcard include/config/cpu/xsc3.h) \
$(wildcard include/config/cpu/fa526.h) \
$(wildcard include/config/arm/heavy/mb.h) \
$(wildcard include/config/arm/dma/mem/bufferable.h) \
include/asm-generic/barrier.h \
include/asm-generic/bitops/non-atomic.h \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/sched.h \
include/asm-generic/bitops/hweight.h \
include/asm-generic/bitops/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/lock.h \
include/asm-generic/bitops/le.h \
arch/arm/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/arm/include/asm/swab.h \
arch/arm/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/printk.h \
$(wildcard include/config/message/loglevel/default.h) \
$(wildcard include/config/early/printk.h) \
$(wildcard include/config/printk/nmi.h) \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/init.h \
$(wildcard include/config/debug/rodata.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 \
arch/arm/include/asm/cache.h \
$(wildcard include/config/arm/l1/cache/shift.h) \
$(wildcard include/config/aeabi.h) \
arch/arm/include/asm/div64.h \
arch/arm/include/asm/compiler.h \
include/asm-generic/div64.h \
include/linux/stat.h \
arch/arm/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/preempt/count.h) \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/preempt/notifiers.h) \
arch/arm/include/generated/asm/preempt.h \
include/asm-generic/preempt.h \
include/linux/thread_info.h \
$(wildcard include/config/thread/info/in/task.h) \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
$(wildcard include/config/have/arch/within/stack/frames.h) \
$(wildcard include/config/hardened/usercopy.h) \
include/linux/bug.h \
arch/arm/include/asm/bug.h \
$(wildcard include/config/debug/bugverbose.h) \
$(wildcard include/config/arm/lpae.h) \
arch/arm/include/asm/opcodes.h \
$(wildcard include/config/cpu/endian/be32.h) \
include/asm-generic/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/generic/bug/relative/pointers.h) \
arch/arm/include/asm/thread_info.h \
$(wildcard include/config/crunch.h) \
$(wildcard include/config/arm/thumbee.h) \
arch/arm/include/asm/fpstate.h \
$(wildcard include/config/vfpv3.h) \
$(wildcard include/config/iwmmxt.h) \
arch/arm/include/asm/page.h \
$(wildcard include/config/cpu/copy/v4wt.h) \
$(wildcard include/config/cpu/copy/v4wb.h) \
$(wildcard include/config/cpu/copy/feroceon.h) \
$(wildcard include/config/cpu/copy/fa.h) \
$(wildcard include/config/cpu/sa1100.h) \
$(wildcard include/config/cpu/xscale.h) \
$(wildcard include/config/cpu/copy/v6.h) \
$(wildcard include/config/kuser/helpers.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
arch/arm/include/asm/glue.h \
arch/arm/include/asm/pgtable-2level-types.h \
arch/arm/include/asm/memory.h \
$(wildcard include/config/need/mach/memory/h.h) \
$(wildcard include/config/page/offset.h) \
$(wildcard include/config/highmem.h) \
$(wildcard include/config/dram/base.h) \
$(wildcard include/config/dram/size.h) \
$(wildcard include/config/have/tcm.h) \
$(wildcard include/config/arm/patch/phys/virt.h) \
$(wildcard include/config/phys/offset.h) \
$(wildcard include/config/xip/kernel.h) \
$(wildcard include/config/xip/phys/addr.h) \
include/linux/sizes.h \
include/asm-generic/memory_model.h \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/linux/pfn.h \
include/asm-generic/getorder.h \
include/linux/bottom_half.h \
include/linux/spinlock_types.h \
arch/arm/include/asm/spinlock_types.h \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
include/linux/rwlock_types.h \
arch/arm/include/asm/spinlock.h \
include/linux/prefetch.h \
arch/arm/include/asm/processor.h \
$(wildcard include/config/have/hw/breakpoint.h) \
$(wildcard include/config/arm/errata/754327.h) \
arch/arm/include/asm/hw_breakpoint.h \
arch/arm/include/asm/unified.h \
$(wildcard include/config/arm/asm/unified.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/atomic.h \
$(wildcard include/config/generic/atomic64.h) \
arch/arm/include/asm/atomic.h \
arch/arm/include/asm/cmpxchg.h \
$(wildcard include/config/cpu/sa110.h) \
$(wildcard include/config/cpu/v6.h) \
include/asm-generic/cmpxchg-local.h \
include/asm-generic/atomic-long.h \
include/linux/math64.h \
$(wildcard include/config/arch/supports/int128.h) \
include/linux/time64.h \
include/uapi/linux/time.h \
include/linux/uidgid.h \
$(wildcard include/config/multiuser.h) \
$(wildcard include/config/user/ns.h) \
include/linux/highuid.h \
include/linux/kmod.h \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
$(wildcard include/config/zone/device.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/memory/isolation.h) \
$(wildcard include/config/compaction.h) \
$(wildcard include/config/cma.h) \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/debug/vm/pgflags.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/zsmalloc.h) \
$(wildcard include/config/memcg.h) \
$(wildcard include/config/memory/hotplug.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/deferred/struct/page/init.h) \
$(wildcard include/config/transparent/hugepage.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/have/memblock/node/map.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/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/wait.h \
arch/arm/include/generated/asm/current.h \
include/asm-generic/current.h \
include/uapi/linux/wait.h \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
$(wildcard include/config/movable/node.h) \
include/linux/bitmap.h \
$(wildcard include/config/s390.h) \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
include/uapi/linux/string.h \
arch/arm/include/asm/string.h \
$(wildcard include/config/bcm2835/fast/memcpy.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 \
arch/arm/include/generated/asm/errno.h \
include/uapi/asm-generic/errno.h \
include/uapi/asm-generic/errno-base.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) \
include/linux/err.h \
arch/arm/include/generated/asm/rwsem.h \
include/asm-generic/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/tiny/rcu.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/no/hz/full.h) \
$(wildcard include/config/rcu/nocb/cpu.h) \
$(wildcard include/config/tasks/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/prove/rcu.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/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
include/linux/completion.h \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/ktime.h \
include/linux/jiffies.h \
include/linux/timex.h \
include/uapi/linux/timex.h \
include/uapi/linux/param.h \
arch/arm/include/generated/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
include/uapi/asm-generic/param.h \
arch/arm/include/asm/timex.h \
include/generated/timeconst.h \
include/linux/timekeeping.h \
include/linux/rcutree.h \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
$(wildcard include/config/wq/watchdog.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
$(wildcard include/config/no/hz/common.h) \
include/linux/sysctl.h \
$(wildcard include/config/sysctl.h) \
include/linux/rbtree.h \
include/uapi/linux/sysctl.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) \
arch/arm/include/asm/smp.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) \
$(wildcard include/config/have/setup/per/cpu/area.h) \
arch/arm/include/asm/percpu.h \
include/asm-generic/percpu.h \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
arch/arm/include/asm/topology.h \
$(wildcard include/config/arm/cpu/topology.h) \
include/asm-generic/topology.h \
include/linux/elf.h \
arch/arm/include/asm/elf.h \
$(wildcard include/config/vdso.h) \
arch/arm/include/asm/auxvec.h \
arch/arm/include/uapi/asm/auxvec.h \
arch/arm/include/asm/vdso_datapage.h \
arch/arm/include/asm/user.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) \
include/linux/jump_label.h \
$(wildcard include/config/jump/label.h) \
arch/arm/include/asm/jump_label.h \
include/linux/extable.h \
include/linux/rbtree_latch.h \
arch/arm/include/asm/module.h \
$(wildcard include/config/arm/unwind.h) \
$(wildcard include/config/arm/module/plts.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/pi/io-state/lkm/h1502display.mod.o: $(deps_/home/pi/io-state/lkm/h1502display.mod.o)
$(deps_/home/pi/io-state/lkm/h1502display.mod.o):

1
lkm/.h1502display.o.cmd Normal file
View File

@@ -0,0 +1 @@
cmd_/home/pi/io-state/lkm/h1502display.o := ld -EL -r -o /home/pi/io-state/lkm/h1502display.o /home/pi/io-state/lkm/display.o

View File

@@ -0,0 +1,3 @@
/home/pi/io-state/lkm/h1502display.ko
/home/pi/io-state/lkm/display.o

26
lkm/Makefile Normal file
View File

@@ -0,0 +1,26 @@
obj-m += h1502display.o
h1502display-objs := display.o
ccflags-y += ${MY_CFLAGS}
CC += ${MY_CFLAGS}
.PHONY: all
all:
@echo "normal build for h1502"
make C=2 -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
.PHONY: test
test:
@echo "testing build for raspberry"
make W=1 C=2 CFLAGS_MODULE=-DTEST -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
.PHONY: clean
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
.PHONY: help
help:
@echo ' clean - delete all files created by build'
@echo ' test - build test code for raspberry'

0
lkm/Module.symvers Normal file
View File

37
lkm/S11display Executable file
View File

@@ -0,0 +1,37 @@
#! /bin/sh
# /etc/init.d/S11display
start(){
echo "Starting display:"
insmod /lib/modules/$(uname -r)/extra/h1502display.ko
echo "OK"
}
stop(){
echo "Stopping display:"
rmmod h1502display
echo "OK"
}
restart(){
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $?

311
lkm/display.c Normal file
View File

@@ -0,0 +1,311 @@
#include <linux/mutex.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/kthread.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/slab.h>
#include <linux/timer.h>
#include <linux/fb.h>
//#include "st7565.h"
//#include "global.h"
#define DEVICE_NAME "h1502display" ///< The device will appear at /dev/ebbchar using this value
#define CLASS_NAME "h1502" ///< The device class -- this is a character device driver
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Martijn Scheepers");
MODULE_DESCRIPTION("H1502 display driver.");
MODULE_VERSION("0.1");
static DEFINE_MUTEX(display_mutex);
//static DEFINE_MUTEX(spi_mutex);
static int major_number;
static struct class *display_class = NULL;
static struct device *display_device = NULL;
//static int g_time_interval = DISPLAY_TIMEOUT;
//static struct timer_list g_timer;
static struct task_struct *display_update_task;
static int dev_open(struct inode *, struct file *);
static int dev_release(struct inode *, struct file *);
static ssize_t dev_write(struct file *, const char __user *, size_t, loff_t *);
static struct file_operations fops = {
.open = dev_open,
.write = dev_write,
.release = dev_release,
};
//pin numbering gpio
#ifdef TEST
//gpio on raspberry header
static int gpio_input[] = {
0, 2, 3, 4, 2, 3, 4, 2, 3
};
static int gpio_output[] = {
0, 4, 3, 2, 4, 3, 2, 4, 3
};
#else
//gpio h1502
static int gpio_input[] = {
0, 29, 28, 27, 26, 25, 24, 23, 22
};
static int gpio_output[] = {
0, 81, 80, 79, 78, 83, 84, 76, 77
};
#endif
static unsigned int gpio_input_state, gpio_output_state;
//static struct line_t line[4];
//static int scroll_delay;
//static volatile int clear_flag = 0;
#define SCROLL_DELAY_MULTIPLIER 1
//thread with loop for refreshing the display
static int update_display(void *arg){
unsigned int gpio_state;
int i;
while(!kthread_should_stop()){
//set_current_state(TASK_RUNNING);
gpio_state = 0x00;
for(i = 1; i < 9; i++){
gpio_state = gpio_state << 1;
gpio_state = gpio_state | !gpio_get_value(gpio_input[i]);
}
if(gpio_state != gpio_input_state){
//mutex_lock(&spi_mutex);
//st7565_draw_gpio(INPUT, gpio_state);
//mutex_unlock(&spi_mutex);
gpio_input_state = gpio_state;
}
gpio_state = 0x00;
for(i = 1; i < 9; i++){
gpio_state = gpio_state << 1;
gpio_state = gpio_state | gpio_get_value(gpio_output[i]);
}
if(gpio_state != gpio_output_state){
//mutex_lock(&spi_mutex);
//st7565_draw_gpio(OUTPUT, gpio_state);
//mutex_unlock(&spi_mutex);
gpio_output_state = gpio_state;
}
//set_current_state(TASK_INTERRUPTIBLE);
msleep(100);
}
return 0;
}
// #############################################################################
static void framebuffer_test(void){
int i;
struct fb_info *info = NULL;
//printk("framebuffer test\n");
info = registered_fb[1];
if (!info){
printk("fb_info error\n");
return;
}
//printk("xres = %d\n", info->var.xres);
//printk("yres = %d\n", info->var.yres);
if (!info->screen_base) {
printk("screen_base empty\n");
return;
}
printk("framebuffer at 0x%lx, 0x%x bytes, mapped to 0x%p\n",
info->fix.smem_start,
info->fix.smem_len,
info->screen_base);
printk("fb res %dx%d virtual %dx%d, line_len %d, bpp %d\n",
info->var.xres, info->var.yres,
info->var.xres_virtual, info->var.yres_virtual,
info->fix.line_length, info->var.bits_per_pixel);
//printk("fbops = %p\n", info->fbops);
//printk("fbdefio = %p\n", info->fbdefio);
writeb(0xff, info->screen_base + 0x720);
writeb(0xff, info->screen_base + 0x721);
writeb(0xff, info->screen_base + 0x722);
//memset_io(info->screen_base, 0xFF, info->fix.smem_len);
//if (info->fbops->fb_sync){
// info->fbops->fb_sync(info);
//}
fb_write(info, );
for (i = 0; i < 10; i++){
//p8 = (unsigned char *)fb_info->fix.smem_start
// fb = fb + i;
// *fb = 0xFF;
printk("address %d = %d\n", i, readb(info->screen_base + 0x720 + i) );
}
}
//********************************************************************************
// called when kernel module starts
static int __init h1502display_init(void){
int i;
printk(KERN_INFO "h1502display: starting display driver\n");
// Try to dynamically allocate a major number for the device -- more difficult but worth it
major_number = register_chrdev(0, DEVICE_NAME, &fops);
if (major_number < 0){
printk(KERN_ALERT "h1502display: failed to register a major number\n");
return major_number;
}
// Register the device class
display_class = class_create(THIS_MODULE, CLASS_NAME);
if (IS_ERR(display_class)){ // Check for error and clean up if there is
unregister_chrdev(major_number, DEVICE_NAME);
printk(KERN_ALERT "h1502display: Failed to register device class\n");
return PTR_ERR(display_class); // Correct way to return an error on a pointer
}
// Register the device driver
display_device = device_create(display_class, NULL, MKDEV(major_number, 0), NULL, DEVICE_NAME);
if (IS_ERR(display_device)){ // Clean up if there is an error
class_destroy(display_class); // Repeated code but the alternative is goto statements
unregister_chrdev(major_number, DEVICE_NAME);
printk(KERN_ALERT "h1502display: Failed to create the device\n");
return PTR_ERR(display_device);
}
//framebuffer_test();
#ifdef TEST
//raspberry pi GPIO
gpio_request(2, "sysfs");
gpio_direction_input(2);
gpio_request(3, "sysfs");
gpio_direction_input(3);
gpio_request(4, "sysfs");
gpio_direction_input(4);
#else
//h1502
for(i = 1; i < 9; i++){
gpio_request(gpio_input[i], "sysfs");
gpio_direction_input(gpio_input[i]);
}
for(i = 1; i < 9; i++){
gpio_request(gpio_output[i], "sysfs");
gpio_direction_output(gpio_output[i], 0);
}
#endif
//ret = st7565_init();
//if(ret != 0){
// return -ret;
//}
//for(i=0; i<4; i++){
// line[i].msg_length = 0;
//}
mutex_init(&display_mutex);
//mutex_init(&spi_mutex);
display_update_task = kthread_run(update_display, NULL, "display_update");
if(IS_ERR(display_update_task)){
printk(KERN_ALERT "h1502display: failed to create the update task\n");
return PTR_ERR(display_update_task);
}
//setup_timer(&g_timer, clear_timer_handler, 0);
return 0;
}
// called when kernel module closes
static void __exit h1502display_exit(void){
if(display_update_task){
kthread_stop(display_update_task);
}
device_destroy(display_class, MKDEV(major_number, 0)); // remove the device
class_unregister(display_class); // unregister the device class
class_destroy(display_class); // remove the device class
unregister_chrdev(major_number, DEVICE_NAME); // unregister the major number
mutex_destroy(&display_mutex); /// destroy the dynamically-allocated mutex
printk(KERN_INFO "h1502display: Goodbye\n");
}
// called each time the device is opened
static int dev_open(struct inode *inodep, struct file *filep){
if(!mutex_trylock(&display_mutex)){
printk(KERN_ALERT "h1502display: Device in use by another process\n");
return -EBUSY;
}
return 0;
}
// called whenever the device is being written to from user space
static ssize_t dev_write(struct file *filep, const char __user *buffer, size_t len, loff_t *offset){
char *messageptr;
if( len < 2 ){
return -ENOMSG;
}
messageptr = kmalloc(len * sizeof(char), GFP_KERNEL);
if(!messageptr){
return -ENOMEM;
}
//memset(messageptr, '\0', sizeof(messageptr));
if(copy_from_user(messageptr, buffer, len)){
kfree(messageptr);
return -EFAULT;
}
messageptr[len] = '\0';
printk("%s\n", messageptr);
framebuffer_test();
kfree(messageptr);
return len;
}
//called whenever the device is closed/released by the userspace program
static int dev_release(struct inode *inodep, struct file *filep){
mutex_unlock(&display_mutex);
return 0;
}
module_init(h1502display_init);
module_exit(h1502display_exit);

120
lkm/font.h Normal file
View File

@@ -0,0 +1,120 @@
#ifndef FONT_H
#define FONT_H
// font.h
//
// Tablica czcionek 5x7
static char font5x7[] = {
0x00, 0x00, 0x00, 0x00, 0x00,// (space)
0x00, 0x00, 0x5F, 0x00, 0x00,// !
0x00, 0x07, 0x00, 0x07, 0x00,// "
0x14, 0x7F, 0x14, 0x7F, 0x14,// #
0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
0x23, 0x13, 0x08, 0x64, 0x62,// %
0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x1C, 0x22, 0x41, 0x00,// (
0x00, 0x41, 0x22, 0x1C, 0x00,// )
0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x50, 0x30, 0x00, 0x00,// ,
0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x30, 0x30, 0x00, 0x00,// .
0x20, 0x10, 0x08, 0x04, 0x02,// /
0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41,// <
0x14, 0x14, 0x14, 0x14, 0x14,// =
0x41, 0x22, 0x14, 0x08, 0x00,// >
0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x32, 0x49, 0x79, 0x41, 0x3E,// @
0x7E, 0x11, 0x11, 0x11, 0x7E,// A
0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x7F, 0x09, 0x09, 0x01, 0x01,// F
0x3E, 0x41, 0x41, 0x51, 0x32,// G
0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x7F, 0x02, 0x04, 0x02, 0x7F,// M
0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x46, 0x49, 0x49, 0x49, 0x31,// S
0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x7F, 0x20, 0x18, 0x20, 0x7F,// W
0x63, 0x14, 0x08, 0x14, 0x63,// X
0x03, 0x04, 0x78, 0x04, 0x03,// Y
0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41,// [
0x02, 0x04, 0x08, 0x10, 0x20,// "\"
0x41, 0x41, 0x7F, 0x00, 0x00,// ]
0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x01, 0x02, 0x04, 0x00,// `
0x20, 0x54, 0x54, 0x54, 0x78,// a
0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x38, 0x44, 0x44, 0x44, 0x20,// c
0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x38, 0x54, 0x54, 0x54, 0x18,// e
0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x08, 0x14, 0x54, 0x54, 0x3C,// g
0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x20, 0x40, 0x44, 0x3D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44,// k
0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x38, 0x44, 0x44, 0x44, 0x38,// o
0x7C, 0x14, 0x14, 0x14, 0x08,// p
0x08, 0x14, 0x14, 0x18, 0x7C,// q
0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x48, 0x54, 0x54, 0x54, 0x20,// s
0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x44, 0x28, 0x10, 0x28, 0x44,// x
0x0C, 0x50, 0x50, 0x50, 0x3C,// y
0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x00, 0x08, 0x36, 0x41, 0x00,// {
0x00, 0x00, 0x7F, 0x00, 0x00,// |
0x00, 0x41, 0x36, 0x08, 0x00,// }
0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
};
// gpio icons 6x8
//static char gpio_icon_small[] = {
//0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, //open
//0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C //closed
//};
// gpio icons large 7x7
static char gpio_icon_large[] = {
0x00, 0x3E, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3E, //open
0x00, 0x3E, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3E //closed
};
#endif

39
lkm/global.h Normal file
View File

@@ -0,0 +1,39 @@
#ifndef GLOBAL_H
#define GLOBAL_H
//display pixels
#define DISPLAY_WIDTH 128
#define DISPLAY_HEIGHT 32
//max chars on display
#define LINE_LENGTH 21
// two spaces after scrolling line
#define SCROLL_PADDING 2
//width off gpio status
#define GPIO_WIDTH 81
//60 seconds
#define DISPLAY_TIMEOUT 60000
//#define DISPLAY_TIMEOUT 10000
//pixel size of the font
#define FONT_WIDTH 6
#define FONT_HEIGHT 7
#define INPUT 'I'
#define OUTPUT 'O'
struct line_t{
unsigned long column;
unsigned long invert;
char *message;
unsigned int msg_length;
char *bitmap;
unsigned int bmp_length;
int bmp_idx;
};
#endif

BIN
lkm/h1502display.ko Normal file

Binary file not shown.

57
lkm/h1502display.mod.c Normal file
View File

@@ -0,0 +1,57 @@
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
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 struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0x425785a6, __VMLINUX_SYMBOL_STR(module_layout) },
{ 0x6bc3fbc0, __VMLINUX_SYMBOL_STR(__unregister_chrdev) },
{ 0x12da5bb2, __VMLINUX_SYMBOL_STR(__kmalloc) },
{ 0xf9a482f9, __VMLINUX_SYMBOL_STR(msleep) },
{ 0x2e5810c6, __VMLINUX_SYMBOL_STR(__aeabi_unwind_cpp_pr1) },
{ 0x47229b5c, __VMLINUX_SYMBOL_STR(gpio_request) },
{ 0xc0409705, __VMLINUX_SYMBOL_STR(gpio_to_desc) },
{ 0x89ba0ccf, __VMLINUX_SYMBOL_STR(device_destroy) },
{ 0x778c69ef, __VMLINUX_SYMBOL_STR(__register_chrdev) },
{ 0xb1ad28e0, __VMLINUX_SYMBOL_STR(__gnu_mcount_nc) },
{ 0x28cc25db, __VMLINUX_SYMBOL_STR(arm_copy_from_user) },
{ 0xe4a48145, __VMLINUX_SYMBOL_STR(mutex_unlock) },
{ 0xd74ebe2, __VMLINUX_SYMBOL_STR(kthread_create_on_node) },
{ 0xc73af6d, __VMLINUX_SYMBOL_STR(mutex_trylock) },
{ 0xfa2a45e, __VMLINUX_SYMBOL_STR(__memzero) },
{ 0x6a338294, __VMLINUX_SYMBOL_STR(__mutex_init) },
{ 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
{ 0xb896aaef, __VMLINUX_SYMBOL_STR(kthread_stop) },
{ 0xbf8c4e93, __VMLINUX_SYMBOL_STR(class_unregister) },
{ 0xbea8798b, __VMLINUX_SYMBOL_STR(gpiod_direction_input) },
{ 0x9cd9fd20, __VMLINUX_SYMBOL_STR(device_create) },
{ 0x72106bb8, __VMLINUX_SYMBOL_STR(gpiod_direction_output_raw) },
{ 0x6e41b470, __VMLINUX_SYMBOL_STR(registered_fb) },
{ 0xbf4f2b49, __VMLINUX_SYMBOL_STR(wake_up_process) },
{ 0xb3f7646e, __VMLINUX_SYMBOL_STR(kthread_should_stop) },
{ 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) },
{ 0x191148f8, __VMLINUX_SYMBOL_STR(class_destroy) },
{ 0x13f3e695, __VMLINUX_SYMBOL_STR(gpiod_get_raw_value) },
{ 0x8abc5994, __VMLINUX_SYMBOL_STR(__class_create) },
};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion, "33E662A1554AB3644F6D6B6");

1
lkm/modules.order Normal file
View File

@@ -0,0 +1 @@
kernel//home/pi/io-state/lkm/h1502display.ko

338
lkm/st7565.c Normal file
View File

@@ -0,0 +1,338 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/spi/spi.h>
#include <linux/mutex.h>
//#include <linux/backlight.h>
#include "st7565.h"
#include "global.h"
#include "font.h"
#ifdef TEST
//raspberry spi bus
#define BUS_NUM 1
#define CS_NUM 0
#define COMMAND_PIN 5
#define RESET_PIN 6
#else
//h1502 spi bus
#define BUS_NUM 32766
#define CS_NUM 0
#define COMMAND_PIN 70
#define RESET_PIN 69
#endif
/* Display Commands */
#define DISPLAY_CLEAR 0x1 /* Clear the display */
#define DISPLAY_HOME 0x2 /* Set cursor at home position */
#define INSTRUCTION 0
#define DATA 1
struct h1502display_dev {
unsigned int tx_data;
int command_state;
struct spi_device *spi;
};
static struct h1502display_dev *h1502_device;
//static struct spi_device *spi_device;
// send data to st7565 lcd by spi
static int st7565_transfer_data(unsigned int tx_data, int command_state, struct h1502display_dev *dev){
int ret;
// struct spi_transfer xfer = {
// .tx_buf = &tx_data,
// .len = 1,
//};
struct spi_message msg;
struct spi_transfer t;
memset(&t, 0, sizeof(struct spi_transfer));
t.tx_buf = &tx_data;
t.len = 1;
gpio_set_value(COMMAND_PIN, command_state);
spi_message_init(&msg);
spi_message_add_tail(&t, &msg);
//ret = spi_sync(spi_device, &msg);
ret = spi_sync(dev.spi, &msg);
if(ret != 0){
printk(KERN_ERR "ST7565: SPI writing fail");
return -1;
}
return 0;
}
//clean up spi device
void st7565_spi_unreg(void){
spi_unregister_device(spi_device);
}
//setup the spi device
static int st7565_spi_init(void){
struct spi_master *master;
struct spi_board_info spi_device_infos = {
.modalias = "h1502display",
.max_speed_hz = 20000000, //20Mhz
.bus_num = BUS_NUM,
.chip_select = CS_NUM,
.mode = SPI_MODE_0,
};
master = spi_busnum_to_master(spi_device_infos.bus_num);
if(!master){
printk(KERN_ERR "ST7565: SPI Master not found\n");
return -ENODEV;
}
spi_device = spi_new_device(master, &spi_device_infos);
if(!spi_device){
printk(KERN_ERR "ST7565: SPI Failed to create slave\n");
return -ENODEV;
}
if(spi_setup(spi_device) != 0){
printk(KERN_ERR "ST7565: SPI Failed to setup slave.\n");
spi_unregister_device(spi_device);
return -ENODEV;
}
return 0;
}
//int st7565_set_page(unsigned int page, unsigned int column){
static int st7565_set_page(unsigned int page, unsigned int column){
unsigned int lsb;
unsigned int msb;
lsb = column & 0x0f;
msb = column & 0xf0;
msb = msb >> 4;
msb = msb | 0x10;
page = page | 0xb0;
if(st7565_transfer_data(page, INSTRUCTION) != 0){
goto error;
}
if(st7565_transfer_data(msb, INSTRUCTION) != 0){
goto error;
}
if(st7565_transfer_data(lsb, INSTRUCTION) != 0){
goto error;
}
return 0;
error:
printk(KERN_ERR "ST7565: Failed to set page/column.\n");
return -EIO;
}
//gpio icons to st7565 LCD
static void st7565_gpio_icon(unsigned int page, unsigned int yPos, unsigned int c){
unsigned int i;
st7565_set_page(page, yPos);
for(i = 0; i < 8; i++){
st7565_transfer_data(gpio_icon_large[i + (c * 8)], DATA);
}
}
static unsigned int gpio_icon_offset[] = {
66, 58, 50, 42, 34, 26, 18, 10
};
//unsigned int counter;
void st7565_draw_gpio(char io, unsigned int bits){
int i;
for(i = 0; i < 8; i++){
if(io == INPUT){
st7565_gpio_icon(0, gpio_icon_offset[i], bits >> i & 0x1);
}else if(io == OUTPUT){
st7565_gpio_icon(3, gpio_icon_offset[i], bits >> i & 0x1);
}
}
}
//one place on the display
void st7565_write_val(unsigned int page, unsigned int yPos, unsigned int invert, unsigned char val){
if(yPos > DISPLAY_WIDTH){
return;
}
st7565_set_page(page, yPos);
if(invert){
st7565_transfer_data(~val, DATA);
}else{
st7565_transfer_data(val, DATA);
}
}
char st7565_get_bitmap(unsigned char c, unsigned int pos){
if(pos >= 5) //larger then font
return 0x00;
if(c < 32 || c > 128) //not a writable char
return 0x00;
c -= 32;
return font5x7[pos + (c * 5)];
}
//Char to st7565 LCD
static void st7565_write_char(unsigned int page, unsigned int yPos, unsigned int invert, unsigned char c){
unsigned int i;
if(yPos > DISPLAY_WIDTH){
return;
}
c -= 32; // adjust for the fact that our table of characters is not really ASCII
st7565_set_page(page, yPos);
for(i = 0; i < 5; i++){
if(invert){
st7565_transfer_data(~font5x7[i + (c * 5)], DATA);
if(i == 4){
st7565_transfer_data(0xFF, DATA); //empty line after char
}
}else{
st7565_transfer_data(font5x7[i + (c * 5)], DATA);
if(i == 4){
st7565_transfer_data(0x00, DATA); //empty line after char
}
}
}
}
//string to st7565 LCD pad with spaces
void st7565_write_string(unsigned int page, unsigned int yPos, unsigned int invert, char *str){
unsigned int i;
int j = 0;
for(i=yPos; i <= DISPLAY_WIDTH; i += FONT_WIDTH){
if(str[j] < 32 || str[j] > 128){
st7565_write_char(page, i, invert, ' ');
j--;
}else{
st7565_write_char(page, i, invert, str[j]);
}
j++;
}
}
int st7565_clear(void){
unsigned int i, j;
for(i = 0; i < 4; i++){
if(st7565_set_page(i, 0) != 0){
goto error;
}
for(j = 0; j < 129; j++){
if(st7565_transfer_data(0x0, DATA) != 0){
goto error;
}
}
}
return 0;
error:
printk(KERN_ERR "ST7565: Failed to clear display.\n");
return -EIO;
}
////////////////////////////////////////////////////////////
static void st7565_backlight(int state){
//struct backlight_device *bd;
//struct device_node *np;
//np =
//bd = backlight_device_get_by_type(BACKLIGHT_RAW);
//backlight_device_set_brightness(bd, 5);
}
int st7565_init(void){
int ret;
//st7565_backlight(1);
//init gpio pins
gpio_request(RESET_PIN, "");
gpio_request(COMMAND_PIN, "");
gpio_direction_output(RESET_PIN, 1);
gpio_direction_output(COMMAND_PIN, 1);
//hardware reset display
gpio_set_value(RESET_PIN, 0);
udelay(10);
gpio_set_value(RESET_PIN, 1);
ret = st7565_spi_init();
if(ret != 0){
return ret;
}
if(st7565_transfer_data(0xE2, INSTRUCTION) != 0) //Internal reset
goto error;
if(st7565_transfer_data(0xA2, INSTRUCTION) != 0) //Sets the LCD drive voltage bias ratio
goto error;
//A2: 1/33 duty, 1/6 bias
//A3: 1/33 duty, 1/5 bias
if(st7565_transfer_data(0xA0, INSTRUCTION) != 0) //Sets the display RAM address SEG output correspondence
goto error;
//A0: normal
//A1: reverse
if(st7565_transfer_data(0xC8, INSTRUCTION) != 0) //#Select COM output scan direction
goto error;
//C0~C7: normal direction
//C8~CF: reverse direction
if(st7565_transfer_data(0x40, INSTRUCTION) != 0) //#Display start line set
goto error;
//40~7F Display start address
if(st7565_transfer_data(0x2F, INSTRUCTION) != 0) //#select internal power supply operating mode
goto error;
//28~2F: Operating mode
if(st7565_transfer_data(0x20, INSTRUCTION) != 0) //#V5 voltage regulator internal resistor ratio set(contrast)
goto error;
//20~27 small~large
if(st7565_transfer_data(0xA6, INSTRUCTION) != 0) //#Sets the LCD display normal/reverse
goto error;
//A6: normal
//A7: reverse
if(st7565_transfer_data(0xAF, INSTRUCTION) != 0) //#Display ON/OFF
goto error;
//AF: ON
//AE: OFF
if(st7565_transfer_data(0x81, INSTRUCTION) != 0) //#Electronic volume mode set
goto error;
//81: Set the V5 output voltage
if(st7565_transfer_data(0x33, INSTRUCTION) != 0) //#Electronic volume register set
goto error;
//00~3F: electronic volume register
if(st7565_clear() != 0)
goto error;
st7565_write_string(0, 0, 0, "I:");
st7565_draw_gpio(INPUT, 0x00);
st7565_write_string(3, 0, 0, "O:");
st7565_draw_gpio(OUTPUT, 0x00);
return 0;
error:
printk(KERN_ERR "ST7565: Failed to init st7565.\n");
return -EIO;
}

19
lkm/st7565.h Normal file
View File

@@ -0,0 +1,19 @@
#ifndef ST7565_H
#define ST7565_H
void st7565_spi_unreg(void);
void st7565_draw_gpio(char io, unsigned int bits);
char st7565_get_bitmap(unsigned char c, unsigned int pos);
void st7565_write_val(unsigned int page, unsigned int yPos, unsigned int invert, unsigned char val);
void st7565_write_string(unsigned int page, unsigned int yPos, unsigned int invert, char *str);
int st7565_clear(void);
int st7565_init(void);
#endif