新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > uclinux启动过程详细分析

uclinux启动过程详细分析

作者:时间:2018-08-31来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/201808/388126.htm

linux-2.4.22/drivers/char/Pty.c, 在devfs_mk_dir (NULL, “pts”, NULL);时会输出上面的信息。

loop: loaded (max 8 devices)

加载返还块设备驱动,最多支持8个设备。

8139too Fast Ethernet driver 0.9.27

eth0: RealTek RTL8139 at 0x60112000, 00:10:0d:42:a0:03, IRQ 14

eth0: Identified 8139 chip type ‘RTL-8100B/8139D’

网卡驱动,基地址为:0x60112000, MAC地址:00:10:0d:42:a0:03, 中断号:14

从 2.2 版内核升级到 2.4 版时, RTL-8139 支持模块已不再叫 rtl8139,而叫它 8139too,现在你再看到8139too就不会不明白它的来由了吧。

SCSI subsystem driver Revision: 1.00

USB设备信息,USB会被当做SCSI来处理。

mumk_register_tasklet: (1) tasklet 0x905bf9c0 status @0x9025e974

软中断信息输出。Tasklet是在2.4中才出现,它是为了更好地利用多CPU。

Probing XX Flash Memory

探测 XX的闪存(Flash Memory),“NOR NAND Flash Memory Technology”。

Amd/Fujitsu Extended Query Table v1.3 at 0x0040

number of CFI chips: 1

*************************************************************************

AMD与富士通合资设立的Flash供货 商Spansion。AMD因获利不佳,已经退出Flash市场,后续由Spansion合资公司经营。主要生产NOR类型的flash,特点是容量小,速度快。Spansion商标的flash,在我们开发中会经常看到。以后大家看到Spansion的芯片,就能了解到它和AMD还有富士通的来龙去脉 了。

Common flash Interface (CFI)是指一个统一的flash访问接口,表示这种flash是这种接口类型的。

Using buffer write method

使用flash写缓冲方式。

flash 提供了写BUFFER的命令来加快对flash上块的操作。对Flash擦除和写数据是很慢的。如果用写BUFFER的命令会快一点。据手册上说,会快 20倍。Buffer Size :5 bytes的buffer缓冲不是每个块都有,是整个flash只有一个5 bytes的buffer,用写BUFFER命令对所有的块进行写操作,都要用同一个buffer,写Buffer是主要检查buffer是否 available,其实buffer起缓冲作用,来提高工作效率。

比如某flash有128个128K字节块。允许用户对任意块进行字节编程和写缓冲器字节编程操作,每字节编程时间为210μs;若采用写缓冲器字节编程方式,32字节编程共需218μs,每字 节编程时间仅为6.8μs。芯片的块擦除时间为1s,允许在编程或块擦除操作的同时进行悬挂中断去进行读操作,待读操作完成后,写入悬挂恢复命令,再继续编程或块擦除。

Creating 3 MTD partitions on “XX mapped flash”:

0x00000000-0x00020000 : “BootLoader”

0x00020000-0x00040000 : “Config”

0x00040000-0x01000000 : “Romfs”

此处为重要信息部分,需要特别留意。在内存中映射过的flash,创建三个MTD分区:

flash上的内容将被映射到内存中的对应地址

前128K为BootLoader——》0x00000000-0x00020000接着的128K为系统配置信息Config存放的位置——》0x00020000-0x00040000再后面的 16M - 2X128K 为romfs的存放处。——》0x00040000-0x01000000上面的内容,大家可以根据前面的换算公式得到。

A》 编译的bootloader一般大小约50K左右;

B》 在此处就知道了配置信息config是放在第2分区中的;

C》 制作的romfs的大小,一般为8M或10M左右,所以能放得下;

NET4: Linux TCP/IP 1.0 for NET4.0

调用inet_init [ linux-2.4.22/net/ipv4/Af_inet.c ]时的输出信息, 在启动过程中被socket.c调用到。

IP Protocols: ICMP, UDP, TCP, IGMP

列出可以支持的IP协议,此处为kernel源代码inet_add_protocol(p);的输出。在linux启动过程中,都会看到这句的输出。

IP: routing cache hash table of 512 buckets, 4Kbytes

IP路由代码的输出信息。

ip_rt_init [ linux-2.4.22/net/ipv4Route.c ],设置 IP module,路由缓冲hash表

TCP: Hash tables configured (established 8192 bind 8192)

TCP协议初始化输出信息。tcp_init [ linux-2.4.22/net/ipv4/Tcp.c ],

NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.

UNIX网络协议信息。

af_unix_init[ linux-2.4.22/net/unix/Af_unix.c ], 多种连接的一种(IPv4, UNIX domain sockets, IPv6和IrDA)。 SMP 对称多处理器—Symmetrical Multi Processing,这里主要是指UNIX的一些网络协议。

上面的关于网络的输出信息是在linux启动信息中都会出现的。

cramfs: wrong magic

加载各种文件系统。

会出现“cramfs: wrong magic”,别担心这没有什么害处,这个是kernel的书写bug,在2.6中有修改之,它是一个警告信息,用来检查cramfs的superblock超级块的。superblock也是VFS要用到的数据结构。

代码linux-2.4.22/fs/cramfs/Inode.c:

2.4

cramfs_read_super(。。。)

/* Do sanity checks on the superblock */

if (super.magic != CRAMFS_MAGIC) {

/* check at 512 byte offset */

memcpy(super, cramfs_read(sb, 512, sizeof(super)), sizeof(super));

if (super.magic != CRAMFS_MAGIC) {

printk(KERN_ERR “cramfs: wrong magic/n”);

goto out;

}

}

2.6

if (super.magic != CRAMFS_MAGIC) {

if (!silent)

printk(KERN_ERR “cramfs: wrong magic/n”);

goto out;

}

超级块是文件系统的“头部”。它包含文件 系统的状态、尺寸和空闲磁盘块等信息。如果损坏了一个文件系统的超级块(例如不小心直接将数据写到了文件系统的超级块分区中),那么系统可能会完全不识别该文件系统,这样也就不能安装它了,即使采用e2fsck 命令也不能处理这个问题。



关键词: uClinux cpu 控制器

评论


相关推荐

技术专区

关闭