随笔分类 - 驱动Driver
1
摘要:1. linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内
阅读全文
摘要:Linux INPUT 子系统介绍 查看系统input子系统 ls /dev/input cat /proc/bus/input/devices 想确定键盘对应的是哪个节点:hexdump /dev/input/event0,按下键盘上的回车按键,会有打印信息 input 驱动编写流程 注册 inp
阅读全文
摘要:MISC 设备驱动简介&结构体定义
阅读全文
摘要:驱动的分隔与分离 platform 平台驱动 platform 总线 platform 驱动 platform 设备
阅读全文
摘要:异步通知简介 中断的三种方式:阻塞、非阻塞、异步通知 信号定义 应用层的signal函数 驱动中的信号处理 fasync_struct 结构体 fasync 函数 kill_fasync 函数
阅读全文
摘要:1.阻塞和非阻塞简介 阻塞IO示意图 非阻塞IO示意图 2.等待队列 等待队列头 结构体 初始化函数 等待队列项 将队列项添加/移除等待队列头 等待唤醒 等待事件 轮询 select 函数 poll 函数 epoll 函数 Linux 驱动下的 poll 操作函数
阅读全文
摘要:BlueZ (BlueZ与D-Bus简介)[https://blog.csdn.net/hesuping/article/details/131708132] (蓝牙bluez5的开发方法及入门教程)[https://blog.csdn.net/huohongpeng/article/details
阅读全文
摘要:中断简介 裸机实验 1.使能中断,初始化相应的寄存器。 2.注册中断服务函数,也就是向 irqTable 数组的指定标号处写入中断服务函数 3.中断发生以后进入 IRQ 中断服务函数,在 IRQ 中断服务函数在数组 irqTable 里面查找 具体的中断处理函数,找到以后执行相应的中断处理函数。 中
阅读全文
摘要:1.内核时间管理简介 高节拍率和低节拍率的优缺点 系统节拍数 处理绕回的 API 函数 2.内核定时器简介 2.1系列的 API 函数 init_timer 函数 add_timer 函数 del_timer 函数 del_timer_sync 函数 mod_timer 函数 2.2内核定时器使用流
阅读全文
摘要:Bluetooth的系统构成 1、无线射频单元(Radio):负责数据和语音的发送和接收,特点是短距离、低功耗。蓝牙天线一般体积小、重量轻,属于微带天线。 2、基带或链路控制单元(LinkController):进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。 3、链路管理
阅读全文
摘要:1.并发&竞争的介绍 说要防止并发访问共享资源,换句话说就是要保护共享资源,防止进行并发访问。 学习Linux 内核提供的几种并发和竞争的处理方法。 保护的是共享数据 1.1并发 并发就是多个“用户”同时访问同一个共享资源。 Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,
阅读全文
摘要:GPIO子系统介绍 gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,读取 GPIO 的值等。gpio 子系统的主要目的就是方便驱动开发者使用 gpio,驱动 开发者在设备树中添加 gpio 相关信息,然后就可以在驱动程序中使用 gpio
阅读全文
摘要:pinctrl子系统的作用介绍 在驱动中有没有更通用的方法,可以不涉及到具体的寄存器操作的内容呢? 》 pinctrl 子系统和 GPIO 子系统。 pinctrl 子系统主要用于管理芯片的引脚。 在驱动程序中我们需要手动设置每个引脚的复用功能,不仅增加了工作量,编写的驱动程序不方便移植,可重用性差
阅读全文
摘要:1.DTC工具 scripts/dtc/Makefile文件 arch/arm/boot/dts/Makefile 2.DTS语法 2.1dtsi头文件 2.2设备节点 2.3设备树种的数据形式 compatible 属性 model 属性 status 属性 #address-cells 和#si
阅读全文
摘要:分配和释放设备号存在的问题 alloc_chrdev_region unregister_chrdev_region 字符设备结构 cdev_init 函数 cdev_add 函数 cdev_del 函数 自动创建设备节点 mdev 机制 创建和删除类 创建设备 设置文件私有数据
阅读全文
摘要:地址映射 ioremap iounmap IO内存访问函数 读操作 写操作 Kernel代码 Code #include #include #include #include #include #include #include #include #include #include #include
阅读全文
摘要:字符设备注册 静态分配设备号 define宏定义MAJOR 200 register_chrdev(MAJOR , "chrtest", &test_fops) unregister_chrdev(MAJOR , "chrtest") 动态分配设备号 alloc_chrdev_region() un
阅读全文
摘要:1 编译流程顺序 开发板编译时,文件的指定编译流程顺序 在kernel目录下make ARCh=arm menuconfig 配置选项后,生成的是.config,也只能在当前目录下直接make ARCH=arm编译才会生效 想要整个项目的生效生成KO文件或者编译进去内核,需要同步到项目编译的mk文件
阅读全文
摘要:文件介绍 Kconfig -> 饭馆的菜单 .config -> 自己点的菜单 因此,make编译的时候,是按照.config编译的 编译指令 make ARCH=arm menuconfig export ARCH=arm Kconfig文件位置 ./ARCH/arm/configs -> 相当于
阅读全文
摘要:文件目录结构 Makefile # 需要的系统内核路径 KERNELDIR := /lib/modules/$(shell uname -r)/build # 现在的路径 CURRENT_PATH := $(shell pwd) # 需要编译生成的模块名字 MODULE_NAME :=hello #
阅读全文
1