知识大全 精彩arm linux演义
Posted 小弟
篇首语:只有上不去的天,没有过不去的山。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 精彩arm linux演义相关的知识,希望对你有一定的参考价值。
长篇连载 arm linux演艺 序 滚滚长江东四水 浪花淘净英雄 大家好 许多人和我一样 正在苦读linux源代码 希望有照一日 宝典在手 天下我有 小弟不才 也读了两年 写的几首歪诗 从本级开始 把我所理解的linux如何启动贴出来 不懂之处大家讨论一番 也希望把linux从头到尾讨论一遍 计划写它 回 三年写完(笑 ) 欢迎大家动员一些牛人来参与讨论 提高人气 增加流量 小弟用的是arm T 跑LINUX 下面是第一回 长篇连载 arm linux演艺 第一回 话说 (嘘声 入正题把! ) 好好 首先 porting linux的时候要规划内存影像 如小弟的系统有 m SDRAM 地址从 x x bff ffff m flash 地址从 x c x dff ffff 规划如下 bootloader linux kernel rootdisk放在flash里 具体从 x c 开始的第一个 M放bootloader x c 开始的 m放linux kernel 从 x c 开始都给rootdisk 启动 首先 启动后arm T将地址 x c 映射到 (可通过跳线设置) 实际上从 x c 启动 进入我们的bootloader 但由于flash速度慢 所以bootloader前面有一小段程序把bootloader拷贝到SDRAM 中的 x AFE 再从 x 运行bootloader 我们叫这段小程序为flashloader flashloader必须要首先初始化SDRAM 不然往那放那些东东 equ SOURCE x C bootloader的存放地址 equ TARGET x AFE 目标地址 equ SDCTL x SDRAM控制器寄存器 // size is stored in location x C FC global _start _start: //入口点 //;*************************************** //;* Init SDRAM //;*************************************** // ;*************** // ;* SDRAM // ;*************** LDR r =SDCTL // // ; Set Precharge Command LDR r = x //ldr r = x STR r [r ] // ; Issue Precharge All Commad LDR r = x LDR r [r ] // ; Set AutoRefresh Command LDR r = xA STR r [r ] // ; Issue AutoRefresh Command LDR r = x LDR r [r ] LDR r [r ] LDR r [r ] LDR r [r ] LDR r [r ] LDR r [r ] LDR r [r ] LDR r [r ] // ; Set Mode Register LDR r = xB STR r [r ] // ; Issue Mode Register Command LDR r = x //; Mode Register Value LDR r [r ] // ; Set Normal Mode LDR r = x STR r [r ] //;*************************************** //;* End of SDRAM and SyncFlash Init * //;*************************************** // copy code from FLASH to SRAM _CopyCodes: ldr r =SOURCE ldr r =TARGET sub r r # ldr r [r ] _CopyLoop: ldr r [r ] str r [r ] add r r # add r r # sub r r # teq r # beq _EndCopy b _CopyLoop _EndCopy: ldr r =TARGET mov pc r 欲知后事如何 下回分解 长篇连载 arm linux演艺 第二回 上回书说到flashloader把bootloader load到 x AFE 然回跳了过去 其实 x AFE 就是烧在flash x C 中的真正的bootloader: bootloader 有几个文件组成 先是START s 也是唯一的一个汇编程序 其余的都是C写成的 START s主要初始化堆栈 _start: ldr r =StackInit ldr sp [r ] b main //此处我们跳到了C代码的main函数 当C代码执行完后 还要调用 //下面的JumpToKernel x跳到LINXU kernel运行 equ StackInitValue __end_data+ x // K __end_data在连结脚本中指定 StackInit: long StackInitValue global JumpToKernel JumpToKernel: // jump to the copy code (get the arguments right) mov pc r global JumpToKernel x // r = jump address // r r = arguments to use (these get shifted) JumpToKernel x: // jump to the copy code (get the arguments right) mov r r mov r r mov r r mov r r mov r r mov pc r section data boot section bss boot 欲知bootloader中的c代码如何运行 请看下集 长篇连载 arm linux演艺 第三回 书接上回 下面让我们看看bootloader的c代码干了些什么 main函数比较长 让我们分段慢慢看 int main() U *pSource *pDestin count; U countDown bootOption; U delayCount; U fileSize i; char c; char *pCmdLine; char *pMem; init(); //初始化FLASH控制器和CPU时钟 EUARTinit(); //串口初始化 EUARTputString( \\n\\nDBMX Linux Bootloader ver \\n ); EUARTputString( Copyright (C) Motorola Ltd \\n\\n ); EUARTputString((U *)cmdLine); EUARTputString( \\n\\n ); EUARTputString( Press any key for alternate boot up options ); 小弟的bootloader主要干这么几件事:init(); 初始化硬件 打印一些信息和提供一些操作选项 Program bootloader image Program kernel image Program root disk image Download kernel and boot from RAM Download kernel and boot with ver x bootloader format Boot a ver x kernel Boot with a different mand line 也就是说 可以在bootloader里选择重新下载kernel rootdisk并写入flash 下载的方法是用usb连接 m的rootdisk也就刷的一下 关于usb下载的讨论请参看先前的贴子 为arm开发平台增加usb下载接口 如果不选 直接回车 就开始把整个linux的内核拷贝到SDRAM中运行 列位看官 可能有人要问 在flashloader中不是已经初始化过sdram控制器了吗?怎么init(); 中还要初始化呢 各位有所不知 小弟用的是syncflash 可以直接使用sdram控制器的接口 切记 在flash中运行的代码是不能初始化连接flash的sdram控制器的 不然绝对死掉了 所以 当程序在flash中运行的时候 去初始化sdram 而现在在sdram中运行 可放心大胆地初始化flash了 主要是设定字宽 行列延时 因为缺省都是最大的 另外 如果列位看官的cpu有足够的片内ram 完全可以先把bootloader放在片内ram 干完一切后再跳到LINUX 小弟著也是不得已而为之啊 今天太晚了 回去睡觉了 长篇连载 arm linux演艺 第四回 如果直接输入回车 进入kernel拷贝工作 EUARTputString( Copying kernel from Flash to RAM \\n ); count = x ; // Mbytes pSource = (U *) x C ; pDestin = (U *) x ; do *(pDestin++) = *(pSource++); count = ; while (count > ); EUARTputString( Booting kernel \\n\\n ); 这一段没有什么可说的 运行完后kernel就在 x 了 至于为什么要 空出 x 的一段 主要是放kelnel的一些全局数据结构 如内核页表 arm的页目录要有 k大 我们知道 linux内核启动的时候可以传入参数 如在PC上 如果使用LILO 当出现LILO 我们可以输入root=/dev/hda 或mem= M等指定文件系统的设备或内存大小 在嵌入式系统上 参数的传入是要靠bootloader完成的 pMem = (char *) x FF ; //参数字符串的目标存放地址 pCmdLine = (char *)&cmdLine; //定义的静态字符串 while ((*(pMem++)=*(pCm cha138/Article/program/Oracle/201311/16703相关参考
技术分享把JVM移植到ARM环境中 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我
小白无操作系统基础,想学学arm9,请大神指点哦有一定单片机基础,学习ARM就不是很困难。困难的就是学习操作系统,驱动,内核之类的这些东西,就需要你下功夫去学了。开发板有很多的,具体看个人偏好了。现在
阿姆氏指标的指标剑法1、上证指数4天ARMS指标的超卖界限为2.4,21天ARMS指标的超卖界限为1.1。2、上证指数4天ARMS指标超买界限的参考价值低,暂时不推荐,21天ARMS指标的超买界限为0
知识大全 同频率下,MIPS架构的CPU与ARM几的CPU效能抗衡,跪求专业人士详细回答
同频率下,MIPS架构的CPU与ARM几的CPU效能抗衡,跪求专业人士详细回答! 以下文字资料是由(历史新知网www.cha138.com)小编为大家搜集整理后发布的内容,让我们
青梅煮酒论英雄是《三国演义》里最为精彩的内容之一,曹操刘备二人此次双龙会,自然也足以在古代十大酒局中名列三甲。刘备归附曹操后,每日在许昌的府邸里种菜,以为韬晦。用张飞这个粗人的话讲,就是“行小人事”。
青梅煮酒论英雄是《三国演义》里最为精彩的内容之一,曹操刘备二人此次双龙会,自然也足以在古代十大酒局中名列三甲。刘备归附曹操后,每日在许昌的府邸里种菜,以为韬晦。用张飞这个粗人的话讲,就是“行小人事”。
《三国演义》的心得(字数100)《三国演义》全称《三国志通俗演义》。我国古代历史演义小说的代表作。明代小说家罗贯中依据有关三国的历史、杂记,在广泛吸取民间传说和民间艺人创作成果的基础上,加工、再创作了
三国演义里头有哪些故事?8个!赤壁之战关渡之战三气周瑜七擒孟获草船借箭夷陵之站永安托孤智取汉中三国演义里有哪些故事万事俱备,只欠东风公元208年,曹操率领80万大军驻扎在长江中游的赤壁,企图打败刘备以
三国演义读后感400字(四年级)急!《三国演义》是四大名著之一,为罗贯中所编写。这本书已家喻户晓,但是我初次拿着到这本书,看着看着,被里面的情节、人物深深吸引著,打动着,令我爱不释手。孔明一生铺佐明君
下列哪些典故与《三国演义》无关?A、东窗事发B、宝刀不老C、赤膊上阵D、东山再起答案:AD解析:A项,“东窗事发”比喻阴谋暴露。相传北宋末年,金兵南犯,岳飞、李纲等坚持抗金,奸臣秦桧主张投降,就与夫人