自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 用gcc编译.cpp文件可能出现"undefined reference to `__gxx_personality_v0'"问题的解决

用gcc编译.cpp文件时出现错误:undefined reference to `__gxx_personality_v0',解决的办法就是通过g++来编译,就可以通过了!!用gcc编译的话需要加-lstdc++ 编译选项

2018-06-01 15:54:24 1315

原创 老查的ARM学习笔记:chapter-3(串口驱动程序分析 )

串口驱动分析-初始化tty子系统架构概念简述串口驱动分析之初始化串口驱动分析-打开设备串口驱动分析-数据发送tty数据发送调用关系串口发送函数分析串口驱动分析-数据接收tty数据接收串口接收数据串口驱动分析-初始化tty子系统架构概念简述在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1 串口终端(/dev/ttyS*) 串口

2017-11-08 20:31:57 1210

原创 老查的ARM学习笔记:chapter-2(linux总线设备驱动详解)

1 总线设备驱动模型概述随着技术的不断进步,系统的拓扑结构也越来越复杂,对智能电源管理,热插拔的支持要求也越来越高,2.3内核已经难以满足这些要求,为了适应这种形势需要,linux2.6内核提供了全新的内核设备模型。 总线的作用就是感知设备是否连接上usb,网卡等等,总线设备驱动模型更好的支持热插拔的设备,也更好的提供移植性。 在设备模型中,我们将看到,设备驱动主要是由总线,驱动程序,设备三个部

2017-10-30 22:30:02 391

原创 老查的ARM学习笔记:chapter-1(按键驱动程序设计)

前面的博客中,有一篇通过按键玩中断的文章,不过那里的程序是裸机,也就是没有加系统下设计的程序,也就和在单片机中设计的程序一样比较简单。现在我们来看看按键的驱动程序在linux系统下是如何设计的。1 混杂设备驱动模型1 混杂设备驱动描述 首先我们先来了解一下什么是混杂设备驱动模型。混杂设备其实是字符设备中的一种,主设备号是10,次设备号不同的设备称为混杂设备,在linux中,用struct misc

2017-10-29 19:14:22 1067

原创 字符设备驱动(二)

在字符设备驱动(一)那节中,我们学习了一个字符设备驱动程序设计的大体框架。但是字符设备驱动是如何实现的呢,这节我们就来深入理解一下内核驱动是怎么和应用程序联系在一起的。首先我们在linux中创建一个read_mem.c的文件,如下图。 然后对其静态链接arm-linux-gcc -static -g read_mem.c -o read_mem然后对其反汇编,并将其放到dump文件中arm-l

2017-10-02 20:52:54 639

原创 嵌入式根文件系统(基于arm)

1 根文件系统嵌入式可以包含多个文件系统,根文件系统是第一个,当linux启动的时候,第一个必须挂载的是根文件系统,若系统不能从指定设备上挂载根文件系统,则系统出错就退出。本文主要分以下两个部分说明根文件系统,第一个是如何制作根文件系统,第二个则是挂载根文件系统到内核。2 如何建立根文件系统根文件系统的制作是学习驱动的重要一步,这里我直接把制作根文件系统的框架思维导图贴出来了。我们制作的根文件系统就

2017-10-02 15:46:24 3416

原创 基于arm的linux系统调用分析

1系统调用的作用linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用,最简单的如read,write,open等等。用户可以通过系统调用命令在自己的应用程序上调用他们,从某种角度来看,系统调用和普通函数调用非常相似。区别在于系统调用由操作系统核心提供,运行在内核态,而普通函数调用由函数库或用户自己提供,运行于用户态。实际上,很多已经被我们习以为常的C语言标准函数,在linux平台上的

2017-09-25 15:44:25 621

原创 字符设备驱动(一)

一 linux设备概述linux设备可分为三大类,字符设备,块设备以及网络设备,在本文我们主要讲的是字符设备,那么什么是字符设备呢,字符(char)设备是个像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。而字符设备驱动程序则至少要实现open,close,read,write这样的系统调用。字符设备是以字节为最小访问单位,而其他设备如块设备则是以块(通常是512字节)为最小传

2017-09-22 15:55:57 479

原创 linux内核模块范例代码及Makefile写法步骤

一 内核模块介绍在介绍一个简单的内核hello world模块前,我们需要了解一下在嵌入式系统中内核模块到底是一个什么东东。linux内核是模块化组成的,它允许内核在运行时动态地向其中插入或从中删除代码。这些代码(包括相关的子线程、数据、函数入口和函数出口)被一并组合在一个单独的二进制镜像中,即所谓的可装载内核模块中,或简称为模块。这段是度娘的解释,简单来说,内核模块就是不被编译进内核的文件,在内核

2017-09-14 11:34:33 1507 1

原创 DMA机制(基于S3C6410)

1.DMA概括DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率,可以大大节省系统资源。上节我们做的串口驱动就是由CPU完成数据的传输的,现在我们打开D

2017-08-11 17:30:04 1058

原创 串口驱动设计(基于S3C6410)

串口通讯串口充当的角色有两个,一个是数据传输,还有一个就是充当控制台。串口通讯分为同步和异步,我们通常使用的是异步串口。通讯时,双方先约定好数据帧的格式,即波特率,数据位,停止位,奇偶校验位等。我们通常使用的是RS232的9帧串口,其中,最重要的是2,3,5脚。 2:RXD接收数据 3:TXD发送数据 5:GND接地 接下来,我们开始进行串口的初始化。在此使用的开发板是飞凌S3C6410。初

2017-08-10 13:52:46 1372

原创 Makefile工程管理

Makefile概述在Windows下,程序员会使用各种IDE去编译自己的工程,Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员。在 Linux(unix)环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称

2017-08-10 13:38:06 380

原创 NAND Flash驱动程序设计

一 NAND Flash概括NAND Flash充当硬盘的角色,NAND Flash主要分为以下两类, SLC(single level cell):单层式存储 MLC(multi level cell):多层式存储 MLC对比SLC SLC访问速度一般比MLC快三倍以上 SLC可以进行十万次的擦写,MLC可以进行一万次,MLC功耗比SLC高15%左右 访问方式内存采用的是统一编址,NA

2017-08-08 23:39:36 647 1

原创 S3C6410通过按键玩中断

一 按键初始化在S3C6410中,底板上通过开发板手册可以看出按键有六个,从S2到S7依次对应的为GPN0到GPN5,且控制GPN的寄存器为GPNCON,地址为0X7F008830。 由上图可知,只要设置相应位为10,就可以设置相应的寄存器为外部中断功能,按键的初始化代码如下#define GPNCON (volatile unsigned long*)0x7f008830 v

2017-08-07 23:27:16 480

原创 MMU配置和使用

一:初识MMUMMU是memory managerment unit 即内存管理单元,是把虚拟内存转化为物理内存的一个“介质”,为什么要用到虚拟内存呢,因为在嵌入式系统中,进程和程序是很多的,物理内存根本不够用,所以使用MMU可以最大限度减少物理内存的使用,提高运行效率。MMU也是嵌入式和单片机两者中不同点最大的地方,单片机是没有MMU这个概念的。在这里,我们尝试去做一个简单的程序。假设保存为a。#

2017-07-29 22:31:45 3679

原创 S3C6410核心初始化

一:异常向量表异常定义:因为内部或者外部一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量。以下为七个异常向量及处理函数跳转关系组成的表。在Data Abort和IRQ之间有一段地址没有用上,在初始化的时候需要补上一段_not_used ,不然的话

2017-07-22 13:39:20 431

原创 s3c6410时钟体系

S3C6410时钟体系S3C6410可以使用外部晶振( XXTIpll )(默认为12MHZ)和外部时钟( XEXTCLK )两种方式输入时钟信号。它由跳线OM[0]决定。S3C6410 默认的工作主频为12MHz(晶振频率),S3C6410有三个PLL,分别为APLL、MPLL和EPLL。其中APLL产生ACLK,给arm core使用。MPLL产生HCLK和PCLK。EPLL产生特殊的时钟

2017-07-08 14:14:47 590

空空如也

空空如也

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

TA关注的人

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