摘要:
对于smdk2410,RAM范围从0x30000000~0x34000000. u-boot占用高端内存区。从高地址到低地址内存分配如下: 显示缓冲区 (.bss_end~34000000) u-boot(bss,data,text) (33f00000~.bss_end) heap(for malloc) gd(global data) bd(board data) stack .... nor flash (0~2M)参考:http://deshunfan.blog.163.com/blog/static/34244101200972832324749/#comment=fks_08306 阅读全文
摘要:
u-boot的主要功能是用于引导OS的,但是本身也提供许多强大的功能,可以通过输入命令行来完成许多操作。所以它本身也是一个很完备的系统。u-boot的大部分操作都是围绕它自身的数据结构,这些数据结构是通用的,但是不同的板子初始化这些数据就不一样了。所以u-boot的通用代码是依赖于这些重要的数据结构的。这里说的数据结构其实就是一些全局变量。 1)gd 全局数据变量指针,它保存了u-boot运行需要的全局数据,类型定义: typedef struct global_data { bd_t *bd; //board data pointor板子数据指针 unsigned long flags; / 阅读全文
摘要:
u-boot的启动流程: 从文件层面上看主要流程是在两个文件中:cpu/arm920t/start.s,lib_arm/board.c, 1)start.s 在flash中执行的引导代码,也就是bootloader中的stage1,负责初始化硬件环境,把u-boot从flash加载到RAM中去,然后跳到lib_arm/board.c中的start_armboot中去执行。1.1.6u-boot的start.s流程:硬件环境初始化: 进入svc模式;关闭watch dog;屏蔽所有IRQ掩码;设置时钟频率FCLK、HCLK、PCLK;清I/D cache;禁止MMU和CACHE;配置memory 阅读全文
摘要:
3、u-boot的通用目录是怎么做到与平台无关的?include/configs/100ask24x0.h这个头文件中主要定义了两类变量。 一类是选项,前缀是CONFIG_,用来选择处理器、设备接口、命令、属性等,主要用来决定是否编译某些文件或者函数。另一类是参数,前缀是CFG_,用来定义总线频率、串口波特率、Flash地址等参数。这些常数参量主要用来支持通用目录中的代码,定义板子资源参数。这两类宏定义对u-boot的移植性非常关键,比如drivers/cs8900.c,对cs8900而言,很多操作都是通用的,但不是所有的板子上面都有这个芯片,即使有它在内存中映射的基地址也是平台相关的。所以对 阅读全文
摘要:
1、源代码组织对于ARM而言,主要的目录如下:board 平台依赖 存放电路板相关的目录文件,每一套板子对 应一个目录。如smdk2410(arm920t) cpu 平台依赖 存放CPU相关的目录文件,每一款CPU对应一个目录,例如:arm920t、 xscale、i386等目录lib_arm 平台依赖 存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,如软件浮点。common 通用 通用的多功能函数实现,如环境,命令,控制台相关的函数实现。include 通用 头文件和开发板配置文件,所有开发板的配置文件都在configs目录下lib_generic 通用 通用库函数的实现n 阅读全文
摘要:
把上面生成的u-boot.bin文件,在cmd下利用sfj2410方式烧入板中,首先拔掉短路帽。。。然后经过连续几个0,之后,开始烧入板子,烧完后退出。重启板子,在串口端下竟然没有看见一点信息,心凉了一大截。。。呵呵!编译、连接没问题,烧写也没有问题,那为什么uboot启动不了呢?于是上了http://www.100ask.net论坛,这个论坛的超级版主就是《嵌入式linux应用开发完全手册》的作者,真的是百问网,问什么都答。。。开始怀疑是ylp2410的晶振问题,后来看了下优龙板晶振也都是12MHZ,在YLP2410_BIOS下启动linux过程也可以看到这方面的信息。。所以也不是晶振问题。 阅读全文
摘要:
patch 命令用于打补丁,补丁文件是使用diff产生的patch 命令语法patch [ -b [ -B Prefix ] ] [ -f ] [ -l ] [ -N ] [ -R ] [ -s ] [ -v ] [ -c | -e | -n ] [ -d Directory ] [ -D Define ] [ -F Number ] [ -i PatchFile ] [ -o OutFile ] [ -p Number ] [ -r RejectFile ] [ -x Number ] [ File ]patch 命令失败或拒绝接受补丁时,会产生一个和原文件同名,以".rej&qu 阅读全文
摘要:
9、第一次make all,出现如下错误。 从上面错误可以看出明显是结构体中没有定义CAMDIVN,于是要找到定义这个时钟变量的地方,增加它。进入include/s3c24x0.h,找到下面的typedef struct处: typedef struct 的最后一行为新增的。 修改完后保存,再次回到顶层中,先make distclean。10、再一次make all,又出现了如下错误: 上面到底是什么错误呢?一时是想不通,吃个饭再说吧!吃完饭来到实验室之后,上网查了些资料,终于明白。要么U-Boot源码问题,要么是编译器的问题。源码是从官方下的,一般是不会有问题的,那么就是编译器问题,那编译器 阅读全文
摘要:
昨天跟张老师去打乒乓球了,还没写完今天接着写。。。。。6、S3C2440是S3C2410的改进版,它们的操作基本相似,只是在系统时钟的设置、NAND Flash控制器的操作等方面有一些小差别。。而下面我要做的就是令一个U-Boot二进制代码既可以在S3C2410上运行,也可以在S3C2440上运行。 虽说我的板也是S3C2410的,但是增加S3C2440的U-Boot练习,可以提高我们的能力,为后面的学习打下基础。 GSTATUS1寄存器的值:0x32410000表示S3C2410,0x32410002表示S3C2440。 S3C2410:FCLK=200MHZ;S3C2440:FCLK=40 阅读全文