arm-linux

http://armboard.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  512 随笔 :: 0 文章 :: 48 评论 :: 115万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

11 2011 档案

摘要:epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。一、epoll的优点支持一个进程打开大数目的socket描述符。IO效率不随FD数目增加而线性下降。二、epoll的使用epoll有2种工作方式:LT和ET。 LT(leveltriggered,水平触发)是缺省的工作方式,并且同时支持block和no-blocksocket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传. 阅读全文
posted @ 2011-11-26 22:57 arm-linux 阅读(1019) 评论(0) 推荐(0) 编辑

摘要:在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024 表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。epoll的接口非常简单,一共就三个函数:1. int epo. 阅读全文
posted @ 2011-11-26 16:47 arm-linux 阅读(1746) 评论(1) 推荐(0) 编辑

摘要:— Built-in Function: int __builtin_ffs (unsigned int x)Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero.返回右起第一个‘1’的位置。— Built-in Function: int __builtin_clz (unsigned int x)Returns the number of leading 0-bits in x, starting at the most significant bit po 阅读全文
posted @ 2011-11-25 13:31 arm-linux 阅读(514) 评论(0) 推荐(0) 编辑

摘要:先讲一下基本一般的输入处理方式的知识。一般的输入输出采用生产者,消费者模式,并构造队列进行处理,如下图 这种输入模型在android的系统中很多地方采用,先从最底层说起:为了由于触屏事件频率很高,android设计者讲一个循环线程,拆分为两级循环,并做了个队列来进行缓冲。InputDispatcherThread和InputReaderThread InputDispatcherThread在自己的循环中对InputReaderThread请求同步,InputReaderThread收到同步信号后,把事件放入InputDispatcher的队列中。具体代码如下:InputReader.cpp中 阅读全文
posted @ 2011-11-24 21:17 arm-linux 阅读(3992) 评论(0) 推荐(0) 编辑

摘要:简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息。使用说明 单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多点触摸信息则是以ABS_MT承载并按一定顺序发送,如ABS_MT_POSITION_X、ABS_MT_POSITION_Y,然后通过调用input_mt_sync()产生一个 SYN_MT_REPORT event来标记一个点的结束,告诉接收方接收当前手指的信息并准备接收其它手指的触控信息。最后调用 input... 阅读全文
posted @ 2011-11-24 08:28 arm-linux 阅读(2855) 评论(0) 推荐(0) 编辑

摘要:背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。2. S3C2440内部LCD控制器结构图:我们根据数据手册来描述一下这个集成在S3C2440内部的LCD控制器:a:LCD控制器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄 阅读全文
posted @ 2011-11-16 10:20 arm-linux 阅读(919) 评论(0) 推荐(0) 编辑

摘要:引用文章链接:http://www.ibm.com/developerworks/cn/linux/l-cn-cpufreq/http://blog.csdn.net/linweig/archive/2010/10/28/5972312.aspxCpufreq 的由来 随着 energy efficient computing 和 performance per watt 等概念的推广以及高级配置与电源接口ACPI(Advanced Configuration and Power Interface)标准的发展,目前市场上的主流 CPU 都提供了对变频(frequency scaling)技. 阅读全文
posted @ 2011-11-12 16:47 arm-linux 阅读(21940) 评论(0) 推荐(0) 编辑

摘要:一、概念: 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。 通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会被执行。所以对于通知链表来说有一个通知方与一个接收方。在通知这个事件时所运行的函数由被通知方决定,实际上也即是被通知方注册了某个函数,在发生某个事件时这些函数就得到执行。其实和系统调用signal的思想差不多。二、 阅读全文
posted @ 2011-11-11 16:45 arm-linux 阅读(4011) 评论(0) 推荐(1) 编辑

摘要:最近在看《深入理解Linux网络内幕》一书,学习了一下书中讲到的内核通知链方面的知识,写了一个读书笔记和一点代码来加深理解,希望能够对大家有一点帮助。内核通知链在网络方面得到了广泛的使用。1.通知链表简介 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。 通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会被执行。所以对于.. 阅读全文
posted @ 2011-11-11 16:13 arm-linux 阅读(1025) 评论(0) 推荐(0) 编辑

摘要:做嵌入式 linux 驱动的时候,难免会遇到clock,今天上网查阅关于clock的资料,发现网上大多数资料都是关于linux内核的时钟机制,而不是关于Linux设备驱动的时钟。于是将自己今天学习的经验写出来,跟大家交流交流,有不对的地方希望高手们指出。我会以三星的smdkc220开发板为例。分析代码, 它将clock也看作一种设备,使用前也要register注册一下,但这个register又有别于一般的设备,不会在sysfs下device,driver或bus等目录下生成node。先看注册函数exynos4_register_clocks(void),在arch\arm\mach-exyno 阅读全文
posted @ 2011-11-10 11:12 arm-linux 阅读(3287) 评论(0) 推荐(0) 编辑

摘要:ARM linux的启动部分源代码简略分析以友善之臂的mini2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用。当内核映像被加载到RAM之后,Bootloader的控制权被释放。内核映像并不是可直接运行的目标代码,而是一个压缩过的zImage(小内核)。但是,也并非是zImage映像中的一切均被压缩了,映像中包含未被压缩的部分,这部分中包含解压缩程序,解压缩程序会解压缩映像中被压缩的部分。zImage使用gzip压缩的,它不仅仅是一个压缩文件,而且在这个文件的开头部分内嵌有gzip解压缩代码。当zImage被调用时它从arch/arm/boot/compre 阅读全文
posted @ 2011-11-07 17:03 arm-linux 阅读(6499) 评论(0) 推荐(0) 编辑

摘要:处理模型Linux kernel 的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line 进行配置的。在进行后续分析之前,先来理解一下command line 的处理模型: 要处理的对象是一个字符串,其中包含了各种配置信息,通常各个配置之间通过空格进行分离,每个配置的表达形式是如:param=value1,value2或者很简单就是一个rw 。那么kernel 就需要提供对这些参数进行处理的处理函数列表。根据参数的作用以及执行期的先后不同,这些处理函数被定义到不同的段中。针对每一个参数,Kernel 都会到相应的段中查找相应的处理函数,最终进行各个组件的配置。1 阅读全文
posted @ 2011-11-06 22:49 arm-linux 阅读(4776) 评论(0) 推荐(0) 编辑

摘要:#based on v2.6.26 kernel Linux内核Makefile编译生成内核目标文件的过程直接执行make的编译过程 1.先找到入口点(入口点问题)#编译内核line502,直接执行make默认编译此项all: vmlinux #编译模块line1037,选择编译模块的话会到这里,另外还有其他许多all:target存在,为什么默认执行all: vmlinux ?all: modules2.继续找vmlinux目标 # vmlinux image - including updated kernel symbols# vmlinux目标在line806vmlinux: $(vm 阅读全文
posted @ 2011-11-06 13:43 arm-linux 阅读(4097) 评论(0) 推荐(0) 编辑

摘要:1. 内核启动地址1.1. 名词解释ZTEXTADDR解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。Start address of decompressor. here's no point in talking about virtual or physical addresses here, since the MMU will be off at the time when you call the decompressor code. You normally call 阅读全文
posted @ 2011-11-06 12:31 arm-linux 阅读(7851) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示