摘要: 19.液晶屏的原理 LCD工作原理解析: 1.LCD硬件体系架构: LCD硬件体系:可以看到LCD控制器是在ARM处理器里的,用排线将LCD液晶屏和处理器连接在一起。中间是通过了LCD驱动芯片。 1.1液晶: 液晶属于一种有机化合物,分子形状为长棒状,在不同的电流作用下,分子会做有规律的旋转,这样对 阅读全文
posted @ 2016-02-14 11:09 cestlavie 阅读(921) 评论(0) 推荐(0)
摘要: 18.DMA-6410 对于6410的DMA控制器和2440的DMA控制器有很大不一样。 S3C6410中DMA操作步骤: 1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC); 2、开启DMAC控制,设置DMAC_Configuration寄存器; 3、清除传输结束中断寄存器和错误中 阅读全文
posted @ 2016-02-14 11:08 cestlavie 阅读(463) 评论(0) 推荐(0)
摘要: 17.DMA-2440 首先在前面的实例中,在dev文件夹下增加dma.c文件,然后把它加入到该目录的Makefile里面: 这样就框架就好了,接下来打开dma.c来实现: 首先打开2440的芯片手册: 我们要操作的是串口0,对应的是通道0: 对应的源寄存器: 对应的控制寄存器: 该寄存器只有两个位 阅读全文
posted @ 2016-02-14 11:07 cestlavie 阅读(351) 评论(0) 推荐(0)
摘要: 16.6410DMA简述 1.为什么需要DMA 首先看串口来传递信息:发送字符串。 发送函数:在uart.c里增加下面发送函数: 接下来在main.c里调用: 编译make, 烧写到开发板: 制作SD卡,设置开发板从SD卡启动,设置好minicom后给开发板上电,紧接着按着空格键: 选择[1]格式化 阅读全文
posted @ 2016-02-14 11:05 cestlavie 阅读(511) 评论(0) 推荐(0)
摘要: 15.210控制台故障分析(解决问题的思路) 对于串口的输出,210按照前面的操作是下面的乱码。 第一想到的很可能是波特率的问题,这是串口乱码的一般情况。排除这一点的是前面的putc函数是可以实现的。验证: 如上面,先把主函数里的printf信息给注释掉。加上putc函数。重新编译和加头: 开发板先 阅读全文
posted @ 2016-02-14 11:04 cestlavie 阅读(328) 评论(0) 推荐(0)
摘要: 14. 串口控制台建立 串口控制台建立这一节的主要有三个内容: 1.控制台框架搭建 1.1控制台的分类介绍: 1.1.1菜单型控制台:就是选中设置好的数字或者字母选项后执行相应功能的控制台: 例如刚进入uboot之后的界面,就是菜单型控制台: 等待我们输入命令,来执行相应的操作。例如上面,如果此时我 阅读全文
posted @ 2016-02-14 11:02 cestlavie 阅读(777) 评论(0) 推荐(0)
摘要: 13.Smart210串口驱动基于12的补充 上面的12节里,已经讲了2440有关串口的设置和操作。本来,2440,6410和210的串口操作应该是几乎一样的。在进行6410和210的设置的时候,发现在波特率的设置,6410和210的原理是一样的,但是跟2440有点不一样。所以下面以210为例子,说 阅读全文
posted @ 2016-02-14 11:00 cestlavie 阅读(436) 评论(0) 推荐(0)
摘要: 12.2440串口驱动程序设计 串口的功能就是接受数据跟发送数据的,在上一节已经了解串口的引脚信号。但是数据的收发需要一定的条件,也就是串口的初始化。所以所以今天的内容就会被划分为三个部分: 1.串口的初始化: 创建一个uart.c来对串口进行处理,然后把它加入到Makefile工程文件里: 接着就 阅读全文
posted @ 2016-02-14 10:59 cestlavie 阅读(499) 评论(0) 推荐(0)
摘要: 11.串口基本知识 大纲: 串口角色:1.数据传输。2.充当控制台。 数据传输:两个嵌入式设备,除了使用usb和网络来实现数据的传输外,就是可以使用串口来实现数据传输。 控制台:在pc机里,我们使用键盘来输入命令和信息等,通过显示器来显示查询的结果或者信息等。在嵌入式里,是通过终端控制台来输入命令来 阅读全文
posted @ 2016-02-14 10:56 cestlavie 阅读(256) 评论(0) 推荐(0)
摘要: 10.NandFlash的驱动_写操作 上一节,学习了NandFlash的按页读的操作,下面是实现NandFlash的按页写。首先还是查看NandFlash芯片K9F2G08U0A的时序图 根据I/O pin角的信号信息,知道要实现NandFlash的写操作需要的步骤如下: 最后实现按页写的函数: 阅读全文
posted @ 2016-02-14 10:55 cestlavie 阅读(416) 评论(0) 推荐(0)
摘要: 9.NandFlash的驱动_读操作 在Makefile里添加nand.o,然后新建一个nand.c来实现NandFlash的读操作。 对NandFlash的读方式有两种: 按页读(需要提供页地址,也就是行地址)。 随机读(就是读取页里的某一列,需要提供页地址,也就是行地址和列地址)。 实现页读需要 阅读全文
posted @ 2016-02-14 10:55 cestlavie 阅读(755) 评论(0) 推荐(0)
摘要: 8.NandFlash原理分析 该节里主要是将NandFlash有关的知识,首先是NandFlash的角色、分类和访问方式。 角色分析:在个人的pc机中,使用硬盘来存储操作系统、数据等信息。在嵌入式领域,拥有硬盘功能的叫NandFlash。所以NandFlash就是存储信息的。 NandFlash分 阅读全文
posted @ 2016-02-14 10:53 cestlavie 阅读(437) 评论(0) 推荐(0)
摘要: 6.6410和210的按键中断编程 首先是打开6410底板原理图: 可以看到OK6410有六个按键: 可以看到OK6410的六个按键对应的引脚是KEYINT1、KEYINT2、KEYINT3、KEYINT4、KEYINT5和KEYINT6。接着在核心板的原理图里搜索这个词: 可以看到按键中断与GPN 阅读全文
posted @ 2016-02-14 10:52 cestlavie 阅读(440) 评论(0) 推荐(0)
摘要: 5.2440的按照中断编程 首先是打开底板的原理图,找到按键的信息: 可以找到四个按键: 可以看到四个按键对应的引脚是EINT1、EINT4、EINT2和EINT0. 然后在核心板原理图里去搜索这四个按键,可以看到下面的信息: 可以看到,按键中断与寄存器组GPF的引脚是互用的。所以接下来就是查看芯片 阅读全文
posted @ 2016-02-14 10:49 cestlavie 阅读(339) 评论(0) 推荐(0)
摘要: 4.中断处理流程分析 在CPU工作的 过程中,经常需要与外设进行交互,交互的方式包括"轮询方式"和"中断方式"。 轮询方式: CPU不断地查询设备的状态。该方式实现比较简单,但是CPU的利用率很低,不适合多任务的系统。 中断方式: CPU告知硬件开始一项工作之后,就去做别的事去了,当硬件完成了该项任 阅读全文
posted @ 2016-02-14 10:48 cestlavie 阅读(514) 评论(0) 推荐(0)
摘要: 3.MMU的配置和使用 前面的基础知识中使用了物理地址来点亮LED灯的,现在,学习了MMU的有关知识,下面就是利用MMU的知识,用虚拟地址来点亮LED灯。而且前面还关闭了MMU所以接下来要使用MMU就得打开MMU。 在前面的学习知道,从虚拟地址映射成物理地址有三种方式的: 段的方式 粗页的方式 细页 阅读全文
posted @ 2016-02-14 10:47 cestlavie 阅读(1130) 评论(0) 推荐(0)
摘要: 2.深入剖析地址转化 地址转化总体分析: TTB的配置: 在ATM920T的芯片手册里,在第三章: 就是关于内存管理单元的知识的,在里面有这要这个原理图: 上面这幅图就是2440虚拟内存到物理内存的转换过程,这过程适用于6410,210等。 3.段式转换: 知道,当最后两位为'10',表示接下来的转 阅读全文
posted @ 2016-02-14 10:46 cestlavie 阅读(330) 评论(0) 推荐(0)
摘要: 1.MMU功能解析 先来看一个例子: 1testMMU.c的代码: 2testMMU.c的代码: 两个代码同时运行的效果如下图: 可以看到两个同时运行的程序使用的是同一个地址0x80496a4,是不是程序运行出错了,怎么一个地址单元,同一时间可以被两个程序使用?其实呢这就是今天的重点,虚拟地址,0x 阅读全文
posted @ 2016-02-14 10:45 cestlavie 阅读(685) 评论(0) 推荐(0)
摘要: 37.C与汇编混合编程 新建light.c: 修改start.S: 修改Makefile:加light.o 最后make成功,烧写成功。 同样,我们也可以在C函数里调用我们的汇编里面的函数: 修改start.S:把light_led申明为global: 在light.c中被调用: Make编译烧写到 阅读全文
posted @ 2016-02-14 10:31 cestlavie 阅读(408) 评论(0) 推荐(0)
摘要: 36.从汇编到C(bl1到bl2) 从汇编跳转到C必须使用绝对跳转: 工程代码: 在Makefile中加入main.o: Start.S: Make编译: Main.c代码: #define GPKCON (volatile unsigned long*)0x7F008820 //volatile指 阅读全文
posted @ 2016-02-14 10:30 cestlavie 阅读(362) 评论(0) 推荐(0)
摘要: 35.BSS段的知识 在C语言中,初始化的全局变量是存在数据段的,初始化的局部变量是存在栈中的,用malloc分配的空间是存在堆里的,未初始化的全局变量是存在bss段。 Hello.c: #include <stdio.h> int bssdata; int main(){ bssdata = 20 阅读全文
posted @ 2016-02-14 10:29 cestlavie 阅读(436) 评论(0) 推荐(0)
摘要: 33.代码搬移 这节里的代码搬移是针对SRAM的: 起始地址: 2440的起始地址是0 6410的起始地址是0x0c000000. 210的起始地址是0x 6410: 210: 链接起始地址: 2440:0x30008000 6410:0x50008000 210:0x20008000 终点:就是l 阅读全文
posted @ 2016-02-14 10:28 cestlavie 阅读(280) 评论(0) 推荐(0)
摘要: 34.栈的初始化 前面知道,uboot的第一阶段是用汇编代码来对硬件等进行初始化的。第二阶段是用C语言的。但是此时没有C语言的运行环境。而C语言的运行需要堆栈等资源。所以这一节是第二阶段的C语言环境运行的栈的初始化。 1.栈:是一种具有先进先出性质的数据组织方式,也就是说后存进去的先取出,后存进去的 阅读全文
posted @ 2016-02-14 10:28 cestlavie 阅读(1118) 评论(0) 推荐(0)
摘要: 32.210内存的知识 210可寻址的空间是4GB大小,内存的起始地址是20000000,前面知道2440使用的内存是SDRAM,6410使用的内存是DDR,这里210使用的是DDR2.在210的地址空间中零地址处跟6410一样也是映射镜像区,例如当选择从NandFlash启动的使用,就会把IROM 阅读全文
posted @ 2016-02-14 10:27 cestlavie 阅读(406) 评论(0) 推荐(0)
摘要: 31.6410内存的知识 6410的地址空间分布: S3C6410处理器拥32位地址总线,其寻址空间为。其中高为保留外设区,低2GB区域又可划分为两部分:主存储区和外设区。 外设主要是寄存器所在的地址。 主存储区分为:Boot镜像区、内部存储区、静态存储区、保留区、动态存储区: Boot镜像区:这个 阅读全文
posted @ 2016-02-14 10:25 cestlavie 阅读(508) 评论(0) 推荐(0)
摘要: 30.2440内存的知识 首先看2440的地址线:mini2440原理图.pdf 2440的芯片提供了27根地址线=128M。 S3c2440芯片对外提供的引脚上,只给出了27根地址线addr[0:26].这27根引脚地址线,只能访问128M的外设空间。 为了扩大外设的访问范围,S3c2440芯片又 阅读全文
posted @ 2016-02-14 10:24 cestlavie 阅读(441) 评论(0) 推荐(0)
摘要: 29.内存的基础知识 内存的分类: 内存由于具备访问速度快,访问方式简单等优点,成为了PC或者是嵌入式硬件平台上不可或缺的元件。在开始学习如何使用内存之前,非常有必要先了解一下内存的分类: DRAM:它的基本原件是小电容,电容可以在两个极板上保留电荷,电容就是通过电荷来保存信息的,为了保持数据不丢失 阅读全文
posted @ 2016-02-14 10:23 cestlavie 阅读(273) 评论(0) 推荐(0)
摘要: 28.时钟初始化 ARM系统时钟初始化: 这就需要知道什么是时钟脉冲信号,什么是时钟频率,什么是时钟源。 时钟脉冲信号: 时钟脉冲信号:按一定的电压幅度,一定的时间间隔连续发出的脉冲信号。时钟脉冲信号是时序逻辑的基础,它用于决定逻辑单元中的状态何时更新。数字芯片中众多的晶体管都工作在开关状态,它们的 阅读全文
posted @ 2016-02-14 10:22 cestlavie 阅读(693) 评论(0) 推荐(0)
摘要: 27.点亮led的操作 Led可以作为我调试程序的工具:在嵌入式系统软件,例如Bootloader和kernel,在开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时候可以采用Led来作为调试手段。 OK6410有关led的原理图: 从上图知道,要让led发光二极管,就是从右到左导通, 阅读全文
posted @ 2016-02-14 10:18 cestlavie 阅读(559) 评论(0) 推荐(0)
摘要: 26.核心初始化之关闭MMU和cache 下面看看ARM存储体系: 可以看到速度最快的是处理器和内部寄存器,他们的数量很少,价格很昂贵。接着是TCM紧耦合存储器:cache和main memory。速度最慢的是外部存储介质:Flash和SD卡等。 CACHE: 上面是两种访存的两种机制,一种是处理器 阅读全文
posted @ 2016-02-14 10:17 cestlavie 阅读(1092) 评论(0) 推荐(0)
摘要: 25.核心初始化之中断屏蔽-210 在210中屏蔽中断的机制和6410是一样的。而且两者都是向量中断,很多中断都是硬件实现的,不像2440。 但是在210中的中断屏蔽寄存器有4个: 四组屏蔽寄存器的地址: 所以屏蔽中断就是把上面的四个屏蔽寄存器设置为全1,设置为0仍是没有影响。 代码实现: 编译: 阅读全文
posted @ 2016-02-14 10:15 cestlavie 阅读(202) 评论(0) 推荐(0)
摘要: 24.核心初始化之中断屏蔽-6410 打开6410的芯片手册,在12.VECTORED INTERRUPT CONTROLLERS向量中断控制寄存器。向量中断(6410、210)很多时候是使用硬件来完成中断的跳转的。 下面的最后一个寄存器VICxINTENABLE,功能是Interrupt Enab 阅读全文
posted @ 2016-02-14 10:14 cestlavie 阅读(229) 评论(0) 推荐(0)
摘要: 23.核心初始化之中断屏蔽-2440 在上一节中,我在设置关闭看门狗的时候,已经把WTCON的[2]设置为0,屏蔽了中断。如下图: 这一节是要屏蔽中断寄存器: 下面是2440芯片处理中断的机制: 中断屏蔽寄存器: 可以看到,只要把中断对应的中断屏蔽寄存器对应的位置为1即可。所以屏蔽中断就是往中断屏蔽 阅读全文
posted @ 2016-02-14 10:13 cestlavie 阅读(271) 评论(0) 推荐(0)
摘要: 22.核心初始化之看门狗 看门狗定时器,在嵌入式领域,有些设备需要工作一些极端的环境,就是人很少到或者很难到的地方。在长期的运作中,难免会出现故障死机的情况,这时,如果派人去查看情况,耗费耗时等,所以人们就设置了一种机制,就是系统里有一个重启的机制叫看门狗定时器。它工作的方式:就是系统的watchd 阅读全文
posted @ 2016-02-14 10:12 cestlavie 阅读(471) 评论(0) 推荐(0)
摘要: 21.核心初始化之svc模式 要设置系统工作svc特权模式,从前面的学习知道这需要设置CPSR程序状态寄存器。 在ARM Architecture Reference Manual.pdf文档中,2.Programmers' Model的2.5.Program status register。 可以 阅读全文
posted @ 2016-02-14 10:11 cestlavie 阅读(1259) 评论(0) 推荐(0)
摘要: 20.核心初始化之异常向量表 一、异常向量表: 包含:1.异常定义 2.异常类型 3.异常入口 4.向量表 首先异常定义,在ARM Architecture Reference Manual.pdf文档中,2.Programmers' Model的2.6.Exceptions异常: 异常:因为内部或 阅读全文
posted @ 2016-02-14 10:10 cestlavie 阅读(933) 评论(0) 推荐(0)
摘要: 19.Bootloader框架设计 在前面的uboot代码分析知道,uboot的启动有三个步骤BL0,BL1,BL2。由于BL0是固化程序,厂商提供的,所以不用考虑。所以Bootloader框架就剩下设计BL1和BL2了。 2440开发板: 6410和210: 阅读全文
posted @ 2016-02-14 10:09 cestlavie 阅读(334) 评论(0) 推荐(0)
摘要: 18.U-boot的工作流程分析-210 210启动流程: 前面在2440和6410中虽然有BL1和BL2之分,210也是一样的: 阅读全文
posted @ 2016-02-14 10:08 cestlavie 阅读(231) 评论(0) 推荐(0)
摘要: 17.U-boot的工作流程分析-6410 6410开发板: 1.uboot的入口: 要看uboot工程的入口,首先打开顶层目录的Makefile: Uboot所支持的开发板,在顶层的Makefile中都会有一个配置选项。比如6410,在Makefile中的配置选项是make forlinx_nan 阅读全文
posted @ 2016-02-14 10:07 cestlavie 阅读(384) 评论(0) 推荐(0)
摘要: 16.U-boot的工作流程分析-2440 分析的流程: 程序入口 第一阶段程序分析 第二阶段程序分析 2440开发板: 1.uboot的入口: 要看uboot工程的入口,首先打开顶层目录的Makefile: Uboot所支持的开发板,在顶层的Makefile中都会有一个配置选项。比如2440,在M 阅读全文
posted @ 2016-02-14 10:04 cestlavie 阅读(290) 评论(0) 推荐(0)
摘要: 15.ARM处理器的启动流程 ARM处理器启动流程涉及三方面的知识: 启动方式 地址布局 启动流程 S3c2440的ARM处理器的启动流程: 2440支持 Nor Flash启动,Nor Flash的大小2MB Nand Flash启动,Nand Flash的大小256MB 所以2440把uboot 阅读全文
posted @ 2016-02-14 10:02 cestlavie 阅读(1310) 评论(0) 推荐(0)
摘要: 14.Bootloader设计思路 在前面,已经了解了很多裸机的知识,也建立了一个测试汇编代码的工程。这些工作其实是为这里来学习Bootloader做铺垫的。 这一节的索引:图1-1: 图1-1 一个嵌入式的存储设备通过通常包括四个分区: 第一分区:存放的当然是u-boot 第二个分区:存放着u-b 阅读全文
posted @ 2016-02-14 10:00 cestlavie 阅读(752) 评论(0) 推荐(0)
摘要: 13.ARM协处理器的知识 在处理器中有协处理器来辅助处理器完成部分功能的,主要是协助作用。 协处理器: 协处理器用于执行特定的处理任务,如:数学协处理器可以控制数字处理,以减轻处理器的负担。ARM可支持多达16个协处理器,其中CP15是最重要的一个。 在ARM9、ARM11、cortexa8等核中 阅读全文
posted @ 2016-02-14 09:58 cestlavie 阅读(3054) 评论(0) 推荐(0)
摘要: 12.ARM伪指令操作 首先ARM伪指令包括: ARM机器码 定义类伪指令 操作类伪指令 ARM机器码: 其实任何一种处理器可以运行的叫机器码,机器码是从汇编程序通过汇编器转换来的。接下来看看机器码的信息。流程:图1-1. 图1-1 在上一节里,建立好了一个简单的汇编工程,在start.S只有三行代 阅读全文
posted @ 2016-02-14 09:57 cestlavie 阅读(2343) 评论(0) 推荐(0)
摘要: 11.汇编代码简单操作 使用汇编的原因很简单,就是汇编代码的高效。在机器启动的时候,利用汇编的高效,对硬件进行初始化,为加载内核,提供条件。 目前常用的ARM汇编指令有两种: *ARM标准汇编:适用于ARM公司的汇编器,适合在Windows平台下使用。 *GNU汇编:使用与GNU交叉编译工具链中的汇 阅读全文
posted @ 2016-02-14 09:54 cestlavie 阅读(549) 评论(0) 推荐(0)
摘要: 10.ARM汇编的学习 ARM汇编的学习是很必要,学习ARM汇编不是要以后用汇编去写程序,而是要去看得懂,且进行修改就可以了。因为在后面的有关内核和bootloader的工程里,会有部分的代码是汇编程序编写的。在bootloader中,系统一旦上电,第一个运行的程序,需要对cpu、协处理器进行初始化 阅读全文
posted @ 2016-02-14 09:52 cestlavie 阅读(1420) 评论(0) 推荐(0)
摘要: 9.ARM寻址方式 1.立即数寻址 立即数寻址,是一种特殊的寻址方式,操作数本身就是在指令中给出。只有取出指令就取到了操作数。这个操作数就称为立即数,对应的寻址方式就是立即数寻址方式。例如: ADD R0,R1,#0X45;这汇编的意思:R1+0x45->R0 在以上两条指令中,第二个源操作数,是立 阅读全文
posted @ 2016-02-14 09:51 cestlavie 阅读(361) 评论(0) 推荐(0)
摘要: 8.ARM寄存器详细解说 ARM寄存器的简单分类:图1-1: 图1-1 ARM微处理器中共有37个32位寄存器,其中31个通用寄存器,6个状态寄存器。但是这些寄存器不能被同时访问,在七种模式中,可以访问的寄存器种类不同。但是,通用寄存器R14——R0、程序计数器PC、一个状态寄存器cpsr都是可以被 阅读全文
posted @ 2016-02-14 09:50 cestlavie 阅读(1703) 评论(0) 推荐(0)
摘要: 7.ARM处理器的工作模式 ARM七种工作模式:图1-1: 图1-1 上面的七种工作模式可以在cpsr设置:如下的M[4:0]=Mode number。 图1-2 之所以要有这么多种模式,是为了避免致命的错误。例如我们写的应用程序运行在User模式,操作系统的运作在比较高的模式。 User模式:普通 阅读全文
posted @ 2016-02-14 09:49 cestlavie 阅读(344) 评论(0) 推荐(0)
摘要: 6.认识ARM家族 先看一幅图:图1-1: 图1-1 看到上面都是好像跟ARM公司有关的,但是他们到底各自是啥呢? 其实上面的这些名词分为三类: 芯片:6410、210、2440. ARM核:arm11、A8、arm9 指令架构:armv7、armv6 所以可以对上面的那朵"花"进行简化:图1-2: 阅读全文
posted @ 2016-02-14 09:48 cestlavie 阅读(1234) 评论(0) 推荐(0)
摘要: 5.Eclipse集成开发环境 Eclipse集成开发环境不仅可以编译裸机工程,还可以调试整个裸机工程,这样当程序异常的时候,可以更加有效的进行修改。接下来就是搭建整个eclipse集成环境:这个调试环境的框架如下图1-1: 图1-1 从上面的框架图看到,要实现eclipse在线调试裸机程序,需要安 阅读全文
posted @ 2016-02-14 09:47 cestlavie 阅读(662) 评论(0) 推荐(0)
摘要: 4.链接器脚本 一、体验: 首先先看一个例子:图1-1: 编译烧写的过程: main.c的截图: 可以看到在main函数中点亮了第一个盏灯: 图1-1 点灯 在这个例子中的gboot.lds的代码为: OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x5 阅读全文
posted @ 2016-02-14 09:44 cestlavie 阅读(545) 评论(0) 推荐(0)
摘要: 3.Makefile工程管理 一、体验 在前面的笔记里可以看到,要编译一个简单的工程需要的编译步骤是很多的。前面还是只有一个汇编文件,在一个工程里,会有很多文件的,如果像前面的那种编译方式是很不可靠的。这就需要Makefile工程管理。 例如前面的那个led.S,要编译成led.bin的步骤:图1- 阅读全文
posted @ 2016-02-14 09:43 cestlavie 阅读(435) 评论(0) 推荐(0)
摘要: 2.交叉工具链 一、交叉工具链: 交叉工具链,其实他有两个含义,一个就是交叉工具,所谓的交叉工具就是运行的环境和编译的环境不是在一体的。就像我们现在,编译裸机程序是在pc机上面执行的。可我们运行程序是在开发板。链,就是很多的意思,就是一个工具的集合。在我们前面配置arm-linux-gcc的工具中。 阅读全文
posted @ 2016-02-14 09:42 cestlavie 阅读(452) 评论(0) 推荐(0)
摘要: 1.裸机开发环境的体验(Redhat 6.4 + vbox) 一、裸机开发的一般流程 注意:这是假定你已经搭建好了裸机开发环境 我们裸机的一般开发流程:图1-1: 图1-1 裸机开发流程 由于在这篇文章里是体验裸机程序,所以我们跳过了1、2步骤。直接从第三步开始: 二、交叉工具链的安装: 在这里,我 阅读全文
posted @ 2016-02-14 09:41 cestlavie 阅读(543) 评论(0) 推荐(0)
摘要: 17.信号量同步编程 进程同步: 一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。 生产者:1.创建文件。2.往文件写内容。(中间有sleep)。 进程同步中经典的实例:生产者与消费者的问题。 Producer.c: #include <stdio.h> #in 阅读全文
posted @ 2016-02-14 08:37 cestlavie 阅读(365) 评论(1) 推荐(0)
摘要: 15.信号通信编程 在Linux系统中,信号signal的通信机制。 信号处理流程: 从上面的图可以清楚的看出信号处理的一般流程:1.选择信号 2.发送信号 3.处理信号。 信号的类型:Linux系统支持的所有信号均定义在/usr/include/asm/signal.h里面,其中常见的信号有: S 阅读全文
posted @ 2016-02-14 08:36 cestlavie 阅读(392) 评论(0) 推荐(0)
摘要: 16.信号量互斥编程 我们先来看一个例子。就是两个进程访问同一个文件,由于线程的先后,导致内容的异常。即是数据内容的混乱。 Student1.c: #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <f 阅读全文
posted @ 2016-02-14 08:36 cestlavie 阅读(637) 评论(0) 推荐(0)
摘要: 14.有名管道通信 有名管道: 有名管道又称为FIFO文件,因此我们对有名管道的操作可以采用操作文件的方法,如使用 open,read,write等. 有名管道的学习: 有名管道与其他文件的对比: FIFO文件在使用上和普通文件有相似之处,但是也有不同之处: 1. 读取Fifo文件的进程只能以"RD 阅读全文
posted @ 2016-02-14 08:35 cestlavie 阅读(661) 评论(0) 推荐(0)
摘要: 13.无名管道通讯编程 1.进程间的通信: Linux作为典型的多进程操作系统,进程与进程之间肯定需要信息交流,这就需要进程通信。 2.进程通信的目的: 1.数据传输:一个进程需要将数据发送给另一个进程。 2.资源共享:多个进程之间共享同样的资源。 3.通知事件:一个进程需要向另一个/组进程发送信息 阅读全文
posted @ 2016-02-14 08:34 cestlavie 阅读(378) 评论(0) 推荐(1)
摘要: 12.多进程程序的操作 创建进程: 创建进程的函数是fork(): 我们来看看帮助文件:man 2 fork: AME fork - create a child process SYNOPSIS #include <unistd.h> pid_t fork(void); DESCRIPTION f 阅读全文
posted @ 2016-02-14 08:33 cestlavie 阅读(719) 评论(0) 推荐(0)
摘要: 11.进程控制理论 进程:进程是一个具有一定独立功能的应用程序的运行。一个没有运行起来的程序不能叫做一个进程,只有运行起来的程序才会产生一个进程。 进程的特点: 动态性 并发性 独立性 异步性 进程的状态: 当我们运行一个程序的时候,该程序就处于就绪状态。由于程序的运行需要资源,例如内存、硬盘的空间 阅读全文
posted @ 2016-02-14 08:33 cestlavie 阅读(250) 评论(0) 推荐(0)
摘要: 10.时间编程 1.时间的类型: Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。 Calendar Time:日历时间,是用"从一个标准时间点(如:1970年1月1日0点)到此时经过 阅读全文
posted @ 2016-02-14 08:32 cestlavie 阅读(814) 评论(0) 推荐(0)
摘要: 9. 库函数方式文件编程 库函数:基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在windows、linux还是其他操作系统中,都是使用这些函数。使用库函数进行程序设计可以提高程序的可移植性。 流:对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的 阅读全文
posted @ 2016-02-14 08:31 cestlavie 阅读(398) 评论(0) 推荐(0)
摘要: 8.Linux文件编程 文件描述符: 在Linux系统中,所有打开的文件对应一个数字,这个数字我们称为:文件描述符。 下面我们通过下面的几个函数来入门: 打开文件: 在命令行执行:man open.得到下面的信息。 我们从帮助文档知道:open函数的功能是:open and possibly cre 阅读全文
posted @ 2016-02-14 08:30 cestlavie 阅读(210) 评论(0) 推荐(0)
摘要: 7.动态函数库 动态链接库: 制作动态链接库: gcc –c mylib.c –o mylib.o gcc –share –fPIC mylib.o –o libmylib.so 将制作好的libmylib.so复杂到/usr/lib -fPIC是输出的对象模块是按照可重定位地址方式生成的。 -sh 阅读全文
posted @ 2016-02-14 08:29 cestlavie 阅读(156) 评论(0) 推荐(0)
摘要: 6.静态函数库设计 程序设计中,离不开函数的使用。Linux应用程序设计中需要外部函数。主要是由函数库和系统调用来提供。 两者区别: 系统调用的是在Linux内核里的,函数库是在用户空间的。 函数库分类: 函数库按照链接方式可分为:静态链接库和动态链接库。 Linux应用程序使用的这些函数库主要存在 阅读全文
posted @ 2016-02-14 08:28 cestlavie 阅读(275) 评论(0) 推荐(0)
摘要: 5. Linux应用程序地址布局 程序构成: 在学习Linux应用程序开发时,经常会遇到如下概念:代码段、数据段、BSS段(Block Started by Symbol,又名:未初始化数据段) 、堆(heap)和栈(stack)。而这些部分也是构成Linux应用程序的重要组成部分。 内存布局: 当 阅读全文
posted @ 2016-02-14 08:27 cestlavie 阅读(263) 评论(0) 推荐(0)
摘要: 4.Makefile工程管理 使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能。Make能够使整个程序的编译、链接只需一个命令就可以完成。Make的工作主要依赖于一个叫作Makefile的文件。Makefile文件描述了整个程序的编译,链接等规则。其中包括:工程中的哪些源文件需 阅读全文
posted @ 2016-02-14 08:26 cestlavie 阅读(147) 评论(0) 推荐(0)
摘要: 3. Coredump故障分析 一、定义:Core Dump又叫核心转存。当程序在运行过程中发生异常,这时Linux系统可以把程序出错时的内存内容存储在一个core文件中,这种过程叫Core Dump。 二、Segment fault:这是Core Dump主要解决的错误。Linux应用程序在运行过 阅读全文
posted @ 2016-02-14 08:26 cestlavie 阅读(336) 评论(0) 推荐(0)
摘要: 2.gdb调试程序 GDB是GNU发布的一款功能强大的程序调试工具。GDB主要完成下面三个方面的功能: 启动被调试程序。 让被调试的程序在指定的位置停住。 当程序被停住时,可以检查程序状态:如变量值 调试的程序mygdb.c: #include <stdio.h> void myprint(int 阅读全文
posted @ 2016-02-14 08:25 cestlavie 阅读(256) 评论(0) 推荐(0)
摘要: 1.gcc的有关知识 运行环境: Vbox and redhat 6.4 1.1 gcc特点: Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。Gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30 阅读全文
posted @ 2016-02-14 08:24 cestlavie 阅读(625) 评论(0) 推荐(0)
摘要: 18. Linux 密码故障排除 实验要求: 1.排除Linux密码故障。 实验器材: 软件: 1.安装了RHEL6的vmware虚拟机。 硬件: 2.PC机一台。 背景知识: 1.Root密码破解步骤: 1).在系统启动时进入 grub 选项菜单 2).在 grub 选项菜单按 e 进入编辑模式 阅读全文
posted @ 2016-02-14 07:52 cestlavie 阅读(247) 评论(0) 推荐(0)
摘要: 17. sudo 用户管理 实验要求: 1. 了解Linux系统中用户管理机制; 2. 为指定用户添加特殊权限。 实验器材: 软件: 1.安装了RHEL6的vmware虚拟机。 硬件: 1. PC机一台。 背景知识: 1.Sudo用户管理 在 Linux 系统中,管理员往往不止一人,若每位管理员都用 阅读全文
posted @ 2016-02-14 07:51 cestlavie 阅读(243) 评论(0) 推荐(1)
摘要: 16. Linux 在线安装工具 yum 实验要求: 1. 在线安装yum。 2. 掌握使用yum命令查找、安装、卸载软件包。 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机。 2. 第三方的免费软件仓库安装包。 硬件: 1.PC机一台。 背景知识: 1.Linux安装软件: rpm 阅读全文
posted @ 2016-02-14 07:50 cestlavie 阅读(729) 评论(0) 推荐(0)
摘要: 15. TFTP 与 NFS 服务器配置 实验要求: 1.安装并配置TFTP服务。 2.安装并配置NFS服务。 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机。 2. TFTP的rpm安装包。 3. TFTP下载工具Tftpd32。 4. NFS的rpm安装包。 硬件: 1.PC机一 阅读全文
posted @ 2016-02-14 07:49 cestlavie 阅读(535) 评论(0) 推荐(0)
摘要: 14. Windows 与 Linux 文件共享 实验要求: 1. 使用WinSCP工具实现windows与虚拟机之间文件共享。 2. 使用Samba服务实现windows与虚拟机之间文件共享。 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机。 2. WinSCP工具。 硬件: 1. 阅读全文
posted @ 2016-02-14 07:48 cestlavie 阅读(468) 评论(0) 推荐(0)
摘要: 12. Linux 网络配置 实验要求: 1. 配置虚拟机网络 2. 配置linux的网络 实验器材: 软件: 1.安装了RHEL6的vmware虚拟机。 硬件: 1.PC机一台。 背景知识: Vmware 虚拟机对于不同的的网络环境提供了有三种网卡工作模式:Bridged:桥接模式:在桥接模式下, 阅读全文
posted @ 2016-02-14 07:47 cestlavie 阅读(369) 评论(0) 推荐(0)
摘要: 13.远程登录 Linux 实验要求: 1. 使用远程登录工具PuTTY登录Linux虚拟机。 2. 使用VNC服务登录Linux虚拟机。 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机。 2. PuTTY远程登录工具。 3. VNC服务器安装包: tigervnc-server-1 阅读全文
posted @ 2016-02-14 07:47 cestlavie 阅读(250) 评论(0) 推荐(0)
摘要: 11.Linux 文本编辑器—VIM 使用 课程要求: 1.掌握vi编辑器的使用,能够使用vi编辑器完成各种文档编辑工作。 实验器材: 软件: 1.安装了RHEL6的vmware虚拟机。 硬件: 1.PC机一台。 背景知识: 1. vi编辑器简介: Linux 提供了一系列功能强大的编辑器, Vi 阅读全文
posted @ 2016-02-14 07:46 cestlavie 阅读(318) 评论(0) 推荐(0)
摘要: 10.Linux 命令详解 课程要求: 1.了解Linux系统的常用命令的使用。 实验器材: 软件: 1.安装了RHEL6的vmware虚拟机。 硬件: 1.PC机一台。 背景知识: 1. Linux命令介绍: linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说,无论是 阅读全文
posted @ 2016-02-14 07:45 cestlavie 阅读(304) 评论(0) 推荐(0)
摘要: 9. Linux 快速体验 课程要求: 1. 了解Linux系统的使用。 2. 熟悉Linux操作界面 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机。 硬件: 1. PC机一台。 背景知识: 1. Linux部分目录结构介绍: /:根目录,一般根目录下只存放目录,不要存 阅读全文
posted @ 2016-02-14 07:43 cestlavie 阅读(227) 评论(0) 推荐(0)
摘要: 8.Linux 系统概述及专业级定制安装 课程要求: 1. 在vmware虚拟机中,安装红帽企业版6(RHEL6)。 实验器材: 软件: 1. RHEL6 Linux安装镜像文件。 硬件: 1.PC机一台。 背景知识: 1. VMware: VMware Workstation 是 VMwa 阅读全文
posted @ 2016-02-14 07:42 cestlavie 阅读(358) 评论(0) 推荐(0)
摘要: 7.安装 Wince 到开发板 课程要求: 1. 了解Wince嵌入式系统的组成和启动流程。 2. 通过SD卡自动烧写Wince系统到nand flash中。 3. 体验Wince系统。 实验器材: 软件: 1.OK6410光盘A,B 硬件: 1. SD卡及读卡器各一块。 2. OK6410开发板。 阅读全文
posted @ 2016-02-14 07:40 cestlavie 阅读(2978) 评论(0) 推荐(0)
摘要: 5.安装 Linux 系统到开发板 课程要求: 1. 了解linux嵌入式系统的组成和启动流程。 2. 通过SD卡自动烧写Linux系统到nand flash中。 3. 体验Linux+Qt系统。 实验器材: 软件: 1.OK6410光盘A,B。 硬件: 1. PC机一台。 2. SD卡读卡器各一 阅读全文
posted @ 2016-02-14 07:39 cestlavie 阅读(3927) 评论(0) 推荐(1)
摘要: 6.自动安装 Android 系统 实验要求: 1.了解Android嵌入式系统的组成和启动流程。 2. 通过SD卡自动烧写Android系统到nand flash中。 3. 体验Android系统。 实验器材: 软件: 1. 串口终端工具SecureCRT。 2. OK6410光盘A,B 硬件: 阅读全文
posted @ 2016-02-14 07:39 cestlavie 阅读(619) 评论(0) 推荐(0)
摘要: 4.安装系统引导程序 课程要求: 1.安装Bootloader到SD卡。 实验器材: 软件: 1.OK6410光盘A,B 硬件: 1. PC机一台,系统为windows 7 64位 2. OK6410开发板一套 3. 4G或8GSD卡一张 背景知识: 1. Bootloader简介: 在嵌入式操作系 阅读全文
posted @ 2016-02-14 07:38 cestlavie 阅读(731) 评论(0) 推荐(0)
摘要: 3.串口连接开发板 *课程要求: 1.配置使用串口工具SecureCRT。 2.安装使用USB转串口线。 *实验器材: 软件: 1. CH340-USB转串口驱动。 2. SecureCRT_绿色版。 硬件: 1.OK6410开发板一套。 2.PC机一台,系统为windows 7 64位 3.USB 阅读全文
posted @ 2016-02-14 07:36 cestlavie 阅读(2223) 评论(0) 推荐(0)
摘要: 2.OK6410硬件介绍 图2-1 OK6410底层+核心板 OK6410 开发板基于三星公司最新的ARM11 处理器S3C6410,拥有强大的内部 资源和视频处理能力,可稳定运行在667MHz 主频以上,支持Mobile DDR 和多种 NAND Flash。OK6410 开发板上集成了多种高端接 阅读全文
posted @ 2016-02-14 07:35 cestlavie 阅读(1778) 评论(0) 推荐(0)
摘要: 1.嵌入式系统的简介 1.1 课程规划与学习方法 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一,但同时也是最难以掌 握的学科之一,很多踌躇满志的同学最终没能成为一名合格的嵌入式工程师,很大原因是 没有掌握科学,有效的学习方法,所以本章主要将从学习人群、待学知识点、学习顺序等 几个方面来阐 阅读全文
posted @ 2016-02-14 07:33 cestlavie 阅读(1241) 评论(0) 推荐(0)
摘要: 首先是hello.c 文件: Hello.c: 接着是修改driver/char/Kconfig: 添加: 修改字符设备驱动里的Makefile: 打开Makefile: obj-$(CONFIG_HELLO_WORLD) += hello.o 进入配置界面: 选择Device driver:进入: 阅读全文
posted @ 2016-02-14 07:24 cestlavie 阅读(358) 评论(0) 推荐(0)
摘要: Tty驱动程序框架 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1• 串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看作是一个字符设备。这些串行端口所对应的设备名称是/dev/ttySAC0 阅读全文
posted @ 2016-02-14 07:23 cestlavie 阅读(405) 评论(0) 推荐(0)
摘要: 平台总线驱动设计 平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。虚拟总线和实际的总线优势相当。我们只要把驱动和设备挂载到虚拟总线就可以了。 平台总线驱动与设备匹配机制 平台总线的结构:plat 阅读全文
posted @ 2016-02-14 07:22 cestlavie 阅读(361) 评论(0) 推荐(0)
摘要: 总线设备驱动模型 总线:创建一条总线,跟我们前面的按键一样,首先是描述总线结构,接着是注册总线,注销总线。总线设备,例如usb总线,上面会有很多类型的usb的驱动,例如鼠标、键盘.....等,当我们把之一的usb插上的时候,usb总线会把每个驱动遍历一遍,找到相应的驱动程序执行。 接下来用bus.c 阅读全文
posted @ 2016-02-14 07:21 cestlavie 阅读(468) 评论(0) 推荐(0)
摘要: 阻塞型驱动设计 唤醒之后按优先级执行。 对按键驱动进行阻塞型改造 改造的duokey.c: Make会产生一下的问题还没解决,由于没有网络。差个头文件..... 明天有网络再说咯 找到了头文件,linux/sched.h又出现了奇怪的错误: 很奇怪,是重名。可我没有定义key..h,是系统的。最后改 阅读全文
posted @ 2016-02-14 07:20 cestlavie 阅读(216) 评论(0) 推荐(0)
摘要: 多按键驱动程序优化 优化的代码,支持两个按键的支持的代码:duokey.c: #include <linux/module.h> /* For module specific items */ #include <linux/fs.h> /* For file operations */ #incl 阅读全文
posted @ 2016-02-14 07:19 cestlavie 阅读(309) 评论(0) 推荐(0)
摘要: 按键定时器去抖动 按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开。因而在闭合及断开的瞬间总是伴有一连串的抖动的。按键去抖动的方法主要有两种,一种是硬件电路去抖动;另一种就是软件延时去抖动。而延时又一般分为了两种,一种是for循环等待,另一种是 阅读全文
posted @ 2016-02-14 07:18 cestlavie 阅读(1522) 评论(0) 推荐(0)
摘要: Linux是如何来处理中断嵌套的: 所谓的中断嵌套就是,当一种中断正在执行的时候,又产生了另外中断。可以是同类型的,也可以是不同类型的。 首先先来分析第一种类型:慢速中断:是指在进行中断处理的时候,中断的总开关是不关闭的。允许其他类型中断产生。 快速中断:当中断产生的时候,控制位的IF为被置1,别的 阅读全文
posted @ 2016-02-14 07:17 cestlavie 阅读(259) 评论(0) 推荐(0)
摘要: 按键驱动的操作 通过上两节课的了解,接下来,我们通过例子来实现按键驱动的功能。 首先是按键的初始化,按键的初始化可以选择在open函数,和模块的初始化函数当中完成硬件的初始化。下面我们是选择在模块的初始化函数进行按键的初始化。按键的初始化,主要涉及对GPIO的引脚的功能进行相应的设置。在OK6410 阅读全文
posted @ 2016-02-14 07:16 cestlavie 阅读(369) 评论(0) 推荐(0)
摘要: 回顾裸机的流程。在裸机下学期,通过按键玩中断。 裸机中断的过程: 中断会有统一的入口:当我们的程序产生中断的时候,无论是哪种中断。都会跳到中断向量表里的_irq这里。这是统一的入口。 2.用户要先注册中断处理程序。 3.根据中断源编号,调用中断处理程序。 接下来我们来看linux的中断,是不是也是这 阅读全文
posted @ 2016-02-14 07:15 cestlavie 阅读(368) 评论(0) 推荐(0)