U-Boot-1.1.6移植到MINI2440开发板(2) —— S3C2440相关修改

最新更新时间:2022-11-18来源: zhihu关键字:U-Boot-1  6  移植  MINI2440开发板  S3C2440 手机看文章 扫描二维码
随时随地手机看文章

前面已经大致了解了U-Boot的编译流程,下面开始移植。


(没有找到知乎的代码高亮功能。。。)


开始移植:


首先修改顶层Makefile:


添加u-boot.dis的支持,有助于后续的分析(添加$(obj)u-boot.dis):


------- Makefile-------

239 ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(obj)u-boot.dis $(U_BOOT_NAND)

添加mini2440_config:


------- Makefile-------

1882 mini2440_config    :    unconfig

1883     @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

复制头文件:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ cd include/configs/

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6/include/configs$ cp smdk2410.h mini2440.h

复制开发板相关文件:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ cd board/

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6/board$ mkdir mini2440

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6/board$ cp smdk2410/* mini2440/

然后执行命令,正常情况下将编译通过,否则需要核对是否有步骤未完成:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make mini2440_config

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make

进一步修改:


将/board/mini2440目录下的smdk2410.c文件重命名:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ cd board/mini2440/

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6/board/mini2440$ mv smdk2410.c mini2440.c

查找并修改:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ grep -nwr "smdk2410"

MAKEALL:196:    scb9328        smdk2400    smdk2410    trab       

Makefile:1880:    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

board/mini2440/Makefile:28:COBJS    := smdk2410.o flash.o

board/smdk2410/Makefile:28:COBJS    := smdk2410.o flash.o

MAINTAINERS:435:    smdk2410        ARM920T

可以看到/board/mini2440文件夹下的Makefile中包含smdk2410,因此对其进行修改:


------- /board/mini2440/Makefile -------

28 COBJS    := mini2440.o flash.o

再次查找:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ grep -nr "SMDK2410"

根据结果进行修改:


include/configs/mini2440.h:


------- include/configs/mini2440.h -------

38 #define CONFIG_MINI2440        1    /* on a MINI2440 Board          */

...

111 #define    CFG_PROMPT        "MINI2440 # "    /* Monitor Command Prompt    */

board/mini2440/mini2440.c:


------- board/mini2440/mini2440.c -------

105     /* arch number of MINI2440-Board */

106     gd->bd->bi_arch_number = MACH_TYPE_MINI2440;

include/asm-arm/mach-types.h:


------- include/asm-arm/mach-types.h -------

209 #define MACH_TYPE_MINI2440             199

...

215 //#define MACH_TYPE_PXA_MERCURY          199

...

3046 #ifdef CONFIG_ARCH_MINI2440

3047 # ifdef machine_arch_type

3048 #  undef machine_arch_type

3049 #  define machine_arch_type    __machine_arch_type

3050 # else

3051 #  define machine_arch_type    MACH_TYPE_MINI2440

3052 # endif

3053 # define machine_is_mini2440()    (machine_arch_type == MACH_TYPE_MINI2440)

3054 #else

3055 # define machine_is_mini2440()    (0)

3056 #endif

在以后版本的U-Boot(如u-boot-2016.01)中,定义了MACH_TYPE_MINI2440的值为199,因此这里借用,同时注释215行的定义。


/cpu/arm920t/s3c24x0/interrupts.c:


------- /cpu/arm920t/s3c24x0/interrupts.c -------

181       defined(CONFIG_MINI2440) ||

再查找并修改:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ grep -nr "s3c2410"

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ grep -nr "S3C2410"

根据结果进行修改:


cpu/arm920t/s3c24x0/speed.c:


------- cpu/arm920t/s3c24x0/speed.c -------

33 #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)

...

39 #elif defined(CONFIG_S3C2440)

40 #include

cpu/arm920t/s3c24x0/interrupts.c:


33 #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)

...

40 #elif defined(CONFIG_S3C2440)

41 #include

cpu/arm920t/s3c24x0/usb_ohci.c:


------- cpu/arm920t/s3c24x0/interrupts.c -------

47 #elif defined(CONFIG_S3C2440)

48 #include

cpu/arm920t/s3c24x0/serial.c:


------- cpu/arm920t/s3c24x0/serial.c -------

22 #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)

...

28 #elif defined(CONFIG_S3C2440)

29 #include

cpu/arm920t/s3c24x0/i2c.c:


------- cpu/arm920t/s3c24x0/i2c.c -------

37 #elif defined(CONFIG_S3C2440)

38 #include

rtc/s3c24x0_rtc.c:


------- rtc/s3c24x0_rtc.c -------

37 #elif defined(CONFIG_S3C2440)

38 #include

/include/common.h:


------- /include/common.h -------

449 #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined(CONFIG_LH7A40X)

/include/configs/mini2440.h:


------- /include/configs/mini2440.h -------

37 #define    CONFIG_S3C2440        1    /* in a SAMSUNG S3C2440 SoC     */

/board/mini2440/mini2440.c:


29 #include

然后复制一份s3c2410.h头文件,并命名为s3c2440.h:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ cd include/

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6/include$ cp s3c2410.h s3c2440.h

并对其内容进行修改:


------- /include/s3c2440.h -------

31 #ifndef __S3C2440_H__

32 #define __S3C2440_H__

...

38 #define S3C2440_ECCSIZE     512

39 #define S3C2440_ECCBYTES    3

...

54 #define S3C2440_NAND_BASE        0x4E000000

...

63 #define S3C2440_ADC_BASE        0x58000000

...

65 #define S3C2440_SDI_BASE        0x5A000000

...

96 static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)

97 {

98     return (S3C2440_NAND * const)S3C2440_NAND_BASE;

99 }

...

132 static inline S3C2440_ADC * const S3C2440_GetBase_ADC(void)

133 {

134     return (S3C2440_ADC * const)S3C2440_ADC_BASE;

135 }

...

140 static inline S3C2440_SDI * const S3C2440_GetBase_SDI(void)

141 {

142     return (S3C2440_SDI * const)S3C2440_SDI_BASE;

143 }

并在/include/s3c24x0.h中添加S3C2440的相关寄存器:


------- /include/s3c24x0.h -------

167 /* NAND FLASH (see S3C2440 manual chapter 6) */

168 typedef struct {

169     S3C24X0_REG32    NFCONF;

170     S3C24X0_REG32    NFCONT;

171     S3C24X0_REG32    NFCMD;

172     S3C24X0_REG32    NFADDR;

173     S3C24X0_REG32    NFDATA;

174     S3C24X0_REG32    NFMECC0;

175     S3C24X0_REG32    NFMECC1;

176     S3C24X0_REG32    NFSECC;

177     S3C24X0_REG32    NFSTAT;

178     S3C24X0_REG32    NFECC;

179 } /*__attribute__((__packed__))*/ S3C2440_NAND;

...

467 #ifdef CONFIG_S3C2440

468     S3C24X0_REG32    GPACON;

469     S3C24X0_REG32    GPADAT;

470     S3C24X0_REG32    res1[2];

471     S3C24X0_REG32    GPBCON;

472     S3C24X0_REG32    GPBDAT;

473     S3C24X0_REG32    GPBUP;

474     S3C24X0_REG32    res2;

475     S3C24X0_REG32    GPCCON;

476     S3C24X0_REG32    GPCDAT;

477     S3C24X0_REG32    GPCUP;

478     S3C24X0_REG32    res3;

479     S3C24X0_REG32    GPDCON;

480     S3C24X0_REG32    GPDDAT;

481     S3C24X0_REG32    GPDUP;

482     S3C24X0_REG32    res4;

483     S3C24X0_REG32    GPECON;

484     S3C24X0_REG32    GPEDAT;

485     S3C24X0_REG32    GPEUP;

486     S3C24X0_REG32    res5;

487     S3C24X0_REG32    GPFCON;

488     S3C24X0_REG32    GPFDAT;

489     S3C24X0_REG32    GPFUP;

490     S3C24X0_REG32    res6;

491     S3C24X0_REG32    GPGCON;

492     S3C24X0_REG32    GPGDAT;

493     S3C24X0_REG32    GPGUP;

494     S3C24X0_REG32    res7;

495     S3C24X0_REG32    GPHCON;

496     S3C24X0_REG32    GPHDAT;

497     S3C24X0_REG32    GPHUP;

498     S3C24X0_REG32    res8;

499 

500     S3C24X0_REG32    MISCCR;

501     S3C24X0_REG32    DCLKCON;

502     S3C24X0_REG32    EXTINT0;

503     S3C24X0_REG32    EXTINT1;

504     S3C24X0_REG32    EXTINT2;

505     S3C24X0_REG32    EINTFLT0;

506     S3C24X0_REG32    EINTFLT1;

507     S3C24X0_REG32    EINTFLT2;

508     S3C24X0_REG32    EINTFLT3;

509     S3C24X0_REG32    EINTMASK;

510     S3C24X0_REG32    EINTPEND;

511     S3C24X0_REG32    GSTATUS0;

512     S3C24X0_REG32    GSTATUS1;

513     S3C24X0_REG32    GSTATUS2;

514     S3C24X0_REG32    GSTATUS3;

515     S3C24X0_REG32    GSTATUS4;

516 #endif

...

613 /* ADC (see manual chapter 16) */

614 typedef struct {

615     S3C24X0_REG32    ADCCON;

616     S3C24X0_REG32    ADCTSC;

617     S3C24X0_REG32    ADCDLY;

618     S3C24X0_REG32    ADCDAT0;

619     S3C24X0_REG32    ADCDAT1;

620     S3C24X0_REG32    ADCUPDN;

621 } /*__attribute__((__packed__))*/ S3C2440_ADC;

...

722 /* SD INTERFACE (see S3C2440 manual chapter 19) */

723 typedef struct {

724     S3C24X0_REG32    SDICON;

[1] [2]
关键字:U-Boot-1  6  移植  MINI2440开发板  S3C2440 编辑:什么鱼 引用地址:U-Boot-1.1.6移植到MINI2440开发板(2) —— S3C2440相关修改

上一篇:将JZ2440调试串口改为COM2
下一篇:U-Boot-1.1.6移植到MINI2440开发板(4) —— 源码分析第二阶段(1)

推荐阅读

如何快速理解单总线通信(1-Wire)
单总线,即一根线进行通信,最常用的温感 DS18B20 采用的就是单总线结构。一、概述二、硬件结构三、单总线的时序图四、实测分析时序五、DS18B20一、概述单总线是美国 DALLAS 公司推出的外围串行扩展总线技术,与 SPI、I2C 串行数据通信方式不同,它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的。单总线英文名 1-Wire,传输速率一般是 15.3Kbit/s,最大可达 142Kbit/s,通常采用 100Kbit/s 以下的速率传输数据。二、硬件结构1. 单总线典型框图单总线适用于单主机系统,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。2. 漏极
发表于 2023-02-03
浅析​KUKA机器人固定焊钳的铣削控制V1
摆臂铣刀的机械控制示意图,电机单方向旋转.常用IO信号:A 786 焊接控制器铣削复位A 842 摆臂伸出/返回 A834铣刀电机旋转A835铣刀吹气E842 摆臂在返回位置E843 摆臂在伸出位置E844 在回位的取反信号E845 在伸出位的取反信号E834 铣刀圈数检测工作示意图:E845与E844的控制电器图:O_KS1_M1=842 -A842铣刀旋转-使用中断程序关闭铣刀旋转:GLOBAL INTERRUPT DECL 2 WHEN $IN[I_关闭KS1_Ruhe] == FALSE DOKS_Abschalten()当有E844时证明摆臂在伸出位置,这时会关闭电机旋转.GLOBAL INTERRUPT DECL 3 W
发表于 2023-02-03
浅析​KUKA机器人固定焊钳的铣削控制V<font color='red'>1</font>
51单片机学习:外部中断1实验
实验名称:外部中断1实验接线说明:实验现象:下载程序后,当按下K4键可控制D1指示灯亮灭注意事项:***************************************************************************************/#include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义typedef unsigned char u8;//定义LED1管脚sbit LED1=P2^0;//定义独立按键K4控制脚sbit KEY4=P3^3;/**********************************
发表于 2023-02-03
51单片机学习:定时器1实验
实验名称:定时器1实验接线说明:实验现象:下载程序后,D1指示灯间隔1s闪烁注意事项:***************************************************************************************/#include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义typedef unsigned char u8;//定义LED1管脚sbit LED1=P2^0;/********************************************************************
发表于 2023-02-03
bootloader对uClinux的S3C44B0移植
S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于ARM7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系统,其具有支持多任务、内核精简、高效稳定和源代码开放的优点。系统移植的基本过程包括:获取较新版本的linux-2.6.9内核源码,根据目标平台对源码中与硬件平台相关部分进行修改,添加必要的外设驱动程序,对系统进行针对目标平台的交叉编译,生成的内核映像文件的下载调试等。硬件环境介绍硬件平台以S3C44B0为核心,采用的外部晶振频率为6MHz,内核主频最高可达到66MHZ,平台以2MB的AMD29LV16
发表于 2023-02-03
bootloader对uClinux的S3C44B0<font color='red'>移植</font>
μCOS-Ⅱ在ARM系列单片机S3C44B0x上的移植
引 言目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的性能,减少产
发表于 2023-02-03
μCOS-Ⅱ在ARM系列单片机S3C44B0x上的<font color='red'>移植</font>
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved