自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(32)
  • 收藏
  • 关注

原创 Linux下udev浅析

一.关于Udevu即user space,dev是device,通过它的名字,我们就可以简单了解到,它是一个和用户态相关的驱动设备管理机制。udev是一个针对2.6内核的文件系统。提供一种基于用户空间的动态设备节点管理和命名的解决方案。用于取代落后的devfsudev与硬件平台无关,属于用户空间的进程,是一个后台程序,它脱离驱动层的关联,而建立在操作系统之上,只要修改配置文件使之生效,无需

2012-04-11 16:11:15 16401 1

原创 GPIO模拟SPI接口代码

关于SPI,不同的芯片具体通信方式可能会不大一样,所以要具体问题具体分析,下面是最近做LCD时碰到的两个模拟SPI协议的代码,芯片通信方式不同,代码也就不同了SPI的工作原理不多说,网上一大把。1.一款夏普的屏,hx8363A,和host的接法是三线的SPI写:读:如上图,发命令D/CX是0,如果是参数D/CX就是1.下面是相关代码#define

2011-11-03 11:25:40 3242 1

转载 printf大部分参数详解

#include/************************************************************************///

2011-09-04 23:11:18 662

转载 深入理解Linux启动过程

本文详细分析了Linux桌面操作系统的启动过程,涉及到BIOS系统、LILO 和GRUB引导装载程序,以及bootsect、setup、vmlinux等映像文件,并结合引导、启动原理和具体的代码实现机制由浅入深地进行了分析。    初学者刚接触Linux桌面系统会感觉系统启动

2011-09-02 09:21:30 398

原创 从今以后这样过

从今以后这样过1.上班时间不上网,不发呆2.每天不管有事没事都8点以后下班,就算多翻几页书也行,多抓紧点时间学东西3.回家不玩游戏(周末除外),少上网,少看电影,就算看也看英文,锻炼英语3.每周至少更新一篇博客,东西研究要深入4.每周花半天时间来回顾下之前做的

2011-09-01 22:41:56 133

转载 位扩展详解

首先要知道我们的数据是怎么样放入内存的,例如我们int a=2;sizeof(int)=2;那么放入内存的数据为00000000 00000010,假设int a=-2,那么存放为11111111 11111110,始终记住在内存里存放的是补码形式,正数的补码是本身。现在要用pr

2011-08-31 22:34:56 875

原创 笔试题练习

一.写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd1

2011-08-31 22:14:05 99 1

原创 学计算机的你伤不起啊!!!!!!

<br /><br />学计算机的你伤不起啊!!!!!!<br />老子六年前开始学计算机啊!!!!!!<br />于是踏上了尼玛不归路啊!!!!!!<br /><br />谁特么跟老子讲计算机是王道专业啊!!!!!!<br />尼玛路边乞丐都是程序员!!!!!!<br />会打代码的一大把啊 有木有!!!!!!!!!<br />谁再跟老子讲计算机是王道专业 老子一个键盘盖死你啊,一个鼠标线勒死你啊!!!!<br />尼玛一上大学就找不到女朋友!!!!!!<br />班上男女比例八比一,八比一啊!!!!!!

2011-05-25 17:10:00 171

原创 linux中同步例子(完成量completion)

这是一个公交司机和售票员之间的线程调度,用于理解完成量两个线程间同步,只有当售票员把门关了后,司机才能开动车,只有当司机停车后,售票员才能开门。#include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");struct completion my_completion1;struct completion my_completion2;//定义了两个完成量int thread_dirver(void *);int th

2011-05-25 15:35:00 2641 2

原创 linux中同步例子(semaphore使用)

#include #include #include #include MODULE_LICENSE("GPL"); int num[2][5]={ {0,2,4,6,8}, {1,3,5,7,9} }; struct semaphore first_sem; struct semaphore second_sem; int thread_fist(void *); int thread_second(void *); int thread_fist(void *p) { int i; int *num=(

2011-05-25 15:29:00 1463 1

原创 vmalloc/kmalloc

在内核空间中主要存在kmalloc分配的物理连续空间和vmalloc分配的非物理连续空间。kmalloc分配的空间往往被称为内核逻辑地址,由于它是连续分配(直接处理物理页框),而且分配首地址一定,所以其分配的内核虚拟地址对应的实际物理地址很容易获得:内核虚拟地址—PAGE_OFFSET(0xC0000000)(内核有对应例程virt_to_phys)即等于物理地址,而且其对应的页表属于内核页表(swapper_pg_dir)——在系统初始化时就以建立,因此省去了建立页表的工作。而vmalloc分配的空间被称

2011-05-25 10:22:00 841

转载 Linux是分时操作系统,不是实时的

<br /><br />linux是很典型的分时系统。 但是在一些特殊领域。 也可以把linux做成实时系统的<br /> <br />分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源<br />分时操作系统具有以下几个优点: <br />同时性,独立性,及时性,交互性.<br /> <br />1.实时操作系统定义<br />  实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结

2011-05-18 10:20:00 1044

转载 linux UART驱动流程

<br /><br /> <br />初始化<br />1 定义一个uart_driver的变量并初始化好(无需提供tty_driver).<br />2  uart_register_driver()来注册这个驱动,在这函数里它会分配一个tty_driver对象,并初始化tty_operations为uart_ops, 这是serial-core.c提供的统一的UART操作函数<br />3 调用自己定义的一个init函数来注册一个platform_driver对象, 这样可以让系统调用我们的probe函

2011-05-04 18:10:00 2040

原创 console_init()解惑

<br />console_init()在start_kernel()中调用,用来对控制台初始化,这个函数执行完成后,串口可以看到内核<br />用printk()函数打印的信息<br />这里还有个问题就是,在console_ini()之前用printk()也能打印出来,这个因为,如果没有注册console,<br />printk只是将信息放到缓冲区中,console_init->con_init->register_console,在register_console时输<br />出缓冲区中暂存的信息

2011-05-03 14:25:00 4046

转载 linux中的I/O操作

<br /><br />I/O操作,可以直接在物理地址上操作,也可以映上到内存后在内存地址上操作,也可同时使用物理地址和内存地址进行操作。<br />在内核里面定义资源时需要定义出基地址<br />如<br /><br />        .membase        = (char*)IO_ADDRESS(EVB1226_UART0_BASE),<br />        .mapbase        = (unsigned long)EVB1226_UART0_BASE,<br /><br />io

2011-04-29 16:45:00 689

转载 做一个合格的程序员

<br />程序员每天该做的事<br />1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多<br />2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作<br />3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢<br />4、考虑自己一天工作完成的质量和效率能否还能提高 一天只提高1%,365

2011-04-13 14:55:00 403

原创 去掉SVN管理kernel编译后版本自动变化

去掉SVN管理kernel编译后版本自动变化 由于版本变化导致wifi驱动insmod检测时出错退出,提示:# insmod wlan.ko [ 47.274680] wlan: version magic '2.6.32.9 mod_unload ARMv5 ' should be '2.6.32.9-svn47 mod_unload ARMv5 ' insmod: init_module 'wlan.ko' failed (Exec format error)查找到2.6.27-svn47是在$

2011-03-31 17:17:00 3354 1

原创 Android.mk文件语法规范及使用模板

<br /><br />http://blogold.chinaunix.net/u3/99423/showart_2206760.html<br /> <br />Android.mk文件语法规范<br />根据eoeandroid上的的连载,进行一些更新、修改和加亮。<br />今天翻译ANDROID-MK.TXT文件(英文原文件在/development/Ndk/Docs/android-mk.txt)<br />Android.mk文件语法规范<br /> <br />Introduction:<b

2011-03-11 13:21:00 427

原创 Porting WiFi drivers to Android

<br />http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html<br />Porting WiFi drivers to Android <br /> <br />PaNiC Random Rant (or how we used to call it: .plan)<br />Thursday, April 29, 2010<br />Porting WiFi drivers to Android<br /

2011-02-23 17:10:00 145

转载 sd卡在位检测的实现方式

<br />方法之一,使用DAT3(pin1)作为卡在位检测信号;DAT3在sd 卡内部有90k的上拉电阻。Host与sd card之间对DAT3做外部下拉。这样卡没插入时host读DAT为低,卡插入后host读DAT3为高,从而可以判断卡是否插入。<br />但是需要注意的是,mmc卡不支持这种在位检测方式(原因参见MMC章节),因此对sd host来讲,如果通过上述方法发现槽位为空并不能放弃对该槽位的查询。当sd host接收到对某槽位的操作时,即使此时通过DAT3卡在位检测方法测到槽位为空,仍然要继续

2011-02-21 10:19:00 657

原创 Android启动脚本init.rc

<br />Android启动脚本init.rc 摘自《Android系统原理及开发要点详解》 <br /><br />  Android启动脚本init.rc <br /><br />  在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下内容: <br /><br />  Commands:命令 <b

2010-12-30 09:49:00 549

原创 等待队列和工作队列

<br /><br />对这2个容易混淆的队列做简单概念上的区别,至于怎么用,资料一大堆,不多说,等需要的时候再去找吧<br /> <br />等待队列在内核中有很多用途,尤其适合用于中断处理,进程同步及定时。我们在这里只说,<br />进程经常必须等待某些事件的发生。例如,等待一个磁盘操作的终止,等待释放系统资源,或者<br />等待时间经过固定的间隔。<br /> <br />等待队列实现了在事件上的条件等待,希望等待特定事件的进程把自己放进合适的等待队列,并<br />放弃控制权。因此。等待队列表示一

2010-12-17 09:46:00 179 1

原创 《深入理解Linux内核》读书笔记之内存寻址

<br /><br /><br />《深入理解Linux内核》读书笔记<br />-----内存寻址<br /><br />题记: 最近在看《深入理解linux内核》这本书,看的时候记了些笔记,主要是书上一些重要知识点的謫录还有就是自己的一些个人理解,其实一些地方我也没大看懂,还需要继续研究,先把东西记在这,一些地方记的也有点乱,主要是为以后自己再回去学习这方面知识做一些线索指导,也希望对大家学习这方面只是有些帮助,有什么不正确的地方还请指正<br /><br />三种地址<br />逻辑地址(logica

2010-12-06 15:02:00 1185

转载 X86寄存器说明

最近在看>,是基于X86系统的,网上找了份x86的寄存器,转过来,用的时候方便查阅x86寄存器说明ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系. 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存

2010-12-01 10:37:00 728

原创 学习杂记(随时更新)

从今天起(10/11/22),遇到新的小知识点记在这,老记在本子上的话,过几天本子都找不到了1.printk()可能会引起睡眠,它会占用大量的系统时间,而ISR中不允许休眠,对于频繁调用的ISR里面尽量要少用,慎用printk.2.POR:Power on reset.

2010-11-22 11:29:00 1334 1

转载 嵌入式笔试,面试题(转载)

留着,以后用的上http://www.cnitblog.com/zouzheng/category/4671.htmlhttp://qq164587043.blog.51cto.com/261469/d-9http://blog.csdn.net/yyyuhan/category/431800.aspx http://blog.mcuol.com/jinxilee/Category

2010-11-05 10:58:00 603

原创 不用库函数从文件中读取数据并放到数组中

<br />在linux内核中没法使用C库函数,所有东西都只有自己写了,杯具!<br />目的其实很简单,把文件中的数据读到一个数组里,数据是16进制数码,像这样下面的数据这样,其实这看上去有点像是个笔试题<br /> <br />0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,0x0, 0x0, 0x0, 0x58,0xc6,<br />0x2, 0x4d,0x58,0x2, 0x58,0xc3,0xe4,0xff,0xe4,0xfe,0x75

2010-11-04 10:54:00 858

原创 Linux驱动开发调试中的一些小技巧

 在写linux驱动是难免需要调试,但如果每次都需要用户的角度或者每次都在上层写一个测试程序去打开设备在通过传统的ioctrl等调试的话未免有点麻烦,偶然的一次看到通过sys系统提供给上层接口来调试和操作硬件的办法 sysfs设备模型有很多用处,主要是用在设备管理方面的,我这里做的只是利用sysfs提供给上层的一个接口,让我们在开发时可以轻易的调用到硬件。 首先,填充一个bin_attribute的结构体,以下是做GPS底层驱动用到的一个结构体,重要的就是那个read和write值,其他的具体什么意思也没去

2010-11-03 15:27:00 2316 1

转载 linux内存管理(转)

而这篇则是参考了陈莉君老师的博客,对linux的内存管理进行了一个简要概述。我们首先从进程的角度,来看linux中的内存空间。****************************************************************************************************************************************Linux中的地址空间(一)有这么一系列的问题,是否在困扰着你:用户程序编译连接形成的地址空间在什么范围内?内核编

2010-11-03 14:34:00 564

原创 linux内核中读取文件

做CTP芯片驱动时,供应商需要我在驱动层做一个升级他们FW的接口,现贴出linux内核驱动中读取文件的代码struct file *srcf;char *buffer;int orgfsuid, orgfsgid, retval;mm_segment_t orgfs;buffer = kmalloc(MAX_BUFFER_SIZE,GFP_ATOMIC);if(buffer == NULL) { printk("failed to kmalloc mem/n");

2010-10-19 15:38:00 985

转载 栈,堆和静态区

 对于程序员来说,我们可以简单的理解为内存分为3个部分:栈,堆和静态区栈:保存局部变量,栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。堆:有malloc系列函数或new操作符分配的内存。其生命周期由free或delete绝对。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错静态区:保存自动全局变量和static变量。静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配

2010-10-12 11:11:00 414

原创 linux子系统分析及触摸屏驱动浅析

在linux2.6以后,linux对输入设备进行了抽象,抽象出了输入子系统,该系统(Input子系统)是所有I/O设备驱动的中间层,为上层提供了一个统一的界面,将事件的上报和处理分离开,采用了分层模式,在我们的driver中,我们只需要关注事件的上报,其他的都由linux自己处理。在上层系统中,它不需要知道底层有多少键盘,鼠标,轨迹球,触摸屏等设备,只需要把上报上来的input事件做相应的处理就行了。一.Input输入子系统的框架Input子系统将整个将输入驱动分成三块: driver,input core

2010-10-11 14:33:00 3156 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除