笔记: 书本《4.4触控屏应用接口》,了解开发板的触摸屏操作。...蜂鸣器、LCD显示屏 ——》信息输出设备 触控屏:(一切皆文件) ——》信息输入设备(检测设备) ——》测试触摸屏:cat /dev/input/event0 如果出现乱码,出现了原始数据...输入子系统编码文件: /usr/include/linux/input-event-codes.h 输入子系统信息结构体: struct input_event { struct timeval...> // 输入子系统头文件 int main() { // 1.打开 int ts_fd = open("/dev/input/event0", O_RDONLY); if(ts_fd == -...1) { perror("open ts failed"); return -1; } // 2.读取(产生阻塞,等待用户点击) struct input_event ts_buf;
当前使用的是ubuntu18.04,驱动模块的位置:/lib/modules/5.3.0-40-generic/kernel/drivers/usb/mon/usbmon.ko 如果不确定当前内核的版本...2.4 查看usbmon可以识别到的USB总线编号 root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# ls /sys/kernel...我使用的设备就是148f:5370。 使用的总线是3号总线。 2.6 监控指定总线上通信的数据 为了只看这个想要的设备数据,可以过滤一下。 后面的 "1:010" ,1表示总线编号。...- Event Type. This type refers to the format of the event, not URB type....and output Zi Zo Isochronous input and output Ii Io Interrupt input and output Bi Bo
块设备是文件系统的底层支撑,完成数据的存储和访问。块设备也能脱离文件系统以螺设备的形式工作。 块设备以“块”为最小访问单元,可随机访问(定位寻址),逻辑上具有“通用设备层,物理磁盘,分区概念“。...使用工作队列来完成延迟的IO操作。 块设备的处理流程较为复杂,包括通用块层,IO调度层和块设备驱动程序的三层组织架构。 通用块设备层负责将bio 到request请求的变换和组织。...research/linux-5.15.4/include/linux/genhd.h struct gendisk { /* major, first_minor and minors are input...; /* flags related to event processing */ struct xarray part_tbl; struct block_device *part0;...* @i_mmap_rwsem: Protects @i_mmap and @i_mmap_writable.
= vivi_mmap, }; 先来看这几个函数的名字,其中 open 函数和 unlocked_ioctl 函数的名字与其他的不同,直觉告诉我,他俩是系统提供的,其他的函数名字都是 vivi 开头的...= v4l2_ctrl_subscribe_event, .vidioc_unsubscribe_event = v4l2_event_unsubscribe, }; 可以看到,这是一大堆的...,vidioc_qbuf,vidioc_dqbuf; 对标准 standard 的操作:vidioc_s_std; 对输入 input 的操作:vidioc_enum_input,vidioc_g_input...的名字是 v4l2 开头的,应该是系统里面实现好的函数,搜索可以发现在 v4l2-ctrls.c 和 v4l2-event.c 中定义。...= vivi_mmap, }; 我们首先分析这个 vivi.c 的目的是为了先大致看一些 v4l2 驱动的代码,留一些疑问,以后分析 v4l2 的代码框架及一些概念的时候,还会以这个 vivi.c
也就是说,kprobe 不仅可以跟踪任意带有符号的内核函数,也可以跟踪函数中间的任意指令。...mmap 映射到进程的地址空间,同时内核会将该进程虚拟地址空间中对应的 uprobe 地址替换成断点指令。...random TRACE_EVENT(random_read, TP_PROTO(int got_bits, int need_bits, int pool_left, int input_left...但实践起来我们会遇到几个方面的困难: 许多工具需要编译代码,BCC 工具还需要 Python 运行,这在默认的 Android 环境中不存在; 原厂提供的预编译内核镜像不带有 kprobe 等监控功能支持...bc libc6-dev-i386 lib32ncurses5-dev \ x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc
二、mmap的系统调用 0.查找mmap在内核中的系统调用函数 我现在用的内核版是4.19.40,首先在应用层参考上面解析编写一个mmap使用代码,然后编译成程序,在使用strace工具跟踪其函数调用,...可以发现mmap也是调用底层的mmap系统调用,然后我们寻找一下底层的带6个参数的mmap系统调用有哪些: 可以看到,arm64和X86的系统调用位于不同文件。...the underlying filesystem is noexec * mounted, in which case we dont add PROT_EXEC.) */ //如果进程带有...f_mapping); if (vm_flags & VM_DENYWRITE) allow_write_access(file); } file = vma->vm_file; out: perf_event_mmap...);//这里是映射到了/dev/zero这个文件 vma_link//将vma链接回进程的mm_struct结构体中 perf_event_mmap
#include #include #include event.h...一般采用V4L2驱动的摄像头设备文件是/dev/video0,V4L2支持两种方式采集图像:内存映射方式mmap和直接读取方式read。...VIDIOC_G_INPUT和VIDIOC_S_INPUT用于查询和选择当前的input,一个video设备节点可能对应多个视频源,比如saf7113可最多支持四路cvbs输入,若上层想要在四个cvbs...VIDIOC_G_INPUT和VIDIOC_G_OUTPUT返回当前的video input和output的index值。...7.获取每个缓存的信息,并mmap到用户空间 应用层和设备有三种交换数据的方法,直接read/write,内存映射mmap和用户指针,这里只说mmap。
先科普一下mmap参数中这两个参数吧。 prot : 映射区域的保护方式。...在调用mmap()时必须要指定MAP_SHARED 或MAP_PRIVATE。 MAP_FIXED 如果参数start所指的地址无法成功建立映射时,则放弃映射,不对地址做修正。通常不鼓励用此旗标。...Android所给予的截屏和模拟操作分别为 adb screenshot 和 adb shell sendevent (根据android版本,有些机型用的是input event,记得没错的话~) 所有需要...); LOGE("simulate_press_event"); INPUT_EVENT event; // 0....buffer的缓存是以文件内存映射的方式存储在dev\graphics\fb0路径。
__ATTR(name,S_IRUGO, show_name, NULL), __ATTR(version, S_IRUGO, show_version, NULL), __ATTR(event...,S_IRUGO, show_event, NULL), {} }; /* UIO class infrastructure */ static struct class uio_class =...内存映射:UIO驱动通过mmap系统调用将物理设备内存映射到用户空间的虚拟地址空间。 中断管理:UIO驱动可以处理设备的中断请求,并将中断事件通知给用户空间程序。 2....内存映射:用户空间程序使用mmap系统调用将设备内存映射到进程的虚拟地址空间。 数据交互:用户空间程序通过读写虚拟地址的方式与设备进行数据交互。...uio_mmap:用于处理用户空间的mmap系统调用,将设备内存映射到用户空间的虚拟地址空间。 uio_read 和 uio_write:用于处理用户空间的读写操作,实现与设备的数据交互。
作为计算机网络排查的一大神器,掌握了上文所说的技巧,可以让你随时随地得心应手的掌握网络应用的一举一动。...只追踪特定的系统调用 上述 df -h 的 strace 结果是非常多的,从中比较难以找到我们真正关心的调用,通过 -e trace 参数,通过传入不同的参数值,就可以过滤出想要的结果了。...(128),PTRACE_EVENT??...(128),PTRACE_EVENT??...133execve("/usr/bin/df", ["df", "-h"], [/* 22 vars */] [wait(0x4057f) = 5637] WIFSTOPPED,sig=SIGTRAP,PTRACE_EVENT_EXEC
第二个问题:为什么上一篇文章中模拟的Switch Pro手柄只创建了/dev/input/eventX却没有/dev/input/jsX? 关于该问题,我们就需要加深一点对内核input驱动的了解。...2.2 注册手柄驱动 目前Linux下绝大部分手柄的客户端程序都是通过读取/dev/input/jsX文件获取手柄输入的数据,在上一篇Paper中,我们模拟的XBox手柄就能成功生成/dev/input...wake_up_interruptible(&joydev->wait); } joydev_event的三个参数正好能和input_event结构体对应,接着将会根据input_event结构体的数据生成...在上一篇文章中,讲述的读取/dev/input/jsX的数据,正好能和上面的代码对应上。...至于为什么Nintendo手柄会在Linux手柄驱动的黑名单中无从得知,只能从代码的注释中猜测一二:一般手柄会带有加速度传感器,用来玩一些支持体感类的游戏,比如健身环,可能Nintendo手柄的加速度传感器的功能在
B类协议: 与A类协议不同的是, B类在使用input_mt_slot()的时候会带有一个slot的参数,在每个数据包开始时 产生一个ABS_MT_SLOT事件,提示接收器更新数据。...3, B类协议: ABS_MT_TRACKING_ID 表示一次接触; -1 代表一个不用的slot; 使用参考例子: 释放事件: input_mt_slot(data->input_dev, i...); input_mt_report_slot_state(data->input_dev, MT_TOOL_FINGER, false); 点击事件: input_mt_slot(data->input_dev..., i); input_mt_report_slot_state(data->input_dev, MT_TOOL_FINGER, true); input_report_abs(data->input_dev...input_report_abs(data->input_dev, ABS_MT_POSITION_Y, current_events[i].y) 补充: 不同事件的标记: 备忘。
io 内存区域,igb_uio 中映射的 pci bar 的内存区域并不会被直接使用,在程序执行 mmap 映射 /dev/uioX 设备内存时 info 结构中的 mem 与 port 字段的值被使用...内存资源信息,然后依次 mmap 每个 pci 内存资源对应的 resourceX 文件,这里执行的 mmap 将 resource 文件中的物理地址映射为用户态程序中的虚拟地址!...实际上我们也可用通过 mmap /dev/uioX 来完成 pci 设备内存资源映射到用户态的工作。...如何通过 mmap /dev/uiox 文件来映射网卡 pci 内存资源 上文提到过,mmap /dev/uiox 需要通过 uio 生成的 maps 文件完成,从内核文档中找到与 maps 文件相关的如下信息...dpdk 程序中监听中断事件的过程 dpdk 单独创建了一个中断线程负责监听并处理中断事件,其主要过程如下: 创建 epoll_event 遍历中断源列表,添加每一个需要监听的 uio 设备事件的 uio
argv[1] : "/dev/binder"; sp ps = ProcessState::initWithDriver(driver); // 初始化进程间的单例对象.../binder, /dev/hwbinder, /dev/vndbinder, 这三个binder是不通的,也就是一个binder服务是无法拿到vndbinder中的服务的,这个是Google在treble...Using /dev/binder instead....Looper::POLL_CALLBACK, Looper::EVENT_INPUT...Looper::POLL_CALLBACK, Looper::EVENT_INPUT
查看/dev目录,可以发现对应的uioX设备,如下图: ? 图4. uio设备 打开uio设备 这时,应用层已经可以使用uio设备了。DPDK的应用层代码,会打开uioX设备。...图9. igb_uio中断处理函数 其中的关键步骤是调用uio_event_notify。 ? 图10. uio_event_notify 这个函数很简单:1. 增加uio设备的“事件”数; 2....uio模块除了实现了上面的“事件”通知,还支持了mmap方法,用于将注册的uio设备的“内存空间”映射到应用空间。其mmap的函数为uio_mmap,关键代码如下: ?...图14. pci_uio_map_resource 下面就是PMD的应用层的驱动实现了。以最简单的e1000驱动为例,在其初始化函数eth_igb_dev_init中, ? 图15....图17.rte_eth_rx_burst 在这个函数中,会调用驱动dev->rx_pkt_burst来做实际的操作。以e1000为例,即eth_igb_recv_pkts。 ?
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event...event) { if (event == Lifecycle.Event.ON_DESTROY) { if (!...需要注意的是,实例化ViewModel时不要传入任何类型的Context或带有Context引用的对象,将引发内存泄漏。...public class ViewModelStore { private final HashMap mMap = new HashMap();...final void put(String key, ViewModel viewModel) { ViewModel oldViewModel = mMap.put(key,
; // 用来将字符设备串成一个链表 dev_t dev; // 字符设备的设备号,由主设备号和次设备号组成 unsigned int count; // 同属某个主设备号的次设备号个数...} __randomize_layout; 设备号相关的操作方法如下: #define MAJOR(dev) ((dev)>>8) #define MINOR(dev) ((dev) & 0xff...) (struct file *, struct vm_area_struct *); unsigned long mmap_supported_flags; int (*open) (...: wait_event(wq_head, condition) wait_event_freezable(wq_head, condition) wait_event_timeout(wq_head,...condition, timeout) wait_event_interruptible(wq_head, condition) wait_event_interruptible_timeout(wq_head
aaudio_input_preset_t preset = getInputPreset(); if (preset == AAUDIO_INPUT_PRESET_CAMCORDER...和传统机制的结构: image.png 如果是使用非Mmap,并且是采集,那么走的就是AudioStreamRecord,AudioStreamRecord实际上走的就是Java AudioRecord...%p for dev %d", __func__, endpointMMap.get(), configuration.getDeviceId()); endpoint...config, AUDIO_INPUT_FLAG_MMAP_NOIRQ...&config, AUDIO_INPUT_FLAG_MMAP_NOIRQ
想不出原因,就翻一下官方文档说明,看看能否有新发现,通过查找参数tmp_table_size链接到MySQL内部临时表的说明手册中https://dev.mysql.com/doc/refman/8.0...: 82 END_EVENT_ID: 82 EVENT_NAME: statement/sql/select SOURCE...: NULL NESTING_EVENT_TYPE: NULL NESTING_EVENT_LEVEL: 0 STATEMENT_ID: 3364369 万幸,...当参数temptable_use_mmap设置为ON(即默认值)时,最大的临时表限制为temptable_max_ram+temptable_max_mmap的参数值;当参数temptable_use_mmap...参考链接: https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html https://dev.mysql.com/doc
使用epoll的优点很多: 没有最大并发连接的限制,能打开的fd的上限远大于1024(1G的内存上能监听约10万个端口) 效率提升,不是轮询的方式,不会随着fd数目的增加效率下降 内存拷贝,利用mmap...()文件映射内存加速与内核空间的消息传递;即epoll使用mmap减少复制开销 综上所述,通过epoll的机制,给现代高级语言提供了高并发、高性能解决方案的基础。...而同样FreeBSD推出了kqueue,Windows推出了IOCP,Solaris推出了/dev/poll。...to be available for event, mask in selector.select(0.1): process_input(event.fileobj...之前通过I/O复用的所提供的解决方案,进一步抽象,即可抽象出最基本的框架事件循环(Event Loop),而其中最容易理解的实现, 则是回调(Callback).