打印
[ZLG-ARM]

好**

[复制链接]
1157|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tmake|  楼主 | 2009-7-7 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘要

我们在这里讨论的是对嵌入式linux系统的启动过程的输出信息的注释,通过我们的讨论,大家会对嵌入式linux启动过程中出现的、以前感觉熟悉的、但却又似是而非的东西有一个确切的了解,并且能了解到这些输出信息的来龙去脉。

嵌入式linux的启动信息是一个很值得我们去好好研究的东西,它能将一幅缩影图呈现在我们面前,来指导我们更加深入地理解linux内核。



关键字:linux,嵌入式,启动,bootloader

正文

作为一名嵌入系统开发者,你一定遇到过下面的情景:

在某论坛上看到一篇帖子,上面贴着嵌入式linux开发板启动时的有关信息,然后大家在帖子里讨论着这个启动过程中出现的问题,随机举例如下:

Linux version 2.4.20-uc0 (root@Local) (gcc version 2.95.3 
20010315 (release)(ColdFire patches - 20010318 from http://f 
(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #20 三 6月 1 
8 00:58:31 CST 2003 
Processor: Samsung S3C4510B revision 6 
Architecture: SNDS100 
On node 0 totalpages: 4096 
zone(0): 0 pages. 
zone(1): 4096 pages. 
zone(2): 0 pages. 
Kernel command line: root=/dev/rom0 
Calibrating delay loop... 49.76 BogoMIPS 
Memory: 16MB = 16MB total 
Memory: 14348KB available (1615K code, 156K data, 40K init) 
Dentry cache hash table entries: 2048 (order: 2, 16384 bytes) 
Inode cache hash table entries: 1024 (order: 1, 
Mount-cache hash table entries: 512 (order: 0, 4096 bytes) 
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) 
Page-cache hash table entries: 4096 (order: 2, 16384 bytes) 
POSIX conformance testing by UNIFIX 
Linux NET4.0 for Linux 2.4 
Based upon Swansea University Computer Society NET3.039 
Initializing RT netlink socket 
Starting kswapd 
Samsung S3C4510 Serial driver version 0.9 (2001-12-27) with no serial options en 
abled 
ttyS00 at 0x3ffd000 (irq = 5) is a S3C4510B 
ttyS01 at 0x3ffe000 (irq = 7) is a S3C451 
Blkmem copyright 1998,1999 D. Jeff Dionne 
Blkmem copyright 1998 Kenneth Albanowski 
Blkmem 1 disk images: 
0: BE558-1A5D57 [VIRTUAL BE558-1A5D57] (RO) 
RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize 
Samsung S3C4510 Ethernet driver version 0.1 (2002-02-20) 
eth0: 00:40:95:36:35:34 
NET4: Linux TCP/IP 1.0 for NET4.0 
IP Protocols: ICMP, UDP, TCP 
IP: routing cache hash table of 512 buckets, 4Kbytes 
TCP: Hash tables configured (established 1024 bind 1024) 
VFS: Mounted root (romfs 
Freeing init memory: 40K



上面的这些输出信息,也可能包括你自己正在做的嵌入式linux开发板的输出信息,其中的每一行,每一个字的含义,你是否深究过,或者说大部分的含义你能确切地知道的?本人想在这里结合本人在实践中一些体会来和广大嵌入式linux的开发者一起读懂这些信息。

我们在这里将以一个真实的嵌入式linux系统的启动过程为例,来分析这些输出信息。启动信息的原始内容将用标记标出,以区别与注释。



嵌入式linux的启动主要分为两个阶段:

①     第一部分bootloader启动阶段

②     第二部分linux 内核初始化和启动阶段

第一节:start_kernel

第二节:用户模式( user_mode )开始,start_kernel结束

第三节:加载linux内核完毕,转入cpu_idle进程



第一部分 : bootloader启动

Boot loader v0.12

NOTE: this boot loader is designed to boot kernels made with the

2.4.xx releases

bootloader for XV

Built at Nov 20 2005 10:12:35



Bootloader头信息,版本,编译时间等,这个因不同的bootloader的设计而有所不同,由此你能看出bootloader的版本信息,有很多使用的是通用的bootloader,如u-boot,redboot等。

Loaded to 0x90060000



将bootloader加载到内存ram中的0x90060000处,即将bootloader加载到内存的高端地址处。

Linux内核将被bootloader加载到0x90090000处。



Found boot configuration



查找到了启动boot的配置信息



Booted from parallel flash



从flash中启动代码,此处的flash为并行闪存。Flash的分类列举如下:

闪存分三类:并行,串行,不可擦除。

①并行Parallel flash

 NOR Flash,Intel于1988年发明.随机读取的速度比较快,随机按字节写,每次可以传输8Bit。一般适合应用于数据/程序的存贮应用中.NOR还可以片内执行(execute-in-place)XIP.写入和擦除速度很低。

 NAND Flash,1989年,东芝公司发明.是以块和页为单位来读写的,不能随机访问某个指定的点.因而相对来说读取速度较慢,而擦除和写入的速度则比较快,每次可以传输16Bit,一般适用在大容量的多媒体应用中,容量大。如:CF,SM.

②串行Serial Flash 是以字节进行传输的,每次可以传输1-2Bit.如:MMC,SD,MS卡.串行闪存器件体积小,引脚也少,成本相对也更低廉。 

③不可擦除Mask Rom Flash的特点是一次性录入数据,具有不可更改性,经常运用于游戏和需版权保护文件等的录入。其显著特点是成本低。 

注意:任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。

从上面的信息,我们可以对flash类型特点有个比较明确的了解。



CPU clock rate: 200 MHz



开发板上所使用的CPU的主频为200MHZ.



DRAM size is 128MB (128MB/0MB)



动态内存ram大小为128M。这里我们列举一下内存的类型及工作原理。

根据内存的工作原理可以划分出两种内存:DRAM和SRAM

①DRAM表示动态随机存取存储器。这是一种以电荷形式进行存储的半导体存储器。DRAM中的每个存储单元由一个晶体管和一个电容器组成。数据存储在电容器中。电容器会由于漏电而导致电荷丢失,因而DRAM器件是不稳定的。为了将数据保存在存储器中,DRAM器件必须有规律地进行刷新。 

②SRAM是静态的,因此只要供电它就会保持一个值。一般而言,SRAM 比DRAM要快,这是因为SRAM没有刷新周期。每个SRAM存储单元由6个晶体管组成,而DRAM存储单元由一个晶体管和一个电容器组成。相比而言,DRAM比SRAM每个存储单元的成本要高。照此推理,可以断定在给定的固定区域内DRAM的密度比SRAM 的密度要大。 



SRAM常常用于高速缓冲存储器,因为它有更高的速率;而DRAM常常用于PC中的主存储器,因为其拥有更高的密度。 

在嵌入式系统中使用DRAM内存的设计比较广泛。



地址辅助说明:

先说明一下内存地址数字情况,主要是为了方便**。

可以访问的内存为4G。

0x40000000是1GB处;0x00040000是256K处,0x00020000是128K处,0x90000000是2GB多的地方。

1M->0x00100000, 

2M->0x00200000,

8M->0x00800000

16M->0x01000000, 

32M->0x02000000

256M->0x10000000

64K->0x
 
   

相关帖子

沙发
postcode| | 2009-7-7 13:21 | 只看该作者

强顶,谢谢

使用特权

评论回复
板凳
chun1chun| | 2009-7-7 13:29 | 只看该作者

好**

使用特权

评论回复
地板
tmake|  楼主 | 2009-7-9 13:29 | 只看该作者

多谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

179

帖子

0

粉丝