
linux 设备驱动
newnewman80
这个作者很懒,什么都没留下…
展开
-
rmmod xxxxx no such file or directory 解决方法
说明:1. 此文档基于 linux 2.6.32,TQ2440上测试通过,2. arm-linux-gcc版本 Thread model: posixgcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) 一. 问题描述及追踪分析使用 rmmod时候发现如下错误rmmod chdir no such file or direct转载 2011-12-08 10:30:48 · 1990 阅读 · 0 评论 -
按键控制led驱动
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //class_create()函数头文件#define DEVICE_NAM原创 2013-03-13 10:15:57 · 902 阅读 · 0 评论 -
android驱动的开发
一、android驱动的开发流程1: 写LINUX驱动2: 写LINUX应用测试程序3: 写JNI接口,用来包装第二步写的应用(要用NDK来编译)生成一个.SO文件,相当于CE下的DLL4: 写JAVA程序,专门写一个类包含.SO文件,然后在JAVA里调用.SO里的函数。例子,可以看NDK里面的Sample文件夹,里面有一些例子 二、 需要安装的环境编译An转载 2013-05-03 11:11:01 · 1102 阅读 · 0 评论 -
mini2440蜂鸣器
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i转载 2013-07-08 13:49:08 · 2289 阅读 · 0 评论 -
定时器 LED 闪烁功能
最近工作中涉及到在一定的时间之后对特定的动作进行处理。比如按键,按键需要在按下至少4S之后,重新启动系统之类、此时使用定时器,可以确保准确的计时。下面的实现可以通用。struct timer_list os_timer_t; //定义定时器#define OS_TIMER_FUNC(_fn) \ void _fn(unsigned long timer_arg)#define OS_转载 2013-06-28 15:19:21 · 2456 阅读 · 0 评论 -
USB设备驱动
USB驱动开发在掌握了USB设备的配置后,对于程序员,我们就可以尝试进行一些简单的USB驱动的修改和开发了。这一段落,我们会讲解一个最基础USB框架的基础上,做两个小的USB驱动的例子。USB骨架 在Linux kernel源码目录中driver/usb/usb-skeleton.c为我们提供了一个最基础的USB驱动程序。我们称为USB骨架。通过它我们仅需要修改极少的部分,就可以完成一转载 2013-07-02 13:44:22 · 924 阅读 · 0 评论 -
看门狗驱动1
/* * Copyright (C) 2011 Broadcom Corporation. All rights reserved. * * * Unless you and Broadcom execute a separate written software license * agreement governing use of this software, this sof转载 2013-08-08 14:23:01 · 1369 阅读 · 0 评论 -
网卡驱动 ping 问题
Dm9000aep在u-boot下网卡驱动调试笔记作者:杨硕,华清远见嵌入式学院讲师。最近在将u-boot1.3.4移植到三星s5pc100 SOC平台发现u-boot启动之后无法ping通主机,也不能用tftp下载内核。硬件平台用的网卡芯片是dm9000aep,这是一款全集成,性价比高的快速以太网MAC控制器,支持8-bit和16-bit数据宽度,带有一个通用处理器接口,EEPROM接口转载 2013-08-20 15:38:07 · 2116 阅读 · 0 评论 -
dev下 没有input 目录
/etc/mdev.confmdev.conf写的不对。加入下面的就可以:# Move input devices to input directoryevent.* 0:0 0660 @(mkdir -p input&&mv $MDEV input)mice 0:0 0660 @(mkdir -p input&&mv $MDEV input)mouse.*转载 2013-08-09 15:29:18 · 2148 阅读 · 0 评论 -
S3C2440上看门狗(Watchdog)驱动开发实例讲解
S3C2440上看门狗(Watchdog)驱动开发实例讲解S3C2440上看门狗(Watchdog)驱动开发实例讲解 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。·转载 2013-08-27 10:44:24 · 1317 阅读 · 0 评论 -
jiq.c
/* * jiq.c -- the just-in-queue module * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code in this file can be freely used原创 2013-09-10 09:49:26 · 1686 阅读 · 0 评论 -
OK6410 uboot 网卡驱动 DM9000
解压ok6410 或 ok6410b 对应的u-boot源代码U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm下载附件,覆盖u-boot源文件里面的同名文件,然后打开文件 include/configs/smdk6410.h找到#ifdef CONFIG_DRIVER_SMC911X #unde转载 2013-04-08 14:59:55 · 1440 阅读 · 0 评论 -
内核定时器操作
inux内核中定义了一个timer_list结构,我们在驱动程序中可以利用 #include struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned转载 2013-03-13 13:49:06 · 806 阅读 · 0 评论 -
RAID学习笔记
几种常用RAID的简介RAID是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处转载 2012-02-17 15:05:58 · 754 阅读 · 0 评论 -
linux内核模块的强制删除
一.问题: 前些日子在工作中遇到一个文件,当rmmod一个模块的时候,在模块的exit函数中阻塞了,rmmod进程杀也杀不掉,永远呆在那里,发现它已经是D(disk sleep)状态了,真的无能为力了吗?我不相信这个事实,所以今天在稍微闲暇的时候换换脑子,终于有了解决办法。二.分析: 解铃还须系铃人,既然是在内核中出了问题,还是需要在内核中寻找办法,解决这类问题的前提是对内核卸载模块的转载 2012-05-09 10:43:15 · 10147 阅读 · 1 评论 -
Linux内核数据包处理流程-数据包接收(1)
数据包的接收作者:kendoKernel:2.6.12一、从网卡说起这并非是一个网卡驱动分析的专门文档,只是对网卡处理数据包的流程进行一个重点的分析。这里以Intel的e100驱动为例进行分析。大多数网卡都是一个PCI设备,PCI设备都包含了一个标准的配置寄存器,寄存器中,包含了PCI设备的厂商ID、设备ID等等信息,驱动程序使用来描述这些寄存器的标识符。如转载 2012-09-17 12:58:08 · 2887 阅读 · 0 评论 -
Linux内核数据包处理流程-数据包接收(2)
四、网卡的数据接收内核如何从网卡接受数据,传统的经典过程:1、数据到达网卡;2、网卡产生一个中断给内核;3、内核使用I/O指令,从网卡I/O区域中去读取数据;我们在许多网卡驱动中,都可以在网卡的中断函数中见到这一过程。但是,这一种方法,有一种重要的问题,就是大流量的数据来到,网卡会产生大量的中断,内核在中断上下文中,会浪费大量的资源来处理中断本身。所以,一个问题转载 2012-09-17 13:11:03 · 5219 阅读 · 0 评论 -
Linux内核数据包处理流程-数据包接收(3)
五、队列层1、软中断与下半部当用中断处理的时候,为了减少中断处理的工作量,比如,一般中断处理时,需要屏蔽其它中断,如果中断处理时间过长,那么其它中断有可能得不到及时处理,也以,有一种机制,就是把“不必马上处理”的工作,推迟一点,让它在中断处理后的某一个时刻得到处理。这就是下半部。下半部只是一个机制,它在Linux中,有多种实现方式,其中一种对时间要求最严格的实现方式,叫转载 2012-09-17 13:24:42 · 4660 阅读 · 0 评论 -
从PC的总线到ARM内部总线
我在学习《Linux设备驱动程序(第3版)》的 第九章 与硬件通信 时,对 I\O总线的概念 不是很清晰,所以查找了有关资料。现在总结如下:本文的参考资料:1、 《AMBA、AHB、APB总线简介》 作者 adamzhao 日期 2006-11-16 19:33:00转载网址:http://www.openhard.org/myspace/blog/show.php?id=75转载 2012-10-17 10:19:35 · 1315 阅读 · 0 评论 -
交叉编译Makefile
obj-m+= hello.oKDIR := /home/linux-2.6.33.3PWD:= $(shell pwd)CROSS_ARCH := ARCH=arm CROSS_COMPILE=arm-linux-ARCH =armCROSS_COMPILE =arm-linux-default:# $(MAKE) $(CROSS_ARCH) -C $(K原创 2013-01-16 12:33:54 · 1441 阅读 · 0 评论 -
mini2440 按键控制LED 驱动
一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、实现步骤1. 硬件原理图分析。由原理图可知每个按键所用到的外部中断分别是EINT8、EINT11、EINT13、EINT14、EINT15、EINT19,所对应的IO口分别是GPG0、GPG3、G转载 2013-02-28 15:36:03 · 3751 阅读 · 0 评论 -
自动创建设备节点 device_create
error: implicit declaration of ‘class_device_create’这个代码在Kernel 2.6.18下面编译的时候没有任何问题。为什么在2.6.34下面会出现这个错误呢?难道class_device_create这个kernel API已经从新版kernel里面移除了?google了一下,发现确实是已经被移除了,在新版的kernel里面,可原创 2013-03-12 10:14:07 · 12046 阅读 · 0 评论 -
file_operations 结构体说明
struct module *owner第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针.这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 中定义的宏.这个宏比较复杂,在进行简单学习操作的时候,一般初始化为THIS_MODULE。loff_t (*lls转载 2013-03-13 09:58:06 · 883 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和O转载 2013-09-12 11:01:02 · 866 阅读 · 0 评论 -
设备驱动程序学习笔记(5)-休眠与唤醒
By: 潘云登Date: 2009-6-3Email: intrepyd@gmail.comHomepage:http://blog.youkuaiyun.com/intrepydCopyright:该文章版权由潘云登所有。可在非商业目的下任意传播和复制。对于商业目的下对本文的任何行为需经作者同意。写转载 2013-09-05 10:54:45 · 982 阅读 · 0 评论 -
select()和poll()
在用户程序中,select()和poll()也是与设备阻塞与非阻塞访问相关的的论题。使用非阻塞IO的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问。select()和poll()系统调用最终会引发设备驱动中的poll()函数被执行。select()和poll的本质是一样的,前者在BSD UNIX中引入,后者在System V中引入。 select转载 2013-01-15 17:59:52 · 712 阅读 · 0 评论 -
在Ubuntu 上为Android 系统的Application Frameworks 层增加硬件访问服务
在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行。今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件。因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的。硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序;而驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来转载 2013-10-23 10:37:31 · 863 阅读 · 0 评论 -
为Android 系统内置Java 应用程序测试Application Frameworks 层的硬件服务
我们在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务。那么,APP 如何通过Java接口来访问ApplicationFrameworks层提供的硬件服务呢?在这一篇文章中,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件转载 2013-10-23 10:38:49 · 1279 阅读 · 0 评论 -
Linux输入子系统(Input Subsystem)
Linux输入子系统(Input Subsystem) Linux 的输入子系统不仅支持鼠标、键盘等常规输入设备,而且还支持蜂鸣器、触摸屏等设备。本章将对 Linux 输入子系统进行详细的分析。一 前言 输入子系统又叫 input 子系统。其构建非常灵活,只需要调用一些简单的函数,就可以将一个输入设备的功转载 2013-10-31 16:19:44 · 1135 阅读 · 0 评论 -
工作队列版本差别
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。I、转载 2013-11-07 09:12:43 · 1089 阅读 · 0 评论 -
GPIO模拟I2C程序实现.
GPIO模拟I2C程序实现.I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=1)或者写(=0),所以我们有时也可看到8位形式的设备地址,此时每个设备有读、写两个地址,高7位转载 2013-11-07 09:21:15 · 1371 阅读 · 0 评论 -
运用debugfs调试方法
运用debugfs调试方法 DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据。类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上,而是Linux内核运行起来后才建立起来。通常情况下,最常用的内核调试手段是printk。但printk并不是所有情况都好用,比如打印的数据可能过多,我们真转载 2013-11-07 09:05:35 · 2819 阅读 · 0 评论 -
内核的输入子系统
内核的输入子系统是为了对分散的、多种不同类别的输入设备(如键盘、鼠标、轨迹球、操纵杆、辊轮、触摸屏、加速计和手写板)进行统一处理的驱动。输入子系统带来了如下好处: • 统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论PS/2、USB,还是蓝牙,都被同样处理。 • 提供了用于分发输入报告给用户应用程序的简单的事件(event)接口。你的驱动不必创建、管理转载 2013-11-07 09:06:08 · 818 阅读 · 0 评论 -
Linux进程内核栈
linux 内核栈alloc_thread_info宏以获取一块空闲的内存区,用以存放新进程的thread_info结构和内核栈转载 2011-05-13 09:13:00 · 1274 阅读 · 0 评论 -
实现设备只能被一个进程打开
一. 使用原子变量static atomic_t xxx_available = ATOMIC_INIT(1); //定义原子变量static int xxx_open(struct inode *inode, struct file *filp){ ...if(!atomic_dec_and_test(&xxx_available)){ atomic_inc(&x原创 2013-11-14 10:05:57 · 1668 阅读 · 0 评论 -
Linux PCI网卡驱动的详细分析
转载:http://soft.chinabyte.com/os/13/12304513.shtmlLinux网卡驱动分析 学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代...转载 2019-05-07 16:38:19 · 3809 阅读 · 0 评论 -
为Android 硬件抽象层(HAL)模块编写JNI 方法提供Java 访问硬件服务接口
在上两篇文章中(http://www.linuxidc.com/Linux/2011-07/38978.htm与http://www.linuxidc.com/Linux/2011-07/38980.htm),我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实现这两者的目的是为了向更上一层提供硬件转载 2013-10-23 10:37:02 · 1725 阅读 · 0 评论 -
在Android 系统中增加C 可执行程序来访问硬件驱动程序
在Android 系统中增加C可执行程序来访问硬件驱动程序。在前一篇文章http://www.linuxidc.com/Linux/2011-07/38977中,我们介绍了如何在Ubuntu上为Android 系统编写Linux内核驱动程序。在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、转载 2013-10-23 10:34:42 · 3934 阅读 · 0 评论 -
IO端口和IO内存的区别及分别使用的函数接口
IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没转载 2013-09-13 10:02:34 · 1080 阅读 · 0 评论 -
使用IO内存控制硬件点亮LED灯
http://www.360doc.com/content/11/1104/16/1317564_161674335.shtmlLinux中控制GPIO点亮LED的方法有好几种。一种是使用内核提供的专门用来控制GPIO的函数来点亮LED,如:s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);s3c2410_g转载 2013-09-12 15:33:25 · 2354 阅读 · 0 评论