上面的這些輸出信息,也可能包括你自己正在做的uclinux開發(fā)板的輸出信息,其中的每一行,每一個(gè)字的含義,你是否深究過,或者說大部分的含義你能確切地知道的?本人想在這里結(jié)合本人在實(shí)踐中一些體會來和廣大uclinux的開發(fā)者一起讀懂這些信息。
我們在這里將以一個(gè)真實(shí)的uclinux系統(tǒng)的啟動過程為例,來分析這些輸出信息。啟動信息的原始內(nèi)容將用標(biāo)記標(biāo)出,以區(qū)別與注釋。
uclinux的啟動主要分為兩個(gè)階段:
?、?第一部分bootloader啟動階段
② ② 第二部分linux 內(nèi)核初始化和啟動階段
第一節(jié):start_kernel
第二節(jié):用戶模式( user_mode )開始,start_kernel結(jié)束
第三節(jié):加載linux內(nèi)核完畢,轉(zhuǎn)入cpu_idle進(jìn)程
第一部分 : bootloader啟動
圖 1:uclinux啟動狀態(tài)轉(zhuǎn)移示意圖
*****************************************************
Boot loader v0.12NOTE: this boot loader is designed to boot kernels made with the2.4.xx releasesbootloader for XVBuilt at Nov 20 2005 10:12:35
Bootloader頭信息,版本,編譯時(shí)間等,這個(gè)因不同的bootloader的設(shè)計(jì)而有所不同,由此你能看出bootloader的版本信息,有很多使用的是通用的bootloader,如u-boot,redboot等。
Loaded to 0x90060000
將bootloader加載到內(nèi)存ram中的0x90060000處,即將bootloader加載到內(nèi)存的高端地址處。
Linux內(nèi)核將被bootloader加載到0x90090000處。
Found boot configuration
查找到了啟動boot的配置信息。
Booted from parallel flash
從flash中啟動代碼,此處的flash為并行閃存。
注意:任何flash器件的寫入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫為0。
從上面的信息,我們可以對flash類型特點(diǎn)有個(gè)比較明確的了解。
CPU clock rate: 200 MHz
開發(fā)板上所使用的CPU的主頻為200MHZ。
DRAM size is 128MB (128MB/0MB)
動態(tài)內(nèi)存ram大小為128M。
在嵌入式系統(tǒng)中使用DRAM內(nèi)存的設(shè)計(jì)比較廣泛。
在uclinux的系統(tǒng)中,系統(tǒng)運(yùn)行時(shí)間較長后,會出現(xiàn)內(nèi)存碎片的問題,導(dǎo)致再分配大塊內(nèi)存時(shí)會失敗。這是在uclinux系統(tǒng)中經(jīng)常遇到的問題,解決的辦法通常有使用靜態(tài)內(nèi)存、應(yīng)用程序啟動時(shí)預(yù)先分配大內(nèi)存、使用內(nèi)存池等。
地址輔助說明:
先說明一下內(nèi)存地址數(shù)字情況,主要是為了方便記憶。
可以訪問的內(nèi)存為4G。0x40000000是1GB處;0x00040000是256K處,0x00020000是128K處,0x90000000是2GB多的地方。1M-》0x00100000, 2M-》0x00200000,8M-》0x00800000,16M-》0x01000000, 32M-》0x02000000,256M-》0x10000000,64K-》0x00010000,注意:rootfs并不是一個(gè)具體的文件系統(tǒng)類型,如jffs。它只是一個(gè)理論上的概念。在具體的嵌入系統(tǒng)實(shí)例中,可以將某種具體的文件系統(tǒng)設(shè)置為根文件系統(tǒng)rootfs,如我們可以設(shè)置romfs為根文件系統(tǒng),也可以設(shè)置jffs為根文件系統(tǒng)。
這里的ROMFS只讀文件系統(tǒng)只是一種具體的文件系統(tǒng)類型,也是在嵌入系統(tǒng)中經(jīng)常使用到的類型。
看完了上面的內(nèi)容,以后你對出現(xiàn)的類似“kernel Panic:VFS:Unable to mount root fs on 0:00”的含義應(yīng)該已經(jīng)了解了。其中“VFS:”就是虛擬文件系統(tǒng)管理器操作時(shí)的輸出信息了。
File linux.bin.gz found
linux kernel內(nèi)核文件名,它是在只讀文件系統(tǒng)romfs上的一個(gè)組成部分。
Unzipping image from 0x4639DE60 to 0x90090000, size = 1316021
將romfs中的linux kernel解壓縮到0x90090000,之后會從這個(gè)內(nèi)存地址啟動內(nèi)核。romfs為壓縮格式文件,使用壓縮的只讀文件系統(tǒng),是為了保持制作出來的整 個(gè)系統(tǒng)所占用的flash空間減小。這個(gè)內(nèi)核的大小為1.3M左右,這也是目前大多數(shù)嵌入系統(tǒng)所使用的方法。
Inptr = 0x00000014(20)Inflating……
釋放……
Outcnt = 0x0030e7c8(3205064)Final Inptr = 0x001414ad(1316013)Original CRC = 0xcbd73adbComputed CRC = 0xcbd73adb
做釋放后的CRC檢查。
Boot kernel at 0x90090000 with ROMFS at 0x46040000
kernel已經(jīng)被從romfs中釋放到內(nèi)存地址0x90090000處,可以跳轉(zhuǎn)到此處啟動kernel了,這里是指定的kernel的起始地址。
Press ‘enter’ to boot
系統(tǒng)等待啟動,后面將看到linux kernel的啟動過程了。
4K-》0x00001000這個(gè)是個(gè)快速記憶的方法,你可以根據(jù)地址中1的位置和其后0的個(gè)數(shù)來快速知道換算后的地址是在多少兆的地方。比如,1的后面5個(gè)0,代表1M的大小,6個(gè)0,代表16M,以此類推。
ROMFS found at 0x46040000, Volume name = rom 43f291aa
romfs,只讀文件系統(tǒng)所在的地址為:0x46040000 (flash映射后的第3分區(qū))。卷名為rom。
romfs 和rootfs概念上有所區(qū)別。flash在內(nèi)存中的的起始地址為0x46000000,而ROMFS在flash分區(qū)上的起始位置為0x00040000,所以ROMFS在內(nèi)存地址中的位置就為0x46040000。這個(gè)細(xì)節(jié)的部分可以參考flash分區(qū)時(shí)的地方,Creating 3 MTD partitions。
romfs中包括kernel和app應(yīng)用,不包括bootloader和firmware信息頭。romfs只讀文件系統(tǒng)里的內(nèi)容有很多種分類方法,我們可以將kernel和app同時(shí)放里面,作為根文件系統(tǒng)下的一個(gè)文件,也可以在flash上另外劃分區(qū)域來分別存放。
*****************************************************************************
第一節(jié):start_kernel
Linux的源代碼可以從 www.kernel.org 得到,或者你可以查看linux代碼交叉引用網(wǎng)站:http://lxr.linux.no/ 進(jìn)行在線的代碼查看,這是一個(gè)很好的工具網(wǎng)站。
在start_kernel中將調(diào)用到大量的init函數(shù),來完成內(nèi)核的各種初始化。如:
圖 2:kernel start up初始化過程
具體內(nèi)容可以參考[http://lxr.linux.no/source/init/main.c]
Linux version 2.4.22-uc0 (root@local) (gcc version 2.95.3 20010315 (release)) #33 。?1…… 20 12:09:106
上面的代碼輸出信息,是跟蹤linux代碼分析后得到的,進(jìn)入init目錄下的main.c的start_kernel啟動函數(shù)。
uclinux使用的是linux內(nèi)核版本為2.4.22。linux source code代碼中start_kernel中輸出的linux_banner信息。這個(gè)信息是每個(gè)linux kernel都會打印一下的信息,如果你沒有把這句去掉的話。
Found bootloader memory map at 0x10000fc0.
bootloader經(jīng)過內(nèi)存映射后的地址為:0x10000fc0, 按上面的地址換算方法,1后面有7個(gè)0,那么虛擬地址256M左右處。
Processor: ARM pt110 revision 0
pT110是ARM微處理器arm核的一種,另一種為pT100。此處為顯示ARM的類型。
On node 0 totalpages: 20480
zone(0): 20480 pages.
zone(0): Set minimum memory threshold to 12288KB
Warning: wrong zone alignment (0x90080000, 0x0000000c, 0x00001000)
zone(1): 0 pages.
zone(2): 0 pages.
預(yù)留內(nèi)存大小,在節(jié)點(diǎn)0上總共20頁, zone(0) 設(shè)置最小內(nèi)存為12MB, zone(1)和zone(2)為0頁。警告:對齊不正確。
Kernel command line: root=/dev/mtdblock3
Kernel 啟動命令設(shè)為:/dev/mtdblock3(在后面的說明中會看到mtdblock3是指的flash上的romfs分區(qū)。),用來指定根文件系統(tǒng)所在的位置,kernel會將塊設(shè)備mtdblock3當(dāng)作文件系統(tǒng)來處理。也就是說,內(nèi)核會根據(jù)上面的kernel命令行,知道只讀文件系統(tǒng)romfs將是 根文件系統(tǒng)rootfs。
start_kernel(void) 中輸出的上面的這句信息。這行命令是在linux內(nèi)核啟動過程中都會輸出的一句。
Console: colour dummy device 80x30
代碼中console_init()的輸出信息, 顯示控制臺屬性:一般使用VGA text console,標(biāo)準(zhǔn)是80 X 25行列的文本控制臺,這里是對屬性進(jìn)行了設(shè)置。
serial_xx: setup_console @ 115
串口設(shè)置值為115200,此為波特率輸出信息。對串口設(shè)置的信息做一個(gè)打印的動作,在調(diào)試時(shí)會非常有用。
Calibrating delay loop…… 82.94 BogoMIPS Calibrate:校準(zhǔn), 進(jìn)入時(shí)延校準(zhǔn)循環(huán)。檢查CPU的MIPS(每秒百萬條指令),Bogo是Bogus(偽)的意思。這里是對CPU進(jìn)行一個(gè)實(shí)時(shí)測試,來得到一個(gè)大體的MIPS數(shù)值。
上面這個(gè)輸出,在所有的linux系統(tǒng)啟動中都會打印出來。
進(jìn)入內(nèi)存初始化:mem_init(void), [arch/i386/mm/init.c]
Memory: 80MB = 80MB totalMemory: 76592KB available (1724K code, 2565K data, 72K init)
當(dāng)前內(nèi)存使用情況,將列出總的內(nèi)存大小, 及分配給內(nèi)核的內(nèi)存大?。喊ùa部分,數(shù)據(jù)部分,初始化部分,總共剛好4M。請留意此處的內(nèi)核的內(nèi)存大小的各個(gè)值。
進(jìn)入虛擬文件系統(tǒng)VFS初始化:vfs_caches_init()
Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
Inode cache hash table entries: 8192 (order: 4, 65536 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 32768 (order: 5, 131072 bytes)
在內(nèi)存中建立各個(gè)緩沖hash表,為kernel對文件系統(tǒng)的訪問做準(zhǔn)備。
VFS(virtual filesystem switch)虛擬文件切換目錄樹有用到類似這樣的結(jié)構(gòu)表。
上面的輸出信息,在一般的linux啟動過程中都會看到。
POSIX conformance testing by UNIFIX
conformance:順應(yīng), 一致。即POSIX適應(yīng)性檢測。UNIFIX是一家德國的技術(shù)公司,Linux 原本要基于 POSIX.1 的, 但是POSIX 不是免費(fèi)的, 而且 POSIX.1 證書相當(dāng)昂貴。 這使得 Linux 基于 POSIX 開發(fā)相當(dāng)困難。 Unifix公司(Braunschweig, 德國) 開發(fā)了一個(gè)獲得了 FIPS 151-2 證書的 Linux 系統(tǒng)。 這種技術(shù)用于 Unifix 的發(fā)行版 Unifix Linux 2.0 和 Lasermoon的 Linux-FT。
在2.6的內(nèi)核中就將上面的這句輸出給拿掉了。
*************************************************************************
第二節(jié):用戶模式( user_mode )開始,start_kernel結(jié)束
圖 3:用戶模式初始化
PCI: bus0: Fast back to back transfers disabled
PCI: Configured XX as a PCI slave with 128MB PCI memory
PCI: Each Region size is 16384KB
PCI: Reserved memory from 0x10080000 to 0x15080000 for DMA and mapped to 0x12000000
設(shè)備的初始化 init()——》do_basic_init()——》pci_init(),初始化PCI,檢測系統(tǒng)的PCI設(shè)備。
Linux NET4.0 for Linux 2.4Based upon Swansea University Computer Society NET3.039
英國威爾士,斯旺西大學(xué)的NET3.039, TCP/IP 協(xié)議棧。
此信息,在linux啟動過程中都會出現(xiàn)。
Initializing RT netlink socket
對Socket的初始化, socket_init(),Netlink 一種路由器管理協(xié)議(linux-2.4.22/net/core/Rtnetlink.c,Routing netlink socket interface: protocol independent part。 其中RT是route路由的意思。這句輸出是在create產(chǎn)生rtnetlink的socket套接字時(shí)的一個(gè)調(diào)試輸出。)
此信息,在linux啟動過程中都會出現(xiàn)。
Starting kswapd
啟動交換守護(hù)進(jìn)程kswapd,進(jìn)程IO操作例程kpiod。
kswapd 可以配合kpiod運(yùn)行。進(jìn)程有時(shí)候無事可做,當(dāng)它運(yùn)行時(shí)也不一定需要把其所有的代碼和數(shù)據(jù)都放在內(nèi)存中。這就意味著我們可以通過把運(yùn)行中程序不用的內(nèi)容切換到交換分區(qū)來更好的是利用內(nèi)存。大約每隔1秒,kswapd醒來并檢查內(nèi)存情況。如果在硬盤的東西要讀入內(nèi)存,或者內(nèi)存可用空間不足,kpiod就會 被調(diào)用來做移入/移出操作。kswapd負(fù)責(zé)檢查,kpiod負(fù)責(zé)移動。
Journalled Block Device driver loaded
加載日志塊設(shè)備驅(qū)動。
日志塊設(shè)備是用來對文件系統(tǒng)進(jìn)行日志記錄的一個(gè)塊設(shè)備。日志文件系統(tǒng)是在傳統(tǒng)文件系統(tǒng)的基礎(chǔ)上,加入文件系統(tǒng)更改的日志記錄。
它 的設(shè)計(jì)思想是:跟蹤記錄文件系統(tǒng)的變化,并將變化內(nèi)容記錄入日志。日志文件系統(tǒng)在磁盤分區(qū)中保存有日志記錄,寫操作首先是對記錄文件進(jìn)行操作,若整個(gè)寫操作由于某種原因(如系統(tǒng)掉電)而中斷,系統(tǒng)重啟時(shí),會根據(jù)日志記錄來恢復(fù)中斷前的寫操作。在日志文件系統(tǒng)中,所有的文件系統(tǒng)的變化都被記錄到日志,每隔一定時(shí)間,文件系統(tǒng)會將更新后的元數(shù)據(jù)及文件內(nèi)容寫入磁盤。在對元數(shù)據(jù)做任何改變以前,文件系統(tǒng)驅(qū)動程序會向日志中寫入一個(gè)條目,這個(gè)條目描述了它將要做些 什么,然后它修改元數(shù)據(jù)。
devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au)devfs: boot_options: 0x1
Devfs模塊的輸出信息。設(shè)備文件系統(tǒng)devfs,版本1.12c
pty: 256 Unix98 ptys configured
Pty模塊的輸出信息,與控制臺操作有關(guān)的設(shè)置。
將通過 devpts 文件系統(tǒng)使用 Unix98 PTYs,(Pseudo-ttys (telnet etc) device是偽ttys設(shè)備的縮寫。
?、?TTY(/dev/tty)是TeleTYpe的一個(gè)老縮寫,為用戶輸入提供不同控制臺的設(shè)備驅(qū)動程序。它的名字來源于實(shí)際掛接到UNIX系統(tǒng)的、被稱為電傳打字機(jī)(teletype)的終端。在Linux下,這些文件提供對虛擬控制臺的支持,可以通過按<Alt-F1>到<Alt -F6>鍵來訪問這些虛擬控制臺。這些虛擬控制臺提供獨(dú)立的、同時(shí)進(jìn)行的本地登錄對話過程② ttys(/dev/ttys)是計(jì)算機(jī)終端的串行接口。/dev/ttyS0對應(yīng)MS-DOS下的 COM1。
使 用 make dev腳本MAKEDEV來建立pty文件。這樣系統(tǒng)內(nèi)核就支持Unix98風(fēng)格的pty了。在進(jìn)行Telnet登錄時(shí)將要用到/dev/pty設(shè)備。 pty是偽終端設(shè)備,在遠(yuǎn)程登錄等需要以終端方式進(jìn)行連接,但又并非真實(shí)終端的應(yīng)用程序中必須使用這種設(shè)備,如telnet或xterm等程序。 Linux 2.2以后增添了UNIX98風(fēng)格的Pty設(shè)備,它使用一個(gè)新的文件系統(tǒng)(devpts針對偽終端的文件系統(tǒng))和一個(gè)克隆的設(shè)備cloning device來實(shí)現(xiàn)其功能。
linux-2.4.22/drivers/char/Pty.c, 在devfs_mk_dir (NULL, “pts”, NULL);時(shí)會輸出上面的信息。
loop: loaded (max 8 devices)
加載返還塊設(shè)備驅(qū)動,最多支持8個(gè)設(shè)備。
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)卡驅(qū)動,基地址為:0x60112000, MAC地址:00:10:0d:42:a0:03, 中斷號:14
從 2.2 版內(nèi)核升級到 2.4 版時(shí), RTL-8139 支持模塊已不再叫 rtl8139,而叫它 8139too,現(xiàn)在你再看到8139too就不會不明白它的來由了吧。
SCSI subsystem driver Revision: 1.00
USB設(shè)備信息,USB會被當(dāng)做SCSI來處理。
mumk_register_tasklet: (1) tasklet 0x905bf9c0 status @0x9025e974
軟中斷信息輸出。Tasklet是在2.4中才出現(xiàn),它是為了更好地利用多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與富士通合資設(shè)立的Flash供貨 商Spansion。AMD因獲利不佳,已經(jīng)退出Flash市場,后續(xù)由Spansion合資公司經(jīng)營。主要生產(chǎn)NOR類型的flash,特點(diǎn)是容量小,速度快。Spansion商標(biāo)的flash,在我們開發(fā)中會經(jīng)??吹健R院蟠蠹铱吹絊pansion的芯片,就能了解到它和AMD還有富士通的來龍去脈 了。
Common flash Interface (CFI)是指一個(gè)統(tǒng)一的flash訪問接口,表示這種flash是這種接口類型的。
Using buffer write method
使用flash寫緩沖方式。
flash 提供了寫B(tài)UFFER的命令來加快對flash上塊的操作。對Flash擦除和寫數(shù)據(jù)是很慢的。如果用寫B(tài)UFFER的命令會快一點(diǎn)。據(jù)手冊上說,會快 20倍。Buffer Size :5 bytes的buffer緩沖不是每個(gè)塊都有,是整個(gè)flash只有一個(gè)5 bytes的buffer,用寫B(tài)UFFER命令對所有的塊進(jìn)行寫操作,都要用同一個(gè)buffer,寫B(tài)uffer是主要檢查buffer是否 available,其實(shí)buffer起緩沖作用,來提高工作效率。
比如某flash有128個(gè)128K字節(jié)塊。允許用戶對任意塊進(jìn)行字節(jié)編程和寫緩沖器字節(jié)編程操作,每字節(jié)編程時(shí)間為210μs;若采用寫緩沖器字節(jié)編程方式,32字節(jié)編程共需218μs,每字 節(jié)編程時(shí)間僅為6.8μs。芯片的塊擦除時(shí)間為1s,允許在編程或塊擦除操作的同時(shí)進(jìn)行懸掛中斷去進(jìn)行讀操作,待讀操作完成后,寫入懸掛恢復(fù)命令,再繼續(xù)編程或塊擦除。
Creating 3 MTD partitions on “XX mapped flash”:
0x00000000-0x00020000 : “BootLoader”
0x00020000-0x00040000 : “Config”
0x00040000-0x01000000 : “Romfs”
此處為重要信息部分,需要特別留意。在內(nèi)存中映射過的flash,創(chuàng)建三個(gè)MTD分區(qū):
flash上的內(nèi)容將被映射到內(nèi)存中的對應(yīng)地址
前128K為BootLoader——》0x00000000-0x00020000接著的128K為系統(tǒng)配置信息Config存放的位置——》0x00020000-0x00040000再后面的 16M - 2X128K 為romfs的存放處。——》0x00040000-0x01000000上面的內(nèi)容,大家可以根據(jù)前面的換算公式得到。
A》 編譯的bootloader一般大小約50K左右;
B》 在此處就知道了配置信息config是放在第2分區(qū)中的;
C》 制作的romfs的大小,一般為8M或10M左右,所以能放得下;
NET4: Linux TCP/IP 1.0 for NET4.0
調(diào)用inet_init [ linux-2.4.22/net/ipv4/Af_inet.c ]時(shí)的輸出信息, 在啟動過程中被socket.c調(diào)用到。
IP Protocols: ICMP, UDP, TCP, IGMP
列出可以支持的IP協(xié)議,此處為kernel源代碼inet_add_protocol(p);的輸出。在linux啟動過程中,都會看到這句的輸出。
IP: routing cache hash table of 512 buckets, 4Kbytes
IP路由代碼的輸出信息。
ip_rt_init [ linux-2.4.22/net/ipv4\Route.c ],設(shè)置 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 對稱多處理器—Symmetrical Multi Processing,這里主要是指UNIX的一些網(wǎng)絡(luò)協(xié)議。
上面的關(guān)于網(wǎng)絡(luò)的輸出信息是在linux啟動信息中都會出現(xiàn)的。
cramfs: wrong magic
加載各種文件系統(tǒng)。
會出現(xiàn)“cramfs: wrong magic”,別擔(dān)心這沒有什么害處,這個(gè)是kernel的書寫bug,在2.6中有修改之,它是一個(gè)警告信息,用來檢查cramfs的superblock超級塊的。superblock也是VFS要用到的數(shù)據(jù)結(jié)構(gòu)。
代碼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ǒng)的“頭部”。它包含文件 系統(tǒng)的狀態(tài)、尺寸和空閑磁盤塊等信息。如果損壞了一個(gè)文件系統(tǒng)的超級塊(例如不小心直接將數(shù)據(jù)寫到了文件系統(tǒng)的超級塊分區(qū)中),那么系統(tǒng)可能會完全不識別該文件系統(tǒng),這樣也就不能安裝它了,即使采用e2fsck 命令也不能處理這個(gè)問題。
**************************************************************************
RamDisk有三種實(shí)現(xiàn)方式。
評論
查看更多