linux 驱动
文章平均质量分 85
sukhoi27smk
学习是为了探索这个世界的本质
展开
-
Linux workqueue工作原理
1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程. 工作队列(workqueue)是另外一转载 2016-06-01 14:26:30 · 419 阅读 · 0 评论 -
Linux下TI omap芯片 MUX 配置分析(以AM335X芯片为例)
在移植内核的时候,通常会遇到引脚复用(MUX)的配置问题。在现在的Linux内核中,对于TI的ARM芯片,早已经有了比较通用的MUX配置框架。这对于许多TI的芯片都是通用的,这次看AM335X的代码顺手写一下分析,以备后用。一、硬件 对于许多TI的芯片来说,引脚复用的配置是在Control Module(配置模块)的寄存器里配置的,(这个和三星的CPU有点不同,三星的一般在GPI转载 2014-06-05 09:51:41 · 841 阅读 · 0 评论 -
/sys/class/gpio 文件接口操作IO端口(s3c2440)
在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers —> GPIO Support —>转载 2014-05-21 09:48:51 · 4000 阅读 · 1 评论 -
Linux驱动模块编译进内核中
BQ27501驱动编译进内核一、 驱动程序编译进内核的步骤在 linux 内核中增加程序需要完成以下三项工作: 1. 将编写的源代码复制到 Linux 内核源代码的相应目录;2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项; 3. 在目录的 Makefile 文件中增加对新源代码的编译条目。 bq27501驱动编译到内核中具体转载 2014-03-31 07:16:02 · 798 阅读 · 0 评论 -
Nand Flash Yaffs系统大量写入数据失败问题的解决方法。
一个朋友的问题,我们共同分析后搞定。其实以前也遇到过同样问题,时间长了,没总结。 事发:在Nand Flash上使用2.6.14的linux kernel,三星2440的板子,连续写入文件,到一定大小限制就删除,文件写入没有超过flash保留10%的空闲,应该说还差很多。 第一步,不适用syslog写,换做自己写代码写入,出现几率降低;第二步,fwrite换成write,几率增转载 2013-11-12 22:12:00 · 2868 阅读 · 0 评论 -
u-boot环境变量设置
这是我uboot的环境变量设置,在该设置下可以运行initram内核(从内存下载到nandflash再运行),但是运行nfs根文件系统的时候一直出错,各种错误。查看了很多资料后猜想应该是uboot传递给linux内核的参数有问题,也就是bootargs的设置有问题。#printenv bootargs=noinitrd root=/dev/mtdblock3init=/linuxr转载 2013-11-08 10:10:39 · 1345 阅读 · 0 评论 -
Linux操作系统内核启动参数详细解析
Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。Li转载 2013-11-07 22:49:57 · 902 阅读 · 0 评论 -
u-boot向linux内核传递启动参数
U-BOOT 在启动内核时,会向内核传递一些参数.而这些参数是通过 structtag来传递的。U-boot把要传递给 kernel的东西保存在 struct tag数据结构中,启动kernel时,把这个结构体的物理地址传给 kernel;Linux kernel通过这个地址分析出u-boot传递的参数。 例如u-boot-1.3.4在arm平台下,该函数的实现位转载 2013-11-06 11:48:50 · 1018 阅读 · 0 评论 -
Linux内核参数的介绍
sysctl -a 可以列出当前所有的Linux内核参数。/proc/sys/目录下的东西,对应着sysctl -a列出来的。man 5 procsyscall 在 /arch/i386/kernel/entry.S里面列出来,这个看起来可能更方便转载 2013-11-06 11:33:01 · 743 阅读 · 0 评论 -
Linux内核参数传递Tag
在2.4(具体哪个版本记不清了)以后的Linux内核中引入了一种新的向内核传递参数的方法tag标记。内核参数通过一个静态的tag链表在启动的时候传递到内核。每个tag的结构为 +-----------+ tag_header +-----------+转载 2013-11-06 11:27:39 · 1738 阅读 · 0 评论 -
BootLoader与Linux内核的参数传递
在嵌入式系统中,BootLoader 是用来初始化硬件,加载内核,传递参数。因为嵌入式系统的硬件环境各不相同,所以嵌入式系统的BootLoader 也各不相同,其中比较通用的是U-Boot,它支持不同的体系结构,如ARM,PowerPC,X86,MIPS 等。本文着重介BootLoader与内核之间参数传递这一基本功能。本文的硬件平台是基于AT91RM9200 处理器系统,软件平台是Linux-2转载 2013-11-06 11:15:53 · 879 阅读 · 0 评论 -
linux内核中分配4M以上大内存的方法
在内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数, "if (unlikely(order >= MAX_ORDER)) return NULL;"), page的大小一般是4K bytes,MAX_ORDER缺省定义为11, 所以如果不修改内核, kmalloc能够分配的最大连续内存一般是4M转载 2013-11-06 10:40:49 · 1314 阅读 · 0 评论 -
Linux Kconfig及Makefile学习
内核源码树的目录下都有两个文档Kconfig(2.4版本是Config.in)和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在内核配置makemenuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。在内核编译时,主Makefile调用这个.config,就知转载 2013-11-04 22:35:19 · 835 阅读 · 0 评论 -
关于linux kernel编译的几项关键点:
1. make参数: CROSS_COMPILE即交叉编译器的前缀(prefix),也就是选择将代码编译成目标cpu的指令的工具,如指定makeCROSS_COMPILE=arm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc,arm-none-linux-gnueabi-ld等工具将代码编译成arm的可执行指令。如果不指定CROSS_COM转载 2014-09-11 15:55:02 · 659 阅读 · 0 评论 -
linux驱动中使用定时器
我的内核是2.4.18的。Linux的内核中定义了一个定时器的结构:#includestruct timer_list { structlist_head list;unsigned long expires; //定时器到期时间unsigned long data; //作为参数被传入定时器处理函数void (*function)(unsigned long);转载 2014-10-24 14:59:48 · 999 阅读 · 0 评论 -
linux网络设备—mdio总线
一.结构体struct mii_bus { const char *name; //总线名 char id[MII_BUS_ID_SIZE]; //id void *priv; //私有数据 int (*read)(struct mii_bus *bus, int phy_id, int regnum); //读方法 int (*write)(struct mii_bus *bus,转载 2014-11-04 18:05:23 · 8472 阅读 · 0 评论 -
linux中 likely与unlikely
看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_e转载 2016-05-13 16:55:20 · 834 阅读 · 0 评论 -
ELF文件和BIN文件
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmli转载 2016-03-02 12:03:24 · 975 阅读 · 0 评论 -
.config 和 kconfig以及 makefile的关系
当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile。主要是分析一下三者之间的关系,然后就其语法简要的谈一下。当我们在内核源码目录下执行make (或者make menuconfig等命令)命令时,实际上是根据makefile 来进行编译的。我在mini2440开发板上编写了一个按键控制led灯的驱动。文转载 2015-12-19 15:23:21 · 1688 阅读 · 0 评论 -
linux2.6内核Makefile详解
熟悉内核的Makefile对开发设备驱动、理解内核代码结构都是非常重要的linux2.6内核Makefile的许多特性和2.4内核差别很大,在内核目录的documention/kbuild/makefiles.txt中有详细的说明。给大家一个中文版的翻译=== 目录 === 1 概述 === 2 用户与作用 === 3 Kbuild文件转载 2015-12-19 11:30:08 · 1474 阅读 · 0 评论 -
如何将多个源文件编译为一个.ko
陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。 无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。但是,在.h文件中写函数的实现总感觉怪怪的。 今天查看了以下Kbuild的文档,有如下描述[c-sharp] view plaincopyIf转载 2015-12-15 21:41:20 · 650 阅读 · 0 评论 -
build linux kernel的错误
cc1: error: unrecognized command line option "-mlittle-endian"cc1: error: unrecognized command line option "-mapcs"cc1: error: unrecognized command line option "-mno-sched-prolog"cc1: error: unr转载 2015-09-20 15:31:21 · 623 阅读 · 0 评论 -
make xxx_defconfig 过程分析
/********************************************************************************* @author Maoxiao Hu* @version V1.0.0* @date Dec-2014***********************************转载 2015-10-16 19:51:45 · 4065 阅读 · 0 评论 -
制作.ppm格式Linux内核启动logo
在做的产品中,采用默认的小企鹅做logo肯定是不行的,所以一定要替换个像样的企业logo图片! 以前做过Linux启动Logo,时间太久,给忘了,所以再从新研究下。 经过在网上的搜索,和实际验证,制作Linux启动logo的步骤如下: 1、在Linux系统中安装所需的包netpbm。我用的Fedora 10,刚开始安装命令是yum转载 2013-09-23 11:50:46 · 5559 阅读 · 0 评论 -
Linux内核Crash分析
http://blog.chinaunix.net/uid-20788636-id-4377271.html 在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。每一个进程的生命周期内,其生命周期的范围为几毫秒到几个月。一般都是和内核有交互,例如用户空间程序使用系统调用进入内核空间。这时使用的转载 2015-04-16 17:03:26 · 826 阅读 · 0 评论 -
磁盘的磁道(Track)
写这篇文章,主要是为了解决长久以来的一个困惑。由此也可以看出偶以前确实不太聪明。 哈哈(虽然现在仍然还是)以前见到的很多磁道的示意图都是这样的:注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解释是说磁道就是一个“同心圆”的集合那么,我的疑问就是,既然那条线是同心圆,那么两条线之间的那快空白是什么呀? 什么也不是? 空着的? 就是为了分开磁道?晕倒。转载 2015-01-10 22:32:30 · 1153 阅读 · 0 评论 -
我使用过的Linux命令之hwclock - 查询和设置硬件时钟
用途说明hwclock命令,与clock命令是同一个命令,主要用来查询和设置硬件时钟(query and set the hardware clock (RTC))。RTC=Real Time Clock,也就是硬件时钟。在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中 的时钟。所有Linux相转载 2014-11-07 10:27:38 · 1211 阅读 · 0 评论 -
使用内存文件系统
在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk。RamDisk有三种实现方式:· 第一种就是传统意义上的,可以格式化,然后加载。 这在Linux内核2.0/2.2就已经支持,其不足之处是大小固定,之后不能改变。 为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两转载 2014-11-06 11:19:18 · 670 阅读 · 0 评论 -
Linux Kbuild文档 3
3. Kbuild MakefileLinux内核源代码是通过Makefile组织编译的,Linux2.6内核Makefile的许多特性和2.4内核差别很大,在内核目录的documention/kbuild/makefiles.txt中有详细的说明。3.1 Makefile的组织结构Linux内核的Makefile分为5个部分,如表6所示:表6 Makefile的5个部分转载 2013-11-04 22:27:29 · 867 阅读 · 0 评论 -
Linux Kbuild文档 2
2. Kconfiglinux在2.6版本以后将配置文件由原来的config.in改为Kconfig,对于Kconfig的语法在内核源代码/Documentation/kbuild/kconfig-language.txt中做了详细的说明。2.1 Kconfig的树状关系Kconfig的配置选项是以树的形式组织的,如下所示所示:每个选项都有其自己的依赖关系。这些依赖关系决定了选项是转载 2013-11-04 22:26:35 · 812 阅读 · 0 评论 -
Arm Linux交叉编译和连接过程分析(2)
二、编译内核镜像过程1、编译过程中涉及到到文件:/Makefile编译产生顶层vmlinux镜像文件/scripts/Kbuild.include make过程中到一些基本定义/scripts/Makefile.lib 编译内核时用到到函数库文件/scripts/Makefile.build 内核编译到相关命令文件/arch/arm/Makef转载 2013-11-04 22:38:39 · 957 阅读 · 0 评论 -
电容屏原理
电容屏 电容技术的触摸屏是一块四层复合玻璃屏,如下图所示。玻璃屏的内表面和夹层各涂有一层ITO导电层,最外层是只有0.0015毫米厚的矽土玻璃保护层。内层ITO作为屏蔽层,以保证良好的工作环境,夹层ITO涂层作为检测定位的工作层,在四个角或四条边上引出四个电极。电容屏基本工作原理的最初想法是:人是假象的接地物(零电势体),给工作面通上一个很低的电压,当用户触摸屏幕时,手指头吸收走一转载 2013-09-28 20:06:30 · 1280 阅读 · 0 评论 -
linux下i2c接口的电容触摸屏驱动开发
原文地址: http://hi.baidu.com/god_sperm/blog/item/2aaac228e8a1ece8e7cd400a.html电容触摸屏2011-01-14 15:36 1.Kconfig文件 增加宏定义 2.Makefile文件 增加编译处理 3.添加程序源码Touch screen转载 2013-09-28 20:05:49 · 3059 阅读 · 0 评论 -
i2c_add_driver函数用法
I2C的设备驱动是通过i2c_add_driver(&my_driver)向i2c-core注册的,my_driver中的核心是detach和attach函数,在attach中通过probe探测到总线上的设备并把设备和驱动建立连接以完成设备的初始化。如何探测总线上的设备、Linux中i2c设备地址如何标识并引用?I2C中, 典型的attach如下所示:static int my_att转载 2013-09-28 19:12:42 · 1114 阅读 · 0 评论 -
Linux I2C核心、总线与设备驱动(二)
从上面的分析可知,虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中的实现却相当复杂。当工程师拿到实际的电路板,面对复杂的 Linux I2C子系统,应该如何下手写驱动呢?究竟有哪些是需要亲自做的,哪些是内核已经提供的呢?理清这个问题非常有意义,可以使我们面对具体问题时迅速地抓住重点。 一方面,适配器驱动可能是Linux内核本身还不包含的。另一方面,挂接在适配器上的具体转载 2013-09-28 17:36:32 · 1014 阅读 · 0 评论 -
android平台的s5pc110触摸屏驱动分析
内核linux2.6.35 andorid2.3 触摸屏型号ft5xo6首先给出该触摸屏的一些结构体---->drivers/input/touchscreen/ft5x06_ts.h点击(此处)折叠或打开#ifndef __LINUX_FT5X0X_TS_H__#define __LINUX_FT5X0X_TS_H__#define SCREEN_转载 2013-09-28 15:53:13 · 1859 阅读 · 0 评论 -
request_threaded_irq()
今天在跟marvell沟通问题的时候,觉得有些地方的代码看得不够仔细,于是细看了一下。发现了几个请求中断的函数。request_threaded_irq,这个函数在内核中有注释,参数有好多,大概参数有handler,这是要指定的中断处理函数,thread_fn是要在内核线程中调用的函数,还有申请中断的flag,有SHARED共享,共享时dev_id不能为空,因为要在释放irq时区别共享的中断,转载 2013-09-28 15:11:45 · 5379 阅读 · 0 评论 -
linux powerpc i2c驱动 之 i2c设备层的注册过程
Linux下i2c驱动的加载过程,分为i2c设备层、i2c adapter层与i2c核心层i2c设备驱动层也就是我们为特定i2c设备编写的驱动,下面是我自己理解的i2c驱动的注册过程在我们写的i2c设备驱动中,我们会调用i2c_add_driver()开始i2c设备驱动的注册,该函数调用i2c_register_driver完成所有注册操作 [plain] v转载 2013-09-28 17:10:59 · 974 阅读 · 1 评论 -
中断请求request_irq
今天在跟marvell沟通问题的时候,觉得有些地方的代码看得不够仔细,于是细看了一下。发现了几个请求中断的函数。request_threaded_irq,这个函数在内核中有注释,参数有好多,大概参数有handler,这是要指定的中断处理函数,thread_fn是要在内核线程中调用的函数,还有申请中断的flag,有SHARED共享,共享时dev_id不能为空,因为要在释放irq时区别共享的中断,转载 2013-09-28 15:12:25 · 1093 阅读 · 0 评论 -
Linux I2C核心、总线与设备驱动(一)
本章导读I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部分相互协作,形成了非常通用、可适应性很强转载 2013-09-28 17:23:22 · 1038 阅读 · 0 评论