
Linux驱动
文章平均质量分 92
allen6268198
这个作者很懒,什么都没留下…
展开
-
MTD DEVICE
First off, an MTD is a "Memory Technology Device", so it's just "MTD". An "MTD device" is a pleonasm.Unix traditionally only knew block devices and character devices. Character devices were things l翻译 2012-02-21 18:58:05 · 2847 阅读 · 0 评论 -
SD/MMC存储器启动方案在SoC中的设计与实现
引言SD/MMC存储器以其成本低廉、存储容量大、性能优良、安全性高等特点越来越广泛地应用于便携式设备和家用电子设备。目前很多移动嵌入式产品采用了外置Nor Flash作为Boot Flash外加SD存储器作为扩展存储容量的系统方案,或者利用芯片的管理与非器件和MMC存储器进行启动的方法,这些传统的启动方案都会使用到两种或以上的存储介质,大大增加了芯片互联的不稳定性,增大了系统面积和成本。本文全转载 2012-07-13 20:03:04 · 2073 阅读 · 0 评论 -
Linux中断内核编程
前言在前面分析了中断的基本原理后,就可以写一个内核中断程序来体验以下,也可以借此程序继续深入来了解内核中断的执行过程一.内核中断程序 :我们还是来看一看成程序: 在看程序之前,要熟悉如何进行模块编程,和了解module_pararm()的用法。如果不熟悉的话请大家看,module_param()的学习 和Linux内核模块编程 ,在此不作解释。 1.程序inte转载 2012-07-22 21:42:49 · 1022 阅读 · 0 评论 -
linux idr机制
idr在linux内核中指的就是整数ID管理机制,从本质上来说,这就是一种将整数ID号和特定指针关联在一起的机制。这个机制最早是在2003年2月加入内核的,当时是作为POSIX定时器的一个补丁。现在,在内核的很多地方都可以找到idr的身影。idr机制适用在那些需要把某个整数和特定指针关联在一起的地方。举个例子,在I2C总线中,每个设备都有自己的地址,要想在总线上找到特定的设备,就必须要先发送该转载 2012-08-23 14:03:42 · 986 阅读 · 0 评论 -
Linux内核中等待队列的几种用法
Linux内核里的等待队列机制在做驱动开发时用的非常多,多用来实现阻塞式访问,下面简单总结了等待队列的四种用法,希望对读者有所帮助。1. 睡眠等待某个条件发生(条件为假时睡眠): 睡眠方式:wait_event, wait_event_interruptible 唤醒方式:wake_up (唤醒时要检测条件是否为真,如果还为假则继续睡眠,唤醒前一定要把条件变转载 2012-10-17 12:47:47 · 1641 阅读 · 0 评论 -
wait_event_interruptible 使用方法
1. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(), 而schedule()会将位于TASK_INTERRUPTIBLE状态的当前进程从runqueue转载 2012-10-25 19:35:00 · 56307 阅读 · 0 评论 -
init.rc语法
1.init时设置设备权限init可执行文件是Android系统运行的第一个用户空间的程序,它以守护进程的方式运行2. init.rc中的内容在Android中使用启动脚本init.rc,init启动脚本路径:system/core/rootdir/init.rc可以在系统的初始化过程中进行一些简单的初始化操作,init.rc脚本被直接安装到目标系统的根文件系统中,被ini转载 2012-12-13 16:17:49 · 882 阅读 · 0 评论 -
reqeust_firmware
作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至一点用作设备控制固件的 EEPROM 的成本制造商都不愿意花费. 因此固件发布在随硬件一起的一张 CD 上, 并且操作系统负责传送固件到设备自身.你可能想解决固件问题使用这样的一个声明:static char my_firmware[] = { 0x34转载 2012-12-13 18:31:47 · 665 阅读 · 0 评论 -
mdev的使用方法和原理
mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。mdemdev的使用在busybox中的mdev.txt文档已经将得很详细了。但作为例子,我简单讲讲我的使用转载 2013-01-22 14:09:32 · 578 阅读 · 0 评论 -
linux等待队列使用步骤
在Linux驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。wait queue很早就作为一种基本的功能单位出现在Linux内核里了,它以队列位基础数据结构,与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。等待队列可以用来同步对系统资源的访问。(信号量在内核中也依赖等待队列来实现). Linux-2.6提供如下关于等待队列的操作: (1转载 2013-01-10 10:10:07 · 844 阅读 · 0 评论 -
关于schedule_timeout
schedule_timeout这个函数除了对当前进程调用schedule之外,还有一个功能,如同其名字中暗示的,在指定的时间到期后(timeout了)将进程唤醒。我们知道,进程一旦进入睡眠状态,就会从cpu的run queue中移走,直觉是系统将不会维护散落到系统各处(等待队列等)的这些睡眠进程的时间信息,那么如何在指定的时间到期时唤醒这些进程呢?Linux内核使用了timer机制来完成,t转载 2013-01-10 10:59:17 · 1310 阅读 · 0 评论 -
从Uboot到Linux技术内幕
1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3. 文件系统。包括根文件系统和建立于 Flash转载 2013-10-18 10:26:47 · 1102 阅读 · 0 评论 -
Linux内核中的hash与bucket
哈希表哈希表(Hashtable)又称为“散列”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。 哈希函数(Hash Function)为根据索引键来返回数转载 2014-01-11 09:45:42 · 1385 阅读 · 0 评论 -
使用busybox制作rootfs
1 获取源码解压从busybox的官方主页http://www.busybox.net ,下载busybox的源码,目前最新的版本为busybox-1.13.3.tar.bz2#tar –jvxf busybox-1.13.3.tar.bz2进入解压后的busybox源码目录#cd busybox-1.13.32 配置busybox步骤跟编译转载 2014-02-08 11:59:25 · 1163 阅读 · 0 评论 -
fstab文件详解
1 fstab文件的作用文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过mount /directoryname命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、mount、umount的等命令都利用该程序。2. fstab文件格式下面是/etc/fatab文件的一个示转载 2014-02-19 21:21:03 · 1411 阅读 · 0 评论 -
workqueue
什么是workqueue?Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程, Workqueue机制的实现Workqueue机制中定义了转载 2012-06-11 20:08:38 · 484 阅读 · 0 评论 -
linux内核调度
摘要本章将为大家介绍内核中存在的各种任务调度机理以及它们之间的逻辑关系(这里将覆盖进程调度、推后执行、中断等概念、),在此基础上向大家解释内核中需要同步保护的根本原因和保护方法。最后提供一个内核共享链表同步访问的例子,帮助大家理解内核编程中的同步问题。 内核任务调度与同步关系引言对于从事应用程序开发的朋友来说,用户空间的任务调度与同步之间的关系相对简单,无转载 2012-05-15 10:41:29 · 3927 阅读 · 0 评论 -
linux2.6.36之后对工作队列的改进 .
linux自从引入工作队列之后,越来越多的工作都交给了它,工作队列有什么优点?有进程上下文?可延迟?是的,这些都是它的优点,但是总不能因为它的这些有限的优势而将所有的工作都交给它来做吧,可是驱动或者子系统的开发者却把它当成了银弹,动不动就create_workqueue,然后随便一个什么小小不言的动作就queue_work,结果呢?结果导致了内核空间充斥了大量的工作队列,这些工作队列的本质是每个工转载 2012-03-22 09:41:48 · 1185 阅读 · 0 评论 -
I2C总线的仲裁问题
【问】有网友问关于I2C总线的仲裁问题: The I2C-bus specification的第13页有这样的话:In other words, arbitration isn’t allowed between:* A repeated START condition and a data bit* A STOP condition and a data bit* A r转载 2012-02-21 10:22:42 · 7142 阅读 · 2 评论 -
Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{ time_t tv_sec; /***second***/ susecond_t tv_usec;/***microsecond***/}到底microsecond是毫秒还是微秒??转载 2012-02-18 14:24:15 · 24210 阅读 · 0 评论 -
container_of()宏
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the转载 2012-02-25 20:12:38 · 378 阅读 · 0 评论 -
自动创建设备结点
在Linux2.6内核中,devfs被认为是过时的方法,并最终被抛弃,udev取代了它。Devfs的一个很重要的特点就是可以动态创建设备结点。那我们现在如何通过udev和sys文件系统动态创建设备结点呢?下面通过一个实例,说明udev、sys动态创建设备结点的方法。注意代码中红色的部分是为了实现动态创建设备结点添加的。 #include #inc转载 2012-02-25 23:17:18 · 525 阅读 · 0 评论 -
va_start va_end
1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...); 2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include void fun(int a, ...){int *temp = &a;temp++;for (int转载 2012-03-07 15:58:22 · 406 阅读 · 0 评论 -
闲聊linux中的input设备(2)初次相识便好上 .
究竟何谓input设备,相信武汉跳蚤市场上卖宠物小狗的大妈都能一口答出来,你能不知道么?对,就是我们传说中的输入设备。说到输入设备,相信用过电脑的兄弟都不会陌生了,即按键、鼠标、键盘、等一系列需要我们用户“动手”产生信息,然后丢给我们聪明绝顶的pc来处理的设备。前面说了,linux内核input子系统中已经实现了input设备的接口函数,这使得我们工作量大大的减轻了。我们以akm8973芯片(用于转载 2012-03-13 08:54:12 · 1016 阅读 · 0 评论 -
sysfs接口的建立
函数宏 DEVICE_ATTR原型是#define DEVICE_ATTR(_name, _mode, _show, _store) \struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)函数宏DEVICE_ATTR内封装的是__ATTR(_name,_mode,转载 2012-03-12 14:22:30 · 1416 阅读 · 0 评论 -
工作队列分析 queue_work
一、用法 struct cpu_workqueue_struct { spinlock_t lock; long remove_sequence; /* Least-recently added (next to run) */ long insert_sequence; /* Next to add */ struct list_head worklist;转载 2012-03-16 13:40:09 · 8777 阅读 · 0 评论 -
Linux下regulator驱动程序分析
///*regulator 是驱动中电源管理的基础设施。要先注册到内核中,然后使用这些电压输出的模块get其regulator,在驱动中的init里,在适当时间中进行电压电流的设置.与 gpio 差不多? 一样是基础设施?*///Linux 内核的动态电压和电流控制接口功耗已经成为电子产品设计的首要考虑。//"LDO是 low dropout regulat转载 2012-03-15 15:21:13 · 17620 阅读 · 4 评论 -
gpio_request .
今天再次学习SD卡驱动,遇到pgio_request这个函数,始终不知道其什么意思,看了几遍源代码才有了点感觉。现将其关键部分再此说明一下,以备自己以后复习,或是路客参考。其原型为 int gpio_request(unsigned gpio, const char *label)先说说其参数,gpio则为你要申请的哪一个管脚,label则是为其取一个名字。其具体实现如下:int gp转载 2012-03-15 18:31:00 · 3251 阅读 · 1 评论 -
什么是proc文件系统
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。它的目录结构如下:目录名称 目录内容apm 高级电源管理信息cm转载 2012-03-20 18:07:30 · 680 阅读 · 0 评论 -
Linux中的work queue
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。1、2.6.转载 2012-03-20 18:08:39 · 576 阅读 · 0 评论 -
proc sys文件系统对比
一、proc文件系统proc文件系统常常被放置于Linux系统的/proc目录下,常常用于查看有关硬件、进程的状态,可以通过操作proc文件系统进行控制工作在include/proc_fs.h中,定义创建proc文件系统的函数extern struct proc_dir_entry *create_proc_entry(const char *name,mode_t mode,st原创 2012-04-06 19:57:33 · 2019 阅读 · 0 评论 -
startup.a51文件内容的详解
1。标号IDATALEN EQU 80H ; the length of IDATA memory in bytes.这里IDATALEN只是一个标号而已,和idata不是一回事!你要是愿意,这段程序里的IDATALEN你完全可以改成dog呀,pig呀,playboy呀这些标号(其实我的理想是过猪一样的生活,不愁吃喝,无忧无虑,可惜做不到),上面的这一句是说程序里转载 2014-03-24 15:36:45 · 9846 阅读 · 0 评论