Linux驱动开发
文章平均质量分 90
主要是学习笔记
ZhangDaniel_ZD
嵌入式,内核。
展开
-
00_字符设备驱动
05课_字符设备驱动文章目录05课_字符设备驱动1、介绍2、用户程序与驱动程序关联3、测试程序3.1、first_drv:点灯3.1.1、测试第一个驱动程序,手动选择主设备号3.1.2、测试,自动分配主设备号3.1.3、测试,自动分配主设备号,自动创建设备文件节点,自动创建设备文件3.1.4、编写点灯的驱动函数,将物理地址映射为虚拟地址3.2、second_drv:查询方式获取按键值3.2.1、原理3.2.2、代码实现3.3、third_drv:中断方式获取按键值3.3.1、原理3.3.2、程序实现代码3原创 2021-02-02 16:35:20 · 107 阅读 · 0 评论 -
01_使用定时器实现按键防抖
01_使用定时器实现按键防抖接着1-2期衔接课程的最后一节(阻塞方式),使用定时器来消除按键抖动的问题。1、原理2、程序思路2.1、定义一个定时器static struct timer_list buttons_timer;2.2、发生中断时的引脚描述static struct pin_desc *irq_pd;2.3、在入口函数sixth_drv_init中/* 1 初始化定时器 */init_timer(&buttons_timer);/* 2 定时器的处理函数 */原创 2020-08-24 19:37:22 · 1165 阅读 · 0 评论 -
02_输入子系统驱动
02_输入子系统驱动1、框架输入子系统分为上下两层:上层为核心层,input.c中有register_chrdev,它的file_operations中只有一个open函数在input_open_file函数中:1245行:根据打开设备的次设备号定义一个handler结构体;1264行:并且调用这个handler里面的open函数1262行:将文件的fop指向打开结构体中的fop;以后要读要写就会调用这个新的file_operations结构体中的读写函数那么1245行的数组由左边的i原创 2020-08-24 19:53:02 · 187 阅读 · 0 评论 -
03_分层分离驱动
03_分层分离驱动1、概念分离:把硬件相关的东西抽出来;把相对稳定的软件部分抽出来。分层:input.c 向上提供统一给 APP 操作的统一接口。每一层专注于自已的事件。设备总线驱动模型:作用:只不过是左右两个注册建立起来的一种机制。在“.probe”函数中做的事件由自已决定,打印一句话,或注册一个字符设备,再或注册一个“input_dev”结构体等等都是由自已决定。2、编写程序点灯利用分离的概念来点亮一个led。2.1、led_dev.c1在这里要分配/设置/注册一个平台设备plat原创 2020-08-25 09:56:29 · 145 阅读 · 0 评论 -
04_LCD驱动
04_LCD驱动1、编写框架假设打开一个lcd读写函数:1 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0--------------------------------------------------------------kernel: fb_open int fbidx = iminor(inode); struct fb_info *info = = registered_fb[原创 2020-08-25 10:05:47 · 203 阅读 · 0 评论 -
05_触摸屏驱动
05_触摸屏驱动1、硬件原理和编程思想电阻触摸屏原理:编程框架:触摸屏执行流程:2、8th编程2.1、入口函数s3c_ts_init中1、 设置输入结构input_dev1.1、分配一个input_dev结构体s3c_ts_dev = input_allocate_device();1.2、能产生那类事件set_bit(EV_KEY,s3c_ts_dev->evbit);set_bit(EV_ABS, s3c_ts_dev->evbit);设置struct in原创 2020-08-25 10:20:04 · 199 阅读 · 0 评论 -
06_USB设备驱动
06_USB设备驱动1、概念介绍USB驱动分为两种;设备驱动 : 需要自行编写USB总线驱动程序 : 一般内核中会提供1.1、基本概念现象:把USB设备接到PC1.右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序问1. 既然还没有"驱动程序",为何能知道是"android phone"答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序";原创 2020-08-25 10:35:14 · 267 阅读 · 0 评论 -
07_块设备驱动
07_块设备驱动1、回顾字符设备驱动程序一、pandas是什么?二、使用步骤1.引入库2.读入数据总结1、回顾字符设备驱动程序提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):i.原创 2020-08-25 16:47:57 · 146 阅读 · 0 评论 -
08_NandFlash驱动
08_NandFlash驱动文章目录08_NandFlash驱动1、框架2、怎么写块设备驱动程序呢3、硬件原理4、uboot体验nand flash操作4.1、读ID4.2、读内容: 读0地址的数据5、Nand驱动框架6、编写驱动代码6.6、包含头文件6.5、定义变量6.4、分区表6.3、nand的操作函数6.1、入口函数s3c_nand_init中6.2、在出口函数s3c_nand_exit中7、测试实验2th:3th:4th:1、框架1 app : open,read,write “1.txt原创 2021-02-02 20:18:20 · 253 阅读 · 0 评论 -
09_NorFlash驱动
09_NorFlash驱动文章目录09_NorFlash驱动1、nor flash原理2、使用u-boot体验nor flash操作3、NOR FLASH驱动程序框架4、NOR FLASH识别过程分析5、代码编写6、测试6.1、测试1:通过配置内核支持NOR FLASH6.2、测试2: 使用自己写的nor驱动程序:6.3、测试3:内存分配flash1、nor flash原理原理图:Nor 和Nand 比较:其中CPU的addr1接到Nor Flash的addr0;Nand 启动时,CPU看到原创 2021-02-02 20:30:13 · 618 阅读 · 1 评论 -
10_虚拟网卡驱动
10_虚拟网卡驱动文章目录10_虚拟网卡驱动1、网卡驱动框架2、编写代码2.1、在模拟收包函数emulator_rx_packet中2.2、在发包函数virt_net_send_packet中2.3、在入口函数virt_net_init中2.4、在出口函数virt_net_exit中3、测试1th2th3th4th4th回顾字符设备驱动编写框架:回顾块设备驱动编写框架:1、网卡驱动框架app: socket------------------------------------------原创 2021-02-03 15:48:12 · 619 阅读 · 0 评论 -
11_DM9000C移植
11_DM9000C移植文章目录11_DM9000C移植1、介绍2、修改dm9000c驱动程序来移植2.0、包含头文件2.1、去掉一些信息2.2、函数dmfe_probe1中2.3、在dmf_open函数中2.4、修改入口函数2.5、修改出口函数3、测试修改好的驱动4、内存控制器4.1、不同位宽设备之间的连接4.2、内存控制器操作1、介绍DM9000C网卡原理图:问:怎样才能选中网卡芯片呢?答:只要CPU发出的物理基地址为0x20000000 到 0x28000000之间nGCS4就会变为低电平原创 2021-02-04 15:52:01 · 177 阅读 · 0 评论 -
12_IIC裸板
12_IIC裸板文章目录12_IIC裸板1、IIC读写操作原理2、数据的双向传输3、2440的IIC控制器4、编写代码5、测试1、IIC读写操作原理黑色->主到从、红色->从到主写:1_START、2_设备地址(7位) | 方向(1位)、3_回应、4_数据(8位) | 回应、5_P(结束)读:1_START、2_设备地址(7位) | 方向(1位)、3_回应、4_数据(8位) | 回应、5_数据 | 回应、6_P(结束)方向:0->写 1->读START:SCL保持高电原创 2021-02-04 15:56:47 · 239 阅读 · 0 评论 -
13_Linux2.6 IIC驱动
13_Linux2.6 IIC驱动文章目录13_Linux2.6 IIC驱动1、i2c驱动框架2、编写驱动程序2.7、i2c实验的读写函数2.6、在file_operations结构体at24cxx_fops中:2.5、发现新的adapter或者driver之后调用函数at24cxx_detect:2.4、at24cxx_attach和at24cxx_detach函数:2.3、在i2c_driver结构体at24cxx_driver中:2.1、在入口函数at24cxx_init中:2.2、在出口函数at2原创 2021-02-04 16:02:07 · 116 阅读 · 0 评论 -
14_字符设备另一种写法
14_字符设备另一种写法文章目录14_字符设备另一种写法1、字符设备框架对比2、新的字符设备驱动程序编写2.1、在hello.c中2.1.1、确定主设备号2.1.5、定义测试所用的open函数2.1.2、构造file_operations2.1.3、告诉内核2.1.4、在出口函数hello_exit中2.2、在hello_test中2.3、修饰3、测试1th:2th:1、字符设备框架对比之前的字符设备驱动框架:缺点:修改后的框架:修改后:程序按照主设备号、次设备号来打开设备,这样同一个主设原创 2021-02-04 16:06:08 · 120 阅读 · 0 评论 -
15_RTC驱动
15_RTC驱动文章目录15_RTC驱动1、分析RTC工作原理2、修改内核的RTC代码3、测试RTC1、分析RTC工作原理使用新的字符设备驱动程序框架分析RTC驱动程序:drivers\rtc\rtc-s3c.cs3c_rtc_init platform_driver_register s3c_rtc_probe /* 内核中有对应的平台设备,probe函数会被调用 */ rtc_device_register("s3c", &pdev->dev, ①&s3c原创 2021-02-04 21:18:56 · 435 阅读 · 0 评论 -
16_声卡驱动
16_声卡驱动文章目录16_声卡驱动1、原理1.1、原理图1.2、传输声音:数据接口IIS1.3、传输声音:控制接口L32、分析UDA1341的声卡驱动程序2.1、分析UDA1314驱动程序2.2、测试UDA1314驱动程序3、JZ2440上WM8976声卡驱动介绍3.1、对比UDA13413.2、wm8976芯片的控制接口4、编写WM8976驱动程序4.2、函数wm8976_write_reg4.1、函数init_wm89764.3、修改其他位置的代码4.4、测试wm8976的驱动程序4.5、播放mp3原创 2021-02-04 21:32:30 · 606 阅读 · 1 评论 -
17_DMA驱动
17_DMA驱动文章目录17_DMA驱动1、DMA介绍2、dma驱动程序2.7、参数初始化2.1、构造主设备号2.6、dma对应的ioctl函数2.2、构造file_operations结构体2.5、dma中断处理函数2.3、入口函数s3c_dma_init中2.4、出口函数s3c_dma_exit中3、dma测试程序4、测试DMA驱动程序4.1、不使用DMA拷贝数据4.2、使用DMA操作拷贝数据1、DMA介绍DMA:Direct Memory Access,直接存储器访问我们知道,cpu同一时间原创 2021-02-04 21:37:23 · 770 阅读 · 0 评论 -
18_热拔插驱动
18_热拔插驱动文章目录18_热拔插驱动1、介绍2、分析class_device_create函数3、示例3.1、装载buttons驱动3.2、卸载buttons驱动4、自动挂载U盘4.1、U盘介绍4.2、分析mdev4.3、写mdev.conf进行U盘测试4.3.1、文件装载4.3.2、U盘自动挂载到mnt目录1、介绍热拔插即:hotplug/uevent机制。问:在以前写的驱动程序中分配了主设备号,创建了file_operatinons结构体,为什么还要创建类?还要在类下面创建设备呢?答:以前原创 2021-02-04 21:48:09 · 740 阅读 · 0 评论 -
19_裸板调试方法
19_裸板调试方法文章目录19_裸板调试方法1、点灯1.1、程序运行过程1.2、在head.S中加入点灯的代码进行调试2、串口打印2.1、硬件连接图2.2、在init.c中添加串口初始化和打印函数2.3、在head.S中添加打印2.4、在nand.c中将全局变量修改为局部变量3、JTAG调试器3.1、原理3.1.1、硬件接法3.1.2、调试方式:软件断点和硬件断点3.2、体验JTAG调试3.2.1、连接3.2.2、基本命令3.2.3、设置断点1、硬件断点:调试裸板的方法有三种:点灯、串口、JTAG调试器原创 2021-02-05 11:46:54 · 286 阅读 · 0 评论 -
20_驱动调试方法
20_驱动调试方法文章目录20_驱动调试方法1、打印1.1、printk1.1.1、分析打印过程1.1.2、流程1.1.3、分析内核打印流程1.1.4、举例1.1.4.1、使用自定义打印函数:myprintk1.1.4.2、使用原先打印函数:printk1.1.4.3、不显示内核启动打印参数1.2、自制proc文件1.2.1、proc介绍1.2.2、写自己的proc驱动程序1th:搭建基本框架2th:添加读函数3th:完成 cat /proc/mymsg4th:完成环形缓冲区、myprintk函数5th:原创 2021-02-05 16:51:42 · 482 阅读 · 0 评论 -
21_应用调试方法
21_应用调试方法文章目录21_应用调试方法1、使用strace命令来跟踪系统调用1.1、体验strace简单操作1、解压缩:tar xjf strace-4.5.15.tar.bz22、开发板上装载驱动、使用strace跟踪系统调用:3、放入Ubuntu的/work/system中:4、执行:make5、再次make:出错6、再次make:出错7、再次make:成功8、重启开发板:reboot10、来创建modules:11、再来执行strace:12、来创建2.6.22.6目录:1.2、strace命原创 2021-02-05 16:57:23 · 392 阅读 · 0 评论 -
22_Linux 3.4.2 IIC驱动
22_Linux 3.4.2 IIC驱动文章目录22_Linux 3.4.2 IIC驱动1、框架介绍1.1、连接图1.2、IIC读写操作原理1.3、数据的双向传输1.4、2440的IIC控制器1.5、字符设备驱动框架1.6、IIC驱动框架1.7、IIC总线设备驱动模型2、框架编写代码2.1、定义一个i2c_board_info, 里面有:名字, 设备地址2.2、直接i2c_new_device, i2c_new_probed_device2.3、从用户空间创建设备2.4、前面的3种方法都要事先确定适配器(原创 2021-02-05 21:12:59 · 122 阅读 · 0 评论