自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学习记录笔记

专为自己学习记录所用,脑子是好脑子,可是经不住时间,所以需要一一记录

  • 博客(37)
  • 资源 (1)
  • 论坛 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 wm8960驱动:裸机代码研读

网上已经有基本的wm8960驱动的demo。可以播放特定频率的wav文件。这个程序很具有参考性。 我们知道,初始化wm8960,需要大概的步骤如下: 1.初始化I2C总线,通过I2C接口给wm8960下配置命令。 2.将声音文件加载到memory中 3.初始化I2S,并把内存中的数据通过I2S总线送给wm8960,从而wm8960通过解码播放出声音 我们大概来看一下,这个代码的实现过程:v

2017-01-08 21:26:21 3604 1

原创 mmap函数分析使用实例

mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。 gcc man中的描述 mmap() creates a new mapping in the virtual address space of the call‐ing process. The starting

2016-12-17 15:09:06 374

原创 linux驱动开发: wm8960 codec代码分析

关于alsa架构已经啃了好久好久,但是也卡了好久好久。难说皮毛到底有看懂多少,不管,我们先来啃wm8960 codec的驱动代码:必要相关函数说明: ////////////////////////////////////////////////////////////////////////////1.#define SOC_ENUM_SINGLE(xreg, xshift, xmax, xte

2016-12-09 23:54:05 4803

原创 内核资料:ALSA资料

内核资料好多好多,一个人摸索真的很难。 最近又卡住了,没办法向前进了。声卡,资料真的好多。没有一个系统的视频或者学习资料真的感觉无从下手。只能用时间耗了,先堆一些枯燥的资料。等我哪天茅塞顿开了,再来写心得吧!Master clock:每一个音频子系统都需要一个主时钟,通常被称作MCLK或者SYSCLK,主时钟可以来自外部晶振,锁相环或者CPU系统时钟.某些时钟源是 可以配置的,通常为了省电会降低

2016-12-03 13:03:28 786

原创 linux内核学习:内核链表

数据结构是编程中很重要的一部分.链表是一种数据结构,编程中,我们为了实现链表这种数据结构,常常需要完成他的初始化,添加,遍历,添加,删除等功能.针对n多种链表来讲,除了内容不同外,但这些 添加,删除,遍历操作其实都是可以写成公共代码的,不必每次需要实现一种链表,就重新写一遍添加,删除,遍历的操作,太浪费时间和经历,且容易出错.幸运的是,内核有帮我们实现了这种功能,我们只需安心服用便可!#includ

2016-11-26 19:27:58 313

原创 linux内核札记

1)内核的主要组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信. 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程.内存管理单元(MMU):允许多个进程安全的共享主内存区域.虚拟文件系统(VFS):隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口网络接口(NET):提供了对各种网络标准的存取和各种网络硬件的支持进程间通信(

2016-11-26 18:57:45 414

原创 ubuntu下开发环境配置:nfs服务器的搭建

我的开发板用的是NFS文件系统。在研发阶段,可能绝大多数也都喜欢用NFS文件系统。一个串口打印内核信息,一根网线可以让开发板读取主机的NFS文件系统,在开发阶段很是常用. 1.安装 sudo apt-get install nfs-kernel-server 2.给你的nfs服务期创建一个专用文件夹 我的是在/opt/nfs/rootfs 3.配置sudo gedit /etc/expo

2016-11-22 21:12:36 256

原创 ubuntu下开发环境配置:tftp服务器的搭建

电脑重装了,因为是双系统,非虚拟机开发,所以以前的开发环境丢失了。重新配置时还是百度,既然又重新开始了,那就记录下来. 1.apt-get install tftp-hpa tftpd-hpa 前者是客户端,后者是服务器端。 2.安装完毕后,配置服务器参数。 3.重启服务 sudo service tftpd-hpa restart4.本机测试 开发板使用tftp时,首先在uboot下确

2016-11-22 20:03:32 274

原创 linux驱动开发:mma7660 sensor的配置

上一章节有介绍过这颗IC,是freescale的一个低精度的重力传感器吧。我认为,可以区分8个方向。x,y,z三轴。精度6bit,采样值范围[-32,+32].还有测量shake和tap等数据。 这边的驱动没有自己写.只是有看懂它原先的驱动是如何实现和工作的. 它的驱动引入了一个 hwmon device的注册。具体的作用是在sys/class/hwmon下生成了一个目录hwmonx。 它可以

2016-11-15 19:56:36 1369

原创 linux驱动开发:重力传感器的了解

板子上有一颗IC:MMA7660FC,我们来试着读一下它的芯片手册,当然读的目的是为了驱动它。这也是我们驱动开发的目的:拿过来一块未知的IC,去读它的芯片手册,支持那种通讯协议,然后编码让它动起来。he sensor has three power modes: Off Mode, Standby Mode, and Active Mode to offer the customer differe

2016-11-13 16:45:07 1092

原创 linux驱动开发:串口协议

串口的重要性不言而喻。我们可以通过串口来打印 debug的信息,以此来定位代码的错误位置。 我们也可以通过串口来向内核传入命令,可以说它是开发人员常用的一个交互终端。当进行驱动开发时,总是需要用到串口来显示内核的打印信息。对于开发来说,很是重要。串口:属于串行通信的一种,与之对应的是并行通信。串行通信就是数据的各位在同一根线上顺序依次按位传输。同步通信:要求发生时钟和接收时钟保持严格同步。发送方先

2016-11-13 13:14:26 1247

原创 linux驱动开发:ft5x06的touch screen的IIC驱动程序编写

触摸屏属于一个标注的input dev.所以我们按照输入子系统的流程来实现驱动开发。 实际板子与CTPM的通讯连接基于IIC总线,所以我们需要把驱动挂载到IIC总线下面去,也就是注册IIC驱动到iic_core.c中去。 实例化一个IIC设备有多种方式,仿照上一次的24cxx IIC设备的创建,我们来实现ft5x06IIC设备的创建。 因实际板子上TS IC使用的是ft5x02,所以先实例化设

2016-11-13 11:05:40 2175

原创 linux驱动开发:MT协议

因为需要做ctp的驱动,然而又需要学习其他衍生的东西。 因为我们的ctp是支持MT的,所以我们需要研究下多点触摸协议.这部分的资料网上有,但原汁原味的资料还是在内核目录下 doc/input/mt_touch下面。协议分为A,B两类。 For devices handling anonymous contacts (type A), the protocoldescribes how to sen

2016-11-13 00:04:09 981

原创 linux驱动开发:触摸屏的认识(FT5x06 IC的分析)

我们板子上的触摸屏是电容屏,当然也有电阻屏。不过目前绝大多数是电容屏。 原理:按下某个位置,得到某个位置的特定电阻/电容值,电阻屏(可能通过好几个adc去捕获这些电阻值),因为平面上一个点至少需要a(x,y)表示.拆开LCD屏的板子,找到触摸屏那块的主控IC:FT5206.所以我们现在研究这颗IC的SPEC就好了.IIC总线 INT脚 wake up脚CTP – Capacitive touc

2016-11-08 21:47:24 5493

原创 linux驱动开发:用户空间操作LCD显示简单的图片

上一章我们简单介绍了LCD的一些基本原理。当然更深奥的还有,比如gamma,dither,HUS,sat.OSD等等.我们知道我们是用framebuffer来实现显示的.显存:framebuffer.由DDRAM中划去一部分内存供显存使用. 从而操作lcd相当于操作显存. lcd控制器(s5pv210里面有lcd控制器)会周期的获取framebuffer中的数据。经过处理丢给 显示屏的lcd 驱

2016-11-07 23:46:20 2571

原创 linux驱动开发:lcd模块简介

作为人机交互的display界面,lcd屏幕一直扮演着很重要的角色。试想一下,如果你的电子设备没有显示屏,那么人机交互将变成什么样的?比如说手机~ 一般情况,LCD屏需要驱动器和控制器。拿51单片机入门的lcd1602来讲,他本身就集成了驱动电路。 我们可以根据它的spec来完成单片机部分的控制部分,你可以把这部分理解为控制器。接下来回到主题:我手上的开发板 s5pv210.IC本身集成了LCD

2016-11-07 21:18:44 540

原创 c语言常用关键字 static,const,extern...

STATIC关键字 static关键字内核中到处都在用。还有以前上课时老师讲的goto尽量不用,结果内核中也大量使用~static 修饰函数 当修饰函数时,代表这个函数的可见域为当前文件。在其他文件中想访问此函数则不行了. 这样的意义在于可以很好的解决不同文件中同名函数的问题,让此函数变得当前文件私有,其他文件不可见.static int func(void){}static 修饰变量 1

2016-11-06 21:11:56 465

原创 安装linux内核函数的mandocs.

本来想用man来查找下内核中的函数,结果发现搜不到,然后网上搜了下,找到了方法。 在内核源码根目录下执行 make installmandocs 然后提示缺少xmlto依赖库,安装它,不过好像很大. 安装完再执行 make installmandocs.效果: 之前是找不到此函数的,现在可以用man手册查到了.

2016-11-06 20:49:39 943

原创 linux man手册使用说明

man手册使用说明: man num func其中,num的含义如下: 1:可执行程序或 shell 命令 2: 系统调用(内核提供的函数) 3:库调用(程序库中的函数) 4:特殊文件(通常位于 /dev) 5:文件格式和规范,如/etc/passwd 6:游戏 7:杂项(包括宏包和规范,如man(7),groff(7)) 8:系统管理命令(通常只针对root 用户) 9:内核例

2016-11-06 19:11:49 960

原创 linux驱动开发常用命令

1.READ#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);描述 read() 从文件描述符 fd 中读取 count 字节的数据并放入从 buf 开始的缓冲区中. 如果 count 为零,read()返回0,不执行其他任何操作. 如果 count 大于SSIZE_MAX,那么结果将不可预料. 返回值 成功

2016-11-06 18:36:13 308

原创 linux驱动开发:24cxx一次读、写多个字节的编程实现

上篇文章实现了了24cxx eeprom驱动的编写,但是其实很鸡肋,很难用。当我一次性需要写入/读出多个字节时,这一切变的很难操作.那么本篇文章来实现更进阶的一次读取/写入多个数据的操作.我们的驱动列表里面使同时支持24c02,24c04,24c08.只做简单的功能实现.不考虑并发,竟态的状况.所以也不加锁,基本不做出错处理.只是写一个最简单的框架以供参考.根据24cxx的spec,我们可以知道:

2016-11-06 13:13:03 989

原创 linux驱动开发:24cxx设备的操作一

24cxx驱动编程. 1.首先实例化一个i2c设备. 2.编写对应的i2c设备驱动. 3.通过match规则匹配设备和驱动。对应驱动会调用自己的probe函数完成初始化 4.i2c设备的操作实现,write和read.1)如何实例化一个i2c设备 在\Documentation\i2c\instantiating-devices文件中介绍了4种方法 实例化一个IIC设备 Method

2016-11-03 14:03:55 512

原创 linux驱动开发:IIC协议的了解

IIC协议介绍: 作为一种应用很广的串行总线协议,这个是需要我们很认真去了解的。绝大多数的驱动开发中均少不了IIC驱动. 我手上的板子有一个eeprom和touch screen都是IIC接口。现在我们先来研究IIC协议以及ac24cxx的spec研读. 为下一章的驱动编写做准备.这里我们拿24cxx的datasheet来说明.IIC协议:由一个SDA信号和一个SCL信号组成.主控mcu作为主

2016-11-03 12:40:17 491

原创 linux驱动开发:了解网卡的相关函数和结构

linux四层概念模型:应用层,传输层,网际层,网络接口层 网卡设备驱动工作与网络接口层what we carenet_device{ name base_addr//IO 基地址 irq //中断号 net_device_ops { netdev_tx_t (*ndo_start_xmit) (struct sk_buff *sk

2016-11-01 15:25:28 173

原创 linux驱动开发:总线,设备,驱动三要素

平台总线和IIC,SPI,IIS都是总线类型,一般的,总线下,挂载对应的设备。但实际上,设备要正常运转,是需要驱动程序来未知提供驱动的。所以linux内核也把驱动挂载在对应的总线下。总线,驱动,设备三者缺一不可. 相应的,内核衍生出来的平台总线,那么便衍生出来了平台设备和凭条驱动。他们均有自己的专属函数来注册,注销。这个是成一套体系结构的.在以后的驱动开发中,很是常见与重要.一)内核中的总线,设备

2016-10-31 00:04:31 673

原创 linux驱动开发:平台设备驱动框架

有一定的mcu51基础或者其他类似芯片基础的人大概都听说过IIC,SPI,IIS,USB,PCIe,CAN等总线。这些都是实实在在存在的总线。上面可以挂接遵循其协议的一个或多个设备。 linux内核自己虚拟地构建了一个称作platform的平台总线,对应的可以在其下面挂载平台设备和平台驱动。这是一条虚拟的总线。 紧接上上一篇的input子系统,我们将上一个例子做成挂载在平台总线下的设备和驱动,以

2016-10-30 23:40:04 459

原创 linux驱动开发:input子系统三

linux输入设备的总结: 上一篇文章中,用户空间可以open 我们的event1设备文件,也可以read我们的设备文件。可是我们的代码里面并没有实现read 和 open函数。但是依旧可以抓到数据。这也就是说内核帮我们做好了很多input设备公共的操作函数。我们只要按照特定的框架去开发就可以了。具体的一些相关的代码和structure有贴出来,以防止以后忘记。在这里做个备份.1) evdev

2016-10-27 21:26:13 235

原创 linux驱动开发:input子系统一

input子系统开发:按键是一种标准的输入设备,实验以按键来分析,实现简单的input子系统.未完成.实验代码:实现一个按键的功能#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/device.h>#include <linu

2016-10-26 01:06:24 279

原创 平台,设备,驱动

继上次研究ADC驱动,开始接触platform这个东西。不过坦白讲,还是理解的不是很透彻。所以准备今天爬一次code。以加深这方面的理解。 我们来看一个led灯的驱动是如何用平台总线来实现的:struct gpio_led { const char *name; const char *default_trigger;//触发方式 unsigned gpio;

2016-09-11 18:43:13 349

原创 linux驱动开发:input子系统二

输入子系统:linux内核中将所有输入设备归为一个类:input子系统。里面实现了几乎所有输入设备的公共操作接口,相当于内核给我们搭建了一个输入子系统的框架,我们用它的框架开发驱动,会变得非常简单。因为一些公共的函数内核已经帮我们实现好了,我们只需要实现不同输入设备间的差异部分即可。上篇文章 记录了在输入子系统的框架下实现一个按键的上报功能。一个输入设备,上报一种按键事件。那么一个输入设备,也是可以

2016-09-01 10:22:57 288

原创 linux驱动开发:按键2

上篇文章中断按键的驱动跨度有点大,这里面揉合了太多的东西,所以特地再重新写以下,以加强理解:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/sched.h>#includ

2016-08-28 11:38:53 583 1

原创 linux驱动:按键

按键:按下去我们get到low电平以此来判断用户输入,可以把它看作是一个输入设备。 通常在51单片机上,我们可以写一个while,然后不停的轮询,判断某个gpio口被拉低了,我们便认为按键被按下了。另外一种是中断。当有中断触发时,程式会跳转到中断处理函数里面,我们在中断函数里面实现功能! 但是如果放到linux中,我们该如何去实现,这便是一个问题。1.笔记 等待队列: 在Linux内核

2016-08-26 22:09:58 492

原创 linux驱动开发:背光设备

上一篇的pwm 驱动,加上第一篇的led灯控制,合起来就是背光设备的驱动! 背光设备定位于仅仅对于lcd的背光进行控制,其中主要控制背光开关脚(GPIO),背光调节脚(PWM)! 由于很类似,在这里就不做赘述显而易见,pwm的配置和上一篇一样,具体代码如下:/* * linux/drivers/char/smart210_pwm.c * * This program is free sof

2016-08-26 10:54:08 487

原创 linux驱动开发之pwm蜂鸣器

驱动开发,控制pwm蜂鸣器! 蜂鸣器有多种类型,一种是给电就叫,另一种给电了还不行,还需要freq才会叫。大概称作有源和无源吧!我们此时将buzzer的驱动加入到内核中去。/* * linux/drivers/char/smart210_pwm.c * * This program is free software; you can redistribute it and/or modify

2016-08-24 10:27:06 5883 1

原创 嵌入式内核开发:led灯驱动

接触单片机或者其他嵌入式芯片的编程中,最简单的就是GPIO的High/Low控制。 比如学校里面最基本的单片机实验:led控制,流水灯,数码管。其实都是最基本的GPIO操作。 那么同样,对应到linux嵌入式开发,GPIO的High/Low控制也是最简单的操作。算的上是c语言的 hello world 例程一样。linux的设备有分几个类别,这里led一般认作是字符形设备。在linux中访问设备

2016-08-20 19:51:54 2221

原创 内核开发:第一个hello world 模块

linux内核版本:3.10.46嵌入式linux学习:驱动开发之第一个linux模块驱动可以编译进内核,也可以独立编译为模块。当需要时加载模块,不需要时卸载模块。制作第一个模块:

2016-08-20 09:22:18 496

原创 Uboot引导内核之前的应该确保的几个点

Uboot 引导内核需要保证几点:1.CPU寄存器设置.R0=0.R1=机器类型ID.R2=启动参数标记列表在RAM中起始基地址2.CPU工作模式.必须禁止中断(IRQ 和 FIQ).CPU必须为SVC模式3.Cache和MMU的设置.MMU必须关闭.指令Cache可以打开也可以关闭.数据Cache必须关闭

2016-08-18 14:36:05 230

S5PV210 5.2.0交叉编译器

三星S5PV210 arm平台的交叉编译器。base gcc 5.2.0 cortexA8.neon

2016-08-13

input_polled_dev与input_dev的区别

发表于 2016-11-15 最后回复 2016-11-16

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除