加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

arm linux演艺(一)

时间:2013-11-23  来源:123485.com  作者:9stone

滚滚长江东四水,浪花淘净英雄。

         大家好,许多人和我一样,正在苦读arm linux源代码,希望有照一日,宝典在手,天下我有。小弟不才,也读了两年,写的几首歪诗。从本级开始,把我所理解的 linux如何启动贴出来,不懂之处大家讨论一番。也希望把linux从头到尾讨论一遍,计划写它240回,三年写完(笑。。。),欢迎大家动员一些牛人来参与讨论,提高人气,增加流量。

小弟用的是arm920T,跑LINUX 2。4。18,下面是第一回。。。。。

长篇连载--arm linux演艺---第一回
--------------------------------------------------------------------------------

话说。。。(嘘声,“入正题把!“)

好好:

        首先,porting linux的时候要规划内存影像,如小弟的系统有64m SDRAM,地址从0x 0800 0000 -0x0bff ffff,32m flash,地址从0x0c00 0000-0x0dff ffff.规划如下:bootloader, linux kernel, rootdisk放在flash里。具体从 0x0c00 0000开始的第一个1M放bootloader,0x0c10 0000开始的2m放linux kernel,从 0x0c30 0000开始都给rootdisk。

启动:
       首先,启动后arm920T将地址0x0c00 0000映射到0(可通过跳线设置),实际上从0x0c00 0000启动,进入我们的bootloader,但由于flash速度慢,所以bootloader前面有一小段程序把bootloader拷贝到SDRAM 中的0x0AFE0100,再从0x 0800 0000 运行bootloader,我们叫这段小程序为flashloader,flashloader必须要首先初始化SDRAM,不然往那放那些东东:

.equ SOURCE, 0x0C000100 bootloader的存放地址
.equ TARGET, 0x0AFE0100 目标地址
.equ SDCTL0, 0x221000 SDRAM控制器寄存器
// size is stored in location 0x0C0000FC

.global _start
_start: //入口点

//;***************************************
//;* Init SDRAM
//;***************************************

// ;***************
// ;* SDRAM
// ;***************

LDR r1, =SDCTL0 //

// ; Set Precharge Command
LDR r3, =0x92120200
//ldr r3,=0x92120251
STR r3, [r1]

// ; Issue Precharge All Commad
LDR r3, =0x8200000
LDR r2, [r3]

// ; Set AutoRefresh Command
LDR r3, =0xA2120200
STR r3, [r1]

// ; Issue AutoRefresh Command
LDR r3, =0x8000000
LDR r2, [r3]
LDR r2, [r3]
LDR r2, [r3]
LDR r2, [r3]
LDR r2, [r3]
LDR r2, [r3]
LDR r2, [r3]
LDR r2, [r3]

// ; Set Mode Register
LDR r3, =0xB2120200
STR r3, [r1]

// ; Issue Mode Register Command
LDR r3, =0x08111800 //; Mode Register Value
LDR r2, [r3]

// ; Set Normal Mode
LDR r3, =0x82124200
STR r3, [r1]

//;***************************************
//;* End of SDRAM and SyncFlash Init *
//;***************************************

// copy code from FLASH to SRAM

_CopyCodes:
ldr r0,=SOURCE
ldr r1,=TARGET
sub r3,r0,#4
ldr r2,[r3]

_CopyLoop:
ldr r3,[r0]
str r3,[r1]
add r0,r0,#4
add r1,r1,#4
sub r2,r2,#4
teq r2,#0
beq _EndCopy
b _CopyLoop

_EndCopy:
ldr r0,=TARGET
mov pc,r0

欲知后事如何,Arm linux 下回分解:


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门