Shimejing

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  ARM嵌入式底层及内核驱动

摘要:Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。Linux进程状态:R (TASK_RUNNING),可执行状态。只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应 CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该 CPU上运行。很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY 阅读全文
posted @ 2014-02-14 01:41 Shimejing 阅读(1902) 评论(0) 推荐(0)

摘要:什么是死锁死锁的概念(一)死锁是两个或两个以上的进程中的每一个都在等待其中的其它进程释放资源而被封锁,它们都无法向前推进,陷入永久等待状态,这种现象称为死锁。(二)特点1、占有一定的资源,等待对方释放资源。2、获得对方资源前不释放自己占有的资源。(三)比较死锁:一组进程都不能执行(向前推进)。死循环:进程一直执行,永远不结束。死机:系统中的所有进程都不能执行(向前推进)。二、死锁的起因1、资源有限系统提供的资源数少于并发进程所需要的资源数。2、资源竞争进程的并发性造成对资源的竞争使用。注:一般我们不可能为所要求资源的进程无限制地提供资源。三、关于死锁的进一步说明(一)死锁是进程之间的一种特殊关 阅读全文
posted @ 2014-02-14 01:17 Shimejing 阅读(2201) 评论(0) 推荐(0)

摘要:------------------------------------------ 本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言在键盘驱动代码分析的笔记中,接触到了input子系统.键盘驱动,键盘驱动将检测到的所有按键都上报给了input子系统。Input子系统 是所有I/O设备驱动的中间层,为上层提供了一个统一的界面。例如,在终端系统中,我们不需要去管有多少个键盘,多少个鼠标。它只要从input子系统中 去取对应的事件(按键,鼠标移位等)就可以了。今 阅读全文
posted @ 2014-02-10 22:34 Shimejing 阅读(212) 评论(0) 推荐(0)

摘要:mini2440驱动分析系列之---------------------------------------Mini2440触摸屏程序分析By JeefJiang July,8th,2009这是mini2440驱动分析系列的第三篇文章,本文分为三个部分,第一部分讲叙硬件知识,包括触摸屏的原理以及SCC2440 SOC上的触摸屏是如何工作的。第二部分分析输入设备子系统的框架,并进行相应的代码分析。第三部分利用上述的原理来分析mini2440的触摸屏驱动。第四部分介绍了测试和校准。1.需要准备的硬件知识1.1电阻式触摸屏工作原理原理触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在 阅读全文
posted @ 2014-02-10 22:32 Shimejing 阅读(445) 评论(0) 推荐(0)

摘要:kmap函数: 把某块高端内存映射到页表,然后返回给用户一个填好vitual字段的page结构 建立永久地址映射,不是简单的返回virtual字段的pageioremap: 驱动程序无法直接访问io物理地址,所以ioremap是为了使将其映射到虚拟内存,然后直接像访问内存那样访问io 当开启了CONFIG_HIGHMEM时,能操作大于896M的RAM 所以当物理内存大于896M且内核开启了CONFIG_HIGHMEM,ioremap传入的phys_addr参数可以为高端的ram地址kmalloc则是slab机制来分配内核对象kzalloczeroes the memory before ret 阅读全文
posted @ 2014-02-09 16:45 Shimejing 阅读(1155) 评论(0) 推荐(0)

摘要:定义2作用▪ 建立让操作系统运行的基本环境▪ 完善操作系统运行的环境3开发流程1定义板级支持包(BSP)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。在嵌入式系统软件的组成中,就有BSP。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成 阅读全文
posted @ 2014-02-07 22:20 Shimejing 阅读(425) 评论(0) 推荐(0)

摘要:了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了。start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝辄止的描述一下函数的功能,从而对kernel启动的过程有一个比较直观的了解。很多函数真正理解需要对linux相关体系有很深的了解,暂时没有时间深入,留待以后了。 说实话启动的代码看到现在唯一的感觉就是kernel的全局变量实在太多了,要了解一个过程跟踪一个变量的值的变化相当痛苦啊,不过耐心看下来,收获还是比较丰富的,对很多概念都有了一个比较直观的理解。闲话就不多说了,直接来上代码~~ sm... 阅读全文
posted @ 2014-02-07 19:22 Shimejing 阅读(447) 评论(0) 推荐(0)

摘要:虽然这里的Arm Linux kernel前面加上了Android,但实际上还是和普遍Arm linux kernel启动的过程一样的,这里只是结合一下Android的Makefile,讲一下bootimage生成的一个过程。这篇文档主要描述bootimage的构造,以及kernel真正执行前的解压过程。 在了解这些之前我们首先需要了解几个名词,这些名词定义在/Documentation/arm/Porting里面,这里首先提到其中的几个,其余几个会在后面kernel的执行过程中讲述: 1)ZTEXTADDR boot.img运行时候zImage的起始地址,即kernel解压代码的地址。这.. 阅读全文
posted @ 2014-02-07 19:19 Shimejing 阅读(441) 评论(0) 推荐(0)

摘要:我们日常经常用到的电脑外设日益增多,如键盘、鼠标、耳机或音箱、U盘或移动硬盘、无线移动上网卡、显示器、笔记本电池、打印机、摄像头、数码相机、手机,还有无线路由器、宽带猫等,哪些可以热插拔,哪些必须关机后冷插拔呢? 什么是热拔插?简单地说就是在不关闭电源的情况下对某些部件进行插入(连接)或拔出(断开)的操作。现在电脑上绝大部分插头和插座,包括串口、并口等,都是不允许热拔插的,因为插入或拔出时会在瞬间产生一个较大的电流,导致烧毁某个配件... 那么都有那些插头是可以热拔插的呢?让我们先来看看自己的爱机上都有那些插头吧。机箱外部常见的有电源插座、键盘、鼠标、串口、并口、声卡上的各种插座(包括LIN. 阅读全文
posted @ 2014-01-11 01:24 Shimejing 阅读(4835) 评论(0) 推荐(0)

摘要:一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的 形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通 过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。2. S3 阅读全文
posted @ 2014-01-10 00:00 Shimejing 阅读(762) 评论(0) 推荐(0)

摘要:devs.c:static struct resource s3cfb_resource[] = {[0] = {.start= S5P_PA_LCD,.end= S5P_PA_LCD + S5P_SZ_LCD - 1,.flags= IORESOURCE_MEM,},[1] = {.start= IRQ_LCD1,.end= IRQ_LCD1,.flags= IORESOURCE_IRQ,},[2] = {.start= IRQ_LCD0,.end= IRQ_LCD0,.flags= IORESOURCE_IRQ,},};static u64 fb_dma_mask = 0xffffffff 阅读全文
posted @ 2014-01-01 15:38 Shimejing 阅读(365) 评论(0) 推荐(0)

摘要:http://blog.csdn.net/adcxf/archive/2009/03/14/3989725.aspx共 享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空 间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易 见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而 共享内存则只拷贝两次 阅读全文
posted @ 2014-01-01 00:58 Shimejing 阅读(305) 评论(0) 推荐(0)

摘要:poll 和 select 使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一个或多个文件而不阻塞. 这些调用也可阻塞进程直到任何一个给定集合的文件描述符可用来读或写. 因此, 它们常常用在必须使用多输入输出流的应用程序, 而不必粘连在它们任何一个上. 相同的功能常常由多个函数提供, 因为 2 个是由不同的团队在几乎相同时间完成的: select 在 BSD Unix 中引入, 而 poll 是 System V 的解决方案. epoll 调用[ 阅读全文
posted @ 2014-01-01 00:55 Shimejing 阅读(363) 评论(0) 推荐(0)

摘要:Linux 设备模型浅析之 uevent 篇本文属本人原创,欢迎转载,转载请注明出处。由于个人的见识和能力有限,不可能面面俱到,也可能存在谬误,敬请网友指出,本人的邮箱是 yzq.seen@gmail.com,博客是http://zhiqiang0071.cublog.cn。Linux 设备模型,仅仅看理论介绍,比如 LDD3 的第十四章,会感觉太抽象不易理解,而通过阅读内核代码就更具体更易理解,所以结合理论介绍和内核代码阅读能够更快速的理解掌握 linux 设备模型。这一序列的文章的目的就是在于此,看这些文章之前最好能够仔细阅读LDD3 的第十四章。uevent,即 user space e 阅读全文
posted @ 2014-01-01 00:51 Shimejing 阅读(776) 评论(0) 推荐(0)

摘要:hotplug就是热拔插,在linux里面,这个功能是通过class_device_create这个函数来实现的,那么我们来分析下这个函数:class_device_create(cls, NULL, MKDEV(major, 0), NULL, "dma"); /* /dev/dma */ class_device_register(class_dev); class_device_add(class_dev); kobject_uevent(&class_dev->kobj, KOBJ_ADD); kob... 阅读全文
posted @ 2014-01-01 00:47 Shimejing 阅读(460) 评论(0) 推荐(0)

摘要:这几天在观察apache使用内存情况,所以特意了解了下linux的内存机制,发现一篇写得还不错。转来看看。一般来说在ps aux中看到的rss就是进程所占用的物理内存。但是如果将所有程序的rss加起来的话。会发现比实际的内存还要大很多,这个是由于rss还包括了共享的部分。这个可以通过pmap -d PID来看到具体情况。一. 内存使用说明Free 命令相对于top 提供了更简洁的查看系统内存使用情况:1[root@rac1 ~]# free2total used free shared buffers cached3Mem: 1035108 1008984 26124 0 124212 413 阅读全文
posted @ 2013-12-30 00:12 Shimejing 阅读(488) 评论(0) 推荐(0)

摘要:最近在看SPI、I2C这样简单点的总线驱动程 序,从Linux2.6起,内核引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。现在Linux中 大部分的设备驱动都可以使用这套机制,总线为platform_bus,设备用platform_device表示,驱动用 platform_driver进行注册。 Linux的这种platform driver机制和传统的device_driver机制相比,一个十分明显的优势在于platform机制将本身的资源注册进内核,由内核统一管理,在 驱动程序中使用这些资源时通过platform_device提供的标准 阅读全文
posted @ 2013-12-29 21:23 Shimejing 阅读(333) 评论(0) 推荐(0)

摘要:http://www.kernel.org HTTPhttps://www.kernel.org/pub/FTPftp://ftp.kernel.org/pub/http://www.oldlinux.org 阅读全文
posted @ 2013-12-27 01:42 Shimejing 阅读(262) 评论(0) 推荐(0)

摘要:1.蜂鸣器http://baike.baidu.com/link?url=lLLI5khUqmRQqoBlBNy2XJfW6t45eKNjCXJuCLa_aspl71cJnILqSgvUSI9Jd4nz2.继电器http://zh.wikipedia.org/wiki/%E7%BB%A7%E7%94%B5%E5%99%A83.锁存器http://zh.wikipedia.org/wiki/%E9%94%81%E5%AD%98%E5%99%A84.寄存器http://zh.wikipedia.org/wiki/%E5%AF%84%E5%AD%98%E5%99%A8 阅读全文
posted @ 2013-12-09 02:35 Shimejing 阅读(162) 评论(0) 推荐(0)

摘要:LDR/STR字和无符号字节加载/存储 1,LDR Rd,[Rn] 2, LDR Rd,[Rn,Flexoffset] 3, LDR Rd,[Rn],Flexoffset 4, LDR Rd,label ldr只能在当前PC的4KB范围内跳转 B只能在当前PC的32M范围内跳转 label标号实际上就是个地址 eg:合法:ldr r1,[r2] ldr r1,[r2,#0x4];不能超过0xfff,否侧编译不能通过或者linker时有错 ldr r1,[r2,#label];所以这个经常是编译不能通过,因为label的值一般都大于0xfff ldr r1,[r2],#0x4 ldr r1,la 阅读全文
posted @ 2013-12-08 22:31 Shimejing 阅读(2021) 评论(0) 推荐(0)