S3C6410移植日记系列

发布者:leader4最新更新时间:2024-09-18 来源: cnblogs关键字:S3C6410  移植 手机看文章 扫描二维码
随时随地手机看文章

    现在发布的是si版本,是以单片机模式运行的,S3C6410这样强劲的cpu,运行si版本,就作为高速单片机用了,所有地址都是按照物理地址一一对应映射。cpu的状态也没有区分内核态和用户态。
1、中断引擎最初的部分代码在IRQ态(还没决定是否使用FIQ)。
2、中断引擎的大部分以及用户ISR运行在SVC态。
3、所有其他代码运行在SYS态。

    移植碰到的第一个问题就是烧录代码到flash的问题,由于廉价的jtag烧录器不支持arm11,我们不能要求用户必须拥有昂贵的仿真烧录工具才能够在idea6410上使用djyos,这样不利于用户使用。

    我的第一个目标,就是弄清楚怎么下载程序的问题,也就是把一个最简单的闪灯程序运行起来,写了几行代码,如下:
    ldr     r0,=0x7f008820
    ldr     r1,=0x1111
    str     r1,[r0]
    ldr     r0,=0x7f008824
    ldr     r1,[r0]
    bic     r2,r1,#3
    orr     r2,r2,#0xc
    bic     r3,r1,#0xc
    orr     r3,r3,#3
nn:
    str     r2,[r0]
    ldr     r4,=5000000
delay1:
    sub     r4,r4,#1
    cmp     r4,#0
    bne     delay1
    str     r3,[r0]
    ldr     r4,=5000000
delay2:
    sub     r4,r4,#1
    cmp     r4,#0
    bne     delay2
    b       nn


    6410的手册上说,可以从nandflash、onenand、SD卡启动,没有专用的烧录工具的情况下,只有SD卡启动是可以考虑的。手册上看到,SD卡启动,实际上是先执行片内IROM中的一段程序,该程序从SD卡中读取代码,写到stepping stone中,stepping stone是位于0x0c000000、size为8K的片内内存,代码写入stepping stone后,跳到0x0c000000处继续执行程序。那么,要实现从SD卡启动,就必须弄清楚:
1、8K的代码保存在SD卡的什么位置。
2、代码以什么格式存储。

    为弄清楚上述问题,依例http://www.djyos.com/download/sdboot6410.zip

6410的sdbootloader完成了

 sdbootloader说明:
1、用winhex工具把boot_rom.bin写入SD卡,地址:SD卡末地址-9216。
2、把开发板的拨码开关拨到从SD卡启动,上电即可。
2、打开超级终端,用xmodem协议下载程序,保存到dram中。
3、把下载的代码写入到norflash。
4、把开发板的拨码开关拨到从norflash启动,复位或重新上电即可。
5、省去了xmodem帧格式检查、校验和检查。

    但凡开发操作系统,无论是PC、服务器,还是嵌入式操作系统,第一个要解决的就是启动文件的存储问题。无论什么cpu,上电或者复位后,都会从指定的存储位置读取第一条指令予以执行,我们把这个地址成为启动向量,有些cpu可以通过跳线设置不同的启动向量地址。我们熟悉的PC,就是把bios烧录到启动向量处,再由bios逐步引导启动更高级的操作系统,比如windowslinux等。
    在嵌入式行业,以linux为例,linux映像可以通过网口或者其他通信口下载,但你拿到裸机的时候,必须先想办法把uboot或者vivi或者其他bootloader烧录到flash中。djyos也不例外,不同的是,现在发布的si版本的djyos,是没有单独的bootloader的,而是把bootloader的角色集成在可执行影像中了,所以,需要像烧录uboot那样,烧录整个djyos影像。
    在s3c6410之前,djyos发布了arm7(44b0)和arm9(2410和2440)两个版本,得益于廉价的arm7和arm9仿真烧录器,比如hjtag,arm这两个版本是通过hjtag或者jlink或其他工具直接烧录到norflash上的。但s3c6410是arm11的核,这些廉价工具不支持arm11,支持arm11的烧录工具都在数千元以上,这样势必影响大家使用djyos。要让6410执行djyos,必须解决在没有专用烧录工具的情况下,把djyos烧录到启动设备上的问题。
    6410一共支持4种启动设备:norflash、nandflash、SD卡、modem,其中norflash和nandflash必须使用专用烧录工具,modem则需要了解其通信协议,编写相应的PC端应用程序,相比之下,SD卡最为简单,可以用普通的读卡器+winhex工具就可以完成写入。但有一个限制,就是6410启动时只从SD卡中读取8K代码到内部ram中(6410手册第二章说4K,第八章说8K,实测是8K)。读入代码后,程序就跳转到内部ram中执行,这8K程序,只能做一个简易bootloader,用这个bootloader去加载整个操作系统,这时候,就有两种选择:
1、把程序写到SD卡的其他地方,   但这种方法不现实。SD卡是用nandflash做的, 必然要做ECC校验,那么把代码写入SD卡时,要么用文件系统,但8K代码根本做不了文件系统;要么在PC端用支持ECC的专用写卡工具,可惜没有找到。
2、用串口下载,这是传统方法,PC端的工具很多,最通用的是超级终端了。
    我们选择了超级终端,xmodem协议下载。


关键字:S3C6410  移植 引用地址:S3C6410移植日记系列

上一篇:wince6.0+s3c6410摄像头驱动修改
下一篇:Mplayer 在Linux - S3C6410 下的编译

推荐阅读最新更新时间:2024-11-20 10:54

基于mini2440的uboot移植(一)
一.移植环境 虚拟机:ubuntu12.04 uboot源码:u-boot-2008.10.tar.bz2 交叉编译:arm-linux-gcc-4.4.3 简单的记录下编译uboot的过程,要想具体了解uboot的工作原理,可以查看韦东山对uboot这部分的讲解,红色部分为修改部分 二.移植步骤 1.将uboot源码复制到ubuntu下的自己定义的文件夹,并解压tar jxvf u-boot-2008.10.tar.bz2 2.选择要移植的开发板,我们要准备将uboot移植到mini2440上,s3c2440开发板的cpu为arm920t,smdk2410开发板的cpu也为arm920t,所以我们选择
[单片机]
基于mini2440的uboot<font color='red'>移植</font>(一)
嵌入式实时操作系统μC/OS-II在LPC2378上的移植及应用
   O 引言   目前,市场以及院校科研用嵌入式系统产品,如Vxworks,Linux和Windows CE等都已经相当成熟,提供了有力的开发和调试工具,但有些开发成本昂贵,周期较长,而μC/OS-Ⅱ是一种多任务实时源代码的公开操作系统,内核精简,移植性较强,非常适合用于一些小型控制和实验系统的开发。    1 操作系统及CPU介绍   μC/OS-Ⅱ是基于优先级的占先式实时多任务操作系统,包含有任务管理、时间管理、任务间同步通信(信号量,邮箱,消息队列)和内存管理等功能。绝大部分代码用C语言写成,极少部分与处理器密切相关的代码用汇编语言编写,便于移植。作为一个源代码公开的实时操作系统,最多可以管理64个任务,并支持
[嵌入式]
Mplayer 在Linux - S3C6410 下的编译
mplayer交叉编译过程: GCC版本:Sourcery G++ 4.2.1 目标机:S3C6410 ARM内核为arm1176jzf-s(GCC有-mcpu=arm1176jzf-s) 主机:Ubuntu 8.04 提示:mplayer有自动configure,无需手动写Make~注意区分GCC的参数和configure的参数。 参考文章: ARM MPlayer移植过程 http://www.usr.cc/html/54/n-654.html mplayer在arm 2410上的移植 http://www.hzlitai.com.cn/article/ARM9-article/example/1483.html ./con
[单片机]
移植uboot-2012.04.01到TQ2440
开发环境 主机开发环境:ubuntu12.04 BootLoader:u-boot-2012.04.01 kernel:linux-2.6.30.4 CPU:s3c2440 开发板:TQ2440 交叉编译工具链:arm-linux-gcc 4.3.3 步骤 具体移植步骤参见https://www.bilibili.com/video/BV1Pt411n7cv 我是参考韦东山的移植教程做的,期间遇到好多问题,但是都解决了,具体步骤暂时先不写呢,有时间在写,哈哈。 实验现象 当u-boot在TQ2440上启动成功后,采用韦东山编译的uImage运行不了,如下图 显示无法挂载根文件系统,可能他的内核有哪些配置和我的板卡不一致
[单片机]
<font color='red'>移植</font>uboot-2012.04.01到TQ2440
ARM在嵌入式linux内核裁剪与移植的应用
微处理器用一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器与传统的中央处理器相比,具有体积小,重量轻和容易模块化等优点。微处理器的基本组成部分有:寄存器堆、运算器、时序控制电路,以及数据和地址总线。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的
[单片机]
TE2410移植linux-2.6.14及调试过程总结(2)
今天写总结再来分析一下s3c2410_nand_calc_rate函数,终于知道问题在哪了,之前的打印内容如下: plat- tacls:0 plat- twrph0:3 plat- twrph1:0 tacls:1 twrph0:1 twrph1:1 clkrate:100000000/*注意是8个0,实际就是是HCLK=100MHz*/ #define NS_IN_KHZ 10000000 /*注意是7个0*/ static int s3c2410_nand_calc_rate(int wanted, unsigned long clk, int max) { int result; res
[单片机]
boot移植(十一)---代码修改---支持nandflash
一、移植前的修改 1.1 include/configs/jz2440修改 原来的定义: 可以看出,要先定义CONFIG_CMD_NAND才能使能NANDFlash。 这个在我们文件中的82行有定义,所以不需要定义了。    将里面的S3C2410全部改为S3C2440: 1.2 drivers/mtd/nand/修改 拷贝s3c2410_nand.c 成 s3c2440_nand.c 在此目录的makefile中添加 s3c2440_nand.c    修改s3c2440_nand.c 文件,从board_nand_init 逐行检测修改,代码如下: 1 #include common.h 2 3 #i
[单片机]
boot<font color='red'>移植</font>(十一)---代码修改---支持nandflash
基于2.6.19内核的小型Linux系统制作与移植
引言 ARM9 S3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。 S3C2410微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T核的微处理器。它带有内存管理单元(MMU),采用0.18mm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。 在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛 。性能优良、源码开放的Linux具有体积小、内核可裁
[应用]
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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