- 博客(18)
- 资源 (38)
- 收藏
- 关注
原创 Linux嵌入式驱动开发18——I2C通信
文章目录I2C简介i2c-dev.hi2c.hTSC2007代码测试设备树I2C简介ls /dev这里拿我们的七寸LVDS屏幕的触摸芯片为例子,通过底座的原理图,可以看到LVDS使用了I2C3的接口i2c-dev.h打开文件/include/uapi/linux/i2c-dev.hi2c_rdwr_ioctl_data 结构体代码如下所示/* This is the structure as used in the I2C_RDWR ioctl call */struct i2
2021-02-28 21:47:16 2217 3
原创 Linux嵌入式驱动开发17——输入子系统
文章目录什么是输入子系统什么是输入子系统/* * Copyright (c) 1999-2002 Vojtech Pavlik * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by * the Free Software Foun
2021-02-28 10:18:03 609
原创 Linux嵌入式驱动开发16——按键消抖实验(内核定时器)
文章目录Linux内核定时器概念Linux内核定时器基础知识Linux内核定时器相关函数时间转换函数ms转换时钟节拍函数us转换时钟节拍函数宏DEFINE_TIMERadd_timer函数del_timer函数mod_timer函数示例代码按键消抖Linux内核定时器概念Linux内核定时器基础知识Linux内核定时器相关函数时间转换函数ms转换时钟节拍函数us转换时钟节拍函数宏DEFINE_TIMERadd_timer函数del_timer函数mod_tim
2021-02-25 21:18:29 1206
原创 Linux嵌入式驱动开发15——等待队列和工作队列
文章目录等待队列阻塞与非阻塞等待队列基础知识等待队列头等待队列相关函数init_waitqueue_head宏wait_event宏wait_event_interruptible宏wake_up宏wake_up_interruptible宏等待队列示例代码分析代码编写验证源码driver.capp.c工作队列什么是工作队列工作队列的工作原理工作队列相关APIDECLARE_WORK宏INIT_WORK宏schedule_work工作队列示例代码分析代码等待队列阻塞与非阻塞等待队列基础知识所以用
2021-02-25 16:32:41 790
原创 Linux嵌入式驱动开发14——中断的原理以及按键中断的实现(tasklet中断下文)
中断中断基础什么是中断?中断上下文Linux中断现在不可以嵌套设备书中的中断节点和相关函数设备树中的中断节点中断相关函数获取中断号相关函数申请中断函数中断处理函数free_irq函数按键中断实验(gpio_to_irq函数获取中断号)配置设备树驱动编写错误排查oops信息结果验证查看中断信息按键中断实验(interrupt-parent和interrupts属性信息获取中断号)中断基础什么是中断?中断上下文Linux中断现在不可以嵌套设备书中的中断节点和相关函数设备树中的中断节点设备
2021-02-24 21:38:52 2184
原创 Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)
文章目录什么是unlocked_ioctl接口?unlocked_ioctl和read/write函数有什么相同和不同unlocked_ioctl接口命令规则命令的合成宏与分解宏合成宏分解宏测试程序使用_IOmodule_leds.cMakefileapp.c结果使用_IOW使用_IOR实验结果完整代码module_leds.capp.c我们从平台总线模型,然后到pinctrl和gpio子系统,会发现步骤逐渐的规范,代码也逐渐的简单,也越来越能体会到linux屏蔽底层硬件的优势。在之前的代码中,在wri
2021-02-22 23:32:43 3870
原创 Linux嵌入式驱动开发12——pinctl和gpio子系统实践操作
文章目录什么是pinctrl和gpio子系统pinctel子系统功能什么是pinctrl和gpio子系统在学习单片机(比如51单片机和STM32)的时候,我们可以直接对单片机的寄存器进行操作,进而达到控制pin脚的目的。而Linux系统相较于一个单片机系统,要庞大而复杂得多,因此在Linux系统中我们不能直接对pin脚进行操作。Linux系统讲究驱动分层,pinctrl子系统和GPIO子系统就是驱动分层的产物。如果我们要操作pin脚,就必须要借助pinctrl子系统和GPIO子系统。pinctrl
2021-02-21 23:50:02 1765
原创 Linux嵌入式驱动开发11——平台总线模型修改为设备树实例
设备树平台总线模型平台总线模型driver.c代码匹配设备树节点dts设备树of_device_id结构体匹配compatible获取设备树节点信息方法一:直接获取结果验证方法二:简介获取分析代码结果验证物理地址到虚拟地址映射of_iomap验证结果平台总线模型之前学习了平台总线模型,对于平台总线模型使用了匹配device和driver的方法,到了设备树中,其实同理,也是需要把我们的driver文件和设备树的节点信息匹配,那么这里就直接使用之前的平台总线模型的测试代码进行改动。平台总线模型driver
2021-02-17 16:50:01 872
原创 Linux嵌入式驱动开发10——设备树开发详解
常用名词解释<1>DT:Device Tree设备树<2>FDT: Flattened Device Tree展开设备树开放固件,设备树起源于OF,所以我们在设备树中可以看到很多有of字母的函数<3>device tree source(dts)设备树代码<4>device tree source, includeDTB(dtsi)????更通用的设备树代码,也就是相同芯片但不同平台都可以使用的代码<5>device tree
2021-02-16 18:05:17 1484
原创 Linux嵌入式驱动开发09——平台总线详解及实战
文章目录平台总线模型介绍平台总线模型介绍什么是平台总线模型?平台总线模型也叫platform总线模型,是Linux内核虚拟出来的一条总线,不是真正的总线为什么会有平台总线模型?平台总线模型的优点怎么编写以平台总线模型设计的驱动?...
2021-02-08 16:43:29 1502
原创 Linux嵌入式uboot使用tftp网络启动加载zImage、dtb到内存,文件系统本地启动
文章目录前言1.进入uboot2.uboot基本内容helpprintenv3.bootcmdmmcboot4.tftp服务打开注意5.设置env环境变量电脑的本机IP开发板的从机IPzImagedtb6.手动下载 tftp zImage7.手动下载 tftp ${ftd_addr} ${fdt_file}8.手动 bootz ${loadaddr} - ${fdt_addr} 启动9.操作写入环境mmcbootboot10.saveenv恢复uboot默认设置前言对于uboot还是要好好的理解和学习,
2021-02-05 16:51:48 4386 1
原创 Linux嵌入式驱动开发08——字符设备(步步为营)
文章目录驱动模块传参传递普通的参数 char int传递数组字符设备和杂项设备的区别申请字符类设备号第一种 静态分配设备号dev_t类型第二种 动态分配注销设备号代码验证静态分配代码验证动态分配代码小结注册字符类设备注册杂项设备cdev结构体步骤一:定义一个cdev结构体步骤二:使用cdev_init函数初始化cdev结构体成员变量步骤三:使用cdev_add函数注册到内核步骤四:使用cdev_del函数注销代码设备节点自动创建设备节点步骤一:使用class_create函数创建一个class的类步骤二:使
2021-02-05 15:57:42 1061
原创 WSL运行慢,可能是没有把ubuntu挂载到WSL2(安装步骤)
文章目录启用“虚拟机平台”可选组件安装Ubuntu使用命令行设置要由 WSL 2 支持的发行版启用“虚拟机平台”可选组件以管理员身份打开 PowerShell 并运行:Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform或者直接在这里打开启用这些更改后,你需要重新启动计算机。安装Ubuntu使用命令行设置要由 WSL 2 支持的发行版管理员运行PowerShell查看版本wsl --se
2021-02-03 15:59:35 8391
原创 Linux嵌入式驱动开发07——GPIO驱动过程记录(飞凌开发板)
1. 在/arch/arm/boot/dts/imx6q-pinfunc.h查找/arch/arm/boot/dts打开头文件imx6q-pinfunc.h查找EIM_A17#define MX6QDL_PAD_EIM_A16__GPIO2_IO22 0x0f4 0x408 0x000 0x5 0x02. 在设备树配置文件中添加设备节点定义以及其引脚定义然后,我们要在设备树中添加引脚定义,打开imx6qdl-sabresd.dtsiimx6qdl-sab
2021-02-03 15:35:38 2105
原创 Linux嵌入式驱动开发06——第一个相对完整的驱动实践编写
设计目标使用杂项设备完成一个蜂鸣器的驱动完成一个上层测试应用应用要求:在上层应用中传入参数1为打开蜂鸣器,传入参数0为关闭蜂鸣器分析想要操作蜂鸣器,就要完成read函数 open函数,等等,我们做驱动,大部分情况下也都是使用这几个函数。要完成上层应用的测试,就需要应用层和内核层传输数据,copy_to_user和copy_from_user代码beep.c#include <linux/init.h>#include <linux/module.h>
2021-02-02 22:18:06 1242
原创 Linux嵌入式驱动开发05——物理地址到虚拟地址映射
文章目录裸机中的操作MMU裸机中的操作在单片机和裸机中,对于硬件是这样来操作的unsigned int *p = 0x123456789;*p = 0x987654321;但是这样的操作在Linux上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址转换成虚拟地址,因为Linux使能了MMU,所以我们在Linux上不能直接操作物理地址。MMU使能了...
2021-02-02 18:25:14 1263
原创 Linux嵌入式驱动开发04——应用层和内核层数据传输
文章目录应用层和内核层关系file_operations 文件集readwritepolliocontrolopenclose驱动例子file_operations modules代码编译 加载模块app代码编译验证小结应用层和内核层数据层传输read功能实践file_operations.capp.cwrite功能实践file_operations.capp.c对于Linux,一切都可以是文件文件为对应的操作有打开,关闭, 读写那么设备节点对应的操作有打开,关闭,读写如果我在应用层使用系统IO对
2021-02-02 15:08:08 1966
Linux嵌入式字符设备驱动模块(自动创建设备节点)modules_chrdev_auto
2021-02-08
Linux嵌入式飞凌开发板GPIO驱动模块modules_gpio_test
2021-02-08
Linux嵌入式应用层和内核层数据传输modules_file_operations
2021-02-08
Linux嵌入式驱动模块modules_helloworld
2021-02-08
STM32F407 HAL库实现EEPROM功能(实战项目中使用)
2020-11-16
STM32F407 HAL库添加标准库中的delay函数
2020-11-16
STM32F407 EC11旋转编码器驱动函数
2020-11-16
udp_echoserver DP83848网络服务函数库
2020-09-01
绝对简单好用的迪文串口屏串口通讯协议库(STM32)
2020-06-13
PIO_ESP32离线包
2022-05-15
13.带FIFO的ADDA实验
2022-04-03
12.DAC FIFO实验
2022-04-03
11.DDS ADDA测试工程文件
2022-04-03
10.DDS IP 数字波形合成
2022-04-03
Python疫情数据的爬虫和可视化显示(实现地图数据显示)
2021-02-10
Linux嵌入式驱动开发——平台总线实例modules_platform
2021-02-08
Linux嵌入式platform设备模块modules_platform_device
2021-02-08
Linux嵌入式platform驱动模块modules_platform_dirver
2021-02-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人