前面已经大致了解了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;
上一篇:将JZ2440调试串口改为COM2
下一篇:U-Boot-1.1.6移植到MINI2440开发板(4) —— 源码分析第二阶段(1)
推荐阅读



设计资源 培训 开发板 精华推荐
最新视频课程更多
- taskspawn 分配一个任务时,参数中有优先级,堆栈大小,我要怎么来写啊?刚刚搞这个东西。
- 【学习笔记分享】基于LM3S8962的UCOS-II 下的lwip
- 关于驱动结构体 platform_driver 和 file_operations
- Wince 下如何注册组件---------------------------------------------------up有分
- EEWORLD大学堂----Atmel picoPower实验室:睡眠模式
- 散分,顺便咨询一下,我怎么才能用帖子中删除这个功能???
- 求助:ip和网关不同网段问题
- c和指针。
- 烦请各位帮帮我,帮我讲解一下这个电路原理图,就它的工作原理,各个模块哪是哪,
- 请教个关于输入输出的问题