- 博客(62)
- 收藏
- 关注
原创 uboot之uboot中的硬件驱动
一、uboot和linux驱动 1、uboot本身是裸机程序,裸机程序是没有驱动概念的 2、裸机程序是直接操控硬件的,操作系统中必须通过驱动来操控硬件。这两个的区别在于分层。 3、uboot的虚拟地址对硬件操作的影响 (1)、操作系统(linux)下MMU肯定是开启的,也就是说linux驱动中肯定都使用的是虚拟地址。而纯裸机中根 本不会开MMU,全部使...
2018-05-28 08:54:35 2834
原创 uboot之uboot中环境变量
一、环境变量基础 1、环境变量的作用 让我们可以不用修改uboot的源代码,而是通过修改环境变量来影响uboot运行时的一些数据和特性。譬如说通过 修改bootdelay环境变量就可以更改系统开机自动启动时倒数的秒数。 2、环境变量优先级 (1)uboot代码当中有一个值,环境变量中也有一个值。uboot程序实际运行时规则是:如果环境变量为空则...
2018-05-25 12:54:03 2986
原创 uboot之uboot的命令体系
一、uboot命令的使用: 1、uboot启动进入命令环境下,在此输入命令按回车结束,uboot会收取这个命令然后解析,然后执行。 2、uboot命令体系的实现代码uboot/common/cmd_xxx.c中。有若干个.c文件和命令体系有关。 3、每一个uboot的命令背后都对应一个函数。这就是uboot实现命令体系的一种思路和方法。 4、有些命令还支持传递参数。也就是说...
2018-05-24 20:21:29 847
原创 uboot之内核的启动
一、uboot和内核到底是什么? uboot的本质就是一个复杂点的裸机程序。 操作系统内核在本质上也是一个裸机程序,和uboot、和其他裸机程序并没有本质区别。 区别就是操作系统运行起来后在软件上分为内核层和应用层,分层后两层的权限是不同的,内存访问和设备上更加精细 (内核可以随便访问各种硬件,而应用程序只能访问限制的硬件和内存地址)。二、部署在SD卡中特定分区内 1、...
2018-05-22 13:50:56 438
原创 uboot启动之uboot第二阶段(BL2)
uboot第二阶段分析主要是start_armboot的分析一、这个函数是uboot/lib_arm/board.c的444行开始到908行结束。 1、首先分析一下uboot第二阶段应该做些什么? (1)、第一阶段主要初始化SoC内部的一些部件(看门狗,时钟等) (2)、uboot第二阶段就是初始化剩下的还没被初始的硬件。(譬如iNand,网卡芯片....)、ub...
2018-05-21 11:55:34 1961 1
原创 uboot之uboot第一阶段(BL1)
一、u-boot.lds中的start.S 1、在c语言中整个项目的入口就是main函数(这是c语言规定的),所以譬如说一个10000个.c文件的项目, 第一个分析的文件就是main函数的文件。 2、uboot中因为有汇编阶段的参与,因此不能直接找到main.c。整个程序的入口取决于链接脚本ENTRY (_start)因此_start符号所在的文件就是整个程序的...
2018-05-20 16:08:45 1372
原创 uboot之Makefile分析
一、uboot主Makefile分析VERSION = 1PATCHLEVEL = 3SUBLEVEL = 4EXTRAVERSION =U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)VERSION_FILE = $(obj)include/version_autogenerated.hHOST...
2018-05-19 17:41:23 1220
原创 uboot之uboot编译实践和内部目录介绍
编译实践 一、关于uboot的源码编译生成uboot.bin 1、我用的是朱有鹏老师的课程所以我有官方已经移植好的uboot源码所以我只是讲一下 uboot编译的过程和结果。(这是源码解压包的名称 qt_x210v3_130807.tar.bz2) ...
2018-05-17 22:36:25 880
原创 uboot基础之shell和makefile
shell篇一、shell介绍 1、shell是操作系统的终端命令行,shell可以理解为软件系统提供给用户操的命令行界面,可以说它是人机交互的 一种方式。 2、我们可以使用系统本身带的shell和操作系统,uboot等软件系统进行交互。具体就是通过shell提供的命令行设 置,输入...
2018-05-17 19:32:01 298
原创 初识uboot
这些关于uboot的分析全是我通过对朱老师物联网大讲堂知识的总结一、什么是uboot 要了解uboot的作用就要了解嵌入式设备(有系统的不是裸机)的启动过程,这里我们以S5pv210为 例来说说启动过程我之前写了一篇博客是关于S5pv210启动的https://mp.csdn.net/postedit/80296568, 在这里我简单的说一说大概的启动过程: (1)...
2018-05-17 13:33:17 279
原创 ARM之S5pv210的USB刷机
我所写的关于S5pv210的一切只是都是基于朱有鹏老师的物联网教程。一、什么是刷系统 刷系统就是利用刷机工具,向开发板中烧录预先编译好的镜像系统,使之在开发板上运行起来。二、准备工作 1、使用SecureCRT从网盘下载SecureCRT.rar,解压后直接使用。注册时参考解压包中的《说明.txt》。打开SecureCRT.exe后,建立一个Serial连接,开始监视串口。设置...
2018-05-16 18:07:22 601
原创 ARM之S5pv210触摸屏
一、输入类设备简介 1、input/output IO输入输出,是计算机系统中的一个概念。计算机的主要功能就是从外部获取数据然后进行计算加工的到输出数据并输出 给外部(计算机可以看成数据处理器)。计算机和外部交互就是通过IO。每一台计算机都有个标准输入和标准输出。 2、常见输入类设备 键盘、鼠标、触摸屏、游戏摇杆、传感器、(摄像头并不是一个典型的输入类...
2018-05-16 13:33:30 872
原创 ARM之S5pv210的LCD控制
一、LCD简介 1、LCD(Liquid Crystal Display)俗称液晶 2、液晶是一种材料,这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此 我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时 晶面板前面看到的就是各种各样不同的颜色,这就是LCD显示。 ...
2018-05-15 20:38:01 795
原创 ARM之S5pv210的按键和中断部分
一、按键和中断分析 要使用中断,首先要做好两个部分的工作:CPU中断的初始化和相应器件的中断的初始化。 CPU中断初始化:就是要设置号CPU有关中断的东西。 相关器件的中断初始化:例如按键,就要设置好按键,就触发中断。 (1)、先看看按键的原理图 从上图我们可以得知:按键是接在EINT2和EINT3处,还有KP_COL0-3,一共是6个按键。 ...
2018-05-15 00:06:00 702
原创 ARM之S5pv210串口通信初始化
一、串口通信的基础 1、串口通信(UART)的全称是:Universal Asynchronous Receiver /Transmitter(通用异步接收和发送) 2、异步通信和同步通信: (1)、异步通信: 发送方和接收方是工作在两个不同的时钟频率上的,也就是接收方有自己工作时的时钟频率,发 ...
2018-05-14 22:21:39 656
原创 ARM之重定位和链接脚本
一、重定位 1、静态重定位:静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始 位置,直接修改装配模块的有关使用地址的指令。 2、动态重定位:动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址重定位。更确 切地说,是在每次访问内存单元前才进行地址变换。动态重定位可是装配模块不加任何修改而装入内 存...
2018-05-14 16:52:42 1820
原创 ARM之S5pv210的时钟
一、时钟域 S5pv210一共有三个时钟域:MSYS,DSYS,PSYS MSYS: (Main System)主时钟,包括CPU,DDR内存条,IROM和IRAM等 DSYS: (Display System)显示时钟,就是一般和视频有关的的就在这个时钟域中,如HDMI,TVENC PSYS: (Peripheral System)外围时钟,就是...
2018-05-14 10:53:30 312
原创 ARM之S5pv210关看门狗
一、什么是看门狗? 看门狗本身是一个定时器,如果你在定时器完成之前未重置计时器的值那么它就会重启整个系统。但是我们 系统正常运行下并不希望他重启,所以就需要“喂狗“这个操作(即每次定时结束之前给定时器值重置)。二、什么时候会用到看门狗? 假设我们将一些设备放在环境恶劣的情况下,如果设备出现了问题可能需要一个复位就好了,这时候人不可 能再去一次这种地方去复位它,这时候你要是开...
2018-05-14 09:30:08 532
原创 ARM之S5pv210的亮灯实验
第一我在此强调的是,要学会根据原理图和相关的手册实现基本功能,主要学习这个过程。正文: 第一步:先看原理图了解LED是和哪个管脚连接的,然后我们才能通过操作寄存器的方式 控制管脚,进而控制LED 通过原理图可知:要想将LED点亮,只需要将GPJ0端设置为低电平,并且为输出状态 就可以了,这里我们只设置前...
2018-05-13 22:56:20 962
原创 ARM之ARM汇编
一、指令和伪指令 汇编指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以 由CPU读取执行。 汇编伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供 的,目的是用来指导编译过程,经过编译后伪指令不会生成机器码。二、两种不同风格的ARM指令 1、ARM官方的ARM汇编风格:指令一般用的小、windows中IDE开发环境如:LDR ...
2018-05-13 20:50:55 288
原创 ARM之S5pv210启动详解
一、210内置了96kb大小的SRAM(叫iRAM)和64kb大小的Norflash(叫iROM)二、启动过程 1、CPU上电后先从内部iROM中读取预先设置的代码BL0到iRAM中执行。该段IROM代码首先执行基本初始化CPU (CPU时钟,关看门狗,初始化设备拷贝参数......)(该段代码是三星出厂前设置的,三星也不知道我们板子上 将来会接什么样的DRAM和...
2018-05-13 08:04:58 771
原创 ARM之指令对CPU的意义
一、汇编语言与C等高级语言的差异 1、汇编难写,C好写 2、汇编无可移植性,C语言有一定可移植性,JAVA等高级语言的可移植性更强。 3、汇编语言效率最高,C语言次之,JAVA等更高级语言效率更低。 4、汇编不适合完成大型复杂的项目,更高级语言更适合完成更大、更复杂的项目。二、汇编语言的本质 1、汇编的实质是机器指令(机器码)的助记符,是一种低级符号语言 2、机...
2018-05-12 17:08:10 184
原创 ARM之可编程器件的原理
一、可编程器件的特点 1、CPU在固定频率的时钟控制下节奏运行。 2、CPU可以通过总线读取外部存储设备中二进制指令集,然后解码执行。 3、这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者 (ARM公司)定义的,本质上是一串由1和0组成的数字。这就是CPU汇编指令集。二、整个编程及运行过程 1、 程序员用汇编指令编程-->经...
2018-05-12 16:50:37 2494
原创 ARM之CPU设计原理
一、示意图 二、具体介绍 地址总线和数据总线: CPU通过地址总线寻址,然后通过数据总线与外部设备互换信息。 地址总线的位数决定CPU寻址的范围(即内存大小),数据总线的位数决定CPU单次通信能交换的信息数量。 总线速度决定CPU和外设互换信息的速度。注意: CPU的地址总线和数据总线可以不同(典型代表就是51单片机),但是一般都相同。 CPU的位数指的是...
2018-05-12 16:29:19 2717
原创 ARM之交叉编译
以下是根据朱有鹏老师的物联网课程写的两种开发模式: 非嵌入式开发:在A机编写源代码,编译得到可执行程序,发布给A机运行 嵌入式开发:在A机编写源代码,编译的到可执行程序,发布给B机执行 (我们所说的交叉编译便是第二种)为何使用交叉编译: 嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有 交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系...
2018-05-12 16:14:37 396
原创 ARM之嵌入式系统的特点
以下内容是根据朱有朋老师的物联网教学视频及课件写的:一、嵌入式系统的特点 1、专用,软硬件可裁剪可配置 2、低功耗、高可靠性、高稳定性 3、软件代码短小精悍 4、代码可固化 5、实时性 6、弱交互性 7、专用开发工具及开发环境 8、专业开发人员二、嵌入式系统的组成 硬件: 微处理器、存储器、I/O接口、输入输出设备等等。 软...
2018-05-12 16:00:35 1584
原创 数据结构之队列
一、定义 队列也叫FIFO(first in first out),队列是一种常用的数据结构其特性和栈恰好相反,它是先进先出的, 关于它的两个重要操作为入队和出队,其只能在头部和尾部进行操作,而其中能在头部尾部进行入队,出 队操作的为双端队列。二、使用 在这里我还是用链式存储结构对一般队列进行实现,并实现其主要API。 ...
2018-05-11 17:34:40 131
原创 数据结构之栈
一、定义 栈(FILO)是一种特殊的数据结构,它的特性是只能在栈顶通过push的方法来存放数据,也只能通过pop这种操作来 弹出栈顶数据,它的这种结构也就决定了它是先进后出的这与队列刚好相反。二、使用 栈的操作就是入栈,出栈。下面我用链式存储结构来实现栈,还有它的一些API。typedef int SeqType;typedef struct Node//定义数据节点 {...
2018-05-11 07:27:57 297
原创 数据结构之链表
一、定义 链表是一种常用的数据结构,而且我后面栈和FIFO也是用链表结构实现的,所以你必须得对 链表非常熟悉。它的查找时间复杂度为O(n),而它的插入复杂度为O(1),所以当你的数据不 断的变化时...
2018-05-10 20:37:42 134
原创 数据结构之顺序表
一、定义 顺序表是一种常用的数据结构,它把数据挨个存放在指定的空间中。其查找的时间复杂度为O(1) 其插入或者删除复杂度为O(n)。二、使用 接下来我用动态分配内存的方法实现了顺序表及一些API#define Maxsize 10//表长度的初始定义 typedef int SeqType;//存储类型为SeqType(现在为int型)typedef struct { ...
2018-05-10 19:34:48 159
原创 数据结构之基础
在学习简单的数据结构之前我们得了解一下数据结构的一些基本概念: 一、逻辑结构 集合:数据元素间除“同属于一个集合”外,无其他关系 线性结构:一个对一个,如线性表,栈,队列 树形结构;一个对多个,如树 图形结构:多个对多个,如图 二、物理结构 物理结构也称存储结构,是数据的逻辑结构在计算机存储内的表示(或映像)。 顺序存储结构:物理地址紧紧的挨着,数据...
2018-05-09 13:16:32 164
原创 排序之快速排序
一、定义 快速排序是一种较为复杂的排序方式,其时间复杂度为nlog2n。 算法的思想: 首先我们是以数组开头元素为基准的我们先用一个变量来存放它,我们用两个指针来指向该数组 的头和尾,我们默认以升序排序。如果头指针的值大于等于基准数,不做任何变化,让指针指向 下一个元素,否则头指针元素和尾指针元素进行交换。如果尾指针元素小于基准元素则不做任何 改变让尾指...
2018-05-08 22:08:24 101
原创 排序之插入排序
一、定义 插入排序的复杂度为O(n*n),而它的改进算法为希尔排序,所以在了解希尔排序之前非常有必要了解插入排序。 算法思想:假设有n个无序数,令i=1;j=i;在第一趟的时候我们首先用变量tem保存位置i的数,然后比较j位置和 j-1位置数的大小(默认为升序)若j-1位置的数大于j位置的数,则将j-1位置 的数直接赋给j位置,然后将tem存 放的值赋给j-1,第一趟完毕此...
2018-05-08 20:03:20 105
原创 排序之选择排序
一、定义 选择排序是一种简单的排序方式,其复杂度为O(n*n),是一种稳定的排序方式 其思想是:假设有n个无序的数,设i = 0; j = i+1;用第i个数和第j个数进行比较若第i 个数大则交换两个数,否则不变。然后i和j+1进行比较直到j=n时停止,这时i保存 的为最小的数,第一趟完毕。重复n-1趟之后所有的数就排序完毕。二、使用 要求:输入10个字符串将其排序,...
2018-05-08 18:16:28 144
原创 排序之冒泡排序
一、定义 冒泡排序是较为简单的一种排序方式,它的复杂度为O(n*n),它是一种稳定的排序方式。 它的思想是这样的,设有n个无序数,我们把第一个数和相邻的数进行比较若第一个比较小 (或者大,具体看你是升序还是降序,我们默认按降序)则交换两个数,否则不进行任何改 变,一共进行n-1次来确定出最小的放在最前面这是第一趟,第二趟用第二个数和相邻的数 进行比较,比较n-2次确...
2018-05-08 17:34:54 106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人