linux驱动
hnsncxy
为之疯狂
展开
-
Platform_device 和 Platform_driver
从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device和 Platform_driver 。 Linux中大部分的设备驱动,都可以使用这套机制 , 设备用 Platform_device表示,驱动用 Platform_driver 进行注册。 Linux platform driver机制和传统的 dev转载 2012-09-10 10:18:05 · 629 阅读 · 0 评论 -
flip_close Oops问题排查
1、问题描述/etOops[#1]:Cpu 0$ 0 : 00000000 00000001 64206e6f 838ceae0$ 4 : 838ceae0 83816140 00000001 00000007$ 8 : 0000080f 00000004 00000020 83934668$12 : 82fdb128 ffffffff 00000001 8原创 2014-05-07 19:30:48 · 2304 阅读 · 0 评论 -
linux下proc文件的读写(部分转载)
in Linux, proc文件系统是一个虚拟文件系统,用户和应用程序可以通过proc文件系统得到当前的一些系统信息,并可以改变一些内核的参数。/proc下的文件是一种特殊文件,不能够像一般文件一样创建删除。下面讨论proc文件的创建、删除与读写。1.创建目录:struct proc_dir_entry *proc_mkdir(const char *name,原创 2012-10-23 15:18:04 · 35051 阅读 · 4 评论 -
虚拟网卡驱动程序 TUN/TAP(1) -- 设计原理(摘自developerWorks 中国)
简介虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。tun/tap驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap驱动转载 2014-06-04 13:52:49 · 1889 阅读 · 0 评论 -
虚拟网卡驱动程序 TUN/TAP(2) -- 测试实例
1、内核配置转载 2014-06-04 15:37:30 · 8425 阅读 · 0 评论 -
linux驱动模块(多文件)的makefile实现
方式1常用于编写,调试阶段。驱动源码的文件夹位置独立自由,只要在Makefile中指定好Linux内核源码的路径。方式2常用于最后集成阶段,在调试基本完成后,可以将驱动源代码文件(夹)放置在Linux内核源码的driver/xxx/的相应路径中,修改本层和上层的Makefile和KConfig文件,并重新make menuconfig内核,可以在Menu中选中新加入的驱动模块,然后make转载 2014-08-26 18:45:05 · 1745 阅读 · 0 评论 -
linux /dev/mem 和 /dev/kmem区别
/dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。作用:前者用来访问物理IO设备,比如X用来访问显卡的物理内存,或嵌入式中访问GPIO。用法一般就是open,然后mmap,接着可以使用map之后的地址来访问物理内存。这其实就是实现用户空间驱动的一种方法。后者一般可以用来查转载 2014-05-22 00:36:55 · 1276 阅读 · 0 评论 -
Linux ALSA声卡驱动:ALSA架构简介
声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢!一. 概述 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。转载 2014-10-25 18:09:56 · 729 阅读 · 0 评论 -
SDIO WiFi Card Driver
(1) Wifi卡的常用接口有: –CF 接口 –USB接口 –SDIO接口 –SPI接口 –PCMCIA接口 很多时候,同一个wifi卡同时支持多种接口,譬如marvell的8686的wifi卡,既支持spi接口,也支持sdio接口. (2) SD卡与SDIO卡的异同1.SD卡使用的是SD卡协议,而SDIO卡使用的是SDIO协议;协议不一样,初始化/读写方式都转载 2014-12-01 14:05:25 · 1140 阅读 · 0 评论 -
LCD驱动分析(一):时序的分析
第一次调试lcd驱动的话是不是对下面的结构有点陌生,不知道那些值是如何得来的,当然我就属于其中的一个点击(此处)折叠或打开static struct s3cfb_lcd lte480wv = { .width = 1024,//800, .height = 600,//480, .bpp = 24,//24,//32,转载 2015-01-28 00:02:57 · 1696 阅读 · 0 评论 -
Linux的cpufreq(动态变频)技术
linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时间的工作主要在机制上。暂时想实现的主要的机制有:cpu级,设备驱动级,系统平台级。管理颗粒度不断递增,形成三驾马车齐驱的形势。 cpu级:主要实现比较容易的在系统处于目标在于频繁发生、更高粒度的电源状态改变,主要的实现方式为idle,包括今天的主要想讲的动态主频。设备驱动级:主要实现对单个设转载 2014-12-20 10:39:10 · 2388 阅读 · 0 评论 -
Linux内核模块自动加载机制
Linux内核模块自动加载机制思考如果想让内核启动过程中自动加载某个模块该怎么做呢?最容易想到的方法就是到/etc/init.d/中添加一个启动脚本,然后在/etc/rcN.d/目录下创建一个符号链接,这个链接的名字以S开头,这内核启动时,就会自动运行这个脚本了,这样就可以在脚本中使用modprobe来实现自动加载。但是我们发现,内核中加载了许多硬件设备的驱动,而搜转载 2015-12-11 00:17:49 · 5981 阅读 · 0 评论 -
linux ioctl 控制字
在Linux字符设备驱动入门(一)中,我们实现了字符设备的简单读写字符功能,接下来我们要在这个基础上加入ioctl功能。首先,我们先来看看3.0内核下../include/linux/fs.h中file_operations结构体的定义:struct file_operations { struct module *owner; loff_t (*llseek) (转载 2016-06-29 00:21:54 · 2039 阅读 · 0 评论 -
VFS 和 MTD
(1)VFS文件系统 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。嵌入式LINUX的文件系统包括如下:ext2、ext3、vfat、ntfs、iso9660、jffs转载 2013-03-11 00:18:10 · 1645 阅读 · 0 评论 -
L3总线接口
下面介绍一下L3总线接口(在一些codec 芯片中使用,Eg: uda1341)L3就是line 3(3条线)的意思,它只有L3DATA(数据线:用于传输数据)、L3MODE(模式线:用于选择模式)、L3CLOCK(时钟线:用于传输时钟)。L3一共有两个模式:地址模式和数据传输模式,先传输地址模式数据,再传输数据模式数据。L3MODE为低时是地址模式,L3MODE为高时是数据传输模式。L3DA转载 2016-07-27 00:14:15 · 2941 阅读 · 0 评论 -
INIT_WORK和INIT_DELAYED_WORK详解
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应,最终导转载 2014-04-03 16:31:05 · 1248 阅读 · 0 评论 -
linux 内核态调试函数BUG_ON()
53linux BUG_ON作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。 当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构 是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操转载 2014-02-17 17:47:53 · 10396 阅读 · 0 评论 -
linux下编译基于rtl8188cu控制芯片的USB无线网卡驱动
本人因为实验的需要,需要在嵌入式linux环境下添加wifi功能,通过在网上调研,选择基于rtl8188cu控制芯片的水星NW150UM无线USB网卡,现简单记录下配置过程。1.下载最新的rtl8188cu的linux驱动:下载页面 : ftp://WebUser:AxPL9s3k@58.211.24.153/cn/wlan/RTL8188C_8192C_USB_linux_v4转载 2014-02-25 15:12:48 · 14121 阅读 · 2 评论 -
printk 输出
对于做嵌入式或者熟悉linux内核的人来说,对printk这个函数一定不会感到陌生。printk相当于printf的孪生姐妹,她们一个运行在用户态,另一个则在内核态被人们所熟知。 printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空间,然后调用sprintf,格式化显示字符串,最后调用tty_write向终端进行信息的显示。转载 2012-09-10 18:08:10 · 5011 阅读 · 0 评论 -
mdev -s的另一种用法
mdev -s会比较慢,主要mount了tmpfs和devpts.这里把mdev -s去掉,用下面的自定义就快多了。不过要注意这是纯手动的,所以要看看是否有遗漏的。/bin/mount -n -t tmpfs tmpfs /dev/bin/mount -n -t proc none /proc/bin/mount -n -t sysfs none /sysenv DEVPA转载 2012-10-29 10:37:32 · 2062 阅读 · 0 评论 -
tmpfs and ramfs
tmpfs 文档系统,请键入: # mount tmpfs /dev/shm -t tmpfs -o size=32m 命令的等价功能添加到 /etc/fstab,应该是这样: tmpfs /dev/shm tmpfs size=32m 0 0 Ramfs顾名思义是内存文档系统,他工作于虚拟文档系统(VFS)层。不能格式化,能够创建多个,在创建时能够指定其最大能使用的内存大小。假如您的转载 2012-10-29 15:13:04 · 1032 阅读 · 0 评论 -
自定义Uboot命令
每个命令都是通过U_BOOT_CMD宏来定义的。这个宏定义了一个相关的结构体,文件是uboot/include/command.h,结构体为cmd_tbl_s。 具体的命令定义为: #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \cmd_tbl_t __u_boot_cmd_##name Struct_Secti转载 2012-10-31 14:47:01 · 1872 阅读 · 0 评论 -
linux内核中断实现机制
一、什么是中断中断分两种:1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求。其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ)。一般地,linux下很少使用快速中断请求。2)异常,又叫内部中断或同步中断,它的产生是由于处理器执行指令出错。在以下的内容我是要介绍由于外部设备产生的中断。转载 2013-01-13 22:37:53 · 4175 阅读 · 0 评论 -
用户空间和内核空间数据交换方式-sysctl
sysctl是一种用户应用来设置和获得运行时内核的配置参数的一种有效方式,通过这种方式,用户应用可以在内核运行的任何时刻来改变内核的配置参数,也可以在任何时候获得内核的配置参数,通常,内核的这些配置参数也出现在proc文件系统的/proc/sys目录下,用户应用可以直接通过这个目录下的文件来实现内核配置的读写操作,例如,用户可以通过cat /proc/sys/net/ipv4/ip_forwa转载 2013-04-15 23:21:33 · 841 阅读 · 0 评论 -
linux内核中Kconfig及如何加自己的驱动
2.6内核的源码树目录下一般都会有两个文文:Kconfig和Makefile。分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。在内核编译时,主Makefile调用这个.转载 2013-04-24 23:13:16 · 1115 阅读 · 0 评论 -
浅谈linux字符设备注册
Linux中有两种字符设备注册的方法:这里所提到的函数在文件:fs/char_dev.c中定义,在头文件include/linux/cdev.h中声明。一、 老方法:如果你深入浏览 2.6 内核的大量驱动代码, 你可能注意到有许多字符驱动使用这种方法. 你见到的是还没有更新到 2.6 内核接口的老代码. 因为那个代码实际上能用, 这个更新可能很长时间不会发生转载 2013-05-04 14:32:25 · 795 阅读 · 0 评论 -
内核IO操作函数 __raw_readl和__raw_writel
Linux对I/O的操作都定义在asm/io.h中,相应的在arm平台下,就在asm-arm/io.h中。#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigne转载 2013-05-15 20:41:46 · 4382 阅读 · 0 评论 -
linux工作队列机制详解
Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。***************************************************************************************************转载 2013-05-29 15:43:54 · 1953 阅读 · 0 评论 -
linux 原子整数操作详解
原子操作,顾名思义,就是说像原子一样不可再细分不可被中途打断。一个操作是原子操作,意思就是说这个操作是以原子的方式被执行,要一口气执行完,执行过程不能够被OS的其他行为打断,是一个整体的过程,在其执行过程中,OS的其它行为是插不进来的。在linux中提供了两种形式的原子操作: 一种是对整数进行的操作 一种是对单独的位进行操作在linux中有一个专门的atomic转载 2013-05-30 14:00:43 · 13184 阅读 · 2 评论 -
结构体 net_device常用成员分析
结构体net_device代表了一个网络设备接口,它是我们理解网络设备驱动程序的关键。这里,我们选择其中的一些重要成员,一一作详细分析,并结合以太网设备,看看Linux内核是如何为以太网设备提供结构体中某些成员的缺省值的。 在Linux内核源代码中是这样为这个结构体作注释的:实际上,这个结构体是一个很大的错误,它把I/O数据和更高层的数据混合在一起,而且它几乎必须知道INET模块中的每个转载 2013-11-14 20:59:00 · 1282 阅读 · 0 评论 -
关于实现mdev自动挂载与卸载(U盘)
在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似。不能在挂载的目录中进行热插拔,否则会出现问题,不过此问题在下次插入U盘时不会造成影响,可能对U盘有损坏。本文介绍了mdev与udev两种方法来实现自动挂载,读者可根据需要任选其一即可。 首先介绍一下md转载 2013-12-03 09:24:16 · 1812 阅读 · 0 评论 -
Makefile中常用的函数
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $()或是 ${}这里,就是函数名,make支持的函数不多。是函数的参数,参数间以逗转载 2014-01-15 17:22:39 · 765 阅读 · 0 评论 -
struct file_operations中 ioctl 和 unlocked_ioctl
转载自 "http://blog.chinaunix.net/uid-20543672-id-3015637.html"很久都没有写驱动代码了,对于一些驱动相关的内核变化也没有怎么关心。这次重游《LDD3》获益良多,其值对于struct file_operations中ioctl的消失也让我长了不少见识。当年看《LDD3》的时候已经注意到了书中对ioctl的评价不是很好:“ioctl调转载 2016-08-30 15:50:42 · 5170 阅读 · 0 评论