Notes
main
main
  • Introduction
  • linuxKernel
    • tips
    • make_help
    • old linux
      • compile_linux0.11
      • TestEnvironment
      • load_setup
      • get_hard_data
    • list
    • plist
    • fifo
    • idr
    • xarray
    • rbtree
    • maple_tree
    • syscall
    • bitmap
    • page
    • page_flags
    • page_size
    • page mapcount
    • page refcount
    • folio
    • slub
      • proc_slabinfo
      • slub_theory
      • kmalloc_kfree
      • kmem_cache
      • slab_alloc
      • slab_free
      • proc_meminfo_SReclaimable_SReclaimable
    • vmalloc
    • brk
    • mmap
    • mremap
    • mprotect
    • madvise
    • read
    • write
    • shmem
    • huge_page
    • page_fault
    • rmap
    • lru
    • multi-gen-LRU
    • page_reclaim
    • page_cache
    • page_table
    • rcu
    • kvm
    • aarch64_boot
    • tracing_system
    • cache_coherence_and_memory_consistency
    • cpu_speculates
    • mmap_lock
    • per-vma_lock
    • cgroup
    • symbol
    • campact
    • page_ext
    • mempool
    • kernelstack
    • filesystem
    • io_stack
    • workingset
    • ioremap
    • sched_period
  • linuxDebug
    • openocd_openjtag
    • i2c_tools
    • objdump
    • addr2line
    • gdb_useage
    • debug_linux_kernel_via_gdb
    • debug_linux_module_via_gdb
    • early_boot
    • sequentially_execute
    • dynamic_debug
    • research_linuxKernel_by_patch
    • tracefs
    • ebpf
    • bpftrace
    • perf
    • flame_graph
    • crash
    • ASAN_HWASAN_MTE_check_mem_bug
    • page_owner
    • vmtouch
    • fio
    • benchmark
  • linuxSystem
    • common
      • system_version
      • procfs
      • proc_sys_vm
      • cmd_ps
      • makefile
      • file_descriptor
      • psi
      • ulimit
      • top
      • delay_accounting
    • ubuntu
      • custom_kernel
      • get_cmd_src
      • record_ssh_info
      • log
      • run_custom_script
      • repo
      • cockpit
      • nfs
      • tftp
      • misc
    • fedora
      • system_upgrade
      • custom_kernel
      • lvextend
      • yt-dlp
      • jellyfin
  • linuxDriver
    • i2c_peripherals_driver
    • spi_peripherals_driver
    • gpio_subsystem
    • IRQ_driver
    • blockIO_unblockIO_async
    • linux_own_driver
    • misc_device
    • input_device
    • timer
    • atomic_spinlock_semaphore_mutex
    • lcd
    • touch_screen
    • debugfs
    • v4l2
    • mmap
  • hardware
    • paging_mmu_pt
    • iommu
  • process_thread_scheduler
    • scheduler01
    • scheduler02
    • scheduler03
    • scheduler04
    • scheduler05
    • scheduler06
  • memory_management
    • mm1
    • mm2
    • mm3
    • mm4
    • mm5
  • input_output_filesystem
    • io_fs_01
    • io_fs_02
    • io_fs_03
    • io_fs_04
  • lock_and_lockup_detector
    • general_lock
    • hung_task
    • softLockup_hardLockup
    • crash_experiment
  • MIT_6.S081
    • 6.S081_Operating_System_Engineering
    • Schedule.md
    • Class
      • Overview
      • Administrivia
    • Labs
      • Tools
      • Guidance
      • startup
      • syscall
      • page_table
      • Calling_Convention
      • traps
    • xv6
      • xv6
    • References.md
  • qemu
    • qemu_buildroot
    • qemu_busybox.md
    • Serial.md
    • demo_mini2440
      • 0_compilation_error_summary
      • 1_compilation_steps
      • 2_operation_mode
      • 3_transplant_tools_libraries
      • 4_tools_use
      • reference_website
  • tools
    • getKernelSourceCodeList
    • nat
    • shell
    • translating
    • YouCompleteMe
    • cscope
    • global
    • vscode
    • vim
    • binary
    • markdown
    • draw
    • git
    • tig
    • tmux
    • mail_client
    • download_patchset_from_LKML
    • minicom
    • clash
  • other
    • interview
    • interview_c_base
    • know_dontknow
    • Stop-Ask-Questions-The-Stupid-Ways
    • How-To-Ask-Questions-The-Smart-Way
    • docker
    • buildroot
    • rv32_to_rv64
Powered by GitBook
On this page
  • 1. 手动分配与设置 struct input_dev * 变量
  • 2. 注册 input device
  • 3. 向linux系统上报事件
  • 4. 注销与释放 input device
  • 5. 应用层测试

Was this helpful?

  1. linuxDriver

input_device

linux kernel input device编写,需要五步:

  • 手动分配与设置 struct input_dev * 变量

  • 注册 input device

  • 向linux系统上报事件

  • 注销与释放 input device

  • 应用层测试

1. 手动分配与设置 struct input_dev * 变量

struct input_dev *xxx_inputDev;

xxx_inputDev = input_allocate_device(); // 分配
xxx_inputDev->name = "xxx_inputDev";    // 设置input device名字
__set_bit(EV_KEY, xxx_inputDev->evbit); // 设置事件类型
__set_bit(KEY_0,  xxx_inputDev->keybit);// 设置事件码

2. 注册 input device

input_register_device(xxx_inputDev); // 注册

3. 向linux系统上报事件

一般在中断处理函数或下半部函数中上报事件

/*
 * 向linux系统上报按键事件
 *
 * 事件类型: EV_KEY
 * 事件码  : KEY_0
 * 事件值  : value, 1 or 0
 */
input_report_key(xxx_inputDev, KEY_0, value);

// 向linux系统上报同步事件
input_sync(xxx_inputDev);

4. 注销与释放 input device

input_unregister_device(xxx_inputDev); // 注销
input_free_device(xxx_inputDev);       // 释放

5. 应用层测试

$ hexdump /dev/input/eventx
[编号]   [秒]      [微秒]      [事件类型] [事件码]  [事件值]
0000000 0c41 0000 d7cd 000c    0001     000b   0001 0000
0000010 0c41 0000 d7cd 000c    0000     0000   0000 0000
0000020 0c42 0000 54bb 0000    0001     000b   0000 0000
0000030 0c42 0000 54bb 0000    0000     0000   0000 0000

# 第一行:按键事件(按下),事件类型EV_KEY=0x1,事件码KEY_0=0xb,事件值value=0x1
# 第二行:同步事件
# 第三行:按键事件(松开),事件类型EV_KEY=0x1,事件码KEY_0=0xb,事件值value=0x0
# 第四行:同步事件
Previousmisc_deviceNexttimer

Last updated 4 years ago

Was this helpful?