
Linux驱动编程
别忘了坚持
这个作者很懒,什么都没留下…
展开
-
make menuconfig、Makefile、Kconfig和.config和 LED驱动案例
Linux内核源码文件繁多,搞不清Makefile、Kconfig、.config间的关系,不了解内核编译体系,编译修改内核有问题无从下手,自己写的驱动不知道怎么编进内核,不知道怎么配置内核,这些问题都和Makefile、Kconfig、.config有关,下面简单谈谈Makefile、Kconfig和.config。三者的作用:1.deconfig 文件:一般由平台厂商提供,内核编译用做.config的参考,注意:如果,缺少该文件,无法进行编译。文件位于:/kernel/…/arch/arm/co原创 2020-12-29 17:44:21 · 785 阅读 · 0 评论 -
Makefile之Linux内核模块单独编译
前些天写一个驱动模块。竟然写内核模块Makefile时出了问题,于是将其总结下来,下次再用时拿过来改下就行了。#General Purpose Makefile for Linux Kernel module by guoqingboKERN_DIR = /home/gqb/development/linux-kernel-2.6.37#KERN_DIR = /usr/src/$(shell uname -r)#KERN_DIR = /lib/modules/$(shell uname -r)/b原创 2020-12-21 17:29:01 · 1345 阅读 · 0 评论 -
linux之V4L2摄像头应用流程
对于v4l2,上次是在调试收音机驱动的时候用过,其他也就只是用i2c配置一些寄存器就可以了。那时只是粗粗的了解了,把收音机当作v4l2的设备后会在/dev目录下生成一个radio的节点。然后就可以操作了。后来就没怎么接触了。这周,需要调试下usb的摄像头。因为有问题,所以就要跟进,于是也就要开始学习下linux的v4l2了。看到一篇很不错的文章,下面参考这篇文章,加上自己的一些见解,做一些总结把。 Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是转载 2020-11-21 16:15:58 · 383 阅读 · 0 评论 -
Linux-LCD驱动实现
一、帧缓冲设备驱动在Linux子系统中的结构:二、帧缓冲相关的重要数据结构 从帧缓冲设备驱动程序结构 看,该驱动主要跟fb_info结构体有关,该结构体记录了帧缓冲设备的全部信息,包括设备的设置参数、状态以及对底层硬件操作的函数指针。在Linux 中,帧缓冲设备最关键的一个数据结构体是fb_info,fb_info中包括了关于帧缓冲设备属性和操作的完整描述。每一个帧缓冲设备都必须对应一个fb_info,fb_info在/linux/fb.h中的定义如下:(只列出重要的一些)2.1 fb_info结构转载 2020-11-21 15:55:59 · 524 阅读 · 0 评论 -
Linux-LCD 驱动程序概述
入局:应用程序是如何操控LCD显示器的? 我们知道应用程序的调用接口,无非open/read/write…然后通过驱动程序最终作用到硬件设备上。以字符设备为例,对于驱动的开发者,实现了应用程序调用的驱动层中与之相匹配的drv_open/drv_read/drv_write函数,为应用层序提供了操作实际硬件设备的通道。那么,对于LCD驱动程序又是如何?先来了解下两个非常重要的概念。一、LCD控制器 LCD控制器的功能是控制驱动信号,进而驱动LCD。用户只需要通过读写一系列的寄存器,完成配置和显示驱动。在转载 2020-11-17 11:47:28 · 290 阅读 · 0 评论 -
Linux - 驱动编程 之 上报按键值(案例)
此部分转于:https://blog.youkuaiyun.com/bhniunan/article/details/104088763在linux系统中,每个进程的运行空间分为内核空间和用户空间。之所以划分成这两个空间,是因为在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。所以,CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通应用程序只能使用那些不会造原创 2020-11-11 17:12:57 · 896 阅读 · 0 评论 -
Linux - 驱动开发 之 内核的gpiolib学习
一、gpiolib源码分析1-------gpiolib的建立过程(厂家提供的库)找到目标函数在arch/arm/mach-s5pv210/gpiolib.c ----> s5pv210_gpiolib_initsmdkc110_map_io(); s5pv210_gpiolib_init(); 这个函数就是我们gpiolib初始化的函数 1、struct s3c_gpio_chip (1)这个结构体是一个GPIO端口的抽象,这个结构体的一个变量就可以完全的描述一个IO端口。 (2转载 2020-11-11 16:52:22 · 404 阅读 · 0 评论 -
linux - 驱动开发 之 GPIO驱动框架
前言 GPIO驱动是Linux驱动开发中最基础、但却是很常用、很重要的驱动。比如你要点亮一个LED灯、键盘扫描、输出高低电平等等。而Linux内核的强大之处在于对最底层的GPIO硬件操作层的基础上封装了一些统一的GPIO操作接口,也就是所谓的GPIO驱动框架。这样开发人员可以调用这些接口去操作设备的IO口,不需要担心硬件平台的不同导致IO口的不同。 今天,我主要讲的就是如何使用Linux内核封装好的GPIO接口函数,去操作不同平台的硬件GPIO库(每个平台厂家都会提供打包好的GPIO操作库)。概述转载 2020-11-11 16:06:32 · 1318 阅读 · 0 评论 -
Linux - 驱动 之 字符设备
1.Linux设备驱动分类按管理的设备硬件来分字符设备按字节流访问,能够顺序访问,也能够指定位置访问按键 串口 终端 触摸屏 LCD等块设备在Unix系统下,块设备按一定的数据块进行访问,数据块为512bytes 1K等在Linux下,块设备既可以按数据块的方式访问,也可以安字节流访问, 他和字符设备的区别在于linux系统中描述块设备和字符设备的数据结构 和操作方法是不一样的网络设备网卡,网络设备一般要结合tcp/ip协议栈来实现2.字符设备驱动驱动程序的作用:1.管理对应的硬件原创 2020-11-04 10:27:12 · 648 阅读 · 0 评论 -
Linux - 内核模块
一、linux内核模块编程特点:1.不能使用C库和C标准头文件2.必须使用GNU规范3.没有内存保护机制4.不能处理浮点运算5.注意同步和并发的问题6.注意可移植性二、加载函数和卸载函数格式加载函数int xxx(void) //函数名任意定义,可以是main 也可以是是 init{ return 0;//成功 return 负值;//失败} 卸载函数void yyy(void){ }重点:使用module_init和module_exit修饰,告诉内核原创 2020-11-03 10:00:25 · 484 阅读 · 1 评论