U-boot2010.06移植--阶段一
2011-02-24 23:14:57
我今天的移植将分如下3步。加上写记录文档,预计时间3小时。
一,不改变源码,完成编译。
二,修改源码,搭建一个U-boot的框架,完成编译。
三,修改源码,完成编译,下载到板上nandflash,驱动LED。
环境说明:主机win7,虚拟机WMware6.0.2( unt.10)+
unt.10默认配置的arm-linux-gcc.
烧录是在主机上完成,编译是在虚拟机完成。
实现第一步:(目标:对smdk2410的相关源码进行了验证可以通过编译,并且熟悉了编译过程。结果:成功。)
我的压缩包放在/linux/boot中,解压源码
#tar -jxvf u-boot-2010.06.tar.bz2
make smdk2410_config
接着就出现了问题一[已解决]
make: *** 没有规则可以创建目标“smdk2410_config”。 停止。
解决问题一:
自己感觉是没用arm-linux-gcc的问题,打开U-boot的README文件。
If you are not using a native environment, it is assumed that you
have GNU cross compiling tools available in your path. In this case,
you must set the environment variable CROSS_COMPILE in your shell.
Note that no changes to the Makefile or any other source files are
necessary. For example using the ELDK on a 4xx CPU, please enter:
$ CROSS_COMPILE=ppc_4xx-
$ export CROSS_COMPILE
我需要先配置环境变量。
于是:
export CROSS_COMPILE=arm-linux-
make smdk2410_config
后还是出现如下问题?
make: *** 没有规则可以创建目标“smdk2410_config”。 停止。
又想了一下,突然想到我解压完后,应该要进入解压目录的。
于是:
cd u-boot-2010.06
make smdk2410_config
成功。然后再
make
就在u-boot-2010.06文件夹下生成了U-boot.bin文件。
实现第二步:(目标:完成U-boot框架搭建。结果:成功)
根据README文件的指导
1. Add a new configuration option for your board to the toplevel
"Makefile" and to the "MAKEALL" script,
using the existing
entries as examples. Note that here and at many other places
boards and other names are listed in alphabetical sort
order. Please
keep this order.
2. Create a new directory to hold your board specific code. Add any
files you need. In your board directory, you will need at
least
the "Makefile", a "<board>.c",
"flash.c" and "u-boot.lds".
3. Create a new configuration file
"incl?/configs/<board>.h" for
your board等等
我就不在虚拟机里完成了。我直接在主机改为后,去虚拟的 untu下编译。
1,在MAKEALL文件中的LIST_ARM9=,按字母排序添加apple2440 \并保存。
2,在Makefile文件中,找到
ap946es_config: unconfig
@board/armltd/integrator/split_by_variant.sh ap $@
添加如下代码并保存:
apple2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t apple2440 samsung s3c24x0
3,在\u-boot-2010.06\board\samsung文件夹下,创建一个新的文件夹名为 apple2440,并把smdk2410下的文件都copy到apple2440文件夹下,把smdk2410.c更名为apple2440.c。但是没找到u-boot.lds文件。奇怪了,readme中说要有的,为什么smdk2410中没有呢?后来想起来昨天分析源码的时候,u-boot.lds应该在\arm\cpu\arm920t里有。
4,编辑apple2440下的Makefile文件(参考网络上移植成功的教程,否则我不知该哪里,呵呵)
COBJS := smdk2410.o flash.o改为
COBJS := apple2440.o flash.o
5,在u-boot-2010.06\incl?\configs文件夹下复制一个smdk2410.h,更名为apple2440.h。
好了,激动人心的时候就要到了。
make apple2440_config
make
就和README文件说的,会产生3个文件。
Finally, type "make all", and you should get some working U-Boot
images ready for download to / installation on your system:
- "u-boot.bin" is a raw binary
image
- "u-boot" is an image in ELF binary format
- "u-boot.srec" is in Motorola S-Record format
不过这3个文件目前烧录到板子中也不能起作用。只是搭了一个框架,之后就是往里面增加内容或修改内容。
实现第三步(目标:修改源码,完成编译,下载到板上实现LED点亮。结果:成功。)
应该先修改什么呢?(按照先前裸奔代码的经验,应该确定先修改启动文件。但是保险起见,要在U-boot中寻找依据。)
先解释一下lds文件的作用:一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。
是不是有答案了。打开arch\arm\cpu\arm920t下的u-boot.lds重点看如下:
ENTRY(_start)
//说明程序的入口点是从_start函数。
.text :
{
cpu/arm920t/start.o (.text) //程序执行的第一个文件
*(.text)
}
现在可以确定先修改的文件是arch\arm\cpu\arm920t下的start.S。打开此文件,自己看代码准备修改。
先看此段。
start_code:
/*
* set the cpu to SVC32 mode
*/
mrs r0, cpsr //读状态寄存器到r0
bic r0, r0, #0x1f //r0的低5位清0
orr r0, r0, #0xd3 //或上110
10011,即禁止IRQ和FRQ,并且设置为超级用户模式。
msr cpsr, r0 //r0写入状态寄存器
问题:干嘛要用SVC模式?
查了下。原理超级用户模式(SVC 模式),主要用于 SWI(软件中断)和 OS(操作系统)。这个模式有额外的特权,允许你进一步控制计算机。例如,你必须进入超级用户模式来读取一个插件(podule)。这不能在用户模式下完成。
我之前裸奔没操作系统所有不需要用SVC模式,但是U-boot需要加载OS,所以选SVC。
接着看到
bl coloured_LED_init
bl red_LED_on
找了led初始化和led on的函数觉得有点复杂。没找清楚。这个今后掌握了单步调试后研究一下。
于是把这两行注释掉。
在其下面加入
#if
defined(CONFIG_S3C2440)
#define GPBCON 0x56000010
#define GPBDAT 0x56000014
#define GPBUP 0x56000018
ldr r0, =GPBUP
ldr r1, =0x7FF /*关闭上拉*/
str r1, [r0]
ldr r0,
=GPBCON /*配置PB5、6、7、8为输出口,对应PBCON寄存器的第10-17位*/
ldr r1, =0x015400
str r1, [r0]
ldr r0, =GPBDAT
ldr r1, =0x79F /*对应二进制11110011111,PB5,6设为低电平,点亮LED*/
str r1, [r0]
#endif
接着在config/apple2440.h中加入一条宏定义。
#define
CONFIG_S3C2440 1 /* on a SAMSUNG apple2440 Board */
make apple2440_config
make
下载到nandflash中,看看结果.
PB5和PB6点亮,PB7和PB8不点亮。
0x79F改成0x6BF看看灯的变化吧!是不是变成了PB8和PB6,PB7和PB5不亮啊!验证正确。
明天要配置clk等然后实现串口通信显示。另外,我需要补充一下makefile的知识以及学习linux下调试源码。
U-boot2010.06移植--阶段一的更多相关文章
- u-boot2010.06移植阶段三--norflash驱动
2011-03-20 23:06:24 学习笔记: 效果图: 参考步骤: 一,把smdk2410 # 改成apple2440 # 1,在board/samsung/apple2440/apple24 ...
- uboot移植阶段二--3串口终结篇
2011-03-20 23:00:37 前天U-boot移植串口后,能成功显示数据. 今天的主要目的是再次进行U-boot移植.看是否成功.花了40分钟,很顺利. 接着就是要把之前有问题的U-boot ...
- u-boot移植总结(二)LED点灯调试 和 u-boot加载地址
(一)LED点灯调试 FL2440电路总共有4个LED0,LED1,LED2,LED3,分别接到板子GPB5,GPB6,GPB8,GPB10引脚.通过设置三个寄存器GPBCON(0x56000010) ...
- 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)
第10章 RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...
- 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)
第9章 RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移 ...
- 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)
第8章 RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...
- 【安富莱】【RL-TCPnet网络教程】第7章 RL-TCPnet网络协议栈移植(裸机)
第7章 RL-TCPnet网络协议栈移植(裸机) 本章教程为大家讲解RL-TCPnet网络协议栈的裸机移植方式,学习了上个章节讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文 ...
- [学习资料] Tiny210(S5PV210) u-boot移植
Tiny210(S5PV210) u-boot移植http://www.microoh.com/bbs/forum.php?mod=viewthread&tid=254&fromuid ...
- 手把手教你丨小熊派移植华为 LiteOS-M
摘要:本文详细讲解如何移植 LiteOS 到小熊派. 本文分享自华为云社区<小熊派移植华为 LiteOS-M(基于MDK)>,作者: JeckXu666. 前言 之前使用小熊派实现了鸿蒙动 ...
随机推荐
- 转 .NET4.5之初识async与await
来自:http://www.cnblogs.com/lekko/archive/2013/03/05/2944282.html 本人是从.NET4.0刚出的时候接触的.NET环境,所以学的东西就是4. ...
- Spark SQL configuration
# export by: spark.sql("SET -v").show(n=200, truncate=False) key value meaning spark.sql.a ...
- Aspose.Words使用技巧
咨询个问题啊,我在使用aspose生成word,遇到了两个问题,一个是用aspose自动生成的目录的字体与标题的字体一致,但是用户不想他们一致,如何修改:二是,用户只想在正文部分显示页码,目录等页面不 ...
- sip协议中文讲解
https://blog.csdn.net/qiuchangyong/article/details/50748854
- flex布局应用与踩坑
一.预告 本文不是一篇入门的文章所有请符合以下条件的战斗人员绕道: 1.初学前端,对前端的传统布局还不是很熟悉的人 2.后端人员对前端不打算深入学习的同学 二.开篇 flex布局原本是好几个月前就一直 ...
- VBA 全局常量定义
Public Const INDEX As Integer = 16 Public Const RESULT_SHEET As String = "result" Public C ...
- ux.form.field.Year 只能选年的时间扩展
效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...
- Ext-JS-Modern-Demo 面向移动端示例
基于Ext Js 6.5.2 面向移动端示例,低于此版本可能存在兼容问题,慎用 已忽略编译目录,请自行编译运行 Sencha Cmd 版本:v6.5.2.15 git地址:https://github ...
- vue+axios如何操作数据交互
参考: http://www.php.cn/js-tutorial-403543.html
- 在eclipse中使用Tomcat时出现Could not publish server ...错误
在使用eclipse加载tomcat服务器运行项目时遇到问题: 在Tomcat的安装目录下的\conf\server.xml中将<Context>标签所对应的重复名称项目删除 这 ...