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-09 20:55

单片机---HLK-W801移植Nes模拟器(三)
本章重点—优化显示 前两章完成之后,测试了一下刷新速率,达到了惊人的3帧每秒 提高主频 main函数中,有设置时钟分频的位置,尝试修改为最高 修改LCD初始 默认的ILI9341是竖屏,320*240的话,我们写数据,就需要进行截断处理,因为这个模拟器的每行是256个字符。 所以我们进行一下横屏,并且配置一下绘图范围的内存,我们就让它与模拟器提供的行buf一一对应,就避免了很多配置动作,只需要不停的写入就好了。 ILI9341_WR_REG(0x36); //set the model of scanning ILI9341_WR_DATA8((1 5)|(0 6)|(1 7)|(1 3)); //左横屏
[单片机]
单片机---HLK-W801<font color='red'>移植</font>Nes模拟器(三)
S3C2416裸机开发系列二二_Lwip的移植
Internet实现了全球范围内计算机网络的互连,不同主机之间必须遵循相同的网络协议才能彼此通信。TCP/IP协议作为一种网络互联协议,在Internet中得到了最广泛的支持以及应用。笔者此处就轻量级TCP/IP协议Lwip的移植作一个简单的介绍。 1. TCP/IP协议概述 TCP/IP协议是Internet上使用最广泛的通信协议,其实际上是一个协议簇,其中TCP协议和IP协议是其中两个最重要的协议。 TCP/IP协议采用4层层级结构:应用层、运输层、网络层、链路层。相应的层级除了能够向上一层提供服务,还需要使用下一层所提供的服务。 1.1. 链路层 数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上透明
[单片机]
S3C2416裸机开发系列二二_Lwip的<font color='red'>移植</font>
stm32裸机移植FreeModbus
简单记录一下步骤。 官方下载freemodbus-v1.6.zip源码,然后把源码中的modbus文件夹、demoBAREport文件夹导入工程。 先是一波无脑导,把文件夹里所有文件导入。 存储区配置,单片机上定义的起始地址要比实际通信过程中读写的地址+1。 #include mb.h #include mbport.h #include mbutils.h //输入寄存器 #define REG_INPUT_START 1001 #define REG_INPUT_NREGS 2 static USHORT usRegInputStart = REG_INPUT_START; static USHOR
[单片机]
S3C2440移植uboot之编译烧写uboot
文章目录 移植环境 获取uboot 更新交叉编译工具 配置环境变量 移植环境 主 机:VMWare–ubuntu16.04 开发板:S3C2440 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2012.04.01.tar.bz2 获取uboot 进入https://www.denx.de/wiki/U-Boot下载uboot 一直往下拉选择如下 将下载好的压缩包解压到任意文件夹,并创建source insight工程。将下载好的u-boot-2012.04.01.tar_2.bz2放到ubuntu服务器/work/system中。执行以下命令解压uboot: cd
[单片机]
S3C2440<font color='red'>移植</font>uboot之编译烧写uboot
TX2440 ARM开发板Uboot移植(三、添加Nand Flash的有关操作支持)
在上一节中我们说过,通常在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动,但不管是从Nor启动或者从Nand启动,进入第二阶段以后,两者的执行流程是相同的。当u-boot的start.S运行到“_start_armboot: .word start_armboot”时,就会调用lib_arm/board.c中的start_armboot函数,至此u-boot正式进入第二阶段。此时注意:以前较早的u-boot版本进入第二阶段后,对Nand Flash的支持有新旧两套代码,新代码在drivers/nand目录下,旧代码在drivers/nand_legacy目录下,CFG_
[单片机]
STM32 移植 STemwin(Touch)
上篇讲到了STemwin的基本移植步骤,这里再讲下Touch的支持。 驱动好自己的触摸屏,准备好测量X,Y 返回为ADC值的函数。这个一般也不难 准备好GUI_TOUCH_X.C文件,这里比较坑的就是这个文件没有包含在STemwin的包里面(至少5.32里面没有),需要自己写一个,其实内容很简单,如下 #include GUI.h #include XPT2046.h void GUI_TOUCH_X_ActivateX(void) { } void GUI_TOUCH_X_ActivateY(void) { } int GUI_TOUCH_X_MeasureX(void) { return XPT2046_R
[单片机]
STM32 <font color='red'>移植</font> STemwin(Touch)
u-boot-2011.03在mini2440/micro2440上的移植 支持Nand Flash启动
7.1 创建nand_read.c 【注意】 本程序只能用于读取2K/页的Nand。本人的Micro2440上的Nand Flash为256M,型号为K9F2G08 $ touch board/samsung/micro2440/nand_read.c $ cat board/samsung/micro2440/nand_read.c #define rNFCONF (*(volatile unsigned *)0x4E000000) #define rNFCONT (*(volatile unsigned *)0x4E000004) #define rNFCMD (*(volatile unsigned *)0x4E00
[单片机]
I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之kernel移植
前篇文章已经在tqimx6q上成功跑起了新版BSP的uboot,本文来配置下新版BSP的kernel,使kernel能在tqimx6q上正常启动。 准备工作 每次移植kernel的时候都会做的工作就是找到与当前开发板接近的config,其实uboot移植的时候也是一样的。由于tqimx6q的芯片是imx6q的,所以,还是以mx6q_sabresd为例。另外,自己动手移植BSP时应该充分使用官方文档,本人以为,以下文档是非常有用的: (1) i.MX 6 BSP Porting Guide: 该文档详细的记载了BSP移植的流程。 (2) i.MX 6 SABRE-SD Linux User's Guide:
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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