自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

转载 RSA算法实现与蒙哥马利算法(修正版)

RSA应用:RSA主要用于PKI身份认证系统,详细说有数字证书、数字签名、数字签章、数字水印、数字信封等。目前最贴近生活的一些案例如:银行的u盾、银行卡的刷卡机、淘宝和12306的数字证书。另外现在随着电子商务电子政务的铺开,登陆认证权限管理越来越贴近生活,RSA的空间越来越大。RSA 原理:选取两个不同的大素数p、q,并计算N=p*q,选取小素数d,并计算e,使d*e

2015-09-15 16:23:13 3346

原创 中断处理(按键驱动)

用今天写的一个按键驱动程序,来说明中断的处理过程:代码如下:#define GPH0CON 0xE0300C00int major = 250;int minor = 0;int devno;void *gphcon=NULL;struct key_device{ char val; struct cdev cdev; struct semaphore sem; wa

2012-12-11 19:18:09 2966

原创 四种IO模型在底层驱动的实现方法

四种IO模型,及其在驱动中实现的方法一、非阻塞IO当设备没有要操作的资源时,它会立即返回。这种操作,一般要在应用层循环检测,比较占用cpu资源。二、阻塞IO这种实现方法需要借助于等待队列对待buf有两种队列,读和写,可以在设备的私有资源中定义两个队列:wait_queue_head_t    rq,wq;当读写时,没有相应的资源,并且是以阻塞方式读写设备的,那么,就可以

2012-12-09 14:37:23 2820

原创 LINUX驱动中的并发控制

如果多个应用进程同时访问一个外设,就会产生并发竞态竞态的原因:(1)SMP多处理器(2)进程间的任务抢占(3)中断解决的方法:方法一、中断禁止local_irq_disablelocal_irq_enable中断禁止,只能解决因中断引起的竞态:任务抢占(它是基于中断的)、中断(硬中断,软中断,TASKLET,)方法二、原子操作:特点:使用原子变量的设备只

2012-12-08 16:16:31 1034

原创 file、inode在应用层和驱动层之间的联系

应用层和驱动的衔接,一直是一个老大难问题,若弄不清楚,总觉得驱动写起来似是而非的。下面就说说我对他们的理解,还有就是如何实现一个驱动支持多个上设备的问题。最主要涉及两个机制:inode和file在驱动中:(1)、我们先找到一个设备号devno,可以动态申请,也可以静态设定,假设静态设定为major,minor,通过宏MKDEV(major,minor)来生成devno(2)、构

2012-12-08 15:30:39 6562

原创 U-boot

U-BOOTcortexa8的引导过程,及存储空间的排布芯片内部集成有irom,iram,其中,irom的起始地址就是0地址,程序启动时,先从0地址开始运行,此处集成的是三星厂家的引导程序,它的功能是:通过nand控制器,从nand里面读取boot的前16K(iram的大小为16K)到iram中去执行。uboot编译好后,已经有链接地址,并且大小大于16K,所以完整的uboot不可

2012-12-02 15:23:44 1638

转载 linux网络编程入门

(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一        个地方获取文件的时候,是

2012-11-14 22:19:23 1250

原创 网络编程——进阶篇

网络超时:网络通信中,好多超时会使进程阻塞,这里共有三种处理方法方法一:设置sock的超时属性SO_RCVTIMEO参考代码:struct timeval tv;tv.tv_sec=5tv.tv_usec=0 setsockopt(fd,SOL_SOCKET,SO_RECVTIMEO,&tv,sizeof(tv))//设置5s后超时recv/recvfrom //5s后若还

2012-11-13 19:48:03 1431

原创 UNIX四种IO模型

四种IO模型一、阻塞IO效率低,当应用程序中同时处理多路输入输出流,就得不到预期的目的。当tcp的recv读数据为空时,会一直阻塞,返回值为读到的字节数。除非发送端关闭时,返回值为0,二、非阻塞IO当无数据是直接返回,同时置errno为EAGAIN,再试一次,可以在循环里面轮询,直至读到数据,缺点是占用cpu资源阻塞可以通过打开文件时指定参数,也可以在打开后通过文件控制函数fc

2012-11-12 18:36:56 2872

原创 有名管道

一、有名管道的创建pipe只能用于具有亲缘关系的进程间通信,而有名管道则突破了这种限制,不存在亲缘关系的进程之间可以通过有名管道的路径来通信,有名管道可以open,close,read,write,但是不可以lseek;二、有名管道的打开规则若以阻塞方式打开管道时,则操作会阻塞到管道的另一端也打开。也即:若一个进程要打开读,那么它会阻塞到另外一个程序打开写为止,反之亦然;除非是以读

2012-11-05 17:59:16 4042

原创 IO笔记

文件IO与C库IO的关系:C库是介于应用程序和系统调用之间的一层,应用程序可以直接调用系统调用,不过为了便于应用在不同的系统之间移植(不同系统的系统调用是不同的),C库向上提供统一的接口,根据实际情况来决定用库IO或系统调用每一个打开的文件,在内核中都创建一个struct file结构体,里面记录了文件的全部信息,不过返回给上层一个整数fd,来代表此结构体。c库在fd的

2012-10-31 08:57:56 864

原创 Dijkstra算法(最短路径问题)

Dijkstra算法是解决从网络中任一点出发,求出他到各个定点的最短路径。任意两点间可以单向导通,权值也不一样,用程序给出具体程序如下:头文件:#define MGRAPH_H_#define MAXN 64#define M 1<<10typedef struct { int vertex[MAXN]; int edge[MAXN][MAXN];

2012-10-25 19:37:06 957 1

原创 偷懒两个月

暑假坚持写了俩月,九月份开学到现在一直静不下心来学习。从今天起,恢复跟新,继续总结!

2012-10-24 13:22:06 653

原创 fork的理解

学习嵌入式编程也有一段时间了,可是对fork还是一知半解,实在是惭愧。从网上找到了一份华清远见关于fork的理解,说的很全面透彻,分享之:#include #include int main(){ pid_t pid; int count=0; pid=fork(); /*在这里创建进程后,由原来的一个进程变成两个,对这两个进程来说,唯一不同的就是fork的返回值,就是说,f

2012-08-30 18:47:08 996

原创 输入子系统框架之我见

输入子系统是linux驱动中很重要的一部分,按键、触摸屏、鼠标等等的驱动都可以通过这个框架来构建,下面就来总结下输入子系统的框架。核心层主要在input.c文件中, class_register(&input_class); register_chrdev(INPUT_MAJOR, "input", &input_fops);先注册个类,类下创建设备,设备号为13,操作函数为inp

2012-08-23 16:50:33 1026

原创 电子书

占个位置,马上补充

2012-08-23 16:49:40 834 1

原创 lcd显示字体

点阵,数字库,矢量字体

2012-08-21 18:46:30 1231

原创 LCD 驱动

LCD驱动的框架:应用程序想知道lcd的信息时,内核为lcd的读写提供了统一的读写函数,它在fbmem.c中定义。fbmem.c构造了lcd驱动的框架,它建立了lcd驱动的类class_create,提供了统一的读写函数,这些读写函数会根据次设备号,去数组中找到真正的读写函数   fb_info *info = registered_fb[fbidx];我们的任务就是构造fb_info结构

2012-08-20 15:38:05 695

原创 NAND FLASH 驱动

三星的nand flash 驱动架构是相当的复杂,虽然说,对驱动的架构大致了解,就可以按照韦东山老师的视频,一步步写出nandflash的驱动,但这样虽然写出来,心中仍有点不踏实。下面就对linux-2.6.30.4内核中的三星nand_flash驱动结构所涉及到的函数,以及函数之间的关系详细的总结出来。驱动主要在driver/mtd/nand/s3c2410.c中:入口函数:module

2012-08-18 20:21:45 2258

原创 链表

链表,在linux内核中非常常见。在分析 nand flash内核驱动时,在链表这里就卡住了,还是基础打得不牢啊!废话不多说,下面对链表进行一些简单的分析:最基本的双向链表结构:struct list_head {struct  list_head *next;struct  list_head *prev;} ;链表的操作:添加和删除节点void list_add   (

2012-08-17 20:49:02 676

原创 块设备驱动(用ram来虚拟disk进行操作)

前面的驱动大多都是字符类设备,而块设备是另一种设备类型,下面对它进行说明。块设备和字符类设备的区别,最重要的就是块设备的读写是以块为单位,不能对单个的字节进行读写,必须先读出整块的数据到buffer中去,然后在buffer中进行修改,再对原来的块进行擦除操作,然后把修改后的buffer中的数据再写到块中去。这就是块设备的读写。这里面涉及到优化问题,比如说硬盘的读写,消耗的时间大部分是在磁头

2012-08-16 20:24:30 1481

原创 QT平台的搭建的一些收获

十天了!差不多十天了,当看到屏幕上的那一个十字光标,当看到那一个“HELLO WORLD”方框,心里激动啊!回头想想,不知道有多少次站在放弃的边缘,不过好在自己坚持下来了。废话不多说,说说对QT的理解:

2012-07-28 20:27:49 806

原创 编译QT4.5 X86版本错误

接着上一个错误,/usr/bin/ld: cannot find -lQtUiTools.开始时以为这个错误类型,和上一篇的一样,通过安装apt-get install libQtUiTools-dev 即可,可是,不行,这并不是一个库文件,通过搜索N多文章,终于发现在一篇论坛里,两个人很不起眼的对话,才是正解!整理如下:如果QTDIR/lib目录下没有 QtUiTools.lib 即

2012-07-27 20:44:40 795

原创 压抑

好多天没写文章了,不是不想写,只是这该死的QT环境就是搭建不起来,从去年这个时候到现在,不知道重装过多少次虚拟机了,每次都是在装QT时 ,因为缺少好多库文件,编译不成功。还有就是,以前都是有的天嵌提供的源文件,安装时只需要make一下,什么都搞定了,导致的直接后果就是,在好多不知道目录下都安装了文件,看着很不舒服,然后就重装了,单单这个暑假,都已经装了三次。虚拟机装着是很快,可里面辛辛苦苦搭建的环

2012-07-27 19:55:56 705

转载 /usr/bin/ld: cannot find -l* 错误的解决方法……

在编译QT/x11时,出现了usr/bin/ld: cannot find -lXext.最终,参考下面文章解决了问题,我的解决办法就是安装了libExt-dev,然后继续make**********************************************************************************************************

2012-07-27 10:10:53 18473

原创 lcd驱动

lcd驱动采用设备-总线-驱动的模型我们要写的就是向总线注册驱动,然后把对lcd的一系列操作及信息全部放到fb_info中去,然后把fb_info结构体放到数组中去,当device有和driver同名时,device的open、write、ioctal等操作先到fbmem.c中去,fbmen.c相当于一个中转站,把对设备的操作通过次设备号,中转到数组registered_fb中的某一项。

2012-07-25 09:43:46 901

转载 TQ2440 上用多线程实现的mp3 播放器

转自:http://blog.csdn.net/rich_baba/article/details/5779775概述:        (1)  这是一个基于 TQ2440开发板的, 使用用多线程实现的mp3播放器。        (2)  从软件层次来看, 驱动层包括  按键驱动 和 声卡驱动, 需要自己实现的是 按键驱动; 应用层有 MP3主播放程序 和 M

2012-07-17 15:25:38 2227

原创 炫耀一下

韦东山的第一期视频基本上已经看完,基本上已经可以在开发板上写一个小的驱动,比如说想知道按下按键的按键号,可以用查询、中断、异步通知等方法。其中,查询是最耗CPU资源的一种方法,可以用中断来改进。不过中断时,应用函数进入休眠,等待中断的唤醒,此过程不能处理其他事。所以说,异步通知是最好的一种方法,它可以由驱动发起,告知应用程序,不影响应用程序做其他事。以下面的例程来说明:功能:查询按键号驱动

2012-07-16 16:54:22 1075

原创 对linux下异步通知fasync的理解

异步通知,的确是一种很好处理机制,熟练掌握这种手段,对我们写高质量的应用程序很有帮助。下面说说对它的理解:异步通知,就是让驱动去告诉应用,底层硬件发生了什么事,而不是应用主动地去查询驱动,这对系统的性能有一个很大的提升。首先,在驱动中内核首先定义一个结构体struct fasync_struct,这个结构体用来存放对应设备文件的信息(如fd, filp)并交给内核来管理。一

2012-07-16 13:12:03 2958

转载 fcntl的使用

功能描述:根据文件描述词来操作文件的特性。#include #include  int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd

2012-07-16 12:27:31 1042

转载 作为一个新人,怎样学习嵌入式Linux?

作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我

2012-07-16 10:55:07 43670 4

原创 按键中断

按键中断查询,并显示中断号#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*按键k1 EINT1. GPF1按键k2 EINT4. G

2012-07-15 17:29:27 3442

原创 常用到的函数(持续更新……)

1、 register_chrdev()用法:int  = register_chrdev(major ,"abc",const struct file_operations *fops)unregister_chrdev(major, "abc");   说明:major是注册的主设备号,为0时自动分配,返回值为主设备号,abc为设备名,fops为相应的操作2、class_cre

2012-07-15 10:14:31 840

原创 驱动led灯亮灭

这个程序主要参考韦东山的视频资料,不过他用的linux内核为2.6.22,和2.6.30的源码好多函数实现的不一样。譬如说,在这个例子中,需要创建类、类的设备等等这些函数,在2.6.22中是函数class_creat和class_devices_creat,不过,在2.6.30中却是class_creat和device_creat.废话不多说,上代码:led_driver.c#includ

2012-07-15 09:54:22 2718

原创 第一个驱动程序

从搭建后平台,到第一个驱动的程序下载并成功执行,又经历了颇多挫折:首先就是驱动源码,可以照搬别人的源码,写一个hello程序,不过这里有一个很大的问题,就是头文件问题,不同版本的内核,头文件的位置是不一样的,这里要注意。可以参考上篇博客,在此不再细说。其次就是源码树问题,因为在编译驱动模块时要用到源码树,ubuntu安装时自身并没有源码,如果,要编译的驱动是在ubuntu上运行,那就需要安

2012-07-14 17:21:15 3890 1

转载 linux驱动头文件位置的说明

在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不

2012-07-13 19:34:40 24057 3

原创 linux-2.6.30平台下移植DM9000网卡驱动到TQ2440

平台:虚拟机ubuntu12.04  内核:linux-2.6.30 开发板:TQ2440   包括编译内核、制作文件系统,到目前可以在虚拟机上可以通过交叉网线可以和开发板互通,用了弄了差不多快两天时间吧。现在回想起来觉得本来很容易的事,却拉了这么长时间,很小的一个错误,本来可以在编译错误时,迅速定位到错误位置,但本人算是个菜鸟,再者在网卡驱动移植时,tq2440的说明修改代码的位置很是模糊,

2012-07-13 18:02:26 1505

原创 真扯!

真他大爷的郁闷,程序写错一个字母flags写成flag,TCW写成TCM,这些小问题严重打击了自信,操他大爷!不过现在心情大好!

2012-07-12 21:10:03 857

原创 字符设备驱动(第一篇)

字符设备驱动:应用程序APP的open、write等函数通过c库来实现,c库通过swi val 来触发中断,通过val值来判断是读?是写?来调用sys_open、sys_write等,至于说是调用哪个底层的驱动。写好一个驱动device_open、device_write,通过file_operations来告诉内核有此驱动。所以,也可以简单的理解为写驱动就是填充file_operatio

2012-07-11 10:24:09 576

转载 container_of

在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr:        the pointer to th

2012-07-10 19:41:26 470

空空如也

空空如也

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

TA关注的人

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