- 博客(39)
- 资源 (26)
- 收藏
- 关注
原创 Linux的中断编程
<br />Linux提供了很多API函数用于中断编程,同时提供了几种底半部机制用于中断函数的实现。正确的使用它们,有利于优化需要实现的中断机制。.1 申请IRQ<br />static inline int __must_check<br />request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)<br />{<br /> re
2010-11-25 17:35:00 2010
原创 MX25上SD卡的插拨检测机制
<br />飞思卡尔开发板留有可插拨的SD卡卡槽,BSP包中提供了热插拨的检测机制。在sdhci_probe_slot函数中,gpio_sdhc_active函数初始化SD卡相关的GPIO口,包括SD卡检测脚的初始化。下面的程序实现SD卡检测中断号的申请,以及中断的触发方式:<br />host->detect_irq = platform_get_irq(pdev, 1);//申请卡检测中断号<br /> if (!host->detect_irq) <br /> {<br
2010-11-25 16:52:00 4943
转载 读linux2.6驱动的一点收获
<br />================================<br />Author: taoyuetao<br />Email:tao_yuetao@yahoo.com.cn<br />Blog:http://www.eetop.cn/blog/?11145<br />2006-11-21<br />================================<br />从2.6版本开始引入了platform这个概念,在开发底层驱动程序时,首先要确认的就是设备的资源信息,例如设备的地址
2010-11-25 14:21:00 763
转载 fedora系统的时间同步
近期发现我的fedora系统,时间过慢,所以想实现服务器跟网络时间服务器的同步;在网上搜索了一些资料,发现有两种方法, 一种是用xntpd,可以调整时间的频率并修改到bios里去,但觉得这类做法过于复杂还有可能影响到服务器的运行,该方法的优势也明显调试好以后一劳永逸,对应用不会有任何影响; 另一种是采用ntpdate,该方法就是使用这个工具去跟网上的时间服务器进行同步,但这里就需要做一个任务多长时间去同步一次,该方法简单设置容易,对服务器没有什么影响,但缺点也明显就是时间不是很准确,但对时间要求
2010-11-25 11:49:00 3897
转载 shell下的文件测试操作命令
<br />文件测试操作<br />----------------<br />返回true如果...<br /> <br />-e 文件存在<br />-a 文件存在<br /> 这个选项的效果与-e相同.但是它已经被弃用了,并且不鼓励使用<br />-f file是一个regular文件(不是目录或者设备文件)<br />-s 文件长度不为0<br />-d 文件是个目录<br />-b 文件是个块设备(软
2010-11-24 17:13:00 687
转载 request_irq() | 注册中断服务
<br />在 2.4 内核和 2.6内核中都使用 request_irq() 函数来注册中断服务函数。在 2.4 内核中,需要包含的头文件是 #include <linux/sched.h> ,2.6 内核中需要包含的头文件则是<br /> #include <linux/interrupt.h> 。函数原型如下:<br />2.4 内核<br />intrequest_irq (unsignedintirq,void (*handler)(int,void*,structpt_regs*),unsign
2010-11-23 23:24:00 1033
转载 基尼系数
<br />基尼系數(Gini coefficient),或譯堅尼系数、吉尼系数,是20世纪初意大利学家基尼(Corrado Gini),根据劳伦茨曲线所定義的判断收入分配公平程度的指标。是比例數值,在0和1之間。基尼指数(Gini index)是指基尼系數乘100倍作百分比表示。<br /> <br />设下圖中的实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际收入分配曲线右下方的面积为B。并以A除以A+B的和表示不平等程度。这个数值被称为“基尼系数”或“劳伦茨係数[來源請求]”。如果A为零,即
2010-11-23 12:49:00 3200 1
转载 fopen()和fclose()的用法
1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。如:"B:TEST.DAT""C://TC//TEST.DAT"注意:如果将路径写成"C:/TC/TEST.DAT"是不正确的, 这一点要特别注意。fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE
2010-11-23 10:24:00 1120 1
转载 Waitqueue、Event及Semaphore的实现机制分析
<br />Waitqueue、Event及Semaphore的实现机制分析<br />Sailor_forever sailing_9806@163.com 转载请注明<br /> <br />【摘要】本文分析了内核同步及互斥的几种机制Waitqueue、Event及Semaphore的实现,详细分析了其实现流程。Event及Semaphore本质上都是基于Waitqueue和自旋锁实现的。总结了静态定义及动态初始化数据结构的相关规则,这对于自定义的数据类型具有重要的借鉴意义。<br />【关键词】Wai
2010-11-22 22:54:00 985
转载 Linux中的File_operations结构体
<br />File_operations结构体<br /> file_operation就是把系统调用和驱动程序关联起来的关键数据结构。这个结构的每一个成员都对应着一个系统调用。读取file_operation中相应的函数指针,接着把控制权转交给函数,从而完成了Linux设备驱动程序的工作。<br /> 在系统内部,I/O设备的存取操作通过特定的入口点来进行,而这组特定的入口点恰恰是由设备驱动程序提供的。通常这组设备驱动程序接口是由结构file_operations结构体向系统说明的,它
2010-11-22 21:59:00 751
转载 misc_register、 register_chrdev 的区别总结
<br />杂项设备(misc device)<br />杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include/linux目录下有Miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10 ,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的。 <br />也就是说,misc设备其实也就是特殊的字符设备
2010-11-22 21:32:00 765
转载 内核sem、wait_queue_head_t、timer和kernel_thread使用驱动范例
<br />浅析linux内核中sem、wait_queue_head_t、timer和kernel_thread使用驱动范例<br /><br />#include<linux/sched.h><br /><br />#define __TIMER_TEST_MOD1 1<br />#define __TIMER_TEST_MOD2 2<br />#define __TIMER_TEST_MOD3 3<br />#define __TIMER_TEST_MOD4 4<br />#define __TIME
2010-11-22 17:49:00 1477
原创 嵌入式Linux操作系统的版本查询
<br />嵌入式Linux版本查询:<br />uname -a <br />显示内核版本<br />uname -m <br />显示ARM处理器内核信息<br />uname -v<br />显示操作系统的编译时间<br />linux版本:在linux/utsrelease.h中定义:<br />#define UTS_RELEASE "2.6.31-liuqiming@xinguodu.com--g3ef6ae4-dirty"<br />utsrelease.h是kernel编译后自动生成的,
2010-11-22 17:08:00 7603
转载 start_kernel 分析
<br />一位大师级的人物写的,不看要后悔的哟!!<br />如果以为到了c代码可以松一口气的话,就大错特措了,linux的c也不比汇编好懂多少,相反到掩盖了汇编的一些和机器相关的部分,有时候更难懂。其实作为编写操作系统的c代码,只不过是汇编的另一种写法,和机器代码的联系是很紧密的。 <br />start_kernel在 /linux/init/main.c中定义: <br />asmlinkage void __init start_kernel(void) { char * command_
2010-11-22 16:40:00 2234
原创 WORD2007转PDF时包含书签
word 2007 转成 pdf ,带书签的操作方法<br /> <br />1.安装 2007 Microsoft Office <br />加载项:Microsoft SaveasPDF<br />http://www.microsoft.com/downloads/details.aspx?FamilyId=F1FC413C-6D89-4F15-991B-63B07BA5F2E5&displaylang=zh-cn <br /> <br />2. 打开word文档点击“另存为” 选择 pdf <b
2010-11-19 17:33:00 1332
原创 MX25的SPI驱动
<br />MX25的SPI驱动,和大多数平台的SPI驱动都有相似之处。这里有三个非常关键的文件:mxc_spi.c,spi.c,spidev.c,路径都在kernel/drivers/spi下。其中spi.c为驱动与驱动之间的调用接口,spidev.c为应用与驱动之间的调用接口,mxc_spi.c为驱动的最底层代码,直接操作SPI的相关寄存器。下面分别从驱动间调用SPI驱动和应用层调用SPI驱动两条路分析SPI驱动的实现过程。1. 驱动中调用SPI驱动<br />在kernel/arch/arm
2010-11-19 17:27:00 4917
原创 linux驱动中使用static关键字的重要性
<br />linux内核十分宠大,代码量超过百万行。对于C语言的函数和全局变量的作用空间都是<br />全局的,在另外一个文件中,使用extern关键字就可以实现对于其他文件中的全局变量<br />和函数的访问。因此,一旦源码中函数名称定义相同,就会出现编译出错。因此,需要<br />引入一些封装的特性,限制源码中函数和变量作用的空间。在前面添加static关键字,<br />其作用范围将缩小到仅仅为当前的文件,而不是整个系统。因此在平时写驱动时,如果<br />函数不需要被其他文件中引用,在前面添加st
2010-11-17 17:31:00 3864 1
原创 linux内核常用宏实例【三】
<br />linux内核常用宏实例【三】<br />linux平台下驱动与应用间互传数据,通过下面四个宏实现:<br />copy_from_user:从用户空间的缓冲区复制数据到内核空间的缓冲区<br />copy_to_user:从内核空间的缓冲区复制数据到用户空间的缓冲区<br />get_user:从用户空间获得指定类型的数据<br />put_user:向用户空间写入指定类型的数据<br />在SPI驱动中,get_user和put_user的使用实例如下:<br />retval = __pu
2010-11-17 17:19:00 1466
原创 linux内核常用宏实例【二】
<br />linux内核常用宏实例【二】<br />在linux驱动中,通常都会使用module_init函数加载模块。比如SPI驱动中:<br />static int __init spidev_init(void){ int status; /* Claim our 256 reserved device numbers. Then register a class * that will key udev/mdev to add/remove /dev nodes. La
2010-11-17 16:58:00 939
原创 linux内核常用宏实例【一】
<br />linux内核常用宏实例【一】<br />/* Force a compilation error if condition is true */#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])<br />如果条件为真则引起一个编译时错误。<br />使用实例:<br />static int __init spidev_init(void){ int status; /* C
2010-11-17 14:34:00 1097
原创 printf语句打印
<br />printf语句打印: <br />d,lx,ld,lu //32位输出 <br />hd,hx,hu //16位输出<br />hhd,hhx,hhu, //8位输出 <br />lld,ll,llu,llx, //64位输出 <br /> <br />%lld //10进制64位有符号数<br />%llu //10进制64位无符号数(u64)
2010-11-17 09:46:00 1556
转载 linux中断处理浅析
<br /> 最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~<br /><br />[第一阶段]<br />每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序.<br />在进入中断服务程序时, CPU已经自动禁止了本CPU上的中断响应, 因为CPU不能假定中断服务程序是可重入的.<br />中断处理程序的第一步要做两件事情:<br /
2010-11-16 22:19:00 978
转载 使用工作队列
5" cols="20" id="ctl00_ctl00_cphContent_cphDoc_EntryEditor1_txbExcerpt" class="textbox">
2010-11-16 22:14:00 804
转载 SPI驱动分析
<br />所有挂接到SPI接口的SPI设备都是作为字符设备存在于内核,这些字符设备的操作函数集在文件spidev.c中实现。<br />static struct file_operations spidev_fops = {<br /> .owner = THIS_MODULE,<br /> .write = spidev_write,<br /> .read = spidev_read,<br /> .unlocked_ioctl = spidev_ioctl,<br /> .open = spi
2010-11-16 22:13:00 4392
转载 Request_irq和setup_irq的区别
<br /><br />Author: Dongas<br />Data: 08-07-19<br /> <br />Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。<br /> <br /><br />/*<br /> * Internal function to register an irqaction - typically used to<br /> * allocate special
2010-11-15 23:05:00 769
转载 linux2.6内核下的一个按键中断驱动程序示例
<br />/**********************start*******************************/#include <linux/config.h>#include <linux/module.h>#include <linux/version.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/fs.h>#include <asm/hardware.h>#inc
2010-11-15 22:18:00 977
转载 Linux 内核的WorkQueues API做了修改
<br /> WorkQueue机制允许内核代码在晚一点的时间执行。Workqueue通过存在的一个或者多个专门的进程实现,去执行队列工作。因为在进程的上下文汇总执行,因此如果需要,其可以sleep。WorkQueue也可以延迟特定时间执行工作。所以它们在内核中许多地方使用。<br />David Howells最近检查workqueue时发现work_struct(用来描述一个程序执行)是相当大的,在64-bit机器上有96bytes,这是相当大的数据结构,因为很多地方都使用这个结构。因此他想出
2010-11-15 21:52:00 1551 1
转载 使用NFS时在防火墙上要开放的端口
<br />在设置了防火墙的环境中使用NFS,需要在防火墙上打开如下端口:<br />1. portmap 端口 111 udp/tcp;<br />2. nfsd 端口 2049 udp/tcp;<br />3. mountd 端口 "xxx" udp/tcp<br />系统 RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768--65535)来进行通讯,我们可以通过编辑/etc/services 文件为 mountd指定一个固定端口:<br /># vi /etc/ser
2010-11-12 18:56:00 82652 1
原创 linux终端快捷键汇总
<br />1. 标签页<br />Shift+Ctrl+T:新建标签页 <br />Shift+Ctrl+W:关闭标签页 <br />Ctrl+PageUp:前一标签页 <br />Ctrl+PageDown:后一标签页 <br />Shift+Ctrl+PageUp:标签页左移 <br />Shift+Ctrl+PageDown:标签页右移 <br />Alt+1:切换到标签页1 <br />Alt+2:切换到标签页2 <br />Alt+3:切换到标签页3 <br />2. 窗口<br />Shift
2010-11-10 09:19:00 1478
转载 platform_device_add()函数分析
<br /><br />看2410的驱动,始终没弄清楚设备和总线是如何勾搭上的,顺藤摸瓜就找到了下面这个函数,好好的分析一下吧。对驱动模型理解的不是太透彻,不对的地方您尽管仍(最好是鸡蛋,现在都买不起了)<br /> <br />int platform_device_add(struct platform_device *pdev)<br />{<br />int i, ret = 0;<br />if (!pdev) /*验证指针的有效性 */<br /> return -EINVAL
2010-11-07 14:26:00 1242
转载 platform_driver_probe与platform_driver_register的区别
<br /><br />Platform Device and Drivers<br />从<linux/platform_device.h>我们可以了解Platform bus上面的驱动模型接口:platform_device,platform_driver。和PCI和USB这些大结构的总线不同,虚拟总线Platform bus使用最小结构来集成SOC processer上的各种外设,或者各种“legacy”之间的互联。<br />Platform device<br />典型的Platform
2010-11-07 14:16:00 904
转载 Kernel中断处理模型
<br />内核版本: Linux 2.6.18_pro500 (Montavista) <br /> <br />Kernel中断处理模型结构图如下:<br /><br />下面简单介绍一下:<br />1.Linux定义了名字为irq_desc的中断例程描述符表:(include/linux/irq.h)<br /> struct irqdesc irq_desc[NR_IRQS];<br />NR_IRQS表示中断源的数目。<br />2.irq_desc[]是一个指向irq_desc_t结构的
2010-11-05 14:32:00 668
转载 2410下rtc驱动分析
<br />首先RTC设备是一种片上设备, 用platform_device来表示该设备(即platform_device的RTC对象)在设备的初始化过程中就已经注册进了系统(可以参考2410下soc上的设备的驱动流程(RTC, watchdog等)), 因此我们在RTC驱动的初始化里把RTC驱动注册到系统后,系统会probe到这个RTC设备,最后调用我们RTC驱动的probe函数.<br />下面就重点分析2410的RTC驱动.<br />首先是初始化函数和退出函数:<br />static void _
2010-11-05 14:21:00 776
转载 Kmalloc内存分配
<br />Kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零。<br />Flags参数<br />#include<linux/slab.h><br />Void *kmalloc(size_t size, int flags);<br />第一个参数是要分配的块的大小,第二个参数是分配标志(flags),他提供了多种kmalloc的行为。<br />最常用的GFP_KERNEL,他表示内存分配(最终总是调用get_free_pages来实现实际的分配,这就
2010-11-05 14:16:00 3859
转载 在驱动模块初始化函数中实现设备节点的自动创建
<br />作者:杨硕,华清远见嵌入式学院讲师。<br />我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。<br />内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,
2010-11-05 14:13:00 821
转载 利用udev在/dev下动态生成/移除设备文件
<br />用udev在/dev/下动态生成设备文件,这样用户就不用手工调用mknod了。 <br /><br /><br />利用的kernel API: <br /> <br /> class_create : 创建class <br /> class_destroy : 销毁class <br /> class_device_create : 创建device <br /> class_device_destroy
2010-11-05 13:58:00 862
转载 等待队列
<br />How Processes Are Organized<br />------------------------------------ <br /> The runqueue lists group all processes in a TASK_RUNNING state. When it comes to grouping processes in other states, the various states call for different types of tre
2010-11-05 13:53:00 603
原创 使用rz/sz在开发板和PC机上互传数据
<br />当我们生成了测试程序之后,需要将该程序拷备到开发板的根文件系统以备调用。通常我们可以将测试程序拷备到SD卡或是U盘,然后将他们挂载到开发板的根文件系统。但是每次都得拨插U盘或SD卡,经历重复的拨插拷备工作,仍然还是很费事。这时rz/sz工具就有用武之地了。<br />默认使用busybox制作的文件系统是不支持rz/sz功能的,我们需要手动的安装。<br />第一步:网上下载rz/sz工具rzsz-3.48.tar.gz,网络连接如下:<br />http://freeware.sgi.com/
2010-11-03 14:07:00 4061
原创 ultraedit[UE]在编辑文本文件时,总是提示是否转换为DOS格式
<br />ultraedit[UE]在编辑文本文件时,总是提示是否转换为DOS格式,每次<br /> <br />都出这样的提示,很麻烦,解决办法:<br /> <br />在UE菜单下,点击<br />高级->配置->文件处理->DOS/UNIX/MAC处理<br />在右边的unit/mac文件检测/转换中选择禁用或是自动转换到DOS格式即可。<br /> <br />原因:<br /> <br />文件格式区别<br />我们先看看这三个家伙有啥区别。很久以前,人们用老式的电传打字机作为输入设备,它
2010-11-03 09:50:00 16426 3
九鼎创展x4418开发板裸机教程
2015-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人