历史上的今天
今天是:2025年11月18日(星期二)
2022年11月18日 | U-Boot-1.1.6移植到MINI2440开发板(2) —— S3C2440相关修改
2022-11-18 来源:zhihu
前面已经大致了解了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;
史海拾趣
|
当3G试验如火如荼的时候,4G技术已经问世。AT&T实验室正在研究第四代移动通信技术,其研究目的是提高蜂窝电话和其他移动装置无线访问互联网的速率。 目前,移动电话上网的连接速率大约为拨号调制解调器的1/4,而采用4G技术的连接速率一开始就 ...… 查看全部问答> |
|
随着金融业务的蓬勃发展,银行业务发展迅速,用户呈几何数量不断攀升。如何为规模庞大的准用户群提供更好、更便捷的服务?如何针对不断增长的新用户群提供最新、最全面的银行服务推荐?如何应对来自国内银行、外资银行的竞争,提高知名度和用户忠诚 ...… 查看全部问答> |
|
CPU: 从CPU诞生的那一天起,其封装技术就经历了多种变化。直到Pentium时代,封装形式才基本上稳定下来。80X86系列的CPU从8088开始经历了DIP、PQFP、PFP、PGA、BGA等多种在集成电路芯片中使用过的封装技术,其技术性能越来越强,适应的工作频率越 ...… 查看全部问答> |
|
1_Cortex-M3支持的Thumb-2指令 2_Stellaris产品选型工具 3_LM3S系列Protel元件库 4_Stellaris外设驱动库用户指南 5_API函数介绍 6_I2C总线协议 … 查看全部问答> |
|
我的这台卓异5518G(绿色外壳)是7针升级接口的,是海尔2023+1108EGa+5812的,看 了好多论坛都没有能找到直接在遥控器上就可以输入密码升级的资料以及具体的操作方法,。自己又不懂制作这种机型接口的什么升级数据线和什么小版的,希望论坛里各位高 ...… 查看全部问答> |
|
请教如何“建立winCE的软件开发工具包(SDK)并把BSP打包到.msi安装文件” 开发BSP的最后一步是建立软件开发工具包(SDK)并把BSP打包到.msi安装文件里这样它就可以被其他人安装。SDK是开发者用来为某个OS编写应用程序的一系列头文件,库,相关联的文件,运行时文件,OS扩展和帮助文档。SDK的内容允许开发者在你的OS得运行 ...… 查看全部问答> |
|
如题: 硬件为EPM570T100C5N的开发板。实现不了小灯闪烁功能,可以单独对小灯进行控制(只可以控制亮灭,不能控制闪烁),不知道什么原因,特来请教大家。以下是程序部分:module LEDxiaodeng(CLK,LED);input CLK;output [8:1]LED;re ...… 查看全部问答> |
|
资料中所说:IVDD Total current into VDD/VDDA power lines (source)IVSS Total current out of VSS ground lines (sink)两者最大值均为150mA那我就郁闷了...目 ...… 查看全部问答> |




