rtems-4.11移植到MINI2440 (二) 之移植

发布者:温馨阳光最新更新时间:2022-06-23 来源: eefocus关键字:rtems  移植  MINI2440 手机看文章 扫描二维码
随时随地手机看文章

-1. 在做移植前要做一下几点:

看看rtems的各种guide,不用整的非常明白,知道大概即可,最起码的要知道初始化的整个流程,这样就知道需要修改的大概位置了;

看看雪松、知秋一叶、etual的博客;


0. 平台:

        OS: Ubuntu 12.04

        rtems: 4.11


1. 添加mini2440 bsp支持,可以去掉其他不相关的;

在libbsp/arm/acinclude.m4中

        mini2440 )

        AC_CONFIG_SUBDIRS([mini2440]);;

这样就可使用--enable-rtemsbsp=mini2440


2. 复制smdk2410目录为mini2440;


3. 将gp32目录下的console/, smc/, start/目录复制过来;

    将include/目录下的文件复制进来;

    startup/bspstart.c复制过来;

    startup/bspidle.c复制过来;// 其实是缺啥补啥,看编译错误在修正的


4. 修改mini2440目录下的makefile.am;

涉及gp32的都修正过来,比如:

include_HEADERS = ../gp32/include/bsp.h

    改成:

i nclude_HEADERS = include/bsp.h


5. make/custom/目录下的文件改成mini2440.cfg;


6. 删除libbsp/和libcpu/目录下除shared,no_cpu以外的无用文件,加快编译;


完事应该可以编译成功,脚本如下(bspbuild.sh):


  1 #!/bin/bash

  2 

  3 export RTEMS_ROOT=/home/wang2/codePrj/ldd/sources/rtems-4.11

  4 export LIBBSB=/home/wang2/codePrj/ldd/sources/rtems-4.11/c/src/lib/libbsp

  5 

  6 echo ${PWD}

  7 

  8 # pre-config

  9 cd ${RTEMS_ROOT}

 10 ./bootstrap -c

 11 ./bootstrap -p

 12 ./bootstrap

 13 

 14 # Configure

 15 cd ${RTEMS_ROOT}/build/mini2440

 16 rm -rf ./*

 17 

 18 ../../configure --target=arm-rtemseabi4.11 --enable-posix 

 19         --disable-cxx --disable-itron --enable-networking

 20         --enable-tests=samples

 21         --enable-rtemsbsp=mini2440

--target:是告诉configure编译器是arm-rtemseabi4.11-xxx工具链;

--enable-posix: 支持posix接口;

--disable-cxx:不需要支持c++;

--disable-itron: 不需要支持itron接口;

--enable-networking: 添加网络支持;

--samples:样例,/opt/rtems-4.11/arm-rtemseabi4.11/mini2440/lib/rtems-4.11/tests/hello.exe等

--mini2440:bsp包


如果不能编译,看看有没有搞错的步骤。


7. 修改源代码;

7.0. 修改第一阶段的硬件初始化,极度汇编依赖

在start.s中,完成的工作:

    1 禁用所有可屏蔽中断;

    2 用~0~填充未初始化数据段~.bss;

    3 初始化~C~程序调用栈;

    4 从~ROM~中将初始化数据拷贝到~RAM~中;

    5 调用~boot_card~函数。

7.0.6. 具体的请看附件


7.1. clock相关

7.1.1. 在bsp.h中,请参见s3c2440数据手册:

/* What is the input clock freq in hertz?

 * FCLK:HCLK:PCLK = 1:4:8

 * FCLK = 405MHz

 */

#define BSP_OSC_FREQ  12000000    /* 12 MHz oscillator */

#define M_MDIV 0x7f /* FCLK=405Mhz, origin: 81, to: 0x7f*/

#define M_PDIV 2

#define M_SDIV 1

#define M_CLKDIVN 5 /* HCLK=FCLK/4, PCLK=FCLK/2 */

// 2 to 5

 

#define REFEN 0x1 /* enable refresh */

#define TREFMD 0x0 /* CBR(CAS before RAS)/auto refresh */

#define Trp 0x0 /* 2 clk */

#define Trc 0x3 /* 7 clk */

#define Tchr 0x2 /* 3 clk */

7.1.2. 时钟:2440和2410的PLL计算公式不太一样,

libcpu/arm/s3c24xx/clock/support.c中,

get_FCLK()函数:



return((BSP_OSC_FREQ * m) / (p << s));

改成     

return((BSP_OSC_FREQ * m * 2) / (p << s));

7.1.3. 在support.c中:

/* return HCLK frequency */

uint32_t get_HCLK(void)

{

    if (rCLKDIVN & 0x2)

return get_FCLK()/2;

    else

return get_FCLK();

}

改成

/* return HCLK frequency */

uint32_t get_HCLK(void)

{

    if ((rCLKDIVN & 0x06) == 0x04)

return get_FCLK() / 4;

    else if ((rCLKDIVN & 0x06) == 0x00)

return get_FCLK();

    else if ((rCLKDIVN & 0x06) == 0x02)

return get_FCLK() / 2;

    else

return get_FCLK() / 3;

}

7.2. sdram刷新设置

在bspstart.c中

/* setup rREFRESH

   * period = 15.6 us, HCLK=66Mhz, (2048+1-15.6*66)

   */

  REFCNT   = 2048+1-(15.6*get_HCLK()/1000000);

  rREFRESH = ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT);

 

  /* set prescaler for timers 2,3,4 to 16(15+1) */

  cr = rTCFG0 & 0xFFFF00FF;

  rTCFG0 = (cr | (15<<8));

 

  /* set prescaler for timers 0,1 to 1(0+1) */

  cr = rTCFG0 & 0xFFFFFF00;

  rTCFG0 = (cr | (0<<0));

其中,mini2440外接MT48LC16M16A2的刷新周期为64ms/8k,即7.8125us;

REFCNT = 2048 + 1 - (7.8125 * get_HCLK() / 1000000);


使用的是s3c2410.h头文件,寄存器基本一致;

7.3. 串口;

7.3.1. 串口UART0

在c/src/lib/libbsp/arm/mini2440/console/uart.c:

添加

GPH初始化,串口占用gph:

         rGPHCON |= 0xa0;

rGPHUP = 0x0c;

使用不带FIFO模式:

/* FIFO disable, Tx/Rx FIFO clear */

rUFCON0 = 0x0;

rUMCON0 = 0x0;

rUCON0 = 0x245;

改成

rUCON0 = 0x05;/* normal;

rx: int or poll; no int when error occured and timeout;

rx: edge;

tx: int or poll; edge;

clock: PCLK

       */

static ssize_t uart_write(int minor, const char *buf, size_t len)中,

 /* Wait for fifo to have room */

            while(!(rUTRSTAT0 & 0x2)) {

                continue;

            }

改成

while(!(rUTRSTAT0 & 0x4)) {

                continue;

            }


8. 修改linkcmds

MEMORY {

SDRAM_MMU : ORIGIN = 0x30000000, LENGTH = 16k // TLB

SDRAM : ORIGIN = 0x30004000, LENGTH = 64M_16k

}

改成

MEMORY {

SDRAM : ORIGIN = 0x30000000, LENGTH = 64M - 16k

SDRAM_MMU : ORIGIN = 0x33ffc000, LENGTH = 16k

}

9. compile

9.1.

./bspbuild.sh


9.2. 

sudo su // get the root

export PATH=/your/path/to/rtems-4.11/bin:$PATH

cd build/mini2440

make install

su wang2  // go back to wang2 


10. 无图无真相

关键字:rtems  移植  MINI2440 引用地址:rtems-4.11移植到MINI2440 (二) 之移植

上一篇:mini2440_NFS 利用uboot启动
下一篇:mini2440学习——uboot新手入门

推荐阅读最新更新时间:2024-11-12 05:15

一起学mini2440裸机开发(三)--S3C2440时钟学习
前言 首先,我们应该知道一点,mini2440开发板在没有开启时钟前,整个开发板全靠一个12MHz的外部晶振提供频率来工作运行的,也就是说CPU、内存、UART、ADC等所有需要用到时钟频率的硬件都工作在12MHz下,而S3C2440A可以正常工作在400MHz下,可想而知两者速度相差会有多大了。如果CPU工作在12MHz频率下,开发板的使用效率非常低,所有依赖系统时钟工作的硬件,其工作效率也很低,比如,我们电脑里面经常提到的超频,超频就是让CPU工作在更高的频率下,让电脑运算速度更快,虽然频率是越高越好,但是由于硬件特性决定了任何一个设备都不可能无止境的超频,电脑超频时要考虑到CPU或主板发热过大,烧坏的危险,同样开发板的主板
[单片机]
一起学<font color='red'>mini2440</font>裸机开发(三)--S3C2440时钟学习
ffmpeg 移植到 arm s3c2410
首先需要说明的是,由于我只需要在arm上做视屏采集,就没有移植其他的编码和解码库。 这个做好了,那些库加载上来编译也是很容易的! arm-linux-gcc版本:arm-linux-gcc-3.3.2.tar.bz2 我上传了一个,网上也很多: 下载地址: http://d.namipan.com/d/00808da27701ace3a1a0abdd179e23b699c7f64442197504 ffmpeg版本:ffmpeg-0.4.9-p20051120.tar.bz2 下载地址: http://d.namipan.com/d/2c36d68693ee061b0806f7a32d45c22af5bb177ab
[单片机]
搭建一个mini2440开发板U-Boot的框架
一、移植环境 主 机: Ubuntu 开发板:友善之臂mini2440 编译器:arm-linux-gcc-4.3.2 u-boot:u-boot-2009.03.tar.bz2 二、移植步骤 目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。 1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫mini2440 #tar -jx
[单片机]
S5PV210(TQ210)学习笔记——内核移植与文件系统构建
由于之前做过2440和6410,鉴于时间原因,这里暂时跨过其他模块的裸机驱动和uboot移植,直接进入内核移植及驱动开发方面的学习。 内核移植其实很简单,因为内核是linus率领的linux内核开发团队开发并维护的,我们只需要跟我们的平台交叉编译一下即可使用,但是,内核移植也不简单,因为内核移植起见出现任何问题都可能会被卡住,因为内核代码非常庞大,我们无法通读内核代码,下面是我移植期间遇到的各种悲催的问题和解决方案,首先是必备的开发环境: a) Linux内核代码,版本3.8.3 b) S5PV210开发板(我的是TQ210) c) HOST环境是WIN7(64位)下安装的Ubuntu虚拟机(12.10) 一 内核编译 从
[单片机]
S5PV210(TQ210)学习笔记——内核<font color='red'>移植</font>与文件系统构建
μC/OS-Ⅱ在ARM系列单片机S3C44B0x上的移植
目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 C/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。 COS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植 COS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的性能,减少产品的
[单片机]
μC/OS-Ⅱ在ARM系列单片机S3C44B0x上的<font color='red'>移植</font>
创建并移植K10 BSP包的具体步骤和方法(五)
4.2 GPIO配置与任务调试   在MQX4.0安装目录C:\Freescale\Freescale_MQX_4_0\mqx\examples下可以找到很多参考例程,包括ADC、 Hello、 I2C、 Lowpower、 Timer等。这里采用使用的最多的GPIO例程来验证BSP是否能正常工作。   由于在默认的bsp包中user_config.h中没有配置使能BSPCFG_ENABLE_GPIODEV外设,需要在该文件中加入语句#define BSPCFG_ENABLE_GPIODEV 1,如下图15所示。      图15 使能GPIO任务配置   在这里,为了验证MQX4.0版本操作系统对于MQX3.8等早期版
[模拟电子]
创建并<font color='red'>移植</font>K10 BSP包的具体步骤和方法(五)
STM32之LWIP网络协议栈移植步骤与方案
1.LWIP介绍 lwip是瑞典计算机科学院网络嵌入式系统小组(SICS)的Adam Dunkels(亚当·邓克尔) 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持 TCP 协议主要功能的基础上减少对RAM的占用。 LwIP是Light Weight(轻型)IP 协议,有无操作系统的支持都可以运行。LwIP 实现的重点是在保持TCP协议 主要功能的基础上减少对RAM的占用,它只需十几KB的RAM和 40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。lwip提供三种API: RAW API (NETCONN)lwip API BSD API 2.LWIP源码下载 源码下载地址:LWIP
[单片机]
STM32之LWIP网络协议栈<font color='red'>移植</font>步骤与方案
s3c6410 TVout 测试
一.tvout_app的移植 为了测试S3C6410的电视输出,我拿了官方的tvout_app中的测试,这个做的相当初糙,好象是很老的版本,在更改了Makefile后编译,最后发现有函数未定义 /home/huisen/project/tvout/tvout_app/tv_test.c:450: undefined reference to `s3c_get_media_memory' 查看源码是这个原因造成的 ctrl.value = POST_BUFF_BASE_ADDR; 而这个宏是如下定义 #define POST_BUFF_BASE_ADDR (UINT32)s3c_get_media_memory(S
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved