- 博客(94)
- 资源 (4)
- 收藏
- 关注
原创 ubuntu环境变量配置文件
Ubuntu通常使用的几个配置文件主要有下面这几个:/etc/environment、/etc/profile、/etc/bash.bashrc、~/.profile、~/.bashrc他们之间的区别:①/etc/environment这个文件时Ubuntu登录时读取的第一个配置文件,为所有的进程设置环境变量②/etc/profile这个文件时读取的第二个文件,用于配置系统
2015-05-23 17:35:28 1733
原创 常用LCD尺寸
--------------------------------------------------------------------------------------------------------------------------------------------------------(1)屏幕尺寸计算:通常说屏幕是多少寸的,寸是“英寸”这个单位。屏幕的尺寸是指屏幕对
2015-05-23 16:23:08 7141
原创 mp3编程要点
(1)mixer设置音量配置SOUND_MIXER_VOLUME 主音量调节SOUND_MIXER_RECLEV 录音音量示例:#include int fd,iLevel,iRight,iRight;fd= open("/dev/mixer", O_WRONLY);iLevel = (iRight ioctl(fd, MIXER_WRITE(SOUND_MIXER
2015-05-18 23:00:23 1225
原创 混杂设备驱动--输出两路PWM
尝试用2440的TOUT0和TOUT1输出PWM驱动两个电机,电机的硬件驱动电路是使用L298N。先单独测试TOUT0的PWM输出:(1)驱动程序:使用misc混杂设备驱动模型,当然也可以使用基本的字符设备模型。使用misc设备驱动模型步骤:①初始化一个struct miscdevice结构体:主要是file_operation结构体成员和name②使用misc_registe
2015-05-18 22:28:55 2285
原创 Linux设备驱动模型--分离分层思想
一、设备驱动的分层思想:以platform设备驱动、input设备驱动为例看看他们在分层思想上的体现【1】在核心层:一类设备总线通用的功能特性,如果某一设备支持的总线比较特别可以不使用这些功能特性,在自己的设备总线结构体中进行重载。例(1)platform核心层:定义在drivers/base/platform.c文件Linux内核对设备总线先进行了一次全局的抽象,即概括了所有设备
2015-04-22 18:58:48 3183
原创 输入子系统之按键驱动
上一篇博文《input输入子系统框架分析》,尝试使用这种驱动模型来看一个按键驱动程序。下面的程序是根据韦东山老师写的代码进行修改的,我的开发板是tq2440。button.c文件:#include #include #include #include #include #include #include #include #include #include #inc
2015-04-21 22:20:30 709
原创 input输入子系统框架分析
input子系统的搭建要点:核心层为事件驱动层和设备驱动层的注册提供API的实现、核心层为设备驱动层上报事件提供API的实现 、事件驱动层为应用层提供API的实现 。(1)核心层:提供事件驱动层和设备驱动层所需的函数接口(为input dev和input handler建立联)drivers/input/input.c:##主要接口函数一览:##①为事件驱动层提供的:注册A
2015-04-21 10:09:35 1308
原创 RTC驱动模型分析
①RTC设备层:设备资源的定义:arch/arm/plat-s3c24xx/devs.cstatic struct resource s3c_rtc_resource[] = { [0] = { .start = S3C24XX_PA_RTC, .end = S3C24XX_PA_RTC + 0xff, .flags = IORESOURCE_MEM, }, [1]
2015-04-21 08:24:22 1411
原创 基于platform驱动模型的LED驱动
上一篇博文《platform设备驱动框架搭建分析》主要是根据内核源码来分析platform驱动模型工作的原理,在实际的驱动开发中如何使用Linux的这么一种模型来管理这种类型的设备呢?把tq2440开发板上的LED1当做是平台设备注册到Linux系统中,让系统可以用这种platform驱动来管理他。①总线层:代码不用我们自己去写,内核已经提供了②设备层:向platform总线层注册硬件相关
2015-04-20 19:35:36 1236
原创 platform设备驱动框架搭建分析
之前接触到的字符设备驱动是非常单纯的Linux字符设备驱动,他不具备工程中Linux驱动中的设备与驱动分离思想和设备驱动的分层思想,不具备“总线-设备-驱动”模型的概念。接下来通过分析platform设备驱动模型的搭建过程来看看Linux的设备驱动模型究竟是怎样的?platform驱动模型搭建:(1)platform核心层:为设备层和驱动层提供注册接口、为设备层和驱动层的匹配提供标准①
2015-04-20 17:45:19 2870
原创 使用QtCreator创建Qt工程
前面一篇文章记录了Qt库文件和开发相关工具的编译,现在就来使用这些东东来写一实用的GUI。一、使用QtCreator—V2.4.1创建工程:①配置编译工具:Tools-->Options-->Build & Run -->QtVersion/Tool Chains############################ 添加之前编译生成的qmake,这个用来生成Makefi
2015-04-12 22:32:20 8296 1
原创 Linux下Qt4.5.3开发环境搭建
操作系统:Ubuntu12.04搭建环境:Qt4.5.3开发环境--编译库文件和qmake工具①到http://download.qt.io/archive/qt/4.5/网站下载编译源文件,然后放到Ubuntu系统里进行解压:tar –xzvf qt-x11-opensource-src-4.5.3.tar.gztar –xzvf qt-embedded-linux-openso
2015-04-12 21:04:25 2004
原创 指针进阶(二)
(1)指针就是地址,也就是说在某一位数确定的操作系统中,他的范围是可以确定的,就是说指针变量的sizeof值是相等的。比如32位系统下,不管是指向char、int、还是long型变量的指针,他的大小都是4字节(2)sizeof是关键字,求值是发生在编译的时候,他不同于函数,因为函数的求值是发生在运行的时候。且看:int ch[6];sizeof(ch[6]);//是存在的,
2015-04-04 10:51:13 676
原创 字符设备驱动同步之互斥阻塞
先了解几个概念:临界资源:一次只允许一个执行单元使用的资源称为临界资源。比如多台电脑都可以使用同一台打印机,但是,一个时刻只能有一台电脑来控制他进行打印,所以打印机在这里就是临界资源。临界区:访问共享资源的代码区域。就是执行单元访问共享资源的那段代码就对啦。并发:就是几个进程一起执行。竞态:几个进程同时访问共享资源时发生(上面之所以说是执行单元,不说进程是因为还有线程的存在)
2015-03-25 00:13:24 1716
原创 C语言小板凳(2)
(1)typedef高档用法:typedef void (*sighandler_t)(int);盖住 typedef不看 ,再简单不过,sighandler_t就是一个函数指针,指向的函数接受一个整型参数并返回一个无类型指针加上typedef之后sighandler_t就是一种新的类型,就可以像int一样地去用它,不同的是它声明是一种函数指针,这种指针指向的函数接受一个整型参数并返回
2015-03-23 22:18:04 985
原创 Proteus7.8放置总线操作
Proteus7.8放置总线的方法:(1)首先先放置好总线,蓝色的,即点击左侧边栏的“Buses Mode”,变换总线的方向操作:按住Ctrl。画好后是还没有建立电路连接关系的 (2)进入“箭头模式”,把需要放到总线的引脚连接到总线上,到这里依然还是没有建立电气连接关系(3)接着点击左边侧边栏上面“LBL”,即“Wire Lable Mode”,点击
2015-03-22 07:45:54 48838 3
原创 字符设备之异步通信
基于字符设备驱动之中断按键来进行分析字符设备驱动的另一种技巧:异步通知--一种可以让驱动程序变的很主动的方法一、目标:按键按下时,驱动层序主动通知应用程序有数据可读,这样就不用应用程序老是自己主动去读数据,专心做自己的事,该来的不用去请都会自己送上门来,瞬间就高大上起来啦要思考的问题:①注册信号处理函数②谁发信号?内核驱动③发给谁?APP。前提是App要告诉驱动它的PID
2015-03-21 11:20:44 1236
原创 字符设备之poll机制
poll机制作用:相当于一个定时器,时间到了还没有资源就唤醒进程。主要用途就是:进程设置一段时间用来等待资源,如果时间到了资源还没有到来,进程就立刻从睡眠状态唤醒不再等待。当然这只是使用于这段时间以后资源对于该进程已经无用的情况。内核中poll机制的实现过程:sys_poll函数在include/linux/syscalls.h中声明//函数定义前加宏asmlinkage
2015-03-21 01:09:24 2787
原创 做好自己,不忘初心
忘记背后,努力前面,向着标杆直跑。--努力不能让成功或失败成为你快乐或悲伤的原因。一个人成熟的标志之一就是,明白每天发生在自己身上99%的事情,对于别人而言没有任何意义。
2015-03-20 00:26:32 936
原创 字符设备之中断按键
从题目就可以意会到这一节还是关于字符设备的驱动,不过是另一种技巧:中断。这个词一点都不陌生。一、先来分析今天的重量级函数request_irq(),看看他的函数原型就行了,先不进行深入分析。int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *
2015-03-19 20:46:36 1295
原创 Linux内核中断处理体系分析
前一篇博文中:linux内核初始化阶段通过early_trap_init()函数完成了把异常向量拷贝到0xFFFF0000开始的地方,这些异常向量大部分指向通过vector_stub宏定义的那段代码,这段代码完成的主要工作是计算异常返回地址、保存现场、切换到svc模式、跳转执行汇编异常处理函数,汇编异常处理函数工作在svc模式,先接管上一异常模式保存的现场,然后调用C处理函数,C函数返回后执行一段
2015-03-19 00:18:48 2521
原创 详解Linux内核异常处理体系结构
本节内容:Linux内核异常处理的的初始化过程和异常发生时的处理流程。【首先来区分一下两个概念:中断(Interrupt)和异常(Exception)。中断属于异常的一种,就拿2440开发板来说,他有60多种中断源,例如来自DMA控制器、UART、IIC和外部中断等。2440有一个专门的中断控制器来处理这些中断,中断控制器在接收到这些中断信号之后就需要ARM920T进入IRQ或FIQ模式进行处
2015-03-17 22:00:50 2888
原创 C语言小板凳(1)
①strlen()函数作用:计算字符串的长度,当遇到“\n”字符时结束,即遇到数值“0”时结束计算,有一点特别要注意当这个函数用来计算数组的长度的时候遇到数值0他就停止计算了!②register关键字修饰的变量不可以使用“&”取地址符来获取地址,因为它可能不在内存。③ 问:“static”关键字修饰的变量能被改变不?答:肯定可以,它在编译的时候放在静态区,
2015-03-16 00:30:29 1059
原创 51单片机学期总结
这学期开了《单片机原理与应用技术》,试考完了,课设也做完了,也放假一星期多了(^_^),抽出半天的时间把这学期在课堂上学到的东西做了个总结,以便以后可以快速查阅。学完这门课给自己的感觉是学到挺多以前不知到的东西,虽说是8051单片机,里面还是有很多值得学习的东西。以前一开始学51就直接用C语言去开发,只知道宏观上的原理,里面究竟是怎样工作的也只是有个大概的模型,自个也没有抽时间去学习,所以之前
2015-02-04 10:56:25 2886
原创 ARM920T中断体系结构
再开始ARM920t的中断体系分析前,我们先来回忆一个中断触发时8051单片机的处理流程:(1)保护现场(2)cpu的pc指针自动跳转到中断向量表处找出对应的中断处理入口,即中断处理函数(3)进入中断处理函数后首先要分辨中断源,然后进行对应的中断处理(4)中断处理完,清除中断(5)返回现场中断程序的设置流程:(1)建立中断向量表(2)初始化中断:打开开关、设置优先级
2014-12-15 21:00:32 1127 1
原创 字符设备驱动查询方式读取按键值
上一篇博文讲到通过字符型设备文件愉快的实现了控制led的亮灭,涉及到一个知识点是用户程序(用户空间)向内核程序(内核空间)发送数据实现对led的控制。今天我们是字符设备驱动之按键,要把内核程序读到的按键值发送到用户空间实现显示。由于原理和之前类似,这里不再累述,直接看代码即可。按键驱动程序:#include #include #include #include
2014-12-15 11:36:28 1011
原创 字符设备驱动点亮led
之前学习了简单的字符设备驱动程序的编写,还仅仅是一种抽象的操作。今天来学习通过字符设备驱动来控制led的亮灭。如果还没有学习过字符设备驱动,还是建议先去掌握那部分的知识,再回来看这些就容易好多了。驱动程序:#include #include #include #include #include #include #include #include #include
2014-12-13 21:25:06 823
原创 简单时间编程
时间概念的定义:(1)UTC 世界标准时间(协调世界时):中国内地的时间为 UTC+8(2)GMT 格林威治标准时间:等于UTC。这个名字的由来是因为本初子午线(零时区)经过英国的格林威治区。(3)日历时间:从一个标准时间点到此时的时间经过的秒数。这个标准时间在Linux编译系统中被选定为:1970年1月1日00:00:00 很多编程语言起源于UNIX系统,而UNIX认为1970
2014-12-03 14:38:21 1484
原创 文件IO编程
在Linux中为了简化系统对不同设备的处理,提高效率,对目录和设备的操作都等同于文件的操作。Linux中的文件主要分为 4 种:普通文件、目录文件、链接文件和设备文件。两种方式访问文件:一、系统调用方式:依赖于操作系统Linux系统调用概念:是用户程序要使用内核服务时所经历的函数调用,他运行于内核空间。进行系统调用时,程序运行空间需要从用户空间进入内核空间,处理完后再返回用户空间。这是
2014-12-02 23:38:08 698
原创 51单片机中断处理函数能否影响全局变量
在用keil4.60写51的定时器中断处理函数的时候,遇到了这么一个纠结的问题,就是我定义了一个全局变量temp,一旦触发定时器中断进入处理函数时将temp=123,在开中断前temp=888,我本用keil调试看看里边的变量变化情况的,无意中发现keil竟然显示不了全局变量,只能显示当前调用函数的局部变量,这样一来靠调试我是完全不知道全局变量的值变成了什么。上网查了一下,竟然有人说中断处理函数不
2014-12-01 13:37:03 7413 4
原创 内核临时页表
建立临时页表:内核启动前期主要完成的映射关系:1.将虚拟地址空间按照“1:1”对等映射到内核映像的第一个1M处 作用:在启动MMU之前只能使用实地址模式运行2.将整个内核地址空间直接映射区的代码那部分映射到SDRAM上3.将内核地址空间的开始的1M映射到SDRAM开始的第一个1M空间,因为那里存放了内核启动参数(看附图:内核临时页表.png)第一段注释:临时页表采
2014-11-24 17:55:30 1211
原创 初学字符设备驱动
经过上次学习Linux的helloworld驱动,现在对驱动程序有了一点概念了。今天,接着往下学习Linux驱动咯!Linux驱动学习任务:(1)网络接口驱动:重点;(2)块设备驱动;(3)字符设备驱动:重点Linux用户如何使用上面这些驱动程序的?对应序号分别是:(1)用户-->套接字-->协议栈-->网络设备驱动-->网络接口设备(2)用户-->文件系统-->块
2014-11-05 22:52:24 667
原创 根文件系统制作
最小根文件系统制作实验:1.在Ubuntu上面创建根文件系统目录mkdir rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp varmkdir usr/bin usr/lib usr/sbin lib/modules2 创建2个设备文件cd dev/mknod -m 666 console c 5 1
2014-11-05 13:23:15 888
原创 printk消息日志等级
内核通过prink()函数输出相关信息时是要根据日志等级来输出的:一、若没有指明消息日志等级则使用默认等级4,在kernel/printk.c里面有下面一个宏定义:/* printk's without a loglevel use this.. */#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING 默认日志等级 *//* We
2014-11-05 00:40:21 862
原创 Linux第一个驱动:Hello World
进入Linux底层驱动最重要的一个阶段:Linux驱动程序设计知识结构:1.驱动程序设计模型40%2.内核相关知识30%3.硬件相关知识30% 逐渐淡化学习方法:理论-->实验-->疑问-->理论-->实验-->.........
2014-11-04 17:18:18 841
原创 内核文件格式
先来了解一下这两种文件:elf文件:Executable and Linking Format这种文件包含的信息:调试信息(就是gcc编译时有使用“-g”选项),注释符等等,这种文件在嵌入式开发的过程中主要是调试用的二进制镜像文件:去除了调试信息和注释符之类不必要的信息,这种文件是要下载到Flash上或者是RAM上面运行的,就是可以直接在计算机上面执行的二进制文件在Linux上
2014-10-25 16:29:04 850
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人