uclinux启动过程详细分析
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 命令也不能处理这个问题。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码