随笔分类 -  Linux驱动

摘要:linux内核打印"BUG: scheduling while atomic"和"bad: scheduling from the idle thread"错误的时候,通常是在中断处理函数中调用了可以休眠的函数,如semaphore,mutex,sleep之类的可休眠的函数,而linux内核要求在中断处理的时候,不允许系统高度,不允许抢占,要等到中断处理完成才能做其他事情。因此,要充分考虑中断处理的时间,一定不能太久。另外一个能产生此问题的是在idle进程里面,做了不该做的事情,现在Linux用于很多手持式设备,为了降低功耗,通常的作法是在idle进程里 阅读全文
posted @ 2011-11-25 17:45 夏大王 阅读(2490) 评论(0) 推荐(1)
摘要:Linux: 2.6.31Processor: AT91SAM9XEThere are two types of interrupts you can create for an AT91. An external interrupt or a GPIO interrupt. An external interrupt does not have the additional overhead of going through the GPIO controller. I will explain how to create an external and GPIO interrupt for 阅读全文
posted @ 2011-11-21 12:40 夏大王 阅读(971) 评论(0) 推荐(0)
摘要:Unbalanced enable for IRQ 171Unbalanced enable for IRQ 171--------------------------------------------------------Hi Greg,I am sorry, it is my mistake. My colleague (harrY) told me about disable_irq, enable_irq which I missed disable_irq() before tasklet_sched() That obviously will cause Unbalanced 阅读全文
posted @ 2011-11-18 18:49 夏大王 阅读(1230) 评论(0) 推荐(0)
摘要:Using a Practical Project WorkspaceIn the course of developing and customizing software for your target, you will need to organize various software packages and project components in a comprehensive and easy-to-use directory structure. Table 4-1 shows a suggested directory layout you may find useful 阅读全文
posted @ 2011-11-03 11:12 夏大王 阅读(552) 评论(0) 推荐(0)
摘要:什么是SPI的bitbang/bit-bang:Use software to control serial communication at general-purpose I/O pins通过GPIO引脚,用软件来模拟串行通信(SPI/I2C 。。。)。对于多数情况来说,我们所用的SPI,都是有对应的SPI的主控制器的,其负责和外部SPI设备进行通信,负责两者通信时候的信号之间的同步,保证信号的timing都符合SPI协议,保证可以正常进行SPI通信。但是硬件上没有SPI控制器,而还想要和SPI设备通信,那么就只能用GPIO端口去模拟:片选CS,数据输入Data In,数据输出Data O 阅读全文
posted @ 2011-10-27 13:49 夏大王 阅读(473) 评论(0) 推荐(1)
摘要:Linux驱动修炼之道-SPI驱动框架源码分析(上) SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式。相关通讯设备可工作于m/s模式。主设备发起数据帧,允许多个从设备的存在。每个从设备有独立的片选信号,SPI一般来说是四线串行总线结构。接口:SCLK——Serial Clock(output from master)时钟(主设备发出)MOSI/SIMO——Master Output, Slave Input(output from master)数据信号线mosi(主设备发出)MISO/SOMI——Master Input,Slave Outpu(output 阅读全文
posted @ 2011-10-26 19:56 夏大王 阅读(1664) 评论(0) 推荐(0)
摘要:linux设备模型之spi子系统===============================本文系本站原创,欢迎转载!转载请注明出处:http://blog.csdn.net/gdt_a20=============================== 相比于前面介绍的i2c子系统,spi子系统相对简单,和i2c的结构也很相似,这里主要介绍一下平台无关部分的代码。先概括的说一下,spi总线或者说是spi控制器用结构体struct spi_master来表述,而一般不会明显的主动实现这个结构而是借助板级的一些信息结构,利用spi的模型填充,存在板级信息的一条链表board_list,上面挂接着 阅读全文
posted @ 2011-10-26 19:20 夏大王 阅读(1594) 评论(0) 推荐(0)
摘要:杂项设备(misc device)杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include\linux目录下有Miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10 ,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的。 也就是说,misc设备其实也就是特殊的字符设备,可自动生成设备节点。 字符设备(char device) 使用register_chrdev(LED_MAJOR,DEVI 阅读全文
posted @ 2011-10-06 23:32 夏大王 阅读(508) 评论(0) 推荐(0)
摘要:module_init(scull_init_module); 驱动程序中第一个运行的函数:scull_init_module 但我们执行命令insmod scull.ko, 即开始运行如下的函数完成模块的初始化。 模块初始化都要完成那些功能呢? 1.完成设备号的注册。 设备号分为两部分,主设备号与次设备号。 其中主设备号通常标识设备对应的驱动程序,此设备号由内核使用,用于正确确定设备... 阅读全文
posted @ 2011-09-01 23:16 夏大王 阅读(616) 评论(0) 推荐(0)
摘要:向自己道歉,没能抽出更多的时间,进度如此的慢。 现在想认真学习下scull模块的这个初始化脚本 scull_init.sh #!/bin/bash# Sample init script for the a driver module <rubini@linux.it>DEVICE="scull"SECTION="misc"# The list of filenames and mino... 阅读全文
posted @ 2011-08-25 23:12 夏大王 阅读(453) 评论(0) 推荐(0)
摘要:一、今天在编译ldd3上的scullc的时候,出现如下错误: 刚开始我以为没有包含头文件,然后我就去查2.6.39.1的源代码,结果在所有的符号中都没有发现init_MUTEX,后面在网站上发现了init_MUTEX的定义,如下所示: 源码衔接: http://lxr.oss.org.cn/source/include/asm-i386/semaphore.h#L89 上面的源码是... 阅读全文
posted @ 2011-08-24 19:10 夏大王 阅读(3462) 评论(1) 推荐(1)
摘要:大部分的基础性的驱动操作包括 3 个重要的内核数据结构, 称为 file_operations, file, 和 inode. 需要对这些结构的基本了解才能够做大量感兴趣的事情, 到现在, 我们已经保留了一些设备编号给我们使用, 但是我们还没有连接任何我们设备操作到这些 编号上,file_operation 结构是一个字符驱动如何建立这个连接. 这个结构, 定义在 <linux/fs.h>, 是一 个函数指针的集合. 每个打开文件(内部用一个 file 结构来代表, 稍后我们会查看)与它自身的函数集 合相关连( 通过包含一个称为 f_op 的成员, 它指向一个 file_opera 阅读全文
posted @ 2011-08-19 23:39 夏大王 阅读(638) 评论(0) 推荐(0)
摘要:编译此模块,出了几个错误,记录如下我的环境,安装的Linux是ubuntu11.041、提示scripts/Makefile.build:46:*** CFLAGS was changed in "/home/chenfang/scull/Makefile",Fix it use EXTRA_CFLAGS.Stop.:由于LDD3使用的是2.6.10内核,很多东西已经发生了变化,这里提示我们修改Makefile中的CFLAGS,用EXTRA_CFLAGS 代替,照它说的做就可以。2、提示找不到文件linux/config.h: 在2.6.19开始的内核中删除了config. 阅读全文
posted @ 2011-08-18 22:57 夏大王 阅读(347) 评论(0) 推荐(0)
摘要:最简单的Linux模块,先用它来入个门,1.看一下我们的环境是否正常;2.简单的驱动模块,有那些东西构成!/* * $Id: hellop.c,v 1.4 2004/09/26 07:02:43 gregkh Exp $ */ #include <linux/init.h>#include <linux/module.h>#include <linux/moduleparam.h>MODULE_LICENSE("Dual BSD/GPL");/* * These lines, although not shown in the book, 阅读全文
posted @ 2011-08-18 21:56 夏大王 阅读(472) 评论(0) 推荐(0)
摘要:安装内核http://book.51cto.com 2008-03-07 13:44 黄永兵译 51CTO.com 我要评论(0)摘要:《详解定制一个Liunx内核》主要讲的是为你的服务器和桌面计算机建立一个定制的linux内核。本文是安装内核部分。标签:linux内核安装内核首先,我们不要将之前的配置人为地损坏,正确安装我们的新内核必须要保证安全。运行make modules_install模块来将模块安装到/lib/modules下,并将内核映像文件拷贝到/boot目录,包括redhat在内的许多发行版都基于这个目录启动的。但是在有的系统中可能是在/目录下,同时我们还要将System.ma 阅读全文
posted @ 2011-08-12 00:06 夏大王 阅读(385) 评论(0) 推荐(0)
摘要:By Tomcat on 2011 年 01 月 27 日 为什么要自己编译Ubuntu内核呢? Ubuntu的缺省内核安装包的发布版一般会有i386和amd64两个版本,分别对应32位和64位系统。为了保持最大的兼容性,这两个版本的gcc编译参数分别march 386和Pentium4。 但目前大部分的服务器都更换为Core2架构的CPU,支持SSE4以上的指令集,Ubuntu发布的安装包并没有针对Core2 CPU进行优化,浪费了CPU的性能。 因此我们可以从Ubuntu官方的git下载最新发布的源代码,调整优化参数,编译出根据自己CPU优化的版本。 本文其实是参考Peter van de 阅读全文
posted @ 2011-08-10 22:51 夏大王 阅读(1703) 评论(0) 推荐(1)
摘要:ldd3中开始有一个makefile文件,英文注释很详细,加上简要中文注释,如下# To build modules outside of the kernel tree, we run "make"# in the kernel source tree; the Makefile these then includes this# Makefile once again.# This conditional selects whether we are being included from the# kernel Makefile or not.ifeq ($(KERN 阅读全文
posted @ 2011-08-09 21:10 夏大王 阅读(307) 评论(0) 推荐(0)