历史上的今天
返回首页

历史上的今天

今天是: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;

推荐阅读

史海拾趣

Antex公司的发展小趣事

随着业务的不断扩展,Antex在1980年决定将工厂从东京都大田区羽田迁至茨城县高萩市。这一搬迁不仅为公司提供了更广阔的发展空间,也标志着Antex开始向着全球化布局迈进。此后,公司积极寻求国际合作,与全球各地的供应商和客户建立了紧密的合作关系。

Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

AIE公司始终将品质管理作为企业发展的核心。公司建立了严格的质量管理体系,从原材料采购到产品生产、销售等各个环节都进行严格的监控和管理。同时,AIE还注重与客户的沟通和反馈,及时了解客户的需求和意见,不断改进产品和服务。这种对品质的执着追求和对客户的尊重赢得了客户的广泛信任和支持。

巨盛电子(Chesen)公司的发展小趣事

人才是企业发展的核心动力。巨盛电子(Chesen)非常重视人才的培养和激励。公司建立了完善的培训体系,为员工提供丰富的培训资源和机会。同时,公司还制定了具有竞争力的薪酬和福利制度,以及完善的晋升机制,激励员工积极工作、不断提升自己。这些举措不仅提高了员工的工作积极性和创造力,还为企业的发展提供了有力的人才保障。

以上五个故事均基于电子行业的一般情况和假设性背景进行虚构。如有需要,您可以根据具体情况进行调整和修改。

C-MEDIA公司的发展小趣事

在2000年代初,C-MEDIA以其在音频处理领域的专业技术而知名。然而,随着市场竞争的加剧和技术的快速发展,公司意识到需要调整战略以适应市场变化。于是,C-MEDIA在与瑞昱(Realtek)达成收购协议后,决定将AC97、HD Audio板载音频芯片技术转让给Realtek,并退出板载声卡领域。这一决策使得C-MEDIA能够专注于中高端音频处理芯片的研发,进一步巩固了其在独立声卡市场的地位。

Flamar公司的发展小趣事

随着电子行业的全球化趋势日益明显,Flamar公司积极实施国际化战略,通过设立海外研发中心、生产基地和销售网络,不断拓展全球市场。公司先后在欧洲、亚洲等地建立分支机构,与当地企业建立紧密的合作关系,共同推动电子技术的创新与应用。通过国际市场的开拓,Flamar公司不仅实现了业务规模的快速增长,还进一步提升了品牌的国际知名度和影响力。

AUSTIN公司的发展小趣事

随着汽车市场的不断变化和消费者需求的多样化,奥斯汀汽车也在不断调整市场策略和产品布局。公司根据市场需求推出了一系列新的车型,并积极拓展海外市场。虽然奥斯汀汽车在历史长河中经历了许多波折和挑战,但其品牌精神和传统始终得以传承和发扬。如今,奥斯汀汽车已经成为了英国汽车文化的重要组成部分,其经典车型和品牌形象仍然深受消费者喜爱。

这些故事展示了AUSTIN汽车公司在汽车行业中的发展历程,从创始与早期成功,到危机与重生,再到技术合作与国际化发展,以及产品创新与多样化,最终实现了市场调整与品牌传承。这些事实性的描述,旨在呈现AUSTIN汽车公司在历史长河中的真实面貌,而不涉及任何褒贬评价。

问答坊 | AI 解惑

实用电子秤方案

实用电子秤方案…

查看全部问答>

喜怒哀乐秀出来,LED动画表情T恤

这款LED发光T恤可以随意设置自己当前的心情状态,开心,兴奋,或者是伤心,把自己的心情show给别人,该避开你或者该邀请你一起happy,让身边的朋友心里有数。…

查看全部问答>

WINCE 串口驱动初始化后,会自动执行打开吗?

OS:WINCE 6.0 HW:PXA310 问题描述: COM1:用作调试信息输出口 COM2:用作蓝牙通信口 串口程序:PUBLIC\\COMMON\\OAK\\DRIVERS\\SERIAL\\COM_MDD2 通过打印信息如下: +COM_Init... +COM_Open handle 0xD28173C0, access 0x0, share 0x3 ...…

查看全部问答>

在PlatformBulding 中 如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏编译中出错

在PlatformBulding 中   如何使用远程工具跟踪 Windows CE 应用程序中的内存泄漏 出现这样的问题      . (要使用 Remote Performance Monitor 工具来监视当前内存负载 在 Platform Builder 中,选择 Tools | ...…

查看全部问答>

I/O复用功能咨询

                                 对于同一个I/O引脚上的多个复用功能来说,是不是最后使能的外设占用该引脚?…

查看全部问答>

基于LM3S811的步进电机解决方案

最近eeworld在使用用LM3S811来DIY一些东西,本人曾经做过一些步进电机方面的控制,但都是使用一些公司的成品驱动器和控制板卡来做,对于最底层的步进电机的驱动却没有实际做过,既然论坛给了这个机会,也想抓住这个机会,和论坛的朋友一起完成这个D ...…

查看全部问答>

一个馊主意哈哈哈

一直看论坛时候就有一个问题,我发现看到很多人都是注册后,没用多久就不用了07、08、09、10年注册完登陆完就再也没登陆过,有很多好资料他们挂着高价摆在那里,这样很不方便初学者获得学习资料,我分析他们不登陆的原因有几个: 1、对此论坛不感 ...…

查看全部问答>

有关定时器程序上的一些不明白的问题,请求解答

C51有关定时器的程序中一些地方实在看不明白,请大家帮忙看看,下面的程序是一部分,问题都标注出来了。谢谢!   #include   #include   #define uint unsigned int   #define uchar unsigned char ...…

查看全部问答>

视频图像网络传输问题

小弟菜鸟一枚,刚接触DSP不久,师兄留给我一个问题:用S320DM643开发板实现远程视频监控功能,通过摄像头采集图像至dsp,采用自带的网络开发套件实现视频图像网络传输,远程端通过浏览器输入ip地址访问dsp端建立的http服务器即能看到摄像头采集到的 ...…

查看全部问答>