![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux device driver
文章平均质量分 65
alex_xhl
专注软件架构设计,性能分析和优化。
展开
-
Linux设备驱动编程之阻塞与非阻塞
阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。 在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基转载 2012-11-28 11:23:40 · 765 阅读 · 0 评论 -
helloworld模块
hello.c #include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "hello world/n"); return 0;}static void hello_exit(void){ printk(KERN_ALERT "go原创 2010-07-07 11:44:00 · 674 阅读 · 0 评论 -
写给Linux内核新手-关于Linux内核学习的误区
关于Linux内核学习的误区 先说句正经的:其实我没资格写这篇文章,因为自己也就一两个月以来才开始有所领悟的。因此,这里与其说是关于Linux内核学习的经验,不如说是自己的教训吧,希望不要扔鸡蛋砸我^_^ 常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的转载 2010-08-10 11:30:00 · 704 阅读 · 0 评论 -
打印调试技术 printk klogd dmesg
4.2.1. printk#include printk(KERN_CRIT"error %s,%i",__FILE__,__LINE__);注:1). printk函数中能够指定优先级,假如printk没有指定优先级,采用默认优先级,DEFAULT_MESSAGE_LEVEL,其值在kernel/printk.c. 头文档linux/printk.h中宏定义了8个级转载 2010-09-03 13:40:00 · 1007 阅读 · 0 评论 -
不错的网址
http://blog.chinaunix.net/u/19573/article.php?frmid=0&page=14原创 2010-09-03 13:43:00 · 1218 阅读 · 0 评论 -
如何编写Linux设备驱动程序
Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与L转载 2010-09-06 18:05:00 · 568 阅读 · 0 评论 -
linux device driver .ko module Makefile 模板
## Makefile module first.ko#CROSS_PATH:=../../mips-4.3/binCROSS_ARCH:=ARCH=mips CROSS_COMPILE=$(CROSS_PATH)/mips-linux-gnu-DEVICE=firstifneq ($(KERNELRELEASE),) obj-m:=$(DEVICE).o $(DE原创 2010-09-08 10:08:00 · 1507 阅读 · 0 评论 -
hello: module license 'unspecified' taints kernel.
测试驱动开发平台为了后续学习的顺利进行,我们利用最简单的hello,world程序,在内核上挂载和卸载我们自己编写的hello模块。说明:本文调试环境VMware Workstation 5.0+TurboLinux 10,教材是《Linux Device Drivers》第3版英文电子图书。一、编写hello.c文件利用vi编辑器,我们键入下面的代码,并保存为hello.c文件。转载 2010-09-10 09:33:00 · 5565 阅读 · 0 评论 -
mdev的使用方法和原理
mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔 或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优 的选择。 mdev使用mdev的使用在busybox中的mdev.txt文档已经将得很详细了。但作为例子,我简单讲讲我的使用转载 2010-11-17 20:57:00 · 662 阅读 · 0 评论 -
看看
http://hi.baidu.com/lincoln%5Flai/blog/category/Ldd原创 2010-07-06 14:30:00 · 675 阅读 · 0 评论 -
嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(一)
http://blog.ednchina.com/mcuandme/1787530/Message.aspx http://blog.chinaunix.net/u3/101649/showart_2232724.html嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。转载 2010-07-01 13:43:00 · 2979 阅读 · 1 评论 -
基于S3C2410的SD卡linux驱动工作原理 http://blog.csdn.net/funy_liu/archive/2009/11/03/4764206.aspx 流程图
首先介绍下Linux驱动模型的几个概念:§1 bus系统中总线由struct bus_type描述,定义为:struct bus_type {char * name; 总线类型的名称struct subsystem subsys; 与该总线相关的subsystemstruct kset drivers; 所有与该总线相关的驱动程序集合struct kset device转载 2010-06-25 19:33:00 · 1358 阅读 · 0 评论 -
ALSA driver 参考code
alsa-driver-1.0.23\alsa-driver-1.0.23\arm\sa11xx-uda1341.c原创 2012-03-08 10:46:20 · 840 阅读 · 0 评论 -
linux中Framebuffer的原理及实现机制
linux中Framebuffer的原理及实现机制*一、FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这 个设备来供用户态进程实现直接写屏转载 2012-02-06 17:42:57 · 733 阅读 · 0 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux® 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。本文对 /proc 虚拟文件系统进行了介绍,并展示了它转载 2012-02-06 17:37:03 · 716 阅读 · 0 评论 -
使用netlink机制在内核进程和用户空间进程通信
内核模块代码:netlink_drv.c#include #include #include #include #include #include #define NETLINK_TEST 21struct sock *nl_sk = NULL;EXPORT_SYMBOL_GPL(nl_sk);void nl_da原创 2012-02-05 10:23:22 · 1901 阅读 · 0 评论 -
Framebuffer Driver
中文名为:帧缓冲驱动 一、FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽转载 2010-06-13 18:42:00 · 695 阅读 · 0 评论 -
不错的网站
红联linux: http://www.linuxdiyf.com/bbs/编程与内核: http://www.linuxdiyf.com/bbs/forum-9-1.html海明老师Linux版视频收集贴:http://www.boobooke.com/bbs/viewthread.php?tid=4623原创 2010-06-13 19:36:00 · 536 阅读 · 0 评论 -
Modifying Shared Memory
http://www.extremetech.com/article2/0,2845,2114123,00.asp原创 2010-06-25 16:03:00 · 547 阅读 · 0 评论 -
linux sd卡驱动分析,基于mini2440,sdio mmc sd卡驱动编写
参考资料: 1.SD Memory Card Specifications / Part 1. Physical Layer Specification; Version 1.0 2.LDD3 CHAPTER-16 BLOCK DEVICE3. http://www.sdcard.org引言:前几天把mini2440 的sd 卡驱动程序移植到了Android 平转载 2010-06-25 19:22:00 · 176 阅读 · 0 评论 -
Linux 2.6.xx 内核模块编程入门
2.6.xx 内核与 2.4.XX内核编程有很大不同。下面这些文字简单说明一下2.6.xx下一个内核模块(Hello World)实现方法。环境:ubuntu 704Kernel: 2.6.20-15-generic , 可以通过 uname -r 查看gcc版本: 4.1.2一. 准备工作安装kernel 必须的开发库#sudo apt-g转载 2010-12-09 22:10:00 · 1086 阅读 · 0 评论 -
linux 设备驱动开发详解 code (1)
1. c code: #include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000#define MEM_CLEAR 0x01原创 2010-12-09 22:34:00 · 978 阅读 · 0 评论 -
ARM-Linux驱动--MTD驱动分析(一)
主机:Gentoo Linux 11.2 with linux kernel 3.0.6硬件平台:FL2440(S3C2440)with linux kernel 2.6.35原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7202503MTD(memory technology de转载 2012-01-30 08:45:06 · 6378 阅读 · 0 评论 -
sd卡驱动在linux 2.6.24上的实现简易心得 及 好的url地址
整理sd卡驱动在linux 2.6.24上的实现简易心得1.mmc_rescan 当GPIO8发生sd卡插入动作后,进入pxamci_detect_irq()中断,进而触发mmc_rescan检卡work queue工作队列2.对于sdio设备 host->bus_ops = mmc_sdio_ops; 对于sd设备 host->bus_ops = mmc_sd转载 2010-06-25 19:30:00 · 1350 阅读 · 0 评论 -
内核中的Makefile和Kconfig
一、概述 在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题,并且要根据用户配置来编译特有的内核。为了解决这个问题,内核使用两种文件,Makefie和Kconfig。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单,就是我们使用命令 make menuconfig(或者xconfig)后产生的配置转载 2010-07-07 16:15:00 · 717 阅读 · 0 评论 -
Linux Kernel Module编程,多个源文件编译成一个模块的解决方案
陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。但是,在.h文件中写函数的实现总感觉怪怪的。今天查看了以下Kbuild的文档,有如下描述: If a kernel module is built from several sourc转载 2010-07-07 17:50:00 · 4352 阅读 · 2 评论 -
在kernel中编译单独的.ko
~/kernel-x-x-xx$ make modules SUBIDR=./drivers/mydriver/ [转]参考资料:单独编译ntfs.ko模块,使你的CentOS完全支持ntfs参考:http://hi.baidu.com/zngell/blog/item/f70702f427dbdf67ddc47457.htmlhttp://li原创 2010-09-14 15:25:00 · 3030 阅读 · 0 评论 -
kernel insmod 命令
insmod的工作[转]《LINUX设备驱动程序》insmod 实际上它依赖于定义在kernel/module.c中的一个系统调用。函数sys_init_module给模块分配内核内存(函数vmalloc负责内存分配)以便装载模块。然后该系统调用将模块正文复制到内核区域,并且通过内核符号表解析模块中的内核引用,最后调用模块的初始化函数。 insmod: sys_i原创 2010-09-14 17:34:00 · 2148 阅读 · 0 评论 -
kzalloc()
今天读驱动程序,看到一个新潮的函数kzalloc()在我可怜的想象力只能得出它写错了的时候我发挥了网络的优势终于知道这是个什么东东原来他是个合体儿原来我们使用的都是用kmalloc()申请空间,然后用memset()来初始化原文件: linux-2.6.34/include/linux/slab.h/** * kzalloc - allocate memory. T转载 2010-10-13 16:38:00 · 1582 阅读 · 0 评论 -
linux内核学习
常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需: 1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统总转载 2010-12-13 22:17:00 · 871 阅读 · 0 评论 -
linux 模块层叠技术和多个ko的编译
驱动程序中lsmod命令实际读取的是/proc/modules文件即与lsmod命令对应的结果是cat /proc/modules内核中已经加载的模块的信息存在于/sys/module目录下modprobe命令比insmod命令要强大,它在加载某模块时会同时加载该模块所依赖的其他模块使用modprobe -r filename的方式卸载将同时其依赖的模块modinfo转载 2010-12-13 22:01:00 · 2365 阅读 · 0 评论 -
从零开始 linux 模块开发总结
1.准备编译 ko 的 linux 环境: 本人使用 ubuntu 9.10.2.查看系统的版本: 使用 uname -r 命令, 本人系统是 2.6.31-22-generic.3.安装内核头文件: sudo apt-get install linux-headers-`uname -r` 本人使用: sudo apt-get install linux-原创 2010-12-09 23:16:00 · 701 阅读 · 0 评论 -
linux 设备驱动开发详解 code (5)
1.c code: #include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "hello world enter/n"); return 0;}static void hello_exit(void)原创 2010-12-09 22:44:00 · 563 阅读 · 0 评论 -
linux 设备驱动开发详解 code (4)
1.c code: #include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000#define MEM_CLEAR 0x01#原创 2010-12-09 22:43:00 · 834 阅读 · 0 评论 -
linux内核符号表
内核符号:存在内核空间函数或变量所对应的符号 内核符号表可以分为“私有”和“公共”。平常所说的内核符号表指的是“公共内核符号表”。 我们知道,驱动存在于内核空间,它的每一个函数每一个变量都会有对应的符号,这部分符号也可以称作内核符号,它们不导出的话就只能为自身所用,导出后就可以成为公用,对于导出的那部分的内核符号就是我们常说的内核符号表。in转载 2010-12-13 21:56:00 · 1829 阅读 · 0 评论 -
ARM-Linux驱动--MTD驱动分析(三)
主机:Gentoo Linux 11.2 with linux kernel 3.0.6硬件平台:FL2440(S3C2440)with linux kernel 2.6.35原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7207908*接上文ARM-Linux驱动--MTD驱动分析(二)转载 2012-01-30 08:44:17 · 1228 阅读 · 0 评论 -
make menuconfig 中选定项 (CONFIG_XXX) 的作用
在上次开发 drvier 的时候,我参考了一个 kernel 中原有的类似 drvier code, 把 driver 目录下的整个这个目录(暂时取名叫AAA) cp 为 xxx_AAA (前面是公司名称,公司规定的). 然后, 对 xxx_AAA 里面的 Kconfig 和 Makefile 只是简单的修改了一下,集中精力开发和调试我自己新增和修改的 .h .c 文件. 今天,闲原创 2010-10-12 19:00:00 · 1992 阅读 · 0 评论 -
linux内核 kthread_run函数 理解学习
最近发现在内核创建线程的时候经常会用到kthread_run()这样的一个调用。于是准备拿出来学习一下。首先看看它的定义之处才发现它是一个宏函数,而不是一个真正意义上的函数。在include/linux/Kthread.h里有/*** kthread_run - create and wake a thread.* @threadfn: the function to run until sign转载 2010-10-14 16:02:00 · 1222 阅读 · 0 评论 -
linux 网址精选
国外 http://lwn.net/ http://www.tldp.org/ https://rhn.redhat.com/ http://www.justlinux.com/ http://www.linuxtoday.com/ http://www.linuxquestions.org/ http://www.fokus.gmd.de/linux/转载 2010-11-01 19:39:00 · 1046 阅读 · 0 评论 -
linux 设备驱动开发详解 code (2)
1.c code: #include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000#define MEM_CLEAR 0x01#原创 2010-12-09 22:38:00 · 696 阅读 · 0 评论