- 博客(16)
- 资源 (5)
- 收藏
- 关注
原创 BSS未清零
问题症状:VIVI命令的的组织是通过链表来实现的,添加命令的方法是如果是第一个命令,那么直接将head_cmd和tail_cmd指向该命令结构体,如果不是添加第一个命令,那么使tail_cmd的next_cmd项指向该命令结构体,然后再将tail_cmd指向该命令结构体。在初始化链表的时候,head_cmd=tail_cmd两个命令结构体指针都为NULL;然后添加第一个命令的时候,查看这两个指针却
2011-05-28 15:15:00
898
原创 clock tick rate异常
错误信息:Can not get a clock tick rateCan not get a clock tick rateCan not get a clock tick rate 原因:根据错误信息来看是节拍器上的问题,单步追踪最后发现是在计算节拍率的时候导致的。节拍率计算的过程中需要用到PCLK,PRESCALE和DIVIDER。2410和2440在得到PCLK的分
2011-05-28 14:50:00
967
转载 arm-none-linux-gnueabi vs arm-linux – EABI vs Non-EABI
EABI is the new Application Binary Interface (ABI) specification for the ARM Architecture introduced in 2005. It aims to provide interoperability between binaries compiled by various compilers like co
2011-05-06 15:28:00
1031
原创 启动问题 NAND擦写问题
iar_ 问题现象1:程序进行连接设置的时候,只能设置很小的范围,查看MAP文件,以及可执行文件大小,整个程序在4K范围内,由于这个凡是在是STEPPING STONE中,所以烧写进NAND,跑起来没有问题。 尝试将RW和ZI段放在SDRAM地址进行连接,烧写到NAND,没有反应。用JTAG查看寄存器信息,看出一些端倪,初始化硬件的代码并没有起作用,可能有2种情况:跑到这些代码了,但是有问题
2011-04-26 00:31:00
1273
转载 ARM编译器的semihosting
Semihosted环境(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)在semlhosted环境下用来实现C库函数与目标相关的函数。可以在你的Application Code中使用printf等stand IO Function in C Libr
2011-04-03 13:09:00
9465
原创 第2阶段
main.c粗粗看过的,但是并没有象head.S那样分析每一条语句,根据自己的需要真正移植的还是有很多疑惑,主要是每个过程的具体细节怎么实现,比如参数的传递,只知道有有个STRUCT或者TAG可以用,但是具体里面每一个参数,怎么根据自己的系统来设置,放在哪里,怎么传递过去,模模糊糊。现在还是打算仔细看一遍。 按照顺序: step 1: reset_han
2011-03-27 22:32:00
1552
原创 vivi中基于NOR FLASH的相关代码
void mem_map_nor(void){ copy_vivi_to_ram(); mem_mapping_linear(); nor_flash_mapping(); nor_flash_remapping();} static void copy_vivi_to_ram(void){ putstr_hex("Eva
2011-03-13 03:55:00
844
原创 linux参数传递
前几天在看vivi的代码的时候,发现在main.c中设置要传递给LINUX的一些参数的时候是经过一系列的调用使用了para_struct这个结构体进行的,当时一看头文件,并没有发现哪个里面有定义了这个结构体,用source insight来搜索整个VIVI工程同样没有搜索到,事实上这个结构体也是在LINUX内核中定义的。所以一直纠结怎么可以编译通过,而网上看了很久也就一个人提出了这个问题,但是没有
2011-03-11 00:55:00
948
原创 head.S of arch
arch目录下2410中的head.S. 首先include了三个头文件:config.h,linkage.h,machine.h. 其中config.h内容是调用autoconf.h. autoconf是由配置产生的一个配置结果文件,另外一个是.config,两者的区别是语法不同,.config是用来知道Makefile的,所以语法是按照Makefile中的语句定义的,如
2011-03-06 22:26:00
687
原创 NAND FLASH 2440
首先看一下NAND FLASH的组成,总最小的存储单元开始,存储的基本器件是MOSFET,具体怎么存储信息与沟道的形成有关(这在数字电路里面介绍得比较清楚),这个单元可能是SLC或者MLC,区别在于单个单元的存储信息量的不同,实现方式上是通过将电压分为多个档次,这样没个档次可以对应一个信息,比如一共4个档次,那么就可以存储2BITS的信息。然后大一点就是PAGE了,一个PAGE可能有几百或者几K
2011-03-05 03:51:00
1172
原创 UART 2440
首先分析一下UART的组成,4个模块:波特率发生器,接收模块,发送模块,控制模块. 接着看一下UART的功能特性。 1是串行通信,因此需要一定的通信格式,所以这里需要对每个FRAME的格式进行设置,并与通信部件保持一致,包括开始位、数据位、校验位和停止位,这部分在ULCON线形控制器中进行设置。 2是异步通信,时钟信号可以选择,并且设置相应的频率,这在UCON控制器中
2011-03-01 15:11:00
815
原创 sdram 2440
首先是sdram的结构。SDRAM的基本单元是由mos管和电容组成的,其中mos管控制选通,电容控制信息的存储。因此行列选通相当于选通了各自的MOS管。接着是基本的存储单元,它由多个基本单元组成,如通常8个基本单元组成的字节存储单元,或者16个的半字存储单元,这也者也就是DATA ACCESS的位宽。接着是L-BANK,SDRAM内部结构是阵列式的,这样的好处是可以任意访问某个位置的信息,而不需要
2011-02-28 16:44:00
805
原创 arch 1
通过对makefile的分析,对整一个依赖关系有一个大致的了解。接下来准备对每一个模块进行分析。首先看第一个子目录arch。 arch目录是针对不同目标开发板设计的,存放着处理器架构相关的代码,比如可能针对的是s3c2440,s3c2410等,不同的处理器架构有着不一样的硬件模块。而整个vivi启动包括两个部分,第一部分就是完成含依赖于CPU的体系结构硬件初始化的代码,包括禁止中断、初始
2011-02-16 02:12:00
1630
原创 makefile4vivi-top makefile
个人在看VIVI的makefile时的一些认识(部分内容已经被我修改,初步的草稿,还将继续修正): 总MAKEFILE最终目的就是要生成VIVI,所以从生成VIVI的规则开始分析。前面的部分都是在后面规则里面需要用到的定义。#版本信息和体系结构VERSION = 0PATCHLEVEL = 1SUBLEVEL = 4VIVIRELEASE=$(VERSION).$
2011-02-14 18:05:00
984
原创 Linker and loader
倒着来理这个过程。 首先我们明确最终要生成一个可执行文件: .out. 他的最终运行必须包含所有的指令(BINARY)、所有的数据、所有的变量、所有的子函数。 问题1就来了:这些内容在执行件里面有没有什么“区别”对待? 有的。因为关心LINUX下的ELF类型可执行件比较多,这里以它为例来看看。当然对于一个目标文件,可以是可重定位的,也可以是可执行的。
2011-02-12 17:26:00
1538
原创 Makefile_vivi--$$BASH,if -x filename
specify shell:CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; /else if [ -x /bin/bash ]; then echo /bin/bash; /else echo sh; fi ; fi)1、$$BASH 表示BASH完整路径。环境变量指定。2、if [ -x "$$B
2011-02-08 23:29:00
3258
S3C2440各寄存器地址定义(很全)
2011-01-23
Bootloader Description
2011-01-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人