
Linux驱动
文章平均质量分 62
Linux驱动
刘仕豪
操作系统行业从业者,开源精神,希望可以推动科技进步。
展开
-
linux的initcall机制--应用层用链接脚本实现
initcall机制的由来我们都知道,linux对驱动程序提供静态编译进内核和动态加载两种方式,当我们试图将一个驱动程序编译进内核时,开发者通常提供一个xxx_init()函数接口以启动这个驱动程序同时提供某些服务。那么,根据常识来说,这个xxx_init()函数肯定是要在系统启动的某个时候被调用,才能启动这个驱动程序。最简单直观地做法就是:开发者试图添加一个驱动程序时,在内核启动init程序的某个地方直接添加调用自己驱动程序的xxx_init()函数,在内核启动时自然会调用到这个程序。但是,回头一原创 2022-03-04 17:21:45 · 400 阅读 · 0 评论 -
最简单的字符设备驱动
1.需要先创建设备节点mknod /dev/xxx c 111 0创建一个名字为xxx的字符设备, c表示字符设备, 主设备号是111, 此设备号是0。2. 驱动程序#include <linux/fs.h>#include <linux/init.h>#include <linux/module.h>static int first_drv_open(struct inode *inodep, struct file *filep){ pr原创 2021-10-05 22:56:02 · 263 阅读 · 0 评论 -
Linux驱动程序中的platform总线详解
Linux驱动程序中的platform总线详解 在linux2.6设备模型中,关心总线,设备,驱动这三个实体,总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动。相反,在系统每注册一个驱动的时候,寻找与之匹配的设备,匹配是由总线来完成的。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这原创 2015-12-05 16:18:19 · 1710 阅读 · 0 评论 -
GPIO及中断API函数
#include // 标准 GPIO_APIintgpio_request(unsigned gpio, const char *label);获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port,非空的lables指针有助于诊断。主要是告诉内核这地址被占用了。当其它地方调用同一地址的gpio_request就会报告错误,该地址已被申请。在/proc原创 2015-12-07 12:10:41 · 755 阅读 · 0 评论 -
利用linux 内核所提供的input子系统编写字符设备驱动的步骤
利用linux 内核所提供的input子系统编写字符设备驱动的步骤:包含头文件:#include 涉及核心接口体:struct input_dev { ......... unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //用于描述设备所产生数据的事件分类 unsigned long keybit[BITS_TO_原创 2015-11-21 18:10:41 · 953 阅读 · 0 评论 -
SIM900A(GSM模块)学习
1:RS232介绍2:sim900a基本是通过串口发送AT指令来实现控制,所以使用这个模块只需要电源和串口就可以了。原创 2016-05-16 17:22:54 · 13646 阅读 · 2 评论 -
BOA服务器的搭建以及移植到开发板
Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。下面给大家介绍一下Boa服务器移植的具体操作步骤,希望能够有帮助。环境主机:ubuntu8.10原创 2016-04-28 13:31:40 · 806 阅读 · 0 评论 -
交叉编译环境-搭建开发环境
一、安装ubuntu二、修改源# sudo vi /etc/apt/sources.listdeb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu/或直接在系统->系统管理->软件源选择软件源三、更新源列表# sudo apt-get update四、安装中文环境 :系统->系统原创 2016-04-28 13:39:13 · 786 阅读 · 0 评论 -
编译驱动到内核的两种方式
编译驱动模块有两种方法可以编译自己写的驱动程序。第一种方法:直接加入内核1. 将驱动程序放入内核相应的驱动文件夹,例如名字为my_led.c2. 修改此驱动目录下的Kconfig文件,加入对该驱动文件的配置选项:config MY_LEDbool "S3C2410 LED Driver"depens on ARCH_S3C2410helpLED driver for...原创 2015-11-23 17:35:49 · 6212 阅读 · 0 评论 -
怎样写基于GPIO子系统的外接传感器的驱动
将tiny4412的开发板外接人体感应传感器1.先读懂传感器的电器特性,以及引脚的功能。 一般会有三个引脚, 接地 5V电压 以及输出信号(OUT)2.链接好引脚到开发板上,一般OUT链接开发板的引脚时注意查看芯片手册。 比如说链接到GPA0(3)引脚上 就得设置GPA0(3)的引脚功能,用GPIO的宏实现,不用对具体的寄存器引脚进行操作。3....原创 2015-12-02 16:15:16 · 1904 阅读 · 1 评论 -
linux内核编译 menuconfig详解
内核版本:2.6.32根据版本不同可能配置文件也稍微不同。[*]Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。这个选项同样会让一些老的驱动的可用。如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单原创 2016-08-26 10:50:43 · 1726 阅读 · 0 评论 -
Linux内核驱动之read和write
读和写方法都进行类似的任务, 可以同时介绍它们:ssize_t read(struct file *filp, char __user *buff, size_t count, loff_t *offp);ssize_t write(struct file *filp, const char __user *buff, size_t count, loff_t *offp);对于转载 2015-12-03 11:41:28 · 4875 阅读 · 0 评论 -
ARM Linux开发环境建立总结!
目的:把ARM linux的交叉开发环境,kernel, filesystem, bootloder安装,并配置,使其可以编译bootloder, kernel, 可以nfs更新文件系统;资源:代码:arm-linux-toolchains.tgzmatrix5-kernel-v5.5.tgzvivi.tar.gzJfla原创 2016-12-26 17:07:13 · 712 阅读 · 0 评论 -
tiny4412安卓驱动开发
避过的坑编译linux3.0版本内核时,报错empty.o库报错时,缺少32位兼容库解决办法:sudo apt-get updatesudo apt-get install libgtk2.0-0:i386 libxtst6:i386 gtk2-engines-murrine:i386 lib32stdc++6 libxt6:i386 libdbus-glib-1-2:i386 libas...原创 2019-01-27 20:34:59 · 339 阅读 · 0 评论 -
gpio_direction_output 与 gpio_set_value
gpio_direction_output 与 gpio_set_valuegpio_set_value(port_num,0/1) 一般只是在这个GPIO口的寄存器上写上某个值,至于这个端口是否设置为输出,它就管不了!而gpio_direction_output (port_num,0/1),在某个GPIO口写上某个值之后,还会把这个端口设置为输出模式。因此,有人也许就会建议,原创 2015-12-03 10:45:16 · 1890 阅读 · 0 评论 -
Linux内核驱动之GPIO子系统(一)GPIO的使用
一概述Linux内核中gpio是最简单,最常用的资源(和interrupt,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用原创 2015-12-03 10:58:44 · 1028 阅读 · 0 评论 -
linux驱动入门之LCD驱动
硬件环境:tq2440 4.3 LCD 软件环境:Fedora17 arm-linux-gcc-4.3.2内核版本:2.6.39以韦东山老师视频为基础,加入自己的实践1.基础知识(转载,原作者不详,感谢先):1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会原创 2015-11-30 17:38:48 · 1632 阅读 · 2 评论 -
linux设备模型之总线,设备,驱动模型
驱动模型:为了方便维护设备和驱动,内核抽象出三个类:总线 struct bus_type;设备 struct device;驱动 struct device_driver;这里的总线是抽象的该念总线,逻辑层面的,只是为了管理匹配向内核注册并和总线关联的设备和驱动的,匹配规则决定于总线。-----------------------------------原创 2015-11-23 10:36:20 · 571 阅读 · 0 评论 -
并发和竞态
app:互斥量:pthread_mutex_t mutex;pthread_mutex_init(&mutex, NULL);pthread_mutex_lock(&mutex);pthread_mutex_trylock(&mutex);pthread_mutex_unlock(&mutex);自旋锁:pthread_spin_t spin;p原创 2015-11-21 18:11:29 · 485 阅读 · 0 评论 -
以杂项设备驱动的方法注册字符设备驱动
以杂项设备驱动的方法注册字符设备驱动涉及头文件: #include 一个杂项设备对应的结构类型:struct miscdevice { int minor; //次设备号 const char *name; //设备名称 const struct file_operations *fops; //驱动函数集原创 2015-11-23 10:31:06 · 474 阅读 · 0 评论 -
驱动模型
驱动模型:为了方便维护设备和驱动,内核抽象出三个类:总线 struct bus_type;设备 struct device;驱动 struct device_driver;这里的总线是抽象的该念总线,逻辑层面的,只是为了管理匹配向内核注册并和总线关联的设备和驱动的,匹配规则决定于总线。-----------------------------------原创 2015-11-21 18:09:54 · 545 阅读 · 0 评论 -
在驱动中定义中断
1. 中断 涉及头文件: #include 中断的注册 int request_irq( unsigned int irq, irq_handler_t handler,原创 2015-11-23 10:23:13 · 766 阅读 · 0 评论 -
基于 platform 总线的设备驱动编写模式:
基于 platform 总线的设备驱动编写模式:platform总线是内核注册好的用于管理设备及驱动的一种模式。其总线对应的类型即使,struct bus_type.总线实现好了匹配规则,内核对于往platform总线上注册的设备及驱动对应的类型做了抽象。platform总线上要注册的设备类:struct platform_device {cons原创 2015-11-21 18:08:59 · 1234 阅读 · 0 评论 -
内核定时器:
内核定时器: 未来的某个时间点执行提前设置的某个任务函数。 涉及到的核心头文件: #include 涉及到的结构体: struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */原创 2015-11-21 18:14:03 · 549 阅读 · 0 评论 -
编写Linux标准的PWM驱动
编写Linux标准的PWM驱动,需要定义一个结构体 struct pwm_device ,实现五个个PWM函数(include/linux/pwm.h),如下所示:structpwm_device; /**pwm_request-requestaPWMdevice*/structpwm_device*pwm_request(int原创 2015-11-23 15:25:13 · 4480 阅读 · 0 评论 -
PWM控制蜂鸣器驱动详细概念及代码
一、S3C2440PWM定时器概述PWM ( Pulse Width Modulation ) —— 脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域 。S3C2440A 有5个16位定时器。其中定时器 0、1、2 和3具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器0还包含用于大电原创 2015-11-23 16:17:36 · 10099 阅读 · 0 评论 -
字符设备驱动编写方法
字符设备驱动编写方法1.标准字符设备驱动 a.注册设备号 如 if(key_major) /*静态注册*/ err = register_chrdev_region(devno, 1, DEVICE_NAME); else { /*动态注册*/ err = alloc_chrdev_region(&devno原创 2015-11-21 15:07:46 · 459 阅读 · 0 评论 -
输入设备驱动之按键设备驱动_笔记
利用linux 内核所提供的input子系统编写字符设备驱动的步骤:包含头文件:#include 涉及核心接口体:struct input_dev { ......... unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //用于描述设备所产生数据的事件分类 unsigned long ke原创 2015-11-19 15:54:48 · 659 阅读 · 0 评论 -
中断
软件中断、硬件中断及其相关概念中断中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,再返回被中断程序的间断处,继续执行原程序。 硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);原创 2015-11-21 16:41:50 · 1573 阅读 · 0 评论 -
I2C总线简介
I2C总线简介1.概述:I²C是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or "eye-two-cee", 它是一种两线接口。I²C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL)。SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPRO原创 2015-11-28 17:39:04 · 568 阅读 · 0 评论 -
输入设备驱动之按键设备驱动
Linux输入子系统就是一个基于分层模式的系统,其基本的层次分解如下图所示。 在图中我们可以发现输入子系统主要包括三个部分设备驱动层(input driver)、核心层(input core)和输入事件驱动层。输入子系统的划分使得输入设备的驱动程序设计越来越简单,但是其中的思想采用我们学习的重点和难点。Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子原创 2015-11-19 14:34:14 · 694 阅读 · 0 评论