嵌入式学习-mini2440启动相关

网友投稿 748 2022-10-14

嵌入式学习-mini2440启动相关

嵌入式学习-mini2440启动相关

mini2440启动模式:

Nor Flash启动:Supervivi (类似于BIOS程序)

Nand Flash启动:Supervivi + Kernel + RootFS

JLink烧写文件到开发板:1.JLink烧写Nor Flash 2.JLink烧写Nand Flash

JLink烧写Nor Flash

1.开发板跳线打到Nor,接上JLINK,插在底板的JTAG插座上,JLINK另一头接PC的USB接口,开发板上电。

2.打开J-Flash ARM工具(开始->SEGGER->J-Link ARM V4.02->J-Flash ARM)

3.File->Open Project,打开s3c2440a_embedclub.jflash

4.Options->Project settings...

5.Target->connect

6.File->open 打开需要-的映像文件,比如u-boot.bin,但是这里需要注意,这里支持的格式为.bin,所以如果-supervivi-128M,需要修改后缀为supervivi-128M.bin(注意这里的supervivi请一定使用橙色光盘Mini2440光盘中的\images\linux\supervivi-128M,直接改名为supervivi-128M.bin)

7.Target->Program

弹出-对话框,直接输入:0,后面确认即可(先擦除再烧写)

8.烧写成功,断电,取消JLINK,再重新上电,在超级终端中将显示打印信息

-u-boot.bin后打印信息:

JLink烧写Nand Flash

JLink的JTAG排线插上开发板的JTAG插座上,注意排线的方向。JLink另一端,可以通过USB延长线,连接到PC的USB插口上。开发板上电。使用的文件为init.bin、u-boot.bin_openjtag、u-boot.bin

0.打开J-Link Commander

具体方法:开始->所有程序->SEGGER->J-Link ARM V4.02->j-Link Commander

在J-Link Commander命令行中,依次执行下面步骤:

1.在J-Link Commander命令行中输入:r

//这一步为了避免提示CPU is not halted!的错误,正确找到CPU,可以多输入几次r,回车

2. speed 12000  //设置TCK为12M,提高-速度

3.-并运行init.bin,用来初始化SDRAM

如果准备烧写Nand Flash,则将跳线打到Nand Flash

loadbin e:\init.bin 0

//这个是Jlink特制的初始化SDRAM的代码,-到Nand Flash前4KB处

setpc 0

//设置pc值为0

g

//运行

4.-u-boot.bin_openjtag至SDRAM并运行

h

loadbin e:\u-boot.bin_openjtag 0x33f80000

//u-boot.bin_openjtag为JLink特制的u-boot.bin

setpc 0x33f80000

g

//运行

这个时候,u-boot.bin_openjtag已经在SDRAM中的0x33f80000开始运行了

在超级终端可以看到u-boot.bin_openjtag启动消息

5.-u-boot.bin至SDRAM

在J-Link Commander命令行中输入:h

loadbin e:\u-boot.bin 0x30000000

g

//u-boot.bin被加载到SDRAM的0x30000000中

//图中u-boot.bin_utu2440为杨创开发板提供的u-boot.bin

6.通过u-boot.bin_openjtag将u-boot.bin烧写到Nand Flash

在超级终端输入:

nand scrub //擦除整个Nand Flash

输入y,按下回车键,确认擦除

//nand erase 0 30000 //擦除从0地址开始的大小为0x30000(192KB)的Nand Flash 扇区

//nand write.jffs2 30000000 0 30000 //把前面-到0x30000000的程序烧写Nand Block 0   --》手册上教程

按照图片上的步骤是正确的

安装BootLoader程序至Nor Flash -->使用JLink烧写Supervivi到Nor Flash

1.打开J-Flash ARM工具(开始->SEGGER->J-Link ARM V4.02->J-Flash ARM)

2.File->Open Project...,打开打开s3c2440a_embedclub.jflash

4.Options->Project settings...

5.Target->connect

6.File->open 打开需要-的映像文件,比如supervivi-128M.bin,但是这里需要注意,这里支持的格式为.bin,所以如果-supervivi-128M,需要修改后缀为supervivi-128M.bin

7.Target->Program

弹出-对话框,直接输入:0,后面确认即可(先擦除再烧写)

8.烧写成功,断电,取消JLINK,再重新上电,在超级终端中将显示打印信息

ARM裸机程序--> -2440test.bin至SDRAM

SuperVivi-USB-Transfer-Tool  + USB-  + Supervivi(d选项)

1.Supervivi(d选项) -运行

2.USB连接,打开SuperVivi-USB-Transfer-Tool ,通过SuperVivi-USB-Transfer-Tool 上传文件

起始地址:0x30000000

-Linux系统

使用Supervivi安装Linux系统

1.Supervivi(f选项) :格式化nand flash

2.Supervivi(v选项):通过SuperVivi-USB-Transfer-Tool-Supervivi

3.Supervivi(k选项):通过SuperVivi-USB-Transfer-Tool-内核

4.Supervivi(y选项):通过SuperVivi-USB-Transfer-Tool-根文件系统

5..Supervivi(b选项):启动系统       或跳线跳到nand flash启动模式

等待学习

串口传输文件

-WinCE

-Android

裸机开发:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

通过JLink实现MDK工程搭建与在线调试章节:

创建工程->工程路径->选择设备(samsung S3C2440A)->不拷贝startup code->向工程中添加源文件

输入源文件asm.s->保存后输入文件名asm.s->将asm.s添加到工程中->对工程进行配置

AREA asm,CODE,READONLYENTRYstartMOV R0,#10MOV R1,#10ADD R0, R0, R1NOPEND

切换到Output标签下->项目输出文件夹设置为当前工程目录下的obj文件中,和JTAG调试时配置文件有关联,见下文Ext_RAM.ini文件

切换到Linker标签下->取消勾选Use Memory Layout from Dialog

注:Scatter File也可以用于指定R/O Base和R/W Base参数值。在该工程中用默认值,删去Scatter File的指定的文件

使用仿真器:Debug选项->Use Simulator -> 编译

使用JTAG:连接好硬件->使用J-Link Commander查看硬件状态

配置工程-> Linker标签下->删除R/O Base和R/W Base的值,并在Scatter File加入RuninRAM.sct文件->Debug标签下->Use J-LINK/J-TRACE并去除Update Target before Debugging的勾选

Utilities标签->使用J-LINK/J-TRACE

RuningRAM.sct文件

; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAM LR_ROM1 0x30000000         {    ; load region   加载地址0x30000000->SDRAM的地址   ER_ROM1 0x30000000 0x0800000  {  ; load address = execution address   执行地址0x30000000 大小0x0800000    *.o (asm, +First)    //asm是汇编代码段    *(InRoot$$Sections)    .ANY (+RO)   }   RW_RAM1 0x30800000 0x0800000  {  ; RW data    .ANY (+RW +ZI)   }    RW_IRAM1 0x40000000 0x00001000  {    .ANY (+RW +ZI)   }

}

Ext_RAM.ini添加到Debug的Initialization File中

/******************************************************************************/ /* Ext_RAM.INI: External RAM (SDRAM) Initialization File                      */ /******************************************************************************/ // <<< Use Configuration Wizard in Context Menu >>>                           //  /******************************************************************************/ /* This file is part of the uVision/ARM development tools.                    */ /* Copyright (c) 2005-2008 Keil Software. All rights reserved.                */ /* This software may only be used under the terms of a valid, current,        */ /* end user licence from KEIL for a compatible version of KEIL software       */ /* development tools. Nothing else gives you the right to use this software.  */ /******************************************************************************/ FUNC void SetupForStart (void) { // Program Entry Point   PC = 0x30000000;    // 程序计数器指向0x30000000地址,程序入口地址 } FUNC void Init (void) {   _WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts  将0xFFFFFFFF值写入到0x4A000008地址   _WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer  关闭看门狗定时器                                         // Clock Setup                                          // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz   _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME   _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN   _WDWORD(0x4C000004, 0x00043011);      // MPLLCON   _WDWORD(0x4C000008, 0x00038021);      // UPLLCON   _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON                                         // Memory Controller Setup for SDRAM   _WDWORD(0x48000000, 0x22000000);      // BWSCON   _WDWORD(0x4800001C, 0x00018005);      // BANKCON6   _WDWORD(0x48000020, 0x00018005);      // BANKCON7   _WDWORD(0x48000024, 0x008404F3);      // REFRESH   _WDWORD(0x48000028, 0x00000032);      // BANKSIZE   _WDWORD(0x4800002C, 0x00000020);      // MRSRB6   _WDWORD(0x48000030, 0x00000020);      // MRSRB7   _WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM 使能SDRAM的地址线 } // Reset chip with watchdog, because nRST line is routed on hardware in a way  // that it can not be pulled low with ULINK _WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself CPSR = 0x000000D3;                      // Disable interrupts                 关闭中断 PC   = 0x40000000;                      // Position PC to start of RAM     设置PC值为RAM的起始地址 _WDWORD(0x53000000, 0x00000021);        // Enable Watchdog  使能看门狗 g, 0                                    // Wait for Watchdog to reset chip           等待看门狗复位芯片 Init();                                 // Initialize memory 初始化内存 LOAD .\obj\asm_test.axf INCREMENTAL         // Download program  加载编译后的程序文件        asm.axf是编译后生成的文件 SetupForStart();                        // Setup for Running   跳转到0x30000000地址,程序入口地址 //g, main                                 // Goto Main                   跳到main函数

axf是arm的调试文件,一般在针对arm调试过程中使用的文件, 不过通过专门工具也能直接将其中的真正代码部分(即axf中除了前后调试部分信息外的部分)烧写到flash中。 所以,有时候axf也称为镜像文件。

1).axf文件=调试信息+.bin文件

Axf文件由ARM编译器产生,除了包含bin的内容之外,还附加其他调试信息, 这些调试信息加在可执行的二进制数据之前。 调试时这些调试信息不会-到RAM中,真正-到RAM中的信息仅仅是可执行代码。 因此,如果ram的大小小于axf文件的大小,程序是完全有可能在ram中调试的, 只要axf除去调试信息后文件大小小于ram的大小即可。

调试信息有以下作用: 1.可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。 2.我们还可以对程序中的函数调用情况进行跟踪(通过Watch & Call StackWindow查看)。 3.对变量进行跟踪(利用Watch & Call Stack Window)。

调试信息虽然有用,但程序功能实现后,在目标文件和库中减少调试信息却是非常有益的。 减少调试信息可减少目标文件和库大小、加快链接速度、减小最终镜象代码。 以下几种方法可用来减少每个源文件产生的调试信息: 1.避免在头文件中条件性使用#define,链接器不能移除共用的调试部分,除非这些部分是完全一样的。 2.更改C/C++源文件,使#included包含的所有头文件有相同顺序。 3.尽量使用数量较多的小头文件而不是较大的单一头文件,这有利于链接器获取更多的通用块。 4.程序中最好只包含必须用到的头文件。避免重复包含头文件,可使用编译器选项–remarks来产生警告信息;

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

汇编与C混合编程

;汇编程序调用C函数                      ;汇编程序调用C程序g()计算5个整数i, 2*i, 3*i, 4*i, 5*i的和 ;本程序使用5个参数,分别使用寄存器R0存储第一个参数,R1、R2、R3分别存储第二、三、四个参数,第五个参数利用堆栈传送 ;函数返回值保持在R0中

工程配置和汇编程序一样

/********************************************************************************************** File: casm_test2.c* Author: Hanson * 嵌入式家园 embedclub.com* 上海嵌入式家园-开发板商城 Desc: c code call asm code example* History: May 16th 2011* *********************************************************************************************/ //C程序g()返回5个整数的和int g(int a, int b, int c, int d, int e){ return (a+b+c+d+e);}

; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAM

LR_ROM1 0x30000000         {    ; load region   ER_ROM1 0x30000000 0x0800000  {  ; load address = execution address    *.o (CAsm_Test2, +First)  代码段名称    *(InRoot$$Sections)    .ANY (+RO)   }   RW_RAM1 0x30800000 0x0800000  {  ; RW data    .ANY (+RW +ZI)   }    RW_IRAM1 0x40000000 0x00001000  {    .ANY (+RW +ZI)   } }

/******************************************************************************/ /* Ext_RAM.INI: External RAM (SDRAM) Initialization File                      */ /******************************************************************************/ // <<< Use Configuration Wizard in Context Menu >>>                           //  /******************************************************************************/ /* This file is part of the uVision/ARM development tools.                    */ /* Copyright (c) 2005-2008 Keil Software. All rights reserved.                */ /* This software may only be used under the terms of a valid, current,        */ /* end user licence from KEIL for a compatible version of KEIL software       */ /* development tools. Nothing else gives you the right to use this software.  */ /******************************************************************************/

FUNC void Init (void) {

_WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts

_WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer                                            // Clock Setup                                          // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz   _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME   _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN   _WDWORD(0x4C000004, 0x00043011);      // MPLLCON   _WDWORD(0x4C000008, 0x00038021);      // UPLLCON   _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

// Memory Controller Setup for SDRAM   _WDWORD(0x48000000, 0x22000000);      // BWSCON   _WDWORD(0x4800001C, 0x00018005);      // BANKCON6   _WDWORD(0x48000020, 0x00018005);      // BANKCON7   _WDWORD(0x48000024, 0x008404F3);      // REFRESH   _WDWORD(0x48000028, 0x00000032);      // BANKSIZE   _WDWORD(0x4800002C, 0x00000020);      // MRSRB6   _WDWORD(0x48000030, 0x00000020);      // MRSRB7

_WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM }

// Reset chip with watchdog, because nRST line is routed on hardware in a way  // that it can not be pulled low with ULINK

_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself CPSR = 0x000000D3;                      // Disable interrupts PC   = 0x40000000;                      // Position PC to start of RAM _WDWORD(0x53000000, 0x00000021);        // Enable Watchdog g, 0                                    // Wait for Watchdog to reset chip

Init();                                 // Initialize memory LOAD obj\CAsm_Test2.axf INCREMENTAL         // Download program PC = 0x30000000;                       // Setup for Running

//g, main                                 // Goto Main

;C 语言调用 汇编程序

通过C语言程序调用汇编子程序字符串拷贝函数

公共文件

inc文件夹包括2440addr.h、2440lib.h、2440slib.h、Def.h、Memcfg.inc、Option.h

src文件夹包括2440init.s、2440lib.c、2440slib.s、S3C2440A.s

ReadMeCommon文件内容:

============================================================================================= 调试命令文件(INI)用于使用软件仿真和联机测试时,以下是几个常用的命令,用户可以根据调试需要来写自己的调试命令文件.      pc=0x30000000                     令PC指向0x30000000处;(例程在RAM中运行时可指向0x30000000,如果在Flash中运行则指向0x000)     map    0x4c000000, 0x53000020 READ WRITE exec         指定某段存储区域的属性为可读,可写,可执行;     Go startaddr, stopaddr         程序从startaddr开始执行,到stopaddr处停止;起始地址都可以缺省. 也可用函数名表示地址例如 G , main

============================================================================================== 分散加载文件(sct)用于加载映像文件到存储空间中,MDK可根据存储设置自动生成,复杂应用程序则需要自行编写.  以下是在RAM中运行程序的SCT文: LR_ROM1 0x30000000         {    ; load region        程序加载区域   ER_ROM1 0x30000000 0x0800000  {  ; load address = execution address   程序执行地址    *.o (RESET, +First)    *(InRoot$$Sections)    .ANY (+RO)   }   RW_RAM1 0x30800000 0x0800000  {  ; RW data    .ANY (+RW +ZI)   }    RW_IRAM1 0x40000000 0x00001000  {    .ANY (+RW +ZI)   } }

以下是在Flash中运行程序的SCT文件:

LR_ROM1 0x00000000         {    ; load region     程序加载区域   ER_ROM1 0x00000000 0x0200000  {  ; load address = execution address   程序执行地址    *.o (RESET, +First)    *(InRoot$$Sections)    .ANY (+RO)   }   RW_RAM1 0x30000000 0x4000000  {  ; RW data    .ANY (+RW +ZI)   }    RW_IRAM1 0x40000000 0x00001000  {    .ANY (+RW +ZI)   } }

本工程配置

ScatterFile选择:common\RuninRAM.sct

; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAM

LR_ROM1 0x30000000         {    ; load region   ER_ROM1 0x30000000 0x0800000  {  ; load address = execution address    *.o (RESET, +First)    *(InRoot$$Sections)    .ANY (+RO)   }   RW_RAM1 0x30800000 0x0800000  {  ; RW data    .ANY (+RW +ZI)   }    RW_IRAM1 0x40000000 0x00001000  {    .ANY (+RW +ZI)   } }

Initization File选择:\common\Ext_RAM.ini

/******************************************************************************/ /* Ext_RAM.INI: External RAM (SDRAM) Initialization File                      */        SDRAM初始化文件 /******************************************************************************/ // <<< Use Configuration Wizard in Context Menu >>>                           //  /******************************************************************************/ /* This file is part of the uVision/ARM development tools.                    */ /* Copyright (c) 2005-2008 Keil Software. All rights reserved.                */ /* This software may only be used under the terms of a valid, current,        */ /* end user licence from KEIL for a compatible version of KEIL software       */ /* development tools. Nothing else gives you the right to use this software.  */ /******************************************************************************/

FUNC void Init (void) {

_WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts

_WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer                                            // Clock Setup                                          // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz   _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME   _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN   _WDWORD(0x4C000004, 0x00043011);      // MPLLCON   _WDWORD(0x4C000008, 0x00038021);      // UPLLCON   _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

// Memory Controller Setup for SDRAM   _WDWORD(0x48000000, 0x22000000);      // BWSCON   _WDWORD(0x4800001C, 0x00018005);      // BANKCON6   _WDWORD(0x48000020, 0x00018005);      // BANKCON7   _WDWORD(0x48000024, 0x008404F3);      // REFRESH   _WDWORD(0x48000028, 0x00000032);      // BANKSIZE   _WDWORD(0x4800002C, 0x00000020);      // MRSRB6   _WDWORD(0x48000030, 0x00000020);      // MRSRB7

_WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM }

// Reset chip with watchdog, because nRST line is routed on hardware in a way  // that it can not be pulled low with ULINK

_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself CPSR = 0x000000D3;                      // Disable interrupts PC   = 0x40000000;                      // Position PC to start of RAM _WDWORD(0x53000000, 0x00000021);        // Enable Watchdog g, 0                                    // Wait for Watchdog to reset chip

Init();                                 // Initialize memory LOAD obj\casm_test1.axf INCREMENTAL         // Download program PC = 0x30000000;                       // Setup for Running

g, main                                 // Goto Main

/********************************************************************************************** File: casm_test1.c* Author: Hanson * 嵌入式家园 embedclub.com* 上海嵌入式家园-开发板商城 Desc: c code call asm code example* History: May 16th 2011* *********************************************************************************************/#include "def.h"#include "option.h"#include "2440addr.h" //#include "2440lib.h"#include "2440slib.h" //void MMU_EnableDCache(); //================================void Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void dely(U32 tt){ U32 i; for(;tt>0;tt--) { for(i=0;i<10000;i++){} }} int main(int argc, char **argv){ int i; U8 key; U32 mpll_val=0; i = 2 ; //hzh, don't use 100M! //boot_params.cpu_clk.val = 3; switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 13; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; } //init FCLK=400M, so change MPLL first ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12); //MMU_EnableICache(); //MMU_EnableDCache(); //MMU_DisableICache(); //MMU_DisableDCache(); // Port Init Port_Init(); // ISR init //Isr_Init(); Uart_Init(0,115200); Uart_Select(0); Uart_Printf("\n C code call asm code Test!!!\n"); casm_test1(); while(1);}//===================================================================void Isr_Init(void){ pISR_UNDEF = (unsigned)HaltUndef; pISR_SWI = (unsigned)HaltSwi; pISR_PABORT = (unsigned)HaltPabort; pISR_DABORT = (unsigned)HaltDabort; // rINTMOD = 0x0; //All=IRQ mode //rINTMSK = BIT_ALLMSK; //All interrupt is masked. rINTMOD = 0x0; // All=IRQ mode rSRCPND = rSRCPND; // clear all interrupt rINTPND = rINTPND; // clear all interrupt rINTMSK = BIT_ALLMSK; // All interrupt is masked. rINTSUBMSK = BIT_SUB_ALLMSK; // All sub-interrupt is masked.// External interrupt will be falling edge triggered. rEXTINT0 = 0x22222222; // EINT[7:0] rEXTINT1 = 0x22222222; // EINT[15:8] rEXTINT2 = 0x22222222; // EINT[23:16] // pISR_URXD0=(unsigned)Uart0_RxInt; // rINTMSK=~(BIT_URXD0); //enable UART0 RX Default value=0xffffffff //pISR_FIQ,pISR_IRQ must be initialized // rINTSUBMSK = BIT_SUB_ALLMSK; //All sub-interrupt is masked. <- April 01, 2002 SOP// rINTSUBMSK = ~(BIT_SUB_RXD0); //Enable Rx0 Default value=0x7ff// rINTMSK = ~(BIT_UART0); //Enable UART0 Default value=0xffffffff // pISR_UART0=(unsigned)RxInt; //pISR_FIQ,pISR_IRQ must be initialized}//===================================================================void HaltUndef(void){ Uart_Printf("Undefined instruction exception!!!\n"); while(1);}void HaltSwi(void){ Uart_Printf("SWI exception!!!\n"); while(1);}void HaltPabort(void){ Uart_Printf("Pabort exception!!!\n"); while(1);}void HaltDabort(void){ Uart_Printf("Dabort exception!!!\n"); while(1);}

S3C2440A.s位于Project栏下的Startup目录,是启动文件。其中 AREA    RESET, CODE, READONLY 代码段名为RESET,需要加入到srt文件中,如图中的所示。给出了一些芯片相关的宏定义和中断向量表和中断服务代码。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

windows启动和linux的比较:

u-boot编译:

对u-boot进行打补丁:

++是指添加的代码,--是指删除的代码

@@ -34,6 +34,8 @@ 指的是原代码的第34行往下的6行代码改为下面的8行代码,图中没有+开始的为原代码,有+的表示添加的代码

patch -p1 < ../u-boot-1.1.6_jz2440.patch

../u-boot-1.1.6_jz2440.patch 指定了补丁的路径。-p1  由于当前我们在u-boot源码目录下,而补丁文件(如上图蓝色高亮)写明了u-boot-1.1.6这个文件夹,我们需要省略该路径,-p1用于忽略第一个/前面的路径名。(这样路径名就正确了)

配置

编译:book@book-desktop:/work/system/u-boot-1.1.6# make

产生u-boot.bin,即可用于烧写

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Shmock- PHP 测试框架
下一篇:Perfect:Swift 服务端框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~