随笔分类 -  linux驱动开发详解学习(baohua)

摘要:摘自韦东山驱动开发 阅读全文
posted @ 2022-11-10 15:26 QianFa01 阅读(121) 评论(0) 推荐(0)
摘要:摘自韦东山驱动入门 阅读全文
posted @ 2022-11-09 21:06 QianFa01 阅读(100) 评论(0) 推荐(0)
摘要:DS18B20模块 单总线设备,可读可写; 可测范围:-55℃~ +125℃,温度/数据对应关系如下: 当启动温转命令后,读寄存器的前两个字节的值得到温度数据:默认上电是12位精度,分辨率是0.0625,高字节的Bit11-Bit15是符号位; 实现驱动中的读函数(代码来自百问网): static 阅读全文
posted @ 2022-11-04 16:16 QianFa01 阅读(249) 评论(0) 推荐(0)
摘要:dth11模块调试发现的问题: gpio引脚输出时不该再设置方向。 static void dht11_start(void) { //此处bug gpiod_direction_output(dht11_data_pin, GPIOD_OUT_LOW); mdelay(18); gpiod_dir 阅读全文
posted @ 2022-11-02 11:57 QianFa01 阅读(370) 评论(0) 推荐(0)
摘要:GIC:generic interrupt controller ,ARM系统中通用中断控制器, 分级:gpio中断 → gpc控制器(虚拟的) → intc控制器 interrupt-parent :指定 父系 中断控制器;interrupt-controller :表明是一个中断;interru 阅读全文
posted @ 2022-10-13 17:49 QianFa01 阅读(86) 评论(0) 推荐(0)
摘要:设备树的引入:由于platform_device驱动大都是.c文件,会造成代码的臃肿;设备树是一种配置文件,与内核相隔开。 创建设备节点的格式: [label:] node-name[@unit-address] { [properties definitions] [child nodes] }; 阅读全文
posted @ 2022-10-11 15:10 QianFa01 阅读(319) 评论(0) 推荐(0)
摘要:驱动中引入分离的思想和总线设备模型,platform_bus_type结构体用来实现这种虚拟的机制。总线主要分为platform_driver(驱动)、platform_device(设备)两大类,这两大类下有各种各种的具体驱动、设备,可以理解为两条链表结构;两者都需要注册,注册函数分别为:plat 阅读全文
posted @ 2022-10-07 10:37 QianFa01 阅读(133) 评论(0) 推荐(0)
摘要:3.4.1的基础上, 在drivers/char目录下,创建一个目录。mkdir hello_drive ; 把hello.c驱动文件复制到该目录下,创建一个Kconfig文件,touch Kconfig ;并编辑如下代码: 3. 创建Makefile文件,编辑如下代码: 4. 回到char目录下, 阅读全文
posted @ 2022-10-05 21:56 QianFa01 阅读(94) 评论(0) 推荐(0)
摘要:在内核目录里的源码:可以编译为.ko;可以编译进内核映像文件zImage。make zImage 把驱动程序放进内核:可以编译进内核,也可以编译为模块。怎么放进内核文件? Linux的配置系统包括Makefile 、Kconfig、配置工具。Makefile存在于内核源代码中,定义Linux的内核编 阅读全文
posted @ 2022-10-04 21:29 QianFa01 阅读(804) 评论(0) 推荐(0)
摘要:1.MPU:Micro Processor Unit,微处理器;MCU:Micro Controller Unit ,微控制器,两者之间的区别是MPU具有MMU内存管理单元(映射和选址),而MCU具有内存控制单元(选址)。 2.两者可以将程序分为应用层和驱动层(库实现),驱动层都用来操作具体的硬件, 阅读全文
posted @ 2022-09-29 10:12 QianFa01 阅读(207) 评论(0) 推荐(0)
摘要:裸机 uboot 内核 文件系统 驱动 应用;(前三者入门不看) vi中快速定位:“/”+关键字“ 可以快速查找关键字。“N” 定位到下一个高亮关键字;复制n行:nyy;p是粘贴;set nu :显示行号;set nu!:不显示行号; 监听内核打印消息,另开一个终端,使用root权限执行 cat / 阅读全文
posted @ 2022-09-22 10:05 QianFa01 阅读(58) 评论(0) 推荐(0)
摘要:container_of(ptr,type,member) 该函数原理:已知结构体type的成员member的地址ptr,求结构体type的首地址。 1 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 2 3 #defin 阅读全文
posted @ 2022-09-21 16:16 QianFa01 阅读(118) 评论(0) 推荐(0)
摘要:信号处理函数的定义为: void signal_handler(int signum) 可以理解为:参数为int型,返回值为void型的函数; 信号函数signal()定义如下: void ( *signal( int signum,void (*handler)(int) ) ) (int);si 阅读全文
posted @ 2022-09-18 18:31 QianFa01 阅读(1145) 评论(0) 推荐(0)
摘要:udev工作原理: (1)当内核检测到系统中出现了新设备,内核会通过netlink套接字发送uevent。 (2)udev获取内核发送的信息,进行规则的匹配。匹配的事物包括SUBSYSTEM、ACTION、attribute、内核提供的名称(通过KERNEL=)以及其他的环境变量。 例子:插上一个U 阅读全文
posted @ 2022-09-06 17:39 QianFa01 阅读(201) 评论(0) 推荐(0)
摘要:运行无参版本:insmod book.ko;相应输出模块内的默认值 运行有参版本:insmod booko.ko book_name='GoodBook' book_num=5000;输出用户传递的参数 使用命令:cat /var/log/kern.log 查看内核的输出 使用命令:cat /sys 阅读全文
posted @ 2022-09-05 16:25 QianFa01 阅读(31) 评论(0) 推荐(0)
摘要:命令输入: .ko文件:kernel object文件,内核模块;该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。 insmod ./hello.ko 加载模块; rmmod hello 卸载模块; printk中的8种日志级别: #define KERN_EME 阅读全文
posted @ 2022-09-05 11:36 QianFa01 阅读(85) 评论(0) 推荐(0)