摘要<br /><br />我们在这里讨论的是对嵌入式linux系统的启动过程的输出信息的注释,通过我们的讨论,大家会对嵌入式linux启动过程中出现的、以前感觉熟悉的、但却又似是而非的东西有一个确切的了解,并且能了解到这些输出信息的来龙去脉。<br /><br />嵌入式linux的启动信息是一个很值得我们去好好研究的东西,它能将一幅缩影图呈现在我们面前,来指导我们更加深入地理解linux内核。<br /><br /><br /><br />关键字:linux,嵌入式,启动,bootloader<br /><br />正文<br /><br />作为一名嵌入系统开发者,你一定遇到过下面的情景:<br /><br />在某论坛上看到一篇帖子,上面贴着嵌入式linux开发板启动时的有关信息,然后大家在帖子里讨论着这个启动过程中出现的问题,随机举例如下:<br /><br />Linux version 2.4.20-uc0 (root@Local) (gcc version 2.95.3 <br />20010315 (release)(ColdFire patches - 20010318 from http://f <br />(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #20 三 6月 1 <br />8 00:58:31 CST 2003 <br />Processor: Samsung S3C4510B revision 6 <br />Architecture: SNDS100 <br />On node 0 totalpages: 4096 <br />zone(0): 0 pages. <br />zone(1): 4096 pages. <br />zone(2): 0 pages. <br />Kernel command line: root=/dev/rom0 <br />Calibrating delay loop... 49.76 BogoMIPS <br />Memory: 16MB = 16MB total <br />Memory: 14348KB available (1615K code, 156K data, 40K init) <br />Dentry cache hash table entries: 2048 (order: 2, 16384 bytes) <br />Inode cache hash table entries: 1024 (order: 1, <br />Mount-cache hash table entries: 512 (order: 0, 4096 bytes) <br />Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) <br />Page-cache hash table entries: 4096 (order: 2, 16384 bytes) <br />POSIX conformance testing by UNIFIX <br />Linux NET4.0 for Linux 2.4 <br />Based upon Swansea University Computer Society NET3.039 <br />Initializing RT netlink socket <br />Starting kswapd <br />Samsung S3C4510 Serial driver version 0.9 (2001-12-27) with no serial options en <br />abled <br />ttyS00 at 0x3ffd000 (irq = 5) is a S3C4510B <br />ttyS01 at 0x3ffe000 (irq = 7) is a S3C451 <br />Blkmem copyright 1998,1999 D. Jeff Dionne <br />Blkmem copyright 1998 Kenneth Albanowski <br />Blkmem 1 disk images: <br />0: BE558-1A5D57 [VIRTUAL BE558-1A5D57] (RO) <br />RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize <br />Samsung S3C4510 Ethernet driver version 0.1 (2002-02-20) <br />eth0: 00:40:95:36:35:34 <br />NET4: Linux TCP/IP 1.0 for NET4.0 <br />IP Protocols: ICMP, UDP, TCP <br />IP: routing cache hash table of 512 buckets, 4Kbytes <br />TCP: Hash tables configured (established 1024 bind 1024) <br />VFS: Mounted root (romfs <br />Freeing init memory: 40K<br /><br /><br /><br />上面的这些输出信息,也可能包括你自己正在做的嵌入式linux开发板的输出信息,其中的每一行,每一个字的含义,你是否深究过,或者说大部分的含义你能确切地知道的?本人想在这里结合本人在实践中一些体会来和广大嵌入式linux的开发者一起读懂这些信息。<br /><br />我们在这里将以一个真实的嵌入式linux系统的启动过程为例,来分析这些输出信息。启动信息的原始内容将用标记标出,以区别与注释。<br /><br /><br /><br />嵌入式linux的启动主要分为两个阶段:<br /><br />① 第一部分bootloader启动阶段<br /><br />② 第二部分linux 内核初始化和启动阶段<br /><br />第一节:start_kernel<br /><br />第二节:用户模式( user_mode )开始,start_kernel结束<br /><br />第三节:加载linux内核完毕,转入cpu_idle进程<br /><br /><br /><br />第一部分 : bootloader启动<br /><br />Boot loader v0.12<br /><br />NOTE: this boot loader is designed to boot kernels made with the<br /><br />2.4.xx releases<br /><br />bootloader for XV<br /><br />Built at Nov 20 2005 10:12:35<br /><br /><br /><br />Bootloader头信息,版本,编译时间等,这个因不同的bootloader的设计而有所不同,由此你能看出bootloader的版本信息,有很多使用的是通用的bootloader,如u-boot,redboot等。<br /><br />Loaded to 0x90060000<br /><br /><br /><br />将bootloader加载到内存ram中的0x90060000处,即将bootloader加载到内存的高端地址处。<br /><br />Linux内核将被bootloader加载到0x90090000处。<br /><br /><br /><br />Found boot configuration<br /><br /><br /><br />查找到了启动boot的配置信息<br /><br /><br /><br />Booted from parallel flash<br /><br /><br /><br />从flash中启动代码,此处的flash为并行闪存。Flash的分类列举如下:<br /><br />闪存分三类:并行,串行,不可擦除。<br /><br />①并行Parallel flash<br /><br /> NOR Flash,Intel于1988年发明.随机读取的速度比较快,随机按字节写,每次可以传输8Bit。一般适合应用于数据/程序的存贮应用中.NOR还可以片内执行(execute-in-place)XIP.写入和擦除速度很低。<br /><br /> NAND Flash,1989年,东芝公司发明.是以块和页为单位来读写的,不能随机访问某个指定的点.因而相对来说读取速度较慢,而擦除和写入的速度则比较快,每次可以传输16Bit,一般适用在大容量的多媒体应用中,容量大。如:CF,SM.<br /><br />②串行Serial Flash 是以字节进行传输的,每次可以传输1-2Bit.如:MMC,SD,MS卡.串行闪存器件体积小,引脚也少,成本相对也更低廉。 <br /><br />③不可擦除Mask Rom Flash的特点是一次性录入数据,具有不可更改性,经常运用于游戏和需版权保护文件等的录入。其显著特点是成本低。 <br /><br />注意:任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。<br /><br />从上面的信息,我们可以对flash类型特点有个比较明确的了解。<br /><br /><br /><br />CPU clock rate: 200 MHz<br /><br /><br /><br />开发板上所使用的CPU的主频为200MHZ.<br /><br /><br /><br />DRAM size is 128MB (128MB/0MB)<br /><br /><br /><br />动态内存ram大小为128M。这里我们列举一下内存的类型及工作原理。<br /><br />根据内存的工作原理可以划分出两种内存:DRAM和SRAM<br /><br />①DRAM表示动态随机存取存储器。这是一种以电荷形式进行存储的半导体存储器。DRAM中的每个存储单元由一个晶体管和一个电容器组成。数据存储在电容器中。电容器会由于漏电而导致电荷丢失,因而DRAM器件是不稳定的。为了将数据保存在存储器中,DRAM器件必须有规律地进行刷新。 <br /><br />②SRAM是静态的,因此只要供电它就会保持一个值。一般而言,SRAM 比DRAM要快,这是因为SRAM没有刷新周期。每个SRAM存储单元由6个晶体管组成,而DRAM存储单元由一个晶体管和一个电容器组成。相比而言,DRAM比SRAM每个存储单元的成本要高。照此推理,可以断定在给定的固定区域内DRAM的密度比SRAM 的密度要大。 <br /><br /><br /><br />SRAM常常用于高速缓冲存储器,因为它有更高的速率;而DRAM常常用于PC中的主存储器,因为其拥有更高的密度。 <br /><br />在嵌入式系统中使用DRAM内存的设计比较广泛。<br /><br /><br /><br />地址辅助说明:<br /><br />先说明一下内存地址数字情况,主要是为了方便**。<br /><br />可以访问的内存为4G。<br /><br />0x40000000是1GB处;0x00040000是256K处,0x00020000是128K处,0x90000000是2GB多的地方。<br /><br />1M->0x00100000, <br /><br />2M->0x00200000,<br /><br />8M->0x00800000<br /><br />16M->0x01000000, <br /><br />32M->0x02000000<br /><br />256M->0x10000000<br /><br />64K->0x<br /> <br /> <br /> |
|