Linux设备驱动
文章平均质量分 91
阿基米东
本科毕业于国内某知名双非理工大学,当过校队球员,后自学编程,专注于嵌入式软件开发十余年,在物联网、机器人、汽车等领域拥有实战经验,也是多个开源项目的贡献者,对 Web 前后端、AI 技术略知一二。立志成为一名杰出的开源创客,让世界因我而变得更美好!
展开
-
printk 内核打印
printk 在内核源码中用来记录日志信息的函数,只能在内核源码范围内使用,用法类似于 printf 函数。printk 函数主要做两件事情:将信息记录到 log 中;调用控制台驱动来将信息输出。printk 介绍printk 将内核信息输出到内核信息缓冲区中,内核缓冲区在 kernel/printk/printk.c 中定义:static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);内核信息缓冲区是一个环形缓冲区(Ring Bu原创 2021-05-15 01:52:03 · 5562 阅读 · 0 评论 -
Linux 设备树(Device Tree)简介
DTS (device tree source) .dts文件是一种ASCII 文本格式的Device Tree描述,此文本格式非常人性化,适合人类的阅读习惯。基本上,在ARM Linux在,一个.dts文件对应一个ARM的machine,一般放置在内核的arch/arm/boot/dts/目录。由于一个SoC可能对应多个machine(一个SoC可以对应多个产品和电路板),势必这些.dts文原创 2016-07-28 11:21:14 · 5530 阅读 · 0 评论 -
EETI eGTouch Linux 驱动的安装与使用
最近在做一个控制终端项目,项目中用到五线电阻触摸屏,接口为RS232,采用台湾 EETI 触摸屏控制器。使用过程中遇到了一些麻烦,在这里记录一下。 首先简单说一下触摸屏原理,触摸屏附着在显示屏的表面,与显示屏配合使用,通过触摸产生模拟电信号,经过转换为数字信号后,由微处理器计算得出触摸点的坐标,从而得到操作者的意图并执行。在Linux系统中会通过输入子系统来管理,最终封装成事件上报到应用程序中原创 2016-11-12 03:22:27 · 17126 阅读 · 18 评论 -
Linux下查看串口是否可用的笨方法
最近尝试将一个网关程序从 VxWorks 平台移植到 Linux 平台。在串口方面遇到了一些问题,这里记录一下。 首先在 VxWorks 下,用 devs 命令查看设备:-> devsdrv name 0 /null 1 /tyCo/0 1 /tyCo/1 2 /pcConsole/0 2 /pcConsole/1 9 host: 4 /ram 11 /vio原创 2017-01-12 19:33:03 · 18512 阅读 · 4 评论 -
eGTouchD异常导致CPU占用率升高
发现系统运行过程中 CPU 占用率一直较高,影响部分应用程序的运行,并且周期性地产生一些进程,如 lsusb,使得 PID 不断增大。 于是,使用命令“ps -ef”抓取信息,截取一部分,如下: 可以看到那些 lsusb 是由 eGTouchD 触摸守护进程产生的,而我们使用的刚好是 usb 接口的电容触摸屏,所以可以确定:这起意外是由于触摸屏硬件没有正确连接或配置错误(/etc/eGTou原创 2017-06-26 22:58:03 · 1908 阅读 · 0 评论 -
Linux下读写FLASH驱动——MTD设备分析
最近在学习驱动读写flash的代码部分。经历了可笑的过程:开始我知道flash用通过spi口来读写。所以就到了driver/spi 下面看相关代码。发现有个spidev.c里面有read/write/ioctl等函数。而且还有一个davinci_spi_master.以为调用spi驱动的时候会首先调用到这里,于是就想怎么在上层应用里将spidev.c里open调用到就可以了。最后修改了一些地方...转载 2018-05-04 15:23:58 · 11308 阅读 · 0 评论 -
解读Datasheet系列:W25Q80DV(华邦 SPI Flash)
本文只对 W25Q80DV 数据手册的一部分进行解读,其涵盖的内容基本足够开发标准 SPI 接口的 Linux 驱动和裸板驱动。完整的 Datasheet 下载: https://download.csdn.net/download/luckydarcy/10443182一般描述 W25Q80DV(8M-bit)是一个串行 Flash 存储器。容量为 8M-bit(存储器被...原创 2018-06-13 17:12:37 · 20694 阅读 · 0 评论 -
解读Datasheet系列:M95080W(ST,SPI EEPROM)
本文只对 M95080W 数据手册的一部分进行解读,其涵盖的内容基本足够开发标准 SPI 接口的 EEPROM 驱动。完整的 Datasheet 下载: https://download.csdn.net/download/luckydarcy/10443186 M95160-x 和 M95080-x 是电可擦除非易失性存储器(EEPROM)设备,通过高速 SPI 兼容总线进...原创 2018-06-13 17:41:49 · 5246 阅读 · 4 评论 -
Linux 驱动 SPI Flash(W25Q80DV)
W25Q80DV 是 Winbond 的一款 SPI Flash,容量大小为 8M bit。如果还没看 W25Q80DV 的数据手册,赶紧去看! https://blog.csdn.net/lu_embedded/article/details/80682374 本文描述的是在 i.MX6q 硬件平台上添加 W25Q80DV 芯片(SPI 设备),Linux 内核版本为 kerne...原创 2018-06-13 19:21:27 · 17289 阅读 · 2 评论 -
Linux 驱动 SPI EEPROM(M95080W)
驱动模板,我这里是找的EEPROM的,它在drivers/misc目录下drivers/misc/eeprom/at25.c设备树节点 Documentation/devicetree/bindings/misc/at25.txt原创 2018-06-13 19:25:56 · 2782 阅读 · 1 评论 -
嵌入式文件系统基础知识
对于嵌入式系统来说,除了一个嵌入式内核之外,还需要一个嵌入式文件系统来管理和存储数据和程序。目前,嵌入式 Linux 操作系统支持很多种文件系统,具体使用哪种文件系统,需要根据存储介质、访问速度、存储容量等来选择。嵌入式文件系统 Linux 支持多种文件系统,包括 ext2、ext3、ext4、vfat、ntfs、iso9660、jffs、yaffs、romfs、cramfs 和 n...原创 2018-06-01 01:51:37 · 3097 阅读 · 0 评论 -
MYS-6ULX-IOT 开发板测评——支持 RTL8188 WiFi 模块
前面我们通过 bitbake core-image-minimal 构建了一个 MYS-6ULX-IOT 最小版本的 Linux 发行版。但是这个版本并不包含 RTL8188 WiFi 模块的驱动,因此我们还需要做一些工作,以便能够驱动该模块,实现无线网络通讯。ERROR: rtl8188eu-driver-0.1-r0 do_install: oe_runmake failedERRO...原创 2018-06-20 01:26:53 · 2831 阅读 · 0 评论 -
测试Linux内核input事件——getevent源码
下载地址:getevent.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdint.h>#include <dirent.h>#include <fcntl.h>#include <sys/ioctl.h>#include <sys/inotify.h>//#include <sys/limi原创 2016-11-11 02:07:20 · 6646 阅读 · 1 评论 -
Linux驱动开发要点
Linux驱动程序的开发与应用程序的开发有很大的区别,这些差别导致了编写Linux设备驱动程序与编写应用程序的本质区别。一、用户态和内核态 Linux操作系统分为用户态和内核态。内核态完成与硬件的交互,比如读写内存、将硬盘上的数据读取到内存等。驱动程序在底层与硬件交互,因此工作在内核态。用户态可以理解为上层的应用程序,可以是Java应用程序、Qt应用程序、Python应用程序等。Linux操作系统原创 2016-05-17 19:23:09 · 1712 阅读 · 1 评论 -
浅谈I2C总线
I2C(Inter Integrated Circuit,内部集成电路)总线是价格低廉却很有效的用以互连小规模嵌入式系统内的外设的网络。I2C 总线有时候也叫作 IIC,它已有20多年的历史了。I2C 接口和 SPI 接口的作用相同,但二者的使用方法有些不同。 I2C 总线用两根线来连接多支路总线中的多个设备。这种总线是双向、低速的,并与公共时钟同步。可以直接将一个设备接到 I2C 总原创 2016-05-30 09:45:54 · 9869 阅读 · 0 评论 -
Linux内核模块分析(module_init宏)
我们在学习Linux驱动开发时,首先需要了解Linux的模块化机制(module),但是module并不仅仅用于支撑驱动的加载和卸载。一个最简单的模块例子如下:// filename: HelloWorld.c#include <linux/module.h>#include <linux/init.h>static int hello_init(void){ printk(KERN_A原创 2016-05-17 03:25:13 · 12182 阅读 · 8 评论 -
Linux驱动开发——EXPORT_SYMBOL的使用
编写C程序时,如果需要使用某个外部的函数,通常的做法是 #include 包含该函数原型(prototype)的头文件,然后在程序中进行调用。经过编译链接后,程序就能顺利调用该函数。但是对于内核模块来说,这种方法并不适用,因此Linux内核提供了一种机制——内核模块符号表机制。即使用 EXPORT_SYMBOL 标签将模块中的函数对整个内核公开,因此导出的函数不用修改内核代码就可以被其他内核模块所调原创 2016-05-18 03:46:41 · 4611 阅读 · 0 评论 -
Linux字符设备驱动——初体验
以下是一个非常简单的Linux字符设备驱动 *^_^*【驱动程序myChrDrv.c】#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>static int myChrDrv_open(struct inode *inod, struct file *fp){ printk(KERN_INFO "原创 2016-05-18 23:05:04 · 1019 阅读 · 0 评论 -
浅谈CAN总线
在前面的《浅谈I2C总线》和《浅谈SPI总线》 中我们介绍的 I2C、SPI 总线多用于传输距离短、协议简单、数据量小、主要面向 IC(集成电路)间通信的“轻量级”场合。而 CAN 总线则不同,CAN 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。什么是 CAN 总线 CAN 是“Controller Area Network”的缩写,即“控制器局域网”,是一个 I原创 2016-06-01 15:00:50 · 9368 阅读 · 4 评论 -
ADC模数转换器工作原理及分类
现在的软件、无线电、数字图像采集都需要有高速的A/D采样保证有效性和精度,一般的测控系统也希望在精度上有所突破,人类数字化的浪潮推动了A/D转换器不断变革,而A/D转换器是人类实现数字化的先锋。A/D转换器发展了30多年,经历了多次的技术革新,从并行、逐次逼近型、积分型ADC,到近年来新发展起来的 ∑-Δ型 和 流水线型ADC,它们各有其优缺点,能满足不同的应用场合的使用。ADC的工作原理 模数转原创 2016-06-02 13:45:41 · 28292 阅读 · 0 评论 -
Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的使原创 2016-06-05 12:15:01 · 44318 阅读 · 1 评论 -
MPU6050 介绍
MPU6050 为全球首例集成六轴传感器的运动处理组件,内置了运动融合引擎,用于手持和桌面的应用程序、游戏控制器、体感遥控以及其他消费电子设备。它内置一个三轴 MEMS 陀螺仪、一个三轴 MEMS 加速度计、一个数字运动处理引擎(DMP)以及用于第三方的数字传感器接口的辅助 I2C 端口(常用于扩展磁力计)。当辅助 I2C 端口连接到一个三轴磁力计,MPU6050 能提供一个完整的九轴融合输出到其主原创 2016-06-13 15:34:22 · 17627 阅读 · 0 评论 -
ARM-Linux 设备树用法格式(Device Tree Usage)
参考:http://elinux.org/Device_Tree_Usage基本数据格式 设备树是一个简单的包含节点和属性的树结构。属性通过键值对形式描述,一个节点可以包含多个属性或子节点,一个简单的 .dts 格式设备树如下所示。/dts-v1/;/ { node1 { a-string-property = "A string"; a-string-翻译 2016-07-29 15:43:12 · 3010 阅读 · 0 评论 -
Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
一、概述 通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,GPIO 的操作接口包括 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。文件 IO 方式操作 GPIO,使用到原创 2016-11-07 03:00:42 · 56410 阅读 · 9 评论 -
关于触摸屏的一些硬件知识
一、概述 如今很多的电子设备,不论是工业级还是消费级都需要人机界面,例如车载导航仪、广告一体机、POS机、平板电脑、手持终端仪器、智能墙壁开关、医疗美容仪器等,都配备了触控显示器。因此,我们有必要了解一些关于触摸屏的基本知识。二、电阻屏与电容屏电阻触屏俗称“软屏”,多用于Windows Mobile系统的手机; 电容触屏俗称“硬屏”,如iPhone和G1等机器采用这种屏质的。 1、室内可视效果两原创 2016-11-07 10:06:29 · 7957 阅读 · 0 评论 -
浅谈SPI总线
串行外围设备接口(Serial Peripheral Interface,SPI)是由 Motorola 公司开发的,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI 有时候也被称为4线接口)。这种接口可以用来连接存储器、AD/DA转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。目前支持 SPI 的元件很多,并且还在不断增加。 这里需要提一下,原创 2016-05-27 22:14:14 · 5515 阅读 · 0 评论