- 博客(32)
- 资源 (25)
- 收藏
- 关注
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——NAND 启动
我们知道 s5pv210启动方式有很多种,sd卡和nand flash 启动就是其中的两种,前面我们实现的都是基于sd卡启动,这节我们开始实现从nand flash 启动: 从 NAND 启动 u-boot,需要 BL1 初始化 NAND 控制器,然后从 NAND 拷贝 BL2 到 DDR 内存。这里的BL1 即我们移植的 u-boot-spl.bin,BL2 即我们移植的 u-
2014-07-29 07:37:22 1158 3
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——NAND 8位硬件ECC
这节我们实现nand的ecc,保存环境变量到nand flash 中。然后把我们之前的led灯烧写到nand flash 中,开机启动,在 tiny210.h 中定义宏 CONFIG_S5PV210_NAND_HWECC、CONFIG_SYS_NAND_ECCSIZE、CONFIG_SYS_NAND_ECCBYTESCONFIG_SYS_NAND_ECCSIZE 定义了消息长度
2014-07-29 07:33:38 1095
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——NAND添加分区
这里的分区只是为了操作的方便。假设有个分区 kernel,其地址区间为 0x20000~0x320000,其大小为 0x300000在没有分区的情况下,对这块区间的操作如下:nand erase 20000 300000 擦除操作nand write 20000000 20000 300000 写操作nand read 20000000 20000 300000
2014-07-28 14:55:39 750
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植NAND FLASH
这节我们开始移植nand flash:通过查看帮助文档 doc/README.nand,要支持 NAND,需要配置CONFIG_CMD_NAND我们修改 tiny210.h,把 CONFIG_CMD_ONENAND 屏蔽掉,同时加上CONFIG_CMD_NAND:编译出错 ,没有定义 CONFIG_SYS_MAX_NAND_DEVICE,最大 NAND 设备数,我们的板子只有
2014-07-28 14:55:00 823
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植网卡
tiny210 板载的网卡芯片是 DM9000A,接在 S5PV210 的 SROM 控制器的 BANK1 上:S5PV210 的 SROM 控制器支持 8/16 位 NOR Flash/PROM/SRAM 内存。分为 6 个 bank,每个 bank 寻址空间达 128MB。每个 bank 有一个片选信号 nGCS[5:0],用来选通外接的内存芯片。当发的地址在bank1
2014-07-28 14:54:10 977
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——命令补全和历史命令
我们知道 Linux 的 shell 支持按 Tab 键自动补全命令,以及历史命令。 使用非常方便,我们也想让 u-boot支持这些功能:让 u-boot shell 支持 tab、命令历史-jdzwl-ChinaUnix 博客”一文有说明,需要配置 2 个宏CONFIG_CMDLINE_EDITING 和 CONFIG_AUTO_COMPLETE,我们在 tiny210.h 中增加这 2
2014-07-28 14:53:12 728
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(打印串口控制台)
在之前我们移植的代码中,都没看到明显的效果,这节我们实现控制台的打印信息。在上节,我们看到调用 relocate_code 重定位。在 u-boot 的帮助文档 doc/README.arm-relocation 中对重定位有说明。u-boot 为了生成位置无关码,在链接时指定了-pie 选项,这个选项在 u-boot-2014.04/arch/arm/config.mk 中指定:
2014-07-28 14:51:48 851
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(修改显示信息)
我们平时在使用u-boot时 ,u-boot启动会打印一些基本信息,比如说cpu型号、内存大小、时钟等信息,我们这节实现这些信息。现在接着上节继续分析: 在设置堆栈指针之后,接着调用 board.c 中的 board_init_f 函数,给它传了一个参数 r0=0,事实上没有用到。这个函数使用到了一些全局变量,因此我们需要让 u-boot.bin 位于其链接地址,通过修改 tin
2014-07-28 14:50:42 868
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(内存布局)
这节我们完成内存的初始化: 我们在 u-boot-2014.04/board/samsung/tiny210/tiny210.c 中实现它, 由于这个函数只需要在 u-boot-spl.bin 中实现,而 u-boot.bin 不需要,同时 smdkv210.c中的其他函数只需要在 u-boot.bin 中实现,前面分析过,编译 u-boot-spl.bin 时,spl/Makefile 会导出一
2014-07-28 14:48:06 754
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(点亮led灯)
在前面我们已经成功的实现了u-boot-spl.bin 现在开始我们要移植重头戏: u-boot.bin了,同样开始之前我们先进行分析: 同样u-boot.bin 也是从 start.S 中的 reset 开始执行,执行一些 CPU 底层初始化,然后跳转到 crt0.S 中的_main函数。_main开始是设置堆栈,在u-boot-spl.bin中,因为比较小,我们默认用bl
2014-07-28 14:47:18 1386
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(内存初始化)
在这节,我们要完成u-boot-spl.bin移植,并且通过这个程序,拷贝我们自己写的一个led程序到内存,让led灯点亮,首先我们回顾一下u-boot-spl.bin的整个运行过程: 1. 运行 arch/arm/cpu/armv7/start.S 文件,设置异常向量表,关闭中断,设置处理器到svc模式,然后执行 cup
2014-07-28 14:46:25 1008
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(时钟初始化)
前几节记录的都是一些准备知识。现在我们开始正在的移植了 。 首先我们解压下载好的u-boot源码,在 u-boot 的帮助文档 README 中有介绍如何添加自己的单板:1) 首先在顶层目录下的 boards.cfg 中添加自己的单板的硬件配置信息,但是我们拿到代码,先make distclean 一下。我们仿照 smdkc1002)
2014-07-28 14:45:49 971
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(核心初始化)
什么是SPL? SPL 的全称为 secondary program loader,我们知道,S5PV210 启动过程需要 BL1,BL2,其中 BL1 进行一些基本初始化(时钟、内存) ,加载BL2 到内存。U-boot 为此专门实现了 SPL 框架,看下面这幅图就清楚了: SPL即第 2 阶段程序加载器,即我们要实现的 BL1。 要支持 SPL, 我
2014-07-28 14:45:15 992 1
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植开始
移植 u-boot-spl.bin,我们采用 SPL 方式,因此需要在单板配置文件 u-boot-2014.04/include/configs/tiny210.h 中添加宏: 我们可以进行如下操作,只编译 u-boot-spl.bin,这里没有在命令行指定交叉编译器,因为我已经在 Makefile 里添加了工具链: 但是编译出错,我们前
2014-07-28 14:44:46 881
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——SPL
这里引入一个 Makefile 的知识点,GUN make 的执行过程分为两个阶段: 第一阶段:读取所有的 makefile 文件(包括“MAKIFILES”变量指定的、指示符“include”指定的、以及命令行选项“-f(--file)”指定的 makefile 文件),内建所有的变量、明确规则和隐含规则,并建立所有目标和依赖之间的依赖关系结构链表。 第二阶段
2014-07-28 14:44:33 991 1
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——编译过程
关于 u-boot 中的命令的使用,大家可以百度“uboot 命令详解”,或者查看 u-boot 的帮助文档。 注意:所有修改或添加的代码都标注有“add by shl”或者“modied by shl” ,这样方便查看。 首先大致分析一下 u-boot 的代码走向,通过看链接脚本 u-boot-2014.04/arch/arm/cpu/u-boot.lds
2014-07-28 14:44:04 860
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(三)
这节我们换种方法分析,从重点开始,也把我们前面分析的关联起来。还记得README 吧,在 README 中 Software Configuration 一节有详细说明,README 告诉我们:要针对某个单板进行配置,需要执行:make NAME_config,其中 NAME 在 boards.cfg 中列出。S5PV210 和 S5PC100 都是 Cortex-A8 架构,比较类似,我以
2014-07-28 14:43:56 933
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(二)
上节我们分析到第149-1390行,由于比较长,我们这节继续分析。这是一个条件语句,我们拆分分析:(第153-158行)[cpp] view plaincopyPHONY += all ifeq ($(KBUILD_EXTMOD),) _all: all else _all: modules endif
2014-07-28 14:43:04 721
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(一)
刚开拿到u-boot源码,我首先想到看的是readme文件,但这个文件很长且我英文水平有限,只能大概的了解他的意思:介绍了 u-boot 的历史, 版本命名规则, 目录组织架构,软件配置,如何添加一个新的板子等。对于linux下的工程,编译配置的开始肯定是根目录下的makefile , 但对于makefile我也只是了解基本的知识,所以开始之前,我又去恶补了一下makfile相关的知识,下面的分析
2014-07-28 14:42:04 1097
转载 tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——前言
刚开始学嵌入式Linux,看到uboot时,对它产生了很强的兴趣,刚好手中有块tiny210的板子,很想尝试移植一下,之前也尝试过移植,但不成功,经过一段时间的学习,加上找到的一些参考资料,决定趁这个暑假尝试一下uboot的移植,于是想把中间的移植的过程记录下来,并想尽可能的详细,供以后参考,同时希望得到大家的指导,希望中间的错误大家能指出,共同进步: 很多 u-boot 的基础
2014-07-28 14:40:54 842
转载 (七)u-boot2013.01.01 for s5pv210:《u-boot启动流程》
转载请注明地址:http://blog.csdn.net/zsy2020314/article/details/98240351.关于启动流程1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。 bl0:出厂的时候就固化在irom中一段
2014-07-26 16:06:05 969 1
转载 (五)u-boot2013.01.01 for s5pv210:《移植前的准备及u-boot初编译》
转载请注明地址:http://blog.csdn.net/zsy2020314/article/details/9329051移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取。首先说一下开发环境:1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(CortexA
2014-07-26 16:03:20 829
转载 (四)u-boot2013.01.01 for s5pv210:《mkconfig分析》
转载请注明地址:http://blog.csdn.net/zsy2020314/article/details/9312719 config.mk主要功能是配置单板信息和编译环境,将会被u-boot的makefile所调用,本文仍然侧重于句法分析。[cpp] view plaincopy####
2014-07-26 15:58:45 792
转载 (三)u-boot2013.01.01 for s5pv210:《mkconfig分析》
转载地址:http://blog.csdn.net/zsy2020314/article/details/9312147[cpp] view plaincopy/* 和分析makefile一样,分析mkconfig同样注重句法分析 */ ############################################
2014-07-26 15:54:17 828
转载 (二)u-boot2013.01.01 for s5pv210:《Makefile分析》
当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解。本文比较侧重于语法句意的分析,框架性的原理网上已经有很多,makefile在变但原理始终不变,只要理解了其中一个版本,对于其他版本的理解来说就应该不存在问题了。[cpp] view plaincopy
2014-07-26 15:48:59 952
转载 (一)u-boot2013.01.01 for s5pv210:《Uboot简介》
转载请注明地址:http://blog.csdn.net/zsy2020314/article/details/9301437
2014-07-26 15:46:46 1079
转载 ARM 汇编指令集
ARM汇编指令集一、 跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:Ⅰ.使用专门的跳转指令。Ⅱ.直接向程序计数器PC写入跳转地址值。通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调
2014-07-16 18:46:07 892
转载 S5PV210--1---210启动方式和代码前16字节
按照三星《S5PV210_UM_REV1.1》手册上说明的启动流程为:S5PV210上电将从IROM(interal ROM)处执行固化的启动代码,它对时钟等初始化、对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到IRAM(0xd002_0000处,其中0xd002_0010之前的16个字节储存的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,校验OK转入BL1进行执行;首
2014-07-14 10:49:23 1375
转载 printf "%.*s"
小数点.后“*”表示输出位数,具体的数据来自参数表printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面提供变量给“*”。同样,小数点.前也可以添加*,也要用户输入一个位宽值来代替,表示输出的字符所占位宽。#include #include int main(){ char *s
2014-07-11 14:58:18 437
转载 堆和栈的区别(转过无数次的文章)
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2014-07-02 20:44:51 469
转载 #define用法
1.简单的define定义#define MAXTIME 1000一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。2.de
2014-07-02 20:18:06 440
usb-monitor7.12
2014-05-16
Android-jni-test for smart210-led
2014-02-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人