历史上的今天
返回首页

历史上的今天

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

推荐阅读

史海拾趣

Astron Wireless Technologies Inc公司的发展小趣事

Astron Wireless Technologies Inc公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有创新性的无线通信协议,大大提高了数据传输的效率和稳定性。这一技术突破迅速赢得了市场的认可,公司开始获得大量的订单,实现了初步的市场突破。

静芯微电子(ElecSuper)公司的发展小趣事

静芯微电子(ElecSuper)成立于XXXX年,由一群富有远见和热情的电子工程师共同创立。公司从一开始就专注于ESD(静电放电)/TVS(瞬态电压抑制器)系列器件的研发,致力于为客户提供高质量的静电保护和电压稳定解决方案。通过不断的技术创新和产品优化,静芯微电子逐渐在ESD/TVS领域取得了突破,并积累了大量的客户基础。

Hasco Relays and Electronics International Corp公司的发展小趣事

除了国防和航空领域外,L3Harris还积极投身于国土安全和公共安全领域。公司为这些领域提供了多种先进的技术和解决方案,包括监视系统、情报分析工具和边境安全技术等。这些技术和解决方案在维护国家安全和应对紧急情况方面发挥了重要作用。L3Harris在国土安全和公共安全领域的贡献不仅体现了其社会责任感,也进一步拓展了其在电子行业中的业务范围和市场影响力。

请注意,上述故事是基于可获取的信息和事实进行归纳和构想的,可能无法完全涵盖Harris公司(现为L3Harris Technologies)发展历程中的所有细节和事件。

GD Rectifiers Ltd公司的发展小趣事

为了进一步扩大市场份额,GD Rectifiers Ltd实施了积极的国际化战略。公司首先在欧洲市场设立了销售分支机构,凭借其优质的产品和服务迅速赢得了当地客户的认可。随后,公司又陆续在北美、亚洲等地区建立了分销网络,逐步构建起覆盖全球的营销体系。在国际化进程中,GD Rectifiers Ltd注重与当地企业的合作与交流,共同推动行业标准的制定和技术进步。通过不断的努力,公司成功地将品牌和产品推向了全球市场,实现了业务规模的快速增长。

ELDECO公司的发展小趣事

面对全球电子记录仪市场的快速增长,ELDECO公司制定了国际化发展战略。公司首先在欧洲市场设立了研发中心和生产基地,通过与当地合作伙伴的紧密合作,成功将产品打入欧洲市场。随后,公司又在美国、亚洲等地设立了分支机构,进一步拓展全球市场。通过国际化战略布局,ELDECO公司不仅提高了品牌影响力,还获得了更多的市场机会和客户资源。

Cressall Power Resistors公司的发展小趣事

Cressall一直注重企业文化建设和团队建设。公司倡导“创新、协作、诚信、责任”的核心价值观,鼓励员工勇于创新、敢于担当。同时,公司还加强了对员工的培训和激励,为员工提供了良好的职业发展平台。这些措施有效提升了员工的凝聚力和归属感,为公司的持续发展提供了有力的人才保障。

以上五个故事基于假设的情境,旨在展示一个电子行业企业在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、市场拓展、质量管理、环保理念和企业文化建设等方面来实现持续发展。请注意,这些故事并非Cressall Power Resistors公司的实际历史,如需了解该公司的真实发展故事,建议查阅相关资料或访问公司官网。

问答坊 | AI 解惑

4G技术露面登场迟早

当3G试验如火如荼的时候,4G技术已经问世。AT&T实验室正在研究第四代移动通信技术,其研究目的是提高蜂窝电话和其他移动装置无线访问互联网的速率。   目前,移动电话上网的连接速率大约为拨号调制解调器的1/4,而采用4G技术的连接速率一开始就 ...…

查看全部问答>

案例分享:DB SDK银行移动商务应用案例

随着金融业务的蓬勃发展,银行业务发展迅速,用户呈几何数量不断攀升。如何为规模庞大的准用户群提供更好、更便捷的服务?如何针对不断增长的新用户群提供最新、最全面的银行服务推荐?如何应对来自国内银行、外资银行的竞争,提高知名度和用户忠诚 ...…

查看全部问答>

pcb中元器件封装和原理图中元器件封装是什么关系

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(绿色外壳)的升级密码

我的这台卓异5518G(绿色外壳)是7针升级接口的,是海尔2023+1108EGa+5812的,看 了好多论坛都没有能找到直接在遥控器上就可以输入密码升级的资料以及具体的操作方法,。自己又不懂制作这种机型接口的什么升级数据线和什么小版的,希望论坛里各位高 ...…

查看全部问答>

请教如何“建立winCE的软件开发工具包(SDK)并把BSP打包到.msi安装文件”

开发BSP的最后一步是建立软件开发工具包(SDK)并把BSP打包到.msi安装文件里这样它就可以被其他人安装。SDK是开发者用来为某个OS编写应用程序的一系列头文件,库,相关联的文件,运行时文件,OS扩展和帮助文档。SDK的内容允许开发者在你的OS得运行 ...…

查看全部问答>

分析一个简单CPLD程序问题

如题:    硬件为EPM570T100C5N的开发板。实现不了小灯闪烁功能,可以单独对小灯进行控制(只可以控制亮灭,不能控制闪烁),不知道什么原因,特来请教大家。以下是程序部分:module LEDxiaodeng(CLK,LED);input CLK;output [8:1]LED;re ...…

查看全部问答>

求助关于顶层文件

写了一个顶层文件,如下entity top is    Port ( CLK : in  STD_LOGIC;           RX : in  STD_LOGIC;           rst : in  ...…

查看全部问答>

STM32耗电流问题,看了资料还是迷茫中...

资料中所说:IVDD Total current into VDD/VDDA power lines (source)IVSS Total current out of VSS ground lines (sink)两者最大值均为150mA那我就郁闷了...目 ...…

查看全部问答>