S3C6410嵌入式应用平台构建(一)

发布者:Leishan最新更新时间:2024-09-12 来源: cnblogs关键字:S3C6410  嵌入式 手机看文章 扫描二维码
随时随地手机看文章

接下来,我们看看关闭MMU,至于为什么要关闭MMU,网上大家都说的很清楚,我就不再重述,但关于关闭MMU有如下代码:


/*

* disable MMU stuff and caches

*/

mrc p15, 0, r0, c1, c0, 0

bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)

bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)

orr r0, r0, #0x00000002 @ set bit 2 (A) Align

orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache

/* Prepare to disable the MMU */

mcr p15, 0, r0, c1, c0, 0

#if 0 //I don't know why mark blow

/* Prepare to disable the MMU */

adr r1, mmu_disable_phys

/* We presume we're within the first 1024 bytes */

and r1, r1, #0x3fc

ldr r2, _TEXT_PHY_BASE

ldr r3, =0xfff00000

and r2, r2, r3

orr r2, r2, r1

b mmu_disable


.align 5

/* Run in a single cache-line */

mmu_disable:

mcr p15, 0, r0, c1, c0, 0

nop

nop

mov pc, r2

#endif

#endif


我尝试不去注释掉if0的内容,但是连灯都亮不起来,我不是太清楚这是问什么,反正mcr p15, 0, r0, c1, c0, 0将MMU关闭清楚就行了。


接下来就进入bl    lowlevel_init        /* go setup pll,mux,memory */,进行系统时钟,nandflash控制器,ddr内存控制室,led等简单的 初始化。


接下来也是大多数移植过程中需要改的地方了:


重定位代码->从nandflash复制到DDR中并执行!


我自己写的代码如下:


#ifdef CONFIG_BOOT_NAND

relocate:

adr r0, _start /* 当前指令地址 */

ldr r1, =_start /* 链接地址 */

//ldr r2, _armboot_start

//ldr r3, _bss_start

cmp r0, r1

beq after_copy


copy_from_nand:

ldr r0, _armboot_start

ldr r1, _bss_start

ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */

sub sp, sp, #12

bl copy_nand2ram

tst  r0, #0x0

bne copy_fail


copy_fail:

nop    /* copy from nand failed */

b copy_fail

#endif


首先比较r0,r1, 大家可以用反汇编来看看代码执行过程(反汇编生成方法为:arm-linux-objdump –D uboot > uboot.dis),反汇编后发现,


r0 存放的是程序当前指令地址,即r0 =0,而r1 = 0x57e00000,因此需要重定位。而关键在于,我想通过r0,r1来把代码的起始地址和终止地址传入nandcopy2ram函数,这样就灵活了,但是奇怪的是,传参并传不进去,会导致启动不来,后来我们把这些零零碎碎的判断啊,重定位什么的都不要了,就两句代码:设置栈指针,跳入c函数的copy_nand2ram ,而copy_nand2ram 函数复制uboot代码大小固定死了,为0x3c000,结果烧进去,咦!终于看到希望,终于起来了!!!!


甚是高兴,后来我们又改回r0,r1来传参,还是不行,算了,这肯定是由某个原因导致的。


我们对于汇编指令不是特别熟悉,特别是adr,ldr,还有ldr, =XXX、tst,beq, bnq这些指令太陌生了。后面需要去深入理解。


我同学的这个想法很好,什么都不用做,我们最终的结果不就是去nandflash复制到ram嘛,干脆用以下两句:


ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */

bl copy_nand2ram


关键字:S3C6410  嵌入式 引用地址:S3C6410嵌入式应用平台构建(一)

上一篇:S3C6410嵌入式应用平台构建(二)
下一篇:移植属于自己的6410开发板的U-Boot

推荐阅读最新更新时间:2026-03-23 11:04

S3C6410嵌入式应用平台构建(四)——linux-3.14.4移植到OK6410-(初步启动)
这次,还是把基本的基于我目前最新的Linux源码进行移植到OK6410吧,同时也写下我移植过程中遇到的问题及解决方法,不过有些方法是借鉴网上的,有些是自己加的,会有一些小bug。 一、基本工作 1. 源码下载 https://www.kernel.org/ ,最好是下载stable版本,否则会有小bug。(我现在调试的是stable版本, linux-3.14.4) 2. 拷到自己的文件夹下解压,我下的是.xz后缀的,这样文件比较小,只是解压时多一个步骤。 $ xz –d linux-3.14.4.tar.xz $ tar xvf linux-3.14.4.tar 3. 解压完后,进入解压后的目录 二、源码
[单片机]
<font color='red'>S3C6410</font><font color='red'>嵌入式</font><font color='red'>应用</font><font color='red'>平台</font><font color='red'>构建</font>(四)——linux-3.14.4移植到OK6410-(初步启动)
S3C6410嵌入式应用平台构建(五)——linux-3.14.4移植到OK6410-(Nand分区问题)
前一篇文章,我们的Linux能后启动了,只是在识别nand时候,没有获取到时钟源,导致后面的分区没哟进行。 我们从启动的log发现: s3c24xx-nand s3c6400-nand: failed to get clock s3c24xx-nand: probe of s3c6400-nand failed with error –2 于是追踪到代码: nandflash驱动中——s3c2410.c中 /* get the clock source and enable it */ info- clk = devm_clk_get(&pdev- dev, nand ); if (IS_ERR(
[单片机]
S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件制作)
本文主要讲怎用利用yaffs2工具和busybox制作yaffs2文件系统镜像。大多数都是参照网上的,目的在于记录学习,不做任何用途。 一、制作mkyaffs2image工具 进入yaffs2源码目录下utils目录,修改mkyaff2image.c,做如下修改: // Adjust these to match your NAND LAYOUT: #if 0 #define chunkSize 2048 #define spareSize 64 #define pagesPerBlock 64 #else #define chunkSize 4096 #define spareSize 218 #defin
[单片机]
构建嵌入式linux平台下的用户应用
1.引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次,如图1-1所示: (1)引导程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 (2)Linux 内核。针对于嵌入式板子的定制内核以及内核的启动参数。 (3)文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为根文件系统 (4)用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows
[单片机]
<font color='red'>构建</font><font color='red'>嵌入式</font>linux<font color='red'>平台</font>下的用户<font color='red'>应用</font>
周立功:基于应用构建嵌入式软件平台
周立功通过分析传统嵌入式设备的开发和编程方式,介绍了一种基于面向设备的开发方式,并以自身的实践经验说明了嵌入式系统软件平台化的重要意义,其表示,周立功公司也在逐步转型为软件公司,“硬件只是一部分,而更重要的是软件。” 以下为文字实录: 从过去来讲,从81年做到现在,我深有体会,过去做硬件,大学学数学、搞软件,搞硬件的人玩玩认为硬件最重要,现在回过来看,我的感觉是这个世界已经发生了很大的变化,中国企业在全球产生新的局势。 硬件我认为仅仅是一个部分,我认为更重要的应该是软件。硬件只要在公司里设计标准化就可以了,可靠性,一致性测试,以及信号分析,技术成熟以后,永远可以通用,而软件就不同
[嵌入式]
S3C6410 SPI全双工读写流程分析(原创)
一、SPI控制器datasheet 1详细请参考:http://blog.csdn.net/hustyangju/article/details/20474659 2 SPI的所有寄存器都是映射到内核空间的,采用基地址+偏移地址的方式访问 static volatile void __iomem *spiregs; //global variable for mapping spiregister spiregs = (volatile)ioremap(0x7F00B000,0x30); //just request for the spi0 3 下文可能用到的偏移地址 #defi
[单片机]
学习搭建S3C6410开发板的测试环境心得
本章只介绍了如何在OK6410-A开发板上安装Android。当然,我们还可以选择其他的开发板,还可以直接在手机上测试Linux驱动程序。由于不同的开发板和手机安装Android的方法不尽相同,在这里只是做个参考。 1安装串口调试工具:minicom 以Ubuntu Linux为例,需要按照如下步骤安装、配置和调试minicom: 第一步:检测当前系统是否支持USB转串口 #lsmod | grep usbserial 如果有usbserial说明系统支持USB转串口 第二步:安装minicom #apt-get install minicom 第三步:配置minicom #minicom -s 进入配置页面,进入“Serial
[单片机]
linux内核中S3C6410 timer相关代码理解
本文描述基于mini6410平台的time.c中的相关代码,主要描述下对部分代码的理解。 先贴上代码: 1 /* we use the shifted arithmetic to work out the ratio of timer ticks 2 * to usecs, as often the peripheral clock is not a nice even multiple 3 * of 1MHz. 4 * 5 * shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok 6 * for the current HZ value
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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