linux驱动开发
xuflyme
这个作者很懒,什么都没留下…
展开
-
如何编译一个linux下的驱动模块
直接写Makefile 文件(假设要编译的文件为hello.c)1 ifneq ($(KERNElRELEASE),)2 obj-m := hello.o3 else4 obj-m := hello.o5 KERNELDIR ?= /lib/modules/$(shell uname -r)/build6 PWD := $(shell pwd)78 default:转载 2013-11-13 15:41:43 · 1164 阅读 · 0 评论 -
中断处理中不能睡眠的原因
这个问题实际上是一个老生常谈的问题,答案也很简单,Linux在软中断上下文中是不能睡眠的,原因在于Linux的软中断实现上下文有可能是中断上下文,如果在中断上下文中睡眠,那么会导致Linux无法调度,直接的反应是系统Kernel Panic,并且提示dequeue_task出错。所以,在软中断上下文中,我们不能使用信号量等可能导致睡眠的函数,这一点在编写IO回调函数时需要特别注意。在最近的一个项目原创 2013-12-25 14:55:44 · 2527 阅读 · 0 评论 -
Linux中IS_ERR()函数的理解
在Linux源码中的fs部分,经常会碰到这样的函数(位于kernel/include/linux/fs.h):/* * Kernel>static> retval = PTR_ERR(dir_page); >IS_ERR()有一些妙处。内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。所幸的是,内核返回的指针一般是指向页面的边转载 2013-12-25 22:06:39 · 914 阅读 · 0 评论 -
工作队列(workqueue) create_workqueue/schedule_work/queue_work
项目需要,在驱动模块里用内核计时器timer_list实现了一个状态机。郁闷的是,运行时总报错“Scheduling>一、workqueue简介workqueue与tasklet类似,都是允许内核代码请求某个函数在将来的时间被调用(抄《ldd3》上的)每个workqueue就是一个内核进程。workqueue与tasklet的区别: 1.tasklet是通过软中断实转载 2013-12-25 20:26:03 · 990 阅读 · 0 评论 -
linux工作队列和等待队列的区别
work queue是一种bottom half,中断处理的后半程,强调的是动态的概念,即work是重点,而queue是其次。wait queue是一种「任务队列」,可以把一些进程放在上面睡眠等待某个事件,强调静态多一些,重点在queue上,即它就是一个queue,这个queue如何调度,什么时候调度并不重要。对这2个容易混淆的队列做简单概念上的区别,怎么用? 等待队列转载 2013-12-25 19:19:14 · 672 阅读 · 0 评论 -
Linux DM9000网卡驱动程序完全分析
[置顶] Linux DM9000网卡驱动程序完全分析本文转载自http://blog.csdn.net/ypoflyer/article/details/6209922说明1:本文分析基于内核源码版本为linux-2.6.31 说明2:本文在理解了linux中总线、设备和驱动模型的基础上加以分析代码 虽然Linux驱动程序应该是和具体的硬件平台分离转载 2014-01-09 14:12:36 · 745 阅读 · 0 评论 -
Linux网络配置 -- 各种配置文件及其作用篇
一. Linux平台下各种网络相关配置文件(RedHat Linux为例)-----------------------------------------------------------------------------------------------------------------------------------1. 文件/etc/hosts(1) 文件格式转载 2014-01-03 14:58:29 · 1860 阅读 · 0 评论 -
LDD3 之Makefile文件的分析
《Linux设备驱动程序(第三版)》。里面有个关于Module编译的Makefile#如果已经定义了KERNELRELEASE,则说明是从内核整体编译的Make中调用。在我的2.6.31内核的#Makefile中L357行有关于KERNELRELEASE定义:#KERNELRELEASE = $(shell cat include/config/kernel.release 2> /d转载 2014-01-03 13:10:50 · 740 阅读 · 0 评论 -
Linux设备驱动程序(LDD3)中snull的编译问题
本文转载自:http://blog.csdn.net/xiebiwei/article/details/6210887#snull_header_ops目录(?)[+]对LDD中snull程序,编译的时候会有许多问题,鉴于网上还没有合适的解决办法,做此总结,整理知识。本文在debian6.0上运行通过,内核版本为2.6.32。学习LDD中网络驱动程序部分,理解s转载 2014-01-02 20:21:01 · 883 阅读 · 0 评论 -
linux驱动开发相关头文件说明
#include 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include在linux-2.6.31_TX2440转载 2013-12-16 10:36:26 · 1055 阅读 · 0 评论 -
DM9000网卡驱动分析
原始出处:http://infohacker.blog.51cto.com/6751239/1221348Preface 内核源码版本:linux-2.6.18DM9000芯片 DM9000是一款高度集成低功耗快速以太网处理器,该芯片集成了MAC和PHY。DM9000可以和CPU直接连接,支持8位、16位和32位数据总线宽度。该芯片支持10M和100转载 2013-12-29 10:34:36 · 917 阅读 · 0 评论 -
网卡驱动·linux内核网络分层结构
原始出处:http://infohacker.blog.51cto.com/6751239/1221140 Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。内核网络结构 在Linu转载 2013-12-29 10:22:38 · 1085 阅读 · 0 评论 -
ARM(S3C2440 )下解决的非法指令问题(Illegal instruction)
最近在学习和做项目的时候需要搭建s3c2440的环境,遇到了一些问题(非法指令)和大家分享一下修正错误的过程。一、我先介绍一下我们的实验环境:内核版本:kernel-2.6.27-android_ok编绎器:arm-2010q1-202-arm-none-linux-gnueabi硬件:(S3C2440) 支持armv4t 指令, busybox版本:busybox-1.1转载 2013-11-13 20:14:43 · 2059 阅读 · 0 评论 -
yaffs2 文件系统:Kernel panic - not syncing: Attempted to kill init!
在内核挂载根文件系统时,提示Kernel panic - not syncing: Attempted to kill init!的解决方法: 方法1:Kernel Features --->[*] Use the ARM EABI to compile the kernel [*] Allow old ABI binaries to原创 2013-11-13 20:11:16 · 963 阅读 · 0 评论 -
del_timer和del_timer_sync
同add_timer函数相反,del_timer类的函数负责从系统的定时器管理队列中摘除一个定时器对象。del_timer和del_timer_sync的函数原型为:kernel/timer.c> int del_timer(struct timer_list *timer); int del_timer_sync(struct timer_list *timer); 对于del_t转载 2014-03-21 18:04:28 · 4113 阅读 · 0 评论