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移植--阶段一的更多相关文章

  1. u-boot2010.06移植阶段三--norflash驱动

    2011-03-20 23:06:24 学习笔记: 效果图: 参考步骤: 一,把smdk2410 # 改成apple2440 #  1,在board/samsung/apple2440/apple24 ...

  2. uboot移植阶段二--3串口终结篇

    2011-03-20 23:00:37 前天U-boot移植串口后,能成功显示数据. 今天的主要目的是再次进行U-boot移植.看是否成功.花了40分钟,很顺利. 接着就是要把之前有问题的U-boot ...

  3. u-boot移植总结(二)LED点灯调试 和 u-boot加载地址

    (一)LED点灯调试 FL2440电路总共有4个LED0,LED1,LED2,LED3,分别接到板子GPB5,GPB6,GPB8,GPB10引脚.通过设置三个寄存器GPBCON(0x56000010) ...

  4. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...

  5. 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

    第9章        RL-TCPnet网络协议栈移植(uCOS-III) 本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移 ...

  6. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)

    第8章        RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...

  7. 【安富莱】【RL-TCPnet网络教程】第7章 RL-TCPnet网络协议栈移植(裸机)

    第7章        RL-TCPnet网络协议栈移植(裸机) 本章教程为大家讲解RL-TCPnet网络协议栈的裸机移植方式,学习了上个章节讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文 ...

  8. [学习资料] Tiny210(S5PV210) u-boot移植

    Tiny210(S5PV210) u-boot移植http://www.microoh.com/bbs/forum.php?mod=viewthread&tid=254&fromuid ...

  9. 手把手教你丨小熊派移植华为 LiteOS-M

    摘要:本文详细讲解如何移植 LiteOS 到小熊派. 本文分享自华为云社区<小熊派移植华为 LiteOS-M(基于MDK)>,作者: JeckXu666. 前言 之前使用小熊派实现了鸿蒙动 ...

随机推荐

  1. unity3d IL2CPP for android

    unity3d 使用IL2Cpp导出android工程报以下错误解决方法 重点是这块 “”System.Reflection.TargetInvocationException: ���õ�Ŀ�귢�� ...

  2. Nessus中文报告自动化脚本

    前言 Nessus扫描完成,总要花挺多时间去整理报告,为此写了一个小脚本,用于自动化生成中文漏洞报告. 解析导出的html报告,自动翻译成中文,并提供修复建议,减少整理报告的时间,提升工作效率. gi ...

  3. php四个常用类封装

    这4个类分别是Mysql类. 分页类.缩略图类.上传类. Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = nul ...

  4. kafka---->kafka stream的使用(一)

    kafka stream的简单使用,这里是官方文档上面的例子. kafka的简单使用 一.启动Kafka server huhx@gohuhx:~/server/kafka_2.11-1.1.0$ b ...

  5. [原]CentOS7安装Rancher2.1并部署kubernetes (一)---部署Rancher

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  6. 浅析 <路印协议--Loopring> 及整体分析 Relay 源码

    作者:林冠宏 / 指尖下的幽灵 前序: 路印协议功能非常之多及强大,本文只做入门级别的分析. 理论部分请细看其白皮书,https://github.com/Loopring/whitepaper 实际 ...

  7. HBase多条件及分页查询的一些方法

    HBase是Apache Hadoop生态系统中的重要一员,它的海量数据存储能力,超高的数据读写性能,以及优秀的可扩展性使之成为最受欢迎的NoSQL数据库之一.它超强的插入和读取性能与它的数据组织方式 ...

  8. Python学习之旅(三十一)

    Python基础知识(30):图形界面(Ⅰ) Python支持多种图形界面的第三方库:Tk.wxWidgets.Qt.GTK等等 Tkinter可以满足基本的GUI程序的要求,此次以用Tkinter为 ...

  9. ArcPy中mapping常见函数及用法1

    arcpy的mapping模块常见属性方法总结1.如何获取当前地图文档: 方式:mxd = mapping.MapDocument("CURRTENT")引用本地或者网络文档(ar ...

  10. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...