uclinux啟動(dòng)過(guò)程詳細分析
linux-2.4.22/drivers/char/Pty.c, 在devfs_mk_dir (NULL, “pts”, NULL);時(shí)會(huì )輸出上面的信息。
loop: loaded (max 8 devices)
加載返還塊設備驅動(dòng),最多支持8個(gè)設備。
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’
網(wǎng)卡驅動(dòng),基地址為:0x60112000, MAC地址:00:10:0d:42:a0:03, 中斷號:14
從 2.2 版內核升級到 2.4 版時(shí), RTL-8139 支持模塊已不再叫 rtl8139,而叫它 8139too,現在你再看到8139too就不會(huì )不明白它的來(lái)由了吧。
SCSI subsystem driver Revision: 1.00
USB設備信息,USB會(huì )被當做SCSI來(lái)處理。
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因獲利不佳,已經(jīng)退出Flash市場(chǎng),后續由Spansion合資公司經(jīng)營(yíng)。主要生產(chǎn)NOR類(lèi)型的flash,特點(diǎn)是容量小,速度快。Spansion商標的flash,在我們開(kāi)發(fā)中會(huì )經(jīng)??吹?。以后大家看到Spansion的芯片,就能了解到它和AMD還有富士通的來(lái)龍去脈 了。
Common flash Interface (CFI)是指一個(gè)統一的flash訪(fǎng)問(wèn)接口,表示這種flash是這種接口類(lèi)型的。
Using buffer write method
使用flash寫(xiě)緩沖方式。
flash 提供了寫(xiě)BUFFER的命令來(lái)加快對flash上塊的操作。對Flash擦除和寫(xiě)數據是很慢的。如果用寫(xiě)BUFFER的命令會(huì )快一點(diǎn)。據手冊上說(shuō),會(huì )快 20倍。Buffer Size :5 bytes的buffer緩沖不是每個(gè)塊都有,是整個(gè)flash只有一個(gè)5 bytes的buffer,用寫(xiě)BUFFER命令對所有的塊進(jìn)行寫(xiě)操作,都要用同一個(gè)buffer,寫(xiě)Buffer是主要檢查buffer是否 available,其實(shí)buffer起緩沖作用,來(lái)提高工作效率。
比如某flash有128個(gè)128K字節塊。允許用戶(hù)對任意塊進(jìn)行字節編程和寫(xiě)緩沖器字節編程操作,每字節編程時(shí)間為210μs;若采用寫(xiě)緩沖器字節編程方式,32字節編程共需218μs,每字 節編程時(shí)間僅為6.8μs。芯片的塊擦除時(shí)間為1s,允許在編程或塊擦除操作的同時(shí)進(jìn)行懸掛中斷去進(jìn)行讀操作,待讀操作完成后,寫(xiě)入懸掛恢復命令,再繼續編程或塊擦除。
Creating 3 MTD partitions on “XX mapped flash”:
0x00000000-0x00020000 : “BootLoader”
0x00020000-0x00040000 : “Config”
0x00040000-0x01000000 : “Romfs”
此處為重要信息部分,需要特別留意。在內存中映射過(guò)的flash,創(chuàng )建三個(gè)MTD分區:
flash上的內容將被映射到內存中的對應地址
前128K為BootLoader——》0x00000000-0x00020000接著(zhù)的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 ]時(shí)的輸出信息, 在啟動(dòng)過(guò)程中被socket.c調用到。
IP Protocols: ICMP, UDP, TCP, IGMP
列出可以支持的IP協(xié)議,此處為kernel源代碼inet_add_protocol(p);的輸出。在linux啟動(dòng)過(guò)程中,都會(huì )看到這句的輸出。
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協(xié)議初始化輸出信息。tcp_init [ linux-2.4.22/net/ipv4/Tcp.c ],
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
UNIX網(wǎng)絡(luò )協(xié)議信息。
af_unix_init[ linux-2.4.22/net/unix/Af_unix.c ], 多種連接的一種(IPv4, UNIX domain sockets, IPv6和IrDA)。 SMP 對稱(chēng)多處理器—Symmetrical Multi Processing,這里主要是指UNIX的一些網(wǎng)絡(luò )協(xié)議。
上面的關(guān)于網(wǎng)絡(luò )的輸出信息是在linux啟動(dòng)信息中都會(huì )出現的。
cramfs: wrong magic
加載各種文件系統。
會(huì )出現“cramfs: wrong magic”,別擔心這沒(méi)有什么害處,這個(gè)是kernel的書(shū)寫(xiě)bug,在2.6中有修改之,它是一個(gè)警告信息,用來(lái)檢查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;
}
超級塊是文件系統的“頭部”。它包含文件 系統的狀態(tài)、尺寸和空閑磁盤(pán)塊等信息。如果損壞了一個(gè)文件系統的超級塊(例如不小心直接將數據寫(xiě)到了文件系統的超級塊分區中),那么系統可能會(huì )完全不識別該文件系統,這樣也就不能安裝它了,即使采用e2fsck 命令也不能處理這個(gè)問(wèn)題。
評論