嵌入式根文件系統(tǒng)制作(常見問題詳解)
出處:互聯(lián)網(wǎng) 發(fā)布于:2011-09-04 18:55:43
首先我們先來了解一下什么是init,對(duì)它有個(gè)初步的了解.
一、什么是init
init是Linux系統(tǒng)操作中不可缺少的程序之一。 是一個(gè)由內(nèi)核啟動(dòng)的用戶級(jí)進(jìn)程。
內(nèi)核啟動(dòng)(已經(jīng)被載入內(nèi)存,開始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過啟動(dòng)一個(gè)用戶級(jí)程序init的方式來啟動(dòng)其他用戶級(jí)的進(jìn)程或服務(wù)。所以,init始終是個(gè)進(jìn)程(其PID始終為1)。
內(nèi)核會(huì)在過去曾使用過init的幾個(gè)地方查找它,它的正確位置(對(duì)Linux系統(tǒng)來說)是/sbin/init.如果內(nèi)核找不到init,它就會(huì)試著運(yùn)行/bin/sh,如果運(yùn)行失敗,系統(tǒng)的啟動(dòng)也會(huì)失敗。
二、運(yùn)行級(jí)別
運(yùn)行級(jí)就是操作系統(tǒng)當(dāng)前正在運(yùn)行的功能級(jí)別。這個(gè)級(jí)別從1到6,具有不同的功能。其功能級(jí)別如下:# 0 - 停機(jī)(千萬不能把initdefault 設(shè)置為0 )
除此之外還有ABC三個(gè)運(yùn)行級(jí)別,但在RHLinux中都沒有意義。
這些級(jí)別在/etc/inittab 文件里指定。這個(gè)文件是init 程序?qū)ふ业闹饕募\(yùn)行的服務(wù)是放在/etc/rc.d 目錄下的文件。在大多數(shù)的Linux 發(fā)行版本中,啟動(dòng)腳本都是位于 /etc/rc.d/init.d中的。這些腳本被用ln 命令連接到 /etc/rc.d/rcn.d 目錄。(這里的n 就是運(yùn)行級(jí)0-6)
三、運(yùn)行級(jí)別的配置
運(yùn)行級(jí)別的配置是在/etc/inittab行內(nèi)進(jìn)行的,如下所示:12 : 2 : wait : / etc / init.d / rc 2各字段解釋如下:id:runlevels:action:process id:是一個(gè)任意指定的四個(gè)字符以內(nèi)的序列標(biāo)號(hào),在本文件內(nèi)必須;使用老版本的libc5(低于5.2.18)或a.out庫編譯出來的sysvinit限制為2字符。注意:像getty之類的登陸進(jìn)程必須使id字段與tty編號(hào)一致,如tty1需要id=1,許多老版本的登陸進(jìn)程都遵循這種規(guī)則。
runlevels:表示這一行適用于運(yùn)行那個(gè)/些級(jí)別(這里是2,可以有多個(gè),表示在相應(yīng)的運(yùn)行級(jí)均需要運(yùn)行);另外sysinit、boot、bootwait這三個(gè)進(jìn)程會(huì)忽略這個(gè)設(shè)置值。
action:表示進(jìn)入對(duì)應(yīng)的runlevels時(shí),init應(yīng)該運(yùn)行process字段的命令的方式,常用的字段值及解釋在附錄內(nèi)。例子中的wait表示需要運(yùn)行這個(gè)進(jìn)程并等待其結(jié)束。
process:具體應(yīng)該執(zhí)行的命令。例子中的/etc/init.d/rc命令啟動(dòng)運(yùn)行級(jí)別2中應(yīng)該運(yùn)行的進(jìn)程/命令,并負(fù)責(zé)在退出運(yùn)行級(jí)時(shí)將其終止(當(dāng)然在進(jìn)入的runlevel中仍要運(yùn)行的程序除外。)
當(dāng)運(yùn)行級(jí)別改變,并且正在運(yùn)行的程序并沒有在新的運(yùn)行級(jí)別中指定需要運(yùn)行,那么init會(huì)先發(fā)送一個(gè)SIGTERM 信號(hào)終止,然后是SIGKILL.
action字段告訴init執(zhí)行的動(dòng)作,即如何處理process字段指定的進(jìn)程,action字段允許的值及對(duì)應(yīng)的動(dòng)作分別為:
1)respawn:如果process字段指定的進(jìn)程不存在,則啟動(dòng)該進(jìn)程,init不等待處理結(jié)束,而是繼續(xù)掃描inittab文件中的后續(xù)進(jìn)程,當(dāng)這樣的進(jìn)程終止時(shí),init會(huì)重新啟動(dòng)它,如果這樣的進(jìn)程已存在,則什么也不做。
2)wait:啟動(dòng)process字段指定的進(jìn)程,并等到處理結(jié)束才去處理inittab中的下一記錄項(xiàng)。
3)once:啟動(dòng)process字段指定的進(jìn)程,不等待處理結(jié)束就去處理下一記錄項(xiàng)。當(dāng)這樣的進(jìn)程終止時(shí),也不再重新啟動(dòng)它,在進(jìn)入新的運(yùn)行級(jí)別時(shí),如果這樣的進(jìn)程仍在運(yùn)行,init也不重新啟動(dòng)它。
4)boot:只有在系統(tǒng)啟動(dòng)時(shí),init才處理這樣的記錄項(xiàng),啟動(dòng)相應(yīng)進(jìn)程,并不等待處理結(jié)束就去處理下一個(gè)記錄項(xiàng)。當(dāng)這樣的進(jìn)程終止時(shí),系統(tǒng)也不重啟它。
5)bootwait:系統(tǒng)啟動(dòng)后,當(dāng)次從單用戶模式進(jìn)入多用戶模式時(shí)處理這樣的記錄項(xiàng),init啟動(dòng)這樣的進(jìn)程,并且等待它的處理結(jié)束,然后再進(jìn)行下一個(gè)記錄項(xiàng)的處理,當(dāng)這樣的進(jìn)程終止時(shí),系統(tǒng)也不重啟它。
6)powerfail:當(dāng)init接到斷電的信號(hào)(SIGPWR)時(shí),處理指定的進(jìn)程。
7)powerwait:當(dāng)init接到斷電的信號(hào)(SIGPWR)時(shí),處理指定的進(jìn)程,并且等到處理結(jié)束才去檢查其他的記錄項(xiàng)。
8)off:如果指定的進(jìn)程正在運(yùn)行,init就給它發(fā)SIGTERM警告信號(hào),在向它發(fā)出信號(hào)SIGKILL強(qiáng)制其結(jié)束之前等待5秒,如果這樣的進(jìn)程不存在,則忽略這一項(xiàng)。
9)ondemand:功能通respawn,不同的是,與具體的運(yùn)行級(jí)別無關(guān),只用于rstate字段是a、b、c的那些記錄項(xiàng)。
10)sysinit:指定的進(jìn)程在訪問控制臺(tái)之前執(zhí)行,這樣的記錄項(xiàng)僅用于對(duì)某些設(shè)備的初始化,目的是為了使init在這樣的設(shè)備上向用戶提問有關(guān)運(yùn)行級(jí)別的問題,init需要等待進(jìn)程運(yùn)行結(jié)束后才繼續(xù)。
11)initdefault:指定一個(gè)默認(rèn)的運(yùn)行級(jí)別,只有當(dāng)init一開始被調(diào)用時(shí)才掃描這一
init進(jìn)程是系統(tǒng)中所有進(jìn)程的父進(jìn)程,init進(jìn)程繁衍出完成通常操作所需的子進(jìn)程,這些操作包括:設(shè)置機(jī)器名、檢查和安裝磁盤及文件系統(tǒng)、啟動(dòng)系統(tǒng)日志、配置網(wǎng)絡(luò)接口并啟動(dòng)網(wǎng)絡(luò)和郵件服務(wù),啟動(dòng)打印服務(wù)等。Solaris中init進(jìn)程的主要任務(wù)是按照inittab文件所提供的信息創(chuàng)建進(jìn)程,由于進(jìn)行系統(tǒng)初始化的那些進(jìn)程都由init創(chuàng)建,所以init進(jìn)程也稱為系統(tǒng)初始化進(jìn)程。
另外:在任何時(shí)候,可以在文件inittab中添加新的記錄項(xiàng),級(jí)別Q/q不改變當(dāng)前的運(yùn)行級(jí)別,重新檢查inittab文件,可以通過命令init Q或init q使init進(jìn)程立即重新讀取并處理文件inittab
補(bǔ)充:
1、關(guān)于進(jìn)入單用戶模式,一般都是采用設(shè)置initdefault為1或者在grub/lilo中指定一個(gè)“single”或“emergency” 命令行參數(shù)來實(shí)現(xiàn)。其實(shí)另外還有一個(gè)更干凈的方法,編輯:kernel /vmlinuz-2.6.9-22.EL ro root=/bin/sh,這樣init就直接啟動(dòng)一個(gè)shell,其他任何進(jìn)程都沒有啟動(dòng)哦,夠干凈吧!
2、系統(tǒng)正在運(yùn)行時(shí),telinit命令可更改運(yùn)行級(jí)別。運(yùn)行級(jí)別發(fā)生變化時(shí), init 就會(huì)從/etc/inittab運(yùn)行相應(yīng)的命令
inittab文件的格式。
inittab文件中每一記錄都從新的一行開始,每個(gè)記錄項(xiàng)多可有512個(gè)字符,每一項(xiàng)的格式通常如下:id:rstate:action:process,下面分別解釋。
1.id字段是多4個(gè)字符的字符串,用來標(biāo)志表項(xiàng)。
2.rstate(run state)字段定義該記錄項(xiàng)被調(diào)用時(shí)的運(yùn)行級(jí)別,rstate可以由一個(gè)或多個(gè)運(yùn)行級(jí)別構(gòu)成,也可以是空,空則代表運(yùn)行級(jí)別0~6。當(dāng)請(qǐng)求init改變運(yùn)行級(jí)別時(shí),那些rstate字段中不包括新運(yùn)行級(jí)別的進(jìn)程將收到SIGTERM警告信號(hào),并且被殺死;只有a、b、c啟動(dòng)的命令外(a、b、c不是真正的運(yùn)行級(jí)別)
3.action字段告訴init執(zhí)行的動(dòng)作,即如何處理process字段指定的進(jìn)程,action字段允許的值及對(duì)應(yīng)的動(dòng)作分別為:
1)respawn:如果process字段指定的進(jìn)程不存在,則啟動(dòng)該進(jìn)程,init不等待處理結(jié)束,而是繼續(xù)掃描inittab文件中的后續(xù)進(jìn)程,當(dāng)這樣的進(jìn)程終止時(shí),init會(huì)重新啟動(dòng)它,如果這樣的進(jìn)程已存在,則什么也不做。
2)wait:啟動(dòng)process字段指定的進(jìn)程,并等到處理結(jié)束才去處理inittab中的下一記錄項(xiàng)。
3)once:啟動(dòng)process字段指定的進(jìn)程,不等待處理結(jié)束就去處理下一記錄項(xiàng)。當(dāng)這樣的進(jìn)程終止時(shí),也不再重新啟動(dòng)它,在進(jìn)入新的運(yùn)行級(jí)別時(shí),如果這樣的進(jìn)程仍在運(yùn)行,init也不重新啟動(dòng)它。
4)boot:只有在系統(tǒng)啟動(dòng)時(shí),init才處理這樣的記錄項(xiàng),啟動(dòng)相應(yīng)進(jìn)程,并不等待處理結(jié)束就去處理下一個(gè)記錄項(xiàng)。當(dāng)這樣的進(jìn)程終止時(shí),系統(tǒng)也不重啟它。
5)bootwait:系統(tǒng)啟動(dòng)后,當(dāng)次從單用戶模式進(jìn)入多用戶模式時(shí)處理這樣的記錄項(xiàng),init啟動(dòng)這樣的進(jìn)程,并且等待它的處理結(jié)束,然后再進(jìn)行下一個(gè)記錄項(xiàng)的處理,當(dāng)這樣的進(jìn)程終止時(shí),系統(tǒng)也不重啟它。
6)powerfail:當(dāng)init接到斷電的信號(hào)(SIGPWR)時(shí),處理指定的進(jìn)程。
7)powerwait:當(dāng)init接到斷電的信號(hào)(SIGPWR)時(shí),處理指定的進(jìn)程,并且等到處理結(jié)束才去檢查其他的記錄項(xiàng)。
8)off:如果指定的進(jìn)程正在運(yùn)行,init就給它發(fā)SIGTERM警告信號(hào),在向它發(fā)出信號(hào)SIGKILL強(qiáng)制其結(jié)束之前等待5秒,如果這樣的進(jìn)程不存在,則忽略這一項(xiàng)。
9)ondemand:功能通respawn,不同的是,與具體的運(yùn)行級(jí)別無關(guān),只用于rstate字段是a、b、c的那些記錄項(xiàng)。
10)sysinit:指定的進(jìn)程在訪問控制臺(tái)之前執(zhí)行,這樣的記錄項(xiàng)僅用于對(duì)某些設(shè)備的初始化,目的是為了使init在這樣的設(shè)備上向用戶提問有關(guān)運(yùn)行級(jí)別的問題,init需要等待進(jìn)程運(yùn)行結(jié)束后才繼續(xù)。
11)initdefault:指定一個(gè)默認(rèn)的運(yùn)行級(jí)別,只有當(dāng)init一開始被調(diào)用時(shí)才掃描這一項(xiàng),如果rstate字段指定了多個(gè)運(yùn)行級(jí)別,其中的數(shù)字是默認(rèn)的運(yùn)行級(jí)別,如果rstate字段是空的,init認(rèn)為字段是0123456,于是進(jìn)入級(jí)別6,這樣便陷入了一個(gè)循環(huán),如果 inittab文件中沒有包含initdefault的記錄項(xiàng),則在系統(tǒng)啟動(dòng)時(shí)請(qǐng)求用戶為它指定一個(gè)初始運(yùn)行級(jí)別
4.Process字段中進(jìn)程可以是任意的守候進(jìn)程、可執(zhí)行腳本或程序。
以上這些都是介紹的標(biāo)準(zhǔn)的linux System V的標(biāo)準(zhǔn),所以對(duì)嵌入式來講有些東西并不見得有用!這里介紹點(diǎn)針對(duì)嵌入式的,也就是針對(duì)busybox init的:
busybox的init
1. 為init設(shè)置信號(hào)處理過程
2. 初始化控制臺(tái)
3. 剖析/etc/inittab文件
4. 執(zhí)行系統(tǒng)初始化命令行,缺省情況下會(huì)使用/etc/init.d/rcS
5. 執(zhí)行所有導(dǎo)致init暫停的inittab命令(動(dòng)作類型:wait)
6. 執(zhí)行所有僅執(zhí)行的inittab(動(dòng)作類型:once)
一旦完成以上工作,init進(jìn)程便會(huì)循環(huán)執(zhí)行以下進(jìn)程:
1. 執(zhí)行所有終止時(shí)必須重新啟動(dòng)的inittab命令(動(dòng)作類型:once)
2. 執(zhí)行所有終止時(shí)必須重新啟動(dòng)但啟動(dòng)前必須詢問用戶的inittab命令(動(dòng)作類型:askfirst)
初始化控制臺(tái)之后,BusyBox會(huì)檢查/etc/inittab文件是否存在,如果此文件不存在,BusyBox會(huì)使用缺省的inittab配置,它主要為系統(tǒng)重引導(dǎo),系統(tǒng)掛起以及init重啟動(dòng)設(shè)置缺省的動(dòng)作,此外它還會(huì)為四個(gè)虛擬控制臺(tái)(tty1到tty4)設(shè)置啟動(dòng)shell的動(dòng)作。如果未建立這些設(shè)備文件,BusyBox會(huì)報(bào)錯(cuò)。
inittab文件中每一行的格式如下所示:(busybox的根目錄下的example文件夾下有詳盡的inittab文件范例)
id:runlevel:action:process
盡管此格式與傳統(tǒng)的Sytem V init類似,但是,id在BusyBox的init中具有不同的意義。對(duì)BusyBox而言,id用來指定啟動(dòng)進(jìn)程的控制tty。如果所啟動(dòng)的進(jìn)程并不是可以交互的shell,例如BusyBox的sh(ash),應(yīng)該會(huì)有個(gè)控制tty,如果控制tty不存在,Busybox的sh會(huì)報(bào)錯(cuò)。BusyBox將會(huì)完全忽略runlevel字段,所以空著它就行了,你也許會(huì)問既然沒用保留著它干嗎,我想大概是為了和傳統(tǒng)的Sytem V init保持一致的格式吧。process字段用來指定所執(zhí)行程式的路徑,包括命令行選項(xiàng)。action字段用來指定下面表中8個(gè)可應(yīng)用到process的動(dòng)作之一。
sysinit: 為init提供初始化命令行的路徑
respawn: 每當(dāng)相應(yīng)的進(jìn)程終止執(zhí)行便會(huì)重新啟動(dòng)
askfirst: 類似respawn,不過它的主要用途是減少系統(tǒng)上執(zhí)行的終端應(yīng)用程序的數(shù)量。它將會(huì)促使init在控制臺(tái)上顯示“Please press Enter to active this console”的信息,并在重新啟動(dòng)之前等待用戶按下enter鍵
wait: 告訴init必須等到相應(yīng)的進(jìn)程完成之后才能繼續(xù)執(zhí)行
once:僅執(zhí)行相應(yīng)的進(jìn)程,而且不會(huì)等待它完成
ctratldel: 當(dāng)按下Ctrl+Alt+Delete組合鍵時(shí),執(zhí)行相應(yīng)的進(jìn)程
shutdown: 當(dāng)系統(tǒng)關(guān)機(jī)時(shí),執(zhí)行相應(yīng)的進(jìn)程
restart: 當(dāng)init重新啟動(dòng)時(shí),執(zhí)行相應(yīng)的進(jìn)程,通常此處所執(zhí)行的進(jìn)程就是init本身
以下是我的usblinux的inittab文件
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty 115200 tty1
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/bin/umount -a -r
這個(gè)inittab執(zhí)行下列動(dòng)作
1. 將/etc/init.d/rcS設(shè)置成系統(tǒng)的初始化文件
2. 在115200 bps的虛擬終端tty1上啟動(dòng)一個(gè)登陸會(huì)話 (注意getty的用法)
3. 在虛擬終端tty2和tty3上啟動(dòng)askfirst動(dòng)作的shell
4. 如果init重新啟動(dòng),將/sbin/init設(shè)置成它會(huì)執(zhí)行的程序
5. 告訴init,在系統(tǒng)關(guān)機(jī)的時(shí)候執(zhí)行umount命令卸載所有文件系統(tǒng),并且在卸載失敗時(shí)用只讀模式?jīng)_新安裝以保護(hù)文件系統(tǒng)。
1、busybox的inittab與pc使用的inittab不同,ID并不是隨便取名字的,這個(gè)名字要與/dev/目錄下是否有對(duì)應(yīng)的文件對(duì)應(yīng)
對(duì)應(yīng)錯(cuò)誤
can't open /dev/0: No such file or directory
process '-/bin/sh' (pid 789) exited. Scheduling for restart.
can't open /dev/0: No such file or directory
process '-/bin/sh' (pid 793) exited. Scheduling for restart.
2、出現(xiàn)下面這種錯(cuò)誤:
process '-/bin/sh' (pid 789) exited. Scheduling for restart.
process '-/bin/sh' (pid 794) exited. Scheduling for restart.
process '-/bin/sh' (pid 796) exited. Scheduling for restart.
process '-/bin/sh' (pid 798) exited. Scheduling for restart.
對(duì)應(yīng)的inittab文件中有
ttyS0::askfirst:-/bin/sh
雖然在/dev/目錄下有ttyS0設(shè)備,但是這個(gè)設(shè)備顯然不可用,所以才會(huì)出現(xiàn)上面的錯(cuò)誤
3、當(dāng)在inittab中同時(shí)定義的兩個(gè)在同一個(gè)串口終端登陸的語句時(shí)
::askfirst:-/bin/sh
s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100
出現(xiàn)的情況就是被搶占,不能接收任何串口輸入
4、bad inittab entry
多半時(shí)因?yàn)榉欠ㄗ址斐傻摹?BR>
[next]
5、busybox中的字段runleve也沒有運(yùn)行時(shí)的運(yùn)行級(jí)別的概念
6、分析一下啟動(dòng)的過程
1. 為init設(shè)置信號(hào)處理過程
2. 初始化控制臺(tái)
3. 剖析/etc/inittab文件
4. 執(zhí)行系統(tǒng)初始化命令行,缺省情況下會(huì)使用/etc/init.d/rcS
5. 執(zhí)行所有導(dǎo)致init暫停的inittab命令(動(dòng)作類型:wait)
6. 執(zhí)行所有僅執(zhí)行的inittab(動(dòng)作類型:once)
一旦完成以上工作,init進(jìn)程便會(huì)循環(huán)執(zhí)行以下進(jìn)程:
1. 執(zhí)行所有終止時(shí)必須重新啟動(dòng)的inittab命令(動(dòng)作類型:once)
2. 執(zhí)行所有終止時(shí)必須重新啟動(dòng)但啟動(dòng)前必須詢問用戶的inittab命令(動(dòng)作類型:askfirst)
初始化控制臺(tái)之后,BusyBox會(huì)檢查/etc/inittab文件是否存在,如果此文件不存在,BusyBox會(huì)使用缺省的inittab配置,它主要為系統(tǒng)重引導(dǎo),系統(tǒng)掛起以及init重啟動(dòng)設(shè)置缺省的動(dòng)作,此外它還會(huì)為四個(gè)虛擬控制臺(tái)(tty1到tty4)設(shè)置啟動(dòng)shell的動(dòng)作。如果未建立這些設(shè)備文件,BusyBox會(huì)報(bào)錯(cuò)。
7“-”的作用
測試的時(shí)候是這樣的,加上“-”的語句會(huì)在登陸終端之后調(diào)用/etc/目錄下的profile文件,而不加“-”的不會(huì)執(zhí)行這個(gè)腳本。
其實(shí)登陸終端的命令有幾種方便,但是標(biāo)準(zhǔn)的還是使用getty來登陸,但是直接使用如上的語句也是可以的,并且兼容性強(qiáng)一點(diǎn),因?yàn)樗恍枰付▽?duì)應(yīng)的串口設(shè)備。
::askfirst:-/bin/sh
s3c2410_serial0::askfirst:-/bin/sh
::askfirst:-/bin/sh
s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100
都是可用的。
8./bin/sh: XXX not found
arm-linux-readelf -d xxx
查看你的以用程序依賴哪些庫
一般是因?yàn)槿鄙賚ibc.so.6造成的,實(shí)際還是根文件系統(tǒng)的問題,沒有將常用的庫文件拷貝到/lib目錄下
常用的庫:
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/ld* .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libm * .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt* .
9、錯(cuò)誤insmod: chdir(2.6.26.6): No such file or directory
根本原因是insmod的問題,在busybox編譯的時(shí)候參考下面的選項(xiàng),不要使用
Linux Module Utilities --->
[ ] Simplified modutils
//該選項(xiàng)不要選擇
[*] Support version 2.6.x Linux kernels
//此選項(xiàng)選上
參考如下:
10、不能執(zhí)行“-h”命令
在執(zhí)行xxx –h時(shí)沒有任何反應(yīng)。是在lib目錄下缺少常見的庫文件
參考如下:
[root@vm-dev rootfs]# ls lib/
ld-2.3.6.so libc-2.3.6.so libgcc_s.so libnsl.so.1 libnss_files.so.2 libnss_nis.so.2 librt-2.3.6.so libthread_db.so.1
ld-linux.so.2 libcrypt-2.3.6.so libgcc_s.so.1 libnss_compat-2.3.6.so libnss_hesiod-2.3.6.so libpcprofile.so librt.so.1 libutil-2.3.6.so
libanl-2.3.6.so libcrypt.so.1 libm-2.3.6.so libnss_compat.so.2 libnss_hesiod.so.2 libpthread-0.10.so libSegFault.so libutil.so.1
libanl.so.1 libc.so.6 libmemusage.so libnss_dns-2.3.6.so libnss_nis-2.3.6.so libpthread.so.0 libtermcap.so.2 modules
libBrokenLocale-2.3.6.so libdl-2.3.6.so libm.so.6 libnss_dns.so.2 libnss_nisplus-2.3.6.so libresolv-2.3.6.so libtermcap.so.2.0.8
libBrokenLocale.so.1 libdl.so.2 libnsl-2.3.6.so libnss_files-2.3.6.so libnss_nisplus.so.2 libresolv.so.2 libthread_db-1.0.so
[root@vm-dev rootfs]#
幾天的努力終于寫好了,希望這樣一篇文章能夠給學(xué)習(xí)它的人帶來幫助,水平有限,有錯(cuò)誤的地方希望大家海涵.我會(huì)在以后的學(xué)習(xí)中努力的修正自己的錯(cuò)誤.希望為大家?guī)砀嗟暮玫奈恼?
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04
- 高速PCB阻抗控制核心實(shí)操規(guī)范
- 高速數(shù)字系統(tǒng)(如DDR、SerDes)中的信號(hào)完整性濾波
- MOSFET在UPS電源中的應(yīng)用解析
- 電源管理IC在物聯(lián)網(wǎng)設(shè)備中的應(yīng)用
- SMT連接器焊接缺陷分析
- MOSFET在汽車電子中的應(yīng)用要求
- 通信設(shè)備電源管理IC應(yīng)用解析
- 通信設(shè)備連接器選型與設(shè)計(jì)
- PCB電磁兼容性(EMC)設(shè)計(jì)核心實(shí)操規(guī)范
- 物聯(lián)網(wǎng)節(jié)點(diǎn)低功耗設(shè)計(jì):信號(hào)鏈中的濾波與功耗管理









