动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.如何快速成为高级数据库人才.
.利用vmware体验Oracle10g的ASM数.
.巧取指定的记录与巧用外关联查询.
.ORACLE在HP-UX下的系列问题处理(.
.将一台Oracle7数据导入到另一台9.
.VB程序如何访问数据库.
.9i新特性之四缩小非计划当机时间.
.bfile的使用.
.数据仓库产品综述.
.Oracle数据库应用系统调优方法介.
.Oracle数据库buffer busy wait等.
.数据库应用程序常见T-SQL和PL/SQL.
.如何让sendmail不能支持VRFY等功.
.在sqlplus中批量执行sql命令.
.Oracle产品中的错误的诊断.
.Oracle与Siebel合并,华尔街分析师.
.Oracle9i的企业管理器介绍.
.RedHat下Oracle启动脚本的建立.
.确定用户是否属于某个角色.
.Oracle9i 数据仓库执行性能增强.

精彩arm linux演义

发表日期:2008-2-9 |



  长篇连载--arm Linux演艺---序
  
  滚滚长江东四水,浪花淘净英雄。
  
  大家好,许多人和我一样,正在苦读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演艺---第二回
  --------------------------------------------------------------------------------
  
  上回书说到flashloader把bootloader load到0x0AFE0100, 然回跳了过去,
  其实0x0AFE0100 就是烧在flash 0x0C000100中的真正的bootloader:
  
  bootloader 有几个文件组成,先是START.s,也是唯一的一个汇编程序,其余的都是C写成的,START.s主要初始化堆栈:
  
  _start:
  ldr r1,=StackInit
  ldr sp,[r1]
  b main
  //此处我们跳到了C代码的main函数,当C代码执行完后,还要调用
  //下面的JumpToKernel0x跳到LINXU kernel运行
  
  .equ StackInitValue, __end_data+0x1000 // 4K __end_data在连结脚本中指定
  
  StackInit:
  .long StackInitValue
  
  .global JumpToKernel
  
  JumpToKernel:
  // jump to the copy code (get the arguments right)
  mov pc, r0
  
  .global JumpToKernel0x
  // r0 = jump address
  // r1-r4 = arguments to use (these get shifted)
  JumpToKernel0x:
  // jump to the copy code (get the arguments right)
  mov r8, r0
  mov r0, r1
  mov r1, r2
  mov r2, r3
  mov r3, r4
  mov pc, r8
  .section ".data.boot"
  .section ".bss.boot"
  
  欲知bootloader中的c代码如何运行,请看下集
  
  长篇连载--arm linux演艺---第三回
  --------------------------------------------------------------------------------
  
  书接上回:
  
  下面让我们看看bootloader的c代码干了些什么。
main函数比较长,让我们分段慢慢看。
  
  int main()
  {
  U32 *pSource, *pDestin, count;
  U8 countDown, bootOption;
  U32 delayCount;
  U32 fileSize, i;
  char c;
  char *pCmdLine;
  char *pMem;
  
  init(); //初始化FLASH控制器和CPU时钟
  
  EUARTinit(); //串口初始化
  EUARTputString("\n\nDBMX1 Linux Bootloader ver 0.2.0\n");
  EUARTputString("Copyright (C) 2002 Motorola Ltd.\n\n");
  EUARTputString((U8 *)cmdLine);
  EUARTputString("\n\n");
  
  EUARTputString("Press any key for alternate boot-up options ... ");
  
  小弟的bootloader主要干这么几件事:init(); 初始化硬件,打印一些信息和提供一些操作选项:
  0. Program bootloader image
  1. Program kernel image
  2. Program root-disk image
  3. Download kernel and boot from RAM
  4. Download kernel and boot with ver 0.1.x bootloader format
  5. Boot a ver0.1.x kernel
  6. Boot with a different command line
  
  也就是说,可以在bootloader里选择重新下载kernel,rootdisk并写入flash,
  下载的方法是用usb连接,10m的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 = 0x200000; // 2 Mbytes
  pSource = (U32 *)0x0C100000;
  pDestin = (U32 *)0x08008000;
  do
  {
  *(pDestin++) = *(pSource++);
  count -= 4;
  } while (count > 0);
  }
  
  EUARTputString("Booting kernel ...\n\n");
  
  这一段没有什么可说的,运行完后kernel就在0x08008000了,至于为什么要
  空出0x8000的一段,主要是放kelnel的一些全局数据结构,如内核页表,arm的页目录要有16k大。
  
  我们知道,linux内核启动的时候可以传入参数,如在PC上,假如使用LILO,
  当出现LILO:,我们可以输入root=/dev/hda1.或mem=128M等指定文件系统的设备或内存大小,在嵌入式系统上,参数的传入是要靠bootloader完成的,
  
  pMem = (char *)0x083FF000; //参数字符串的目标存放地址
  pCmdLine = (char *)&cmdLine; //定义的静态字符串
  while ((*(pMem++)=*(pCm
上一篇:redhat 8.0下的vsftp的配置 人气:523
下一篇:Vi 使用说明 人气:615
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵