當前位置:首頁 » 操作系統 » 符號表linux

符號表linux

發布時間: 2022-05-25 05:23:45

linux內核符號表問題,怎麼查看

查看內核 :uname -a

㈡ linux中重要文件夾介紹各個文件夾各有什麼作用

以下是linux系統常見的重要目錄以及各個目作用:
/
根目錄。
包含了幾乎所的文件目錄。相當於中央系統。進入的最簡單方法是:cd /。

/boot
引導程序,內核等存放的目錄。
這個目錄,包括了在引導過程中所必需的文件,引導程序的相關文件(例如grub,lilo以及相應的配置文件以及Linux操作系統內核相關文件(例如vmlinuz等一般都存放在這里。在最開始的啟動階段,通過引導程序將內核載入到內存,完成內核的啟動(這個時候,虛擬文件系統還不存在,載入的內核雖然是從硬碟讀取的,但是沒經過Linux的虛擬文件系統,這是比較底層的東西來實現的。然後內核自己創建好虛擬文件系統,並且從虛擬文件系統的其他子目錄中(例如/sbin 和 /etc載入需要在開機啟動的其他程序或者服務或者特定的動作(部分可以由用戶自己在相應的目錄中修改相應的文件來配製。如果我們的機器中包含多個操作系統,那麼可以通過修改這個目錄中的某個配置文件(例如grub.conf來調整啟動的默認操作系統,系統啟動的擇菜單,以及啟動延遲等參數。

/sbin
超級用戶可以使用的命令的存放目錄。
存放大多涉及系統管理的命令(例如引導系統的init程序,是超級許可權用戶root的可執行命令存放地,普通用戶無許可權執行這個目錄下的命令(但是時普通用戶也可能會用到。這個目錄和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin等目錄是相似的,我們要記住,凡是目錄sbin中包含的都是root許可權才能執行的,這樣就行了。後面會具體區分。

/bin
普通用戶可以使用的命令的存放目錄。
系統所需要的那些命令位於此目錄,比如ls、cp、mkdir等命令;類似的目錄還/usr/bin,/usr/local/bin等等。這個目錄中的文件都是可執行的、普通用戶都可以使用的命令。作為基礎系統所需要的最基礎的命令就是放在這里。

/lib
根目錄下的所程序的共享庫目錄。
此目錄下包含系統引導和在根用戶執行命令時候所必需用到的共享庫。做個不太好但是比較形象的比喻,點類似於Windows上面的system32目錄。理說,這里存放的文件應該是/bin目錄下程序所需要的庫文件的存放地,也不排除一些例外的情況。類似的目錄還/usr/lib,/usr/local/lib等等。

/dev
設備文件目錄。
在Linux中設備都是以文件形式出現,這里的設備可以是硬碟,鍵盤,滑鼠,網卡,終端,等設備,通過訪問這些文件可以訪問到相應的設備。設備文件可以使用mknod命令來創建,具體參見相應的命令;而為了將對這些設備文件的訪問轉化為對設備的訪問,需要向相應的設備提供設備驅動模塊(一般將設備驅動編譯之後,生成的結果是一個*.ko類型的二進制文件,在內核啟動之後,再通過insmod等命令載入相應的設備驅動之後,我們就可以通過設備文件來訪問設備了。一般來說,想要Linux系統支持某個設備,只要個東西:相應的硬體設備,支持硬體的驅動模塊,以及相應的設備文件。

/home
普通用戶的家目錄($HOME目錄。
在Linux機器上,用戶主目錄通常直接或間接地置在此目錄下。其結構通常由本地機的管理員來決定。通常而言,系統的每個用戶都自己的家目錄,目錄以用戶名作為名字存放在/home下面(例如quietheart用戶,其家目錄的名字為/home/quietheart。該目錄中保存了絕大多數的用戶文件(用戶自己的配置文件,定製文件,文檔,數據等),root用戶除外(參見後面的/root目錄。由於這個目錄包含了用戶實際的數據,通常系統管理員為這個目錄單獨掛載一個獨立的磁碟分區,這樣這個目錄的文件系統格式就可能和其他目錄不一樣了(盡管表面上看,這個目錄還是屬於根目錄的一棵子樹上),有利於數據的維護。

/root
用戶root的$HOME目錄
系統管理員(就是root用戶或超級用戶)的主目錄比較特殊,不存放在/home中,而是直接放在/root目錄下了。

/etc
全局的配置文件存放目錄。
系統和程序一般都可以通過修改相應的配置文件,來進行配置。例如,要配置系統開機的時候啟動那些程序,配置某個程序啟動的時候顯示什麼樣的風格等等。通常這些配置文件都集中存放在/etc目錄中,所以想要配置什麼東西的話,可以在/etc下面尋找我們可能需要修改的文件。一些大型套件,如X11,在 /etc 下它們自己的子目錄。系統配置文件可以放在這里或在 /usr/etc。 不過所程序總是在 /etc 目錄下查找所需的配置文件,你也可以將這些文件鏈接到目錄 /usr/etc。另外,還一個需要注意的常見現象就是,當某個程序在某個用戶下運行的時候,可能會在該用戶的家目錄中生成一個配置文件(一般這個文件最開始就是/etc下相應配置文件的拷貝,存放相應於「當前用戶」的配置,這樣當前用戶可以通過配置這個家目錄的配置文件,來改變程序的行為,並且這個行為只是該用戶特的。原因就是:一般來說一個程序啟動,如果需要讀取一些配置文件的話,它會首先讀取當前用戶家目錄的配置文件,如果存在就使用;如果不存在它就到/etc下讀取全局的配置文件進而啟動程序。就是這個配置文件不自動生成,我們手動在自己的家目錄中創建一個文件的話,也有許多程序會首先讀取到這個家目錄的文件並且以它的配置作為啟動的選項(例如我們可以在家目錄中創建vim程序的配置文件.vimrc,來配置自己的vim程序。

/usr
這個目錄中包含了命令庫文件和在通常操作中不會修改的文件。
這個目錄對於系統來說也是一個非常重要的目錄,其地位類似Windows上面的」Program Files」目錄(請原諒我可能這樣做比較不太恰當^_^。安裝程序的時候,默認就是安裝在此文件內部某個子文件夾內。輸入命令後系統默認執行/usr/bin下的程序(當然,前提是這個目錄的路徑已經被添加到了系統的環境變數中。此目錄通常也會掛載一個獨立的磁碟分區,它應保存共享只讀類文件,這樣它可以被運行Linux的不同主機掛載。

/usr/lib
目標庫文件,包括動態連接庫加上一些通常不是直接調用的可執行文件的存放位置。
這個目錄功能類似/lib目錄,理說,這里存放的文件應該是/bin目錄下程序所需要的庫文件的存放地,也不排除一些例外的情況。

/usr/bin
一般使用者使用並且不是系統自檢等所必需可執行文件的目錄。
此目錄相當於根文件系統下的對應目錄(/bin,非啟動系統,非修復系統以及非本地安裝的程序一般都放在此目錄下。

/usr/sbin
管理員使用的非系統必須的可執行文件存放目錄。
此目錄相當於根文件系統下的對應目錄(/sbin,保存系統管理程序的二進制文件,並且這些文件不是系統啟動或文件系統掛載 /usr 目錄或修復系統所必需的。

/usr/share
存放共享文件的目錄。
在此目錄下不同的子目錄中保存了同一個操作系統在不同構架下工作時特定應用程序的共享數據(例如程序文檔信息)。使用者可以找到通常放在 /usr/doc 或 /usr/lib 或 /usr/man 目錄下的這些類似數據。

/usr/include
C程序語言編譯使用的頭文件。
linux下開發和編譯應用程序所需要的頭文件一般都存放在這里,通過頭文件來使用某些庫函數。默認來說這個路徑被添加到了環境變數中,這樣編譯開發程序的時候編譯器會自動搜索這個路徑,從中找到你的程序中可能包含的頭文件。

/usr/local
安裝本地程序的一般默認路徑。
當我們下載一個程序源代碼,編譯並且安裝的時候,如果不特別指定安裝的程序路徑,那麼默認會將程序相關的文件安裝到這個目錄的對應目錄下。例如,安裝的程序可執行文件被安裝(安裝實質就是復制到了/usr/local/bin下面,此程序(可執行文件所需要依賴的庫文件被安裝到了/usr/local/lib目錄下,被安裝的軟體如果是某個開發庫(例如Qt,Gtk等那麼相應的頭文件可能就被安裝到了/usr/local/include中等等。也就是說,這個目錄存放的內容,一般都是我們後來自己安裝的軟體的默認路徑,如果擇了這個默認路徑作為軟體的安裝路徑,被安裝的軟體的所文件都限制在這個目錄中,其中的子目錄就相應於根目錄的子目錄。

/proc
特殊文件目錄。
這個目錄採用一種特殊的文件系統格式(proc格式,內核支持這種格式。其中包含了全部虛擬文件。它們並不保存在磁碟中,也不佔據磁碟空間(盡管命令ls -c會顯示它們的大小)。當您查看它們時,您實際上看到的是內存里的信息,這些文件助於我們了解系統內部信息。例如:
├1/ 關於進程1的信息目錄。每個進程在/proc 下一個名為其進程號的目錄。
├cpuinfo 處理器信息,如類型、製造商、型號和性能。
├devices 當前運行的核心配置的設備驅動的列表。
├dma 顯示當前使用的DMA通道。
├filesystems 核心配置的文件系統。
├interrupts 顯示使用的中斷,and how many of each there have been.
├ioports 當前使用的I/O埠。
├kcore 系統物理內存映象。與物理內存大小一樣,但實際不佔這么多內存;
├kmsg 核心輸出的消息。也被送到syslog 。
├ksyms 核心符號表。
├loadavg 系統」平均負載」;3個沒意義的指示器指出系統當前的工作量。
├meminfo 存儲器使用信息,包括物理內存和swap。
├moles 當前載入了哪些核心模塊。
├net 網路協議狀態信息。
├self 到查看/proc 的程序的進程目錄的符號連接。
├stat 系統的不同狀態
├uptime 系統啟動的時間長度。
└version 核心版本。

/opt
可擇的文件目錄。
這個目錄表示的是可擇的意思,些自定義軟體包或者第方工具,就可以安裝在這里。比如在Fedora Core 5.0中,OpenOffice就是安裝在這里。些我們自己編譯的軟體包,就可以安裝在這個目錄中;通過源碼包安裝的軟體,可以把它們的安裝路徑設置成/opt這樣來安裝。這個目錄的作用一點類似/usr/local。

/mnt
臨時掛載目錄。
這個目錄一般是用於存放掛載儲存設備的掛載目錄的,比如磁碟,光碟機,網路文件系統等,當我們需要掛載某個磁碟設備的時候,可以把磁碟設備掛載到這個目錄上去,這樣我們可以直接通過訪問這個目錄來訪問那個磁碟了。一般來說,我們最好在/mnt目錄下面多建立幾個子目錄,掛載的時候掛載到這些子目錄上面,因為通常我們可能不僅僅是掛載一個設備吧?

/media
掛載的媒體設備目錄。
掛載的媒體設備目錄,一般外部設備掛載到這里,例如cdrom等。比如我們插入一個U盤,我們一般會發現,Linux自動在這個目錄下建立一個disk目錄,然後把U盤掛載到這個disk目錄上,通過訪問這個disk來訪問U盤。

/var
內容經常變化的目錄。
此目錄下文件的大小可能會改變,如緩沖文件,日誌文件,緩存文件,等一般都存放在這里。

/tmp
臨時文件目錄。
該目錄存放系統中的一些臨時文件,文件可能會被系統自動清空。的系統直接把tmpfs類型的文件系統掛載到這個目錄上,tmpfs文件系統由Linux內核支持,在這個文件系統中的數據,實際上是內存中的,由於內存的數據斷電易失,當系統重新啟動的時候我們就會發現這個目錄被清空了。

/lost+found
恢復文件存放的位置。
當系統崩潰的時候,在系統修復過程中需要恢復的文件,可能就會在這里被找到了,這個目錄一般為空。

另外,有些目錄初學者容易混淆,這里簡單區分一下:
/bin,/sbin與/usr/bin,/usr/sbin:
/bin一般存放對於用戶和系統來說「必須」的程序(二進制文件)。
/sbin一般存放用於系統管理的「必需」的程序(二進制文件),一般普通用戶不會使用,根用戶使用。
/usr/bin一般存放的只是對用戶和系統來說「不是必需的」程序(二進制文件)。
/usr/sbin一般存放用於系統管理的系統管理的不是必需的程序(二進制文件)。

/lib與/usr/lib:
/lib和/usr/lib的區別類似/bin,/sbin與/usr/bin,/usr/sbin。
/lib一般存放對於用戶和系統來說「必須」的庫(二進制文件)。
/usr/lib一般存放的只是對用戶和系統來說「不是必需的」庫(二進制文件)。

㈢ 怎麼查看linux的內核符號表

在內核中通過/proc/kallsyms獲得符號的地址

Linux內核符號表/proc/kallsyms的形成過程
./scripts/kallsyms.c負責生成System.map
./kernel/kallsyms.c負責生成/proc/kallsyms
./scripts/kallsyms.c解析vmlinux(.tmp_vmlinux)生成kallsyms.S(.tmp_kallsyms.S),然後內核編譯過程中將kallsyms.S(內核符號表)編入內核鏡像uImage
內核啟動後./kernel/kallsyms.c解析uImage形成/proc/kallsyms
/proc/kallsyms包含了內核中的函數符號(包括沒有EXPORT_SYMBOL)、全局變數(用EXPORT_SYMBOL導出的全局變數)
如何將內核中的函數、全局變數、靜態變數都導出到/proc/kallsyms

查看內核 使用 uname -a

㈣ 如何編譯linux版本

編譯安裝內核
下載並解壓內核

解壓內核:tar xf linux-2.6.XX.tar.xz
定製內核:make menuconfig
參見makefile menuconfig過程講解
編譯內核和模塊:make
生成內核模塊和vmlinuz,initrd.img,Symtem.map文件
安裝內核和模塊:sudo make moles_install install
復制模塊文件到/lib/moles目錄下、復制config,vmlinuz,initrd.img,Symtem.map文件到/boot目錄、更新grub
其他命令:
make mrprobe:命令的作用是在每次配置並重新編譯內核前需要先執行「make mrproper」命令清理源代碼樹,包括過去曾經配置的內核配置文件「.config」都將被清除。即進行新的編譯工作時將原來老的配置文件給刪除到,以免影響新的內核編譯。
make dep:生成內核功能間的依賴關系,為編譯內核做好准備。

幾個重要的Linux內核文件介紹
config
使用make menuconfig 生成的內核配置文件,決定將內核的各個功能系統編譯進內核還是編譯為模塊還是不編譯。
vmlinuz 和 vmlinux
vmlinuz是可引導的、壓縮的內核,「vm」代表「Virtual Memory」。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制,Linux能夠使用硬碟空間作為虛擬內存,因此得名「vm」。vmlinuz是可執行的Linux內核,vmlinuz的建立有兩種方式:一是編譯內核時通過「make zImage」創建,zImage適用於小內核的情況,它的存在是為了向後的兼容性;二是內核編譯時通過命令make bzImage創建,bzImage是壓縮的內核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示「big zImage」,bzImage中的b是「big」意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個壓縮文件,而且在這兩個文件的開頭部分內嵌有gzip解壓縮代碼,所以你不能用gunzip 或 gzip –dc解包vmlinuz。 內核文件中包含一個微型的gzip用於解壓縮內核並引導它。兩者的不同之處在於,老的zImage解壓縮內核到低端內存(第一個640K),bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那麼可以採用zImage 或bzImage之一,兩種方式引導的系統運行時是相同的。大的內核採用bzImage,不能採用zImage。 vmlinux是未壓縮的內核,vmlinuz是vmlinux的壓縮文件。
initrd.img
initrd是「initial ramdisk」的簡寫。initrd一般被用來臨時的引導硬體到實際內核vmlinuz能夠接管並繼續引導的狀態。比如initrd- 2.4.7-10.img主要是用於載入ext3等文件系統及scsi設備的驅動。如果你使用的是scsi硬碟,而內核vmlinuz中並沒有這個 scsi硬體的驅動,那麼在裝入scsi模塊之前,內核不能載入根文件系統,但scsi模塊存儲在根文件系統的/lib/moles下。為了解決這個問題,可以引導一個能夠讀實際內核的initrd內核並用initrd修正scsi引導問題,initrd-2.4.7-10.img是用gzip壓縮的文件。initrd映象文件是使用mkinitrd創建的,mkinitrd實用程序能夠創建initrd映象文件,這個命令是RedHat專有的,其它Linux發行版或許有相應的命令。這是個很方便的實用程序。具體情況請看幫助:man mkinitrd
System.map是一個特定內核的內核符號表,由「nm vmlinux」產生並且不相關的符號被濾出。
下面幾行來自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep -v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort > System.map
在進行程序設計時,會命名一些變數名或函數名之類的符號。Linux內核是一個很復雜的代碼塊,有許許多多的全局符號, Linux內核不使用符號名,而是通過變數或函數的地址來識別變數或函數名,比如不是使用size_t BytesRead這樣的符號,而是像c0343f20這樣引用這個變數。 對於使用計算機的人來說,更喜歡使用那些像size_t BytesRead這樣的名字,而不喜歡像c0343f20這樣的名字。內核主要是用c寫的,所以編譯器/連接器允許我們編碼時使用符號名,而內核運行時使用地址。 然而,在有的情況下,我們需要知道符號的地址,或者需要知道地址對應的符號,這由符號表來完成,符號表是所有符號連同它們的地址的列表。
Linux 符號表使用到2個文件: /proc/ksyms 、System.map 。/proc/ksyms是一個「proc file」,在內核引導時創建。實際上,它並不真正的是一個文件,它只不過是內核數據的表示,卻給人們是一個磁碟文件的假象,這從它的文件大小是0可以看 出來。然而,System.map是存在於你的文件系統上的實際文件。當你編譯一個新內核時,各個符號名的地址要發生變化,你的老的System.map 具有的是錯誤的符號信息,每次內核編譯時產生一個新的System.map,你應當用新的System.map來取代老的System.map。
雖然內核本身並不真正使用System.map,但其它程序比如klogd, lsof和ps等軟體需要一個正確的System.map。如果你使用錯誤的或沒有System.map,klogd的輸出將是不可靠的,這對於排除程序故障會帶來困難。沒有System.map,你可能會面臨一些令人煩惱的提示信息。 另外少數驅動需要System.map來解析符號,沒有為你當前運行的特定內核創建的System.map它們就不能正常工作。 Linux的內核日誌守護進程klogd為了執行名稱-地址解析,klogd需要使用System.map。System.map應當放在使用它的軟體能夠找到它的地方。執行:man klogd可知,如果沒有將System.map作為一個變數的位置給klogd,那麼它將按照下面的順序,在三個地方查找System.map: /boot/System.map 、/System.map 、/usr/src/linux/System.map
System.map也有版本信息,klogd能夠智能地查找正確的映象(map)文件。
makefile menuconfig過程講解
當我們在執行make menuconfig這個命令時,系統到底幫我們做了哪些工作呢?這裡面一共涉及到了一下幾個文件我們來一一探討
Linux內核根目錄下的scripts文件夾
arch/$ARCH/Kconfig文件、各層目錄下的Kconfig文件
Linux內核根目錄下的makefile文件、各層目錄下的makefile文件
Linux內核根目錄下的的.config文件、arch/$ARCH/configs/下的文件
Linux內核根目錄下的 include/generated/autoconf.h文件
1)scripts文件夾存放的是跟make menuconfig配置界面的圖形繪制相關的文件,我們作為使用者無需關心這個文件夾的內容
2)當我們執行make menuconfig命令出現上述藍色配置界面以前,系統幫我們做了以下工作:
首先系統會讀取arch/$ARCH/目錄下的Kconfig文件生成整個配置界面選項(Kconfig是整個linux配置機制的核心),那麼ARCH環境變數的值等於多少呢?它是由linux內核根目錄下的makefile文件決定的,在makefile下有此環境變數的定義:
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
..........
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
或者通過 make ARCH=arm menuconfig命令來生成配置界面
比如教務處進行考試,考試科數可能有外語、語文、數學等科,這里我們選擇了arm科可進行考試,系統就會讀取arm/arm/kconfig文件生成配置選項(選擇了arm科的卷子),系統還提供了x86科、milps科等10幾門功課的考試題
3)假設教務處比較「仁慈」,為了怕某些同學做錯試題,還給我們准備了一份參考答案(默認配置選項),存放在arch/$ARCH/configs/目錄下,對於arm科來說就是arch/arm/configs文件夾:

此文件夾中有許多選項,系統會讀取哪個呢?內核默認會讀取linux內核根目錄下.config文件作為內核的默認選項(試題的參考答案),我們一般會根據開發板的類型從中選取一個與我們開發板最接近的系列到Linux內核根目錄下(選擇一個最接近的參考答案)
4).config
假設教務處留了一個心眼,他提供的參考答案並不完全正確(.config文件與我們的板子並不是完全匹配),這時我們可以選擇直接修改.config文件然後執行make menuconfig命令讀取新的選項。但是一般我們不採取這個方案,我們選擇在配置界面中通過空格、esc、回車選擇某些選項選中或者不選中,最後保存退出的時候,Linux內核會把新的選項(正確的參考答案)更新到.config中,此時我們可以把.config重命名為其它文件保存起來(當你執行make distclean時系統會把.config文件刪除),以後我們再配置內核時就不需要再去arch/arm/configs下考取相應的文件了,省去了重新配置的麻煩,直接將保存的.config文件復制為.config即可.
5)經過以上兩步,我們可以正確的讀取、配置我們需要的界面了,那麼他們如何跟makefile文件建立編譯關系呢?當你保存make menuconfig選項時,系統會除了會自動更新.config外,還會將所有的選項以宏的形式保存在Linux內核根目錄下的 include/generated/autoconf.h文件下

內核中的源代碼就都會包含以上.h文件,跟宏的定義情況進行條件編譯。
當我們需要對一個文件整體選擇如是否編譯時,還需要修改對應的makefile文件,例如:

我們選擇是否要編譯s3c2410_ts.c這個文件時,makefile會根據CONFIG_TOUCHSCREEN_S3C2410來決定是編譯此文件,此宏是在Kconfig文件中定義,當我們配置完成後,會出現在.config及autconf中,至此,我們就完成了整個linux內核的編譯過程。
最後我們會發現,整個linux內核配置過程中,留給用戶的介面其實只有各層Kconfig、makefile文件以及對應的源文件。
比如我們如果想要給內核增加一個功能,並且通過make menuconfig控制其聲稱過程
首先需要做的工作是:修改對應目錄下的Kconfig文件,按照Kconfig語法增加對應的選項;
其次執行make menuconfig選擇編譯進內核或者不編譯進內核,或者編譯為模塊,.config文件和autoconf.h文件會自動生成;
最後修改對應目錄下的makefile文件完成編譯選項的添加;
最後的最後執行make命令進行編譯。
Kconfig和Makefile
Linux內核源碼樹的每個目錄下都有兩個文檔Kconfig和Makefile。分布到各目錄的Kconfig構成了一個分布式的內核配置資料庫,每個Kconfig分別描述了所屬目錄源文檔相關的內核配置菜單。在執行內核配置make menuconfig時,從Kconfig中讀出菜單,用戶選擇後保存到.config的內核配置文檔中。在內核編譯時,主Makefile調用這 個.config,就知道了用戶的選擇。這個內容說明了,Kconfig就是對應著內核的每級配置菜單。
假如要想添加新的驅動到內核的源碼中,要修改Kconfig,這樣就能夠選擇這個驅動,假如想使這個驅動被編譯,則要修改Makefile。添加新 的驅動時需要修改的文檔有兩種(如果添加的只是文件,則只需修改當前層Kconfig和Makefile文件;如果添加的是目錄,則需修改當前層和目錄下 的共一對Kconfig和Makefile)Kconfig和Makefile。要想知道怎麼修改這兩種文檔,就要知道兩種文檔的語法結構,Kconfig的語法參見參考文獻《【linux-2.6.31】kbuild》。
Makefile 文件包含 5 部分:
Makefile 頂層的 Makefile
.config 內核配置文件
arch/$(ARCH)/Makefile 體系結構 Makefile
scripts/Makefile.* 適用於所有 kbuild Makefile 的通用規則等
kbuild Makefiles 大約有 500 個這樣的文件
頂層 Makefile 讀取內核配置操作產生的.config 文件,頂層 Makefile 構建兩個主要的目標:vmlinux(內核映像)和 moles(所有模塊文件)。它通過遞歸訪問內核源碼樹下的子目錄來構建這些目標。訪問哪些子目錄取決於內核配置。頂層 Makefile 包含一個體系結構 Makefile,由 arch/$(ARCH)/Makefile 指定。體系結構 Makefile 文件為頂層 Makefile 提供了特定體系結構的信息。每個子目錄各有一個 kbuild文件和Makefile 文件來執行從上層傳遞下來的命令。kbuild和Makefile文件利用.config 文件中的信息來構造由 kbuild 構建內建或者模塊對象使用的各種文件列表。scripts/Makefile.*包含所有的定義/規則,等等。這些信息用於使用 kbuild和 Makefile 文件來構建內核。Makefile的語法參見參考文獻《【linux-2.6.31】kbuild》。

參考文獻
【linux-2.6.31】內核編譯指南.pdf
【linux-2.6.31】kbuild.pdf
Linker script in Linux.pdf
linux內核的配置機制及其編譯過程
Linux內核編譯過程詳解
Linux Kconfig及Makefile學習

㈤ LINUX基本的操作系統結構是什麼

linux下文件結構
/bin 二進制可執行命令
/dev 設備特殊文件
/etc 系統管理和配置文件
/etc/rc.d 啟動的配置文件和腳本
/home 用戶主目錄的基點,比如用戶user的主目錄就是/home/user,可以用~user表示
/lib 標准程序設計庫,又叫動態鏈接共享庫,作用類似windows里的.dll文件
/sbin 系統管理命令,這里存放的是系統管理員使用的管理程序
/tmp 公用的臨時文件存儲點
/root 系統管理員的主目錄(呵呵,特權階級)
/mnt 系統提供這個目錄是讓用戶臨時掛載其他的文件系統。
/lost+found 這個目錄平時是空的,系統非正常關機而留下「無家可歸」的文件(windows下叫什麼.chk)就在這里
/proc 虛擬的目錄,是系統內存的映射。可直接訪問這個目錄來獲取系統信息。
/var 某些大文件的溢出區,比方說各種服務的日誌文件
/usr 最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄。其中包含:
/usr/X11R6 存放X window的目錄
/usr/bin 眾多的應用程序
/usr/sbin 超級用戶的一些管理程序
/usr/doc linux文檔
/usr/include linux下開發和編譯應用程序所需要的頭文件
/usr/lib 常用的動態鏈接庫和軟體包的配置文件
/usr/man 幫助文檔
/usr/src 源代碼,linux內核的源代碼就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的庫根文件系統

通常情況下,根文件系統所佔空間一般應該比較小,因為其中的絕大部分文件都不需要
經常改動,而且包括嚴格的文件和一個小的不經常改變的文件系統不容易損壞。
除了可能的一個叫/vmlinuz標準的系統引導映像之外,根目錄一般不含任何文件。所有
其他文件在根文件系統的子目錄中。
1. /bin目錄
/bin目錄包含了引導啟動所需的命令或普通用戶可能用的命令(可能在引導啟動後)。這些
命令都是二進制文件的可執行程序( bin是binary - -二進制的簡稱),多是系統中重要的系統文件。
2. /sbin目錄
/sbin目錄類似/bin ,也用於存儲二進制文件。因為其中的大部分文件多是系統管理員使
用的基本的系統程序,所以雖然普通用戶必要且允許時可以使用,但一般不給普通用戶使用。
3. /etc目錄
/etc目錄存放著各種系統配置文件,其中包括了用戶信息文件/etc/passwd,系統初始化文
件/etc/rc等。Linux正是靠這些文件才得以正常地運行。
4. /root目錄
/root 目錄是超級用戶的目錄。
5. /lib目錄
/lib目錄是根文件系統上的程序所需的共享庫,存放了根文件系統程序運行所需的共享文
件。這些文件包含了可被許多程序共享的代碼,以避免每個程序都包含有相同的子程序的副
本,故可以使得可執行文件變得更小,節省空間。
6. /lib/moles 目錄
/lib/moles 目錄包含系統核心可載入各種模塊,尤其是那些在恢復損壞的系統時重新引
導系統所需的模塊(例如網路和文件系統驅動)。
7. /dev目錄
/dev目錄存放了設備文件,即設備驅動程序,用戶通過這些文件訪問外部設備。比如,用
戶可以通過訪問/dev/mous e來訪問滑鼠的輸入,就像訪問其他文件一樣。
8. /tmp目錄
/tmp 目錄存放程序在運行時產生的信息和數據。但在引導啟動後,運行的程序最好使用
/var/tmp來代替/tmp ,因為前者可能擁有一個更大的磁碟空間。
9. /boot目錄
/boot目錄存放引導載入器(bootstrap loader)使用的文件,如LILO,核心映像也經常放在這里,
而不是放在根目錄中。但是如果有許多核心映像,這個目錄就可能變得很大,這時使用單獨的
文件系統會更好一些。還有一點要注意的是,要確保核心映像必須在IDE硬碟的前1024柱面內。
10. /mnt目錄
/mnt目錄是系統管理員臨時安裝(mount)文件系統的安裝點。程序並不自動支持安裝到
/mnt 。/mnt下面可以分為許多子目錄,例如/mnt/dosa 可能是使用MSDOS文件系統的軟碟機,
而/mnt/exta 可能是使用ext2文件系統的軟碟機,/mnt/cdrom 光碟機等等。
11. /proc, /usr,/var,/home目錄
其他文件系統的安裝點。

下面詳細介紹;

/etc文件系統
/etc 目錄包含各種系統配置文件,下面說明其中的一些。其他的你應該知道它們屬於哪個
程序,並閱讀該程序的m a n頁。許多網路配置文件也在/etc 中。
1. /etc/rc或/etc/rc.d或/etc/rc?.d
啟動、或改變運行級時運行的腳本或腳本的目錄。
2. /etc/passwd
用戶資料庫,其中的域給出了用戶名、真實姓名、用戶起始目錄、加密口令和用戶的其
他信息。
3. /etc/fdprm
軟盤參數表,用以說明不同的軟盤格式。可用setfdprm 進行設置。更多的信息見s e t f d p r m
的幫助頁。
4. /etc/fstab
指定啟動時需要自動安裝的文件系統列表。也包括用swapon -a啟用的s w a p區的信息。
5. /etc/group
類似/etc/passwd ,但說明的不是用戶信息而是組的信息。包括組的各種數據。
6. /etc/inittab
init 的配置文件。
7. /etc/issue
包括用戶在登錄提示符前的輸出信息。通常包括系統的一段短說明或歡迎信息。具體內
容由系統管理員確定。
8. /etc/magic
「f i l e」的配置文件。包含不同文件格式的說明,「f i l e」基於它猜測文件類型。
9. /etc/motd
m o t d是Message Of The Day的縮寫,用戶成功登錄後自動輸出。內容由系統管理員確定。
常用於通告信息,如計劃關機時間的警告等。
10. /etc/mtab
當前安裝的文件系統列表。由腳本( s c r i t p )初始化,並由mount 命令自動更新。當需要一
個當前安裝的文件系統的列表時使用(例如df 命令)。
11. /etc/shadow
在安裝了影子( s h a d o w )口令軟體的系統上的影子口令文件。影子口令文件將/ e t c / p a s s w d
文件中的加密口令移動到/ e t c / s h a d o w中,而後者只對超級用戶( r o o t )可讀。這使破譯口令更困
難,以此增加系統的安全性。
12. /etc/login.defs
l o g i n命令的配置文件。
13. /etc/printcap
類似/etc/termcap ,但針對列印機。語法不同。
14. /etc/profile 、/ e t c / c s h . l o g i n、/etc/csh.cshrc
登錄或啟動時B o u r n e或C shells執行的文件。這允許系統管理員為所有用戶建立全局預設環境。
15. /etc/securetty
確認安全終端,即哪個終端允許超級用戶( r o o t )登錄。一般只列出虛擬控制台,這樣就不
可能(至少很困難)通過數據機( m o d e m )或網路闖入系統並得到超級用戶特權。
16. /etc/shells
列出可以使用的s h e l l。chsh 命令允許用戶在本文件指定范圍內改變登錄的s h e l l。提供一
台機器F T P服務的服務進程ftpd 檢查用戶s h e l l是否列在/etc/shells 文件中,如果不是,將不允
許該用戶登錄。
17. /etc/termcap
終端性能資料庫。說明不同的終端用什麼「轉義序列」控制。寫程序時不直接輸出轉義
序列(這樣只能工作於特定品牌的終端),而是從/etc/termcap 中查找要做的工作的正確序列。
這樣,多數的程序可以在多數終端上運行。

/dev文件系統
/dev 目錄包括所有設備的設備文件。設備文件用特定的約定命名,這在設備列表中說明。
設備文件在安裝時由系統產生,以後可以用/dev/MAKEDEV 描述。/ d e v / M A K E D E V.local 是
系統管理員為本地設備文件(或連接)寫的描述文稿(即如一些非標准設備驅動不是標准
MAKEDEV 的一部分)。下面簡要介紹/ d e v下一些常用文件。
1. /dev/console
系統控制台,也就是直接和系統連接的監視器。
2. /dev/hd
I D E硬碟驅動程序介面。如: / d e v / h d a指的是第一個硬碟, h a d 1則是指/ d e v / h d a的第一個
分區。如系統中有其他的硬碟,則依次為/ d e v / h d b、/ d e v / h d c、. . . . . .;如有多個分區則依次為
h d a 1、h d a 2 . . . . . .
3. /dev/sd
S C S I磁碟驅動程序介面。如有系統有S C S I硬碟,就不會訪問/ d e v / h a d,而會訪問/ d e v / s d a。
4. /dev/fd
軟碟機設備驅動程序。如: / d e v / f d 0指系統的第一個軟盤,也就是通常所說的A:盤,
/ d e v / f d 1指第二個軟盤,. . . . . .而/ d e v / f d 1 H 1 4 4 0則表示訪問驅動器1中的4 . 5高密盤。
5. /dev/st
S C S I磁帶驅動器驅動程序。
6. /dev/tty
提供虛擬控制台支持。如: / d e v / t t y 1指的是系統的第一個虛擬控制台, / d e v / t t y 2則是系統
的第二個虛擬控制台。
7. /dev/pty
提供遠程登陸偽終端支持。在進行Te l n e t登錄時就要用到/ d e v / p t y設備。
8. /dev/ttys
計算機串列介面,對於D O S來說就是「 C O M 1」口。
9. /dev/cua
計算機串列介面,與數據機一起使用的設備。
10. /dev/null
「黑洞」,所有寫入該設備的信息都將消失。例如:當想要將屏幕上的輸出信息隱藏起來
時,只要將輸出信息輸入到/ d e v / n u l l中即可。

/usr文件系統
/usr 是個很重要的目錄,通常這一文件系統很大,因為所有程序安裝在這里。/usr 里的
所有文件一般來自L i n u x發行版( d i s t r i b u t i o n );本地安裝的程序和其他東西在/usr/local 下,因為這樣可以在升級新版系統或新發行版時無須重新安裝全部程序。/usr 目錄下的許多內容是
可選的,但這些功能會使用戶使用系統更加有效。/ u s r可容納許多大型的軟體包和它們的配置
文件。下面列出一些重要的目錄(一些不太重要的目錄被省略了)。
1. /usr/X11R6
包含X Wi n d o w系統的所有可執行程序、配置文件和支持文件。為簡化X的開發和安裝,
X的文件沒有集成到系統中。X Wi n d o w系統是一個功能強大的圖形環境,提供了大量的圖形
工具程序。用戶如果對Microsoft Wi n d o w s或M a c h i n t o s h比較熟悉的話,就不會對X Wi n d o w系統感到束手無策了。
2. /usr/X386
類似/ u s r / X 11R6 ,但是是專門給X 11 Release 5的。
3. /usr/bin
集中了幾乎所有用戶命令,是系統的軟體庫。另有些命令在/bin 或/usr/local/bin 中。
4. /usr/sbin
包括了根文件系統不必要的系統管理命令,例如多數服務程序。
5. /usr/man、/ u s r / i n f o、/ u s r / d o c
這些目錄包含所有手冊頁、G N U信息文檔和各種其他文檔文件。每個聯機手冊的「節」
都有兩個子目錄。例如: / u s r / m a n / m a n 1中包含聯機手冊第一節的源碼(沒有格式化的原始文
件),/ u s r / m a n / c a t 1包含第一節已格式化的內容。L聯機手冊分為以下九節:內部命令、系統調
用、庫函數、設備、文件格式、游戲、宏軟體包、系統管理和核心程序。
6. /usr/include
包含了C語言的頭文件,這些文件多以. h結尾,用來描述C語言程序中用到的數據結構、
子過程和常量。為了保持一致性,這實際上應該放在/usr/lib 下,但習慣上一直沿用了這個名
字。
7. /usr/lib
包含了程序或子系統的不變的數據文件,包括一些s i t e - w i d e配置文件。名字l i b來源於庫
(library); 編程的原始庫也存在/usr/lib 里。當編譯程序時,程序便會和其中的庫進行連接。也
有許多程序把配置文件存入其中。
8. /usr/local
本地安裝的軟體和其他文件放在這里。這與/ u s r很相似。用戶可能會在這發現一些比較大
的軟體包,如T E X、E m a c s等。

/var文件系統
/var 包含系統一般運行時要改變的數據。通常這些數據所在的目錄的大小是要經常變化
或擴充的。原來/ v a r目錄中有些內容是在/ u s r中的,但為了保持/ u s r目錄的相對穩定,就把那
些需要經常改變的目錄放到/ v a r中了。每個系統是特定的,即不通過網路與其他計算機共享。
下面列出一些重要的目錄(一些不太重要的目錄省略了)。
1. /var/catman
包括了格式化過的幫助( m a n )頁。幫助頁的源文件一般存在/ u s r / m a n / m a n中;有些m a n頁
可能有預格式化的版本,存在/ u s r / m a n / c a t中。而其他的m a n頁在第一次看時都需要格式化,
格式化完的版本存在/var/man 中,這樣其他人再看相同的頁時就無須等待格式化了。
(/var/catman 經常被清除,就像清除臨時目錄一樣。)
2. /var/lib
存放系統正常運行時要改變的文件。
3. /var/local
存放/usr/local 中安裝的程序的可變數據(即系統管理員安裝的程序)。注意,如果必要,
即使本地安裝的程序也會使用其他/var 目錄,例如/var/lock 。
4. /var/lock
鎖定文件。許多程序遵循在/var/lock 中產生一個鎖定文件的約定,以用來支持他們正在
使用某個特定的設備或文件。其他程序注意到這個鎖定文件時,就不會再使用這個設備或文
件。
5. /var/log
各種程序的日誌( L o g )文件,尤其是login (/var/log/wtmp log紀錄所有到系統的登錄和注
銷) 和syslog (/var/log/messages 紀錄存儲所有核心和系統程序信息)。/var/log 里的文件經常不
確定地增長,應該定期清除。
6. /var/run
保存在下一次系統引導前有效的關於系統的信息文件。例如, /var/run/utmp 包含當前登
錄的用戶的信息。
7. /var/spool
放置「假離線( s p o o l )」程序的目錄,如m a i l、n e w s、列印隊列和其他隊列工作的目錄。每
個不同的s p o o l在/var/spool 下有自己的子目錄,例如,用戶的郵箱就存放在/var/spool/mail 中。
8. /var/tmp
比/tmp 允許更大的或需要存在較長時間的臨時文件。
注意系統管理員可能不允許/var/tmp 有很舊的文件。

/proc文件系統
/proc 文件系統是一個偽的文件系統,就是說它是一個實際上不存在的目錄,因而這是一
個非常特殊的目錄。它並不存在於某個磁碟上,而是由核心在內存中產生。這個目錄用於提
供關於系統的信息。下面說明一些最重要的文件和目錄(/proc 文件系統在proc man頁中有更詳
細的說明)。
1. /proc/X
關於進程X的信息目錄,這一X是這一進程的標識號。每個進程在/proc 下有一個名為自
己進程號的目錄。
2. /proc/cpuinfo
存放處理器( C P U )的信息,如C P U的類型、製造商、型號和性能等。
3. /proc/devices
當前運行的核心配置的設備驅動的列表。
4. /proc/dma
顯示當前使用的D M A通道。
5. /proc/filesystems
核心配置的文件系統信息。
6. /proc/interrupts
顯示被佔用的中斷信息和佔用者的信息,以及被佔用的數量。
7. /proc/ioports
當前使用的I / O埠。
8. /proc/kcore
系統物理內存映像。與物理內存大小完全一樣,然而實際上沒有佔用這么多內存;它僅
僅是在程序訪問它時才被創建。(注意:除非你把它拷貝到什麼地方,否則/proc 下沒有任何
東西佔用任何磁碟空間。)
9. /proc/kmsg
核心輸出的消息。也會被送到s y s l o g。
10. /proc/ksyms
核心符號表。
11. /proc/loadavg
系統「平均負載」; 3個沒有意義的指示器指出系統當前的工作量。
12. /proc/meminfo
各種存儲器使用信息,包括物理內存和交換分區( s w a p )。
13. /proc/moles
存放當前載入了哪些核心模塊信息。
14. /proc/net
網路協議狀態信息。
15. /proc/self
存放到查看/proc 的程序的進程目錄的符號連接。當2個進程查看/proc 時,這將會是不同
的連接。這主要便於程序得到它自己的進程目錄。
16. /proc/stat
系統的不同狀態,例如,系統啟動後頁面發生錯誤的次數。
17. /proc/uptime
系統啟動的時間長度。
18. /proc/version
核心版本。

㈥ Linux內核模塊了解知多少

(1)什麼是Linux內核模塊編輯本段首先什麼是內核模塊呢?這對於初學者無非是個非常難以理解的概念。內核模塊是Linux內核向外部提供的一個插口,其全稱為動態可載入內核模塊(Loadable Kernel Mole,LKM),我們簡稱為模塊。Linux內核之所以提供模塊機制,是因為它本身是一個單內核(monolithic kernel)。單內核的最大優點是效率高,因為所有的內容都集成在一起,但其缺點是可擴展性和可維護性相對較差,模塊機制就是為了彌補這一缺陷。模塊是具有獨立功能的程序,它可以被單獨編譯,但不能獨立運行。它在運行時被鏈接到內核作為內核的一部分在內核空間運行,這與運行在用戶空間的進程是不同的。模塊通常由一組函數和數據結構組成,用來實現一種文件系統、一個驅動程序或其他內核上層的功能。總之,模塊是一個為內核(從某種意義上來說,內核也是一個模塊)或其他內核模塊提供使用功能的代碼塊。(2)內核模塊的優缺點編輯本段利用內核模塊的動態裝載性具有如下優點:·將內核映象的尺寸保持在最小,並具有最大的靈活性;·便於檢驗新的內核代碼,而不需重新編譯內核並重新引導。但是,內核模塊的引入也帶來了如下問題:·對系統性能和內存利用有負面影響;·裝入的內核模塊和其他內核部分一樣,具有相同的訪問許可權,因此,差的內核模塊會導致系統崩潰;·為了使內核模塊訪問所有內核資源,內核必須維護符號表,並在裝入和卸載模塊時修改這些符號表;·有些模塊要求利用其他模塊的功能,因此,內核要維護模塊之間的依賴性。·內核必須能夠在卸載模塊時通知模塊,並且要釋放分配給模塊的內存和中斷等資源;·內核版本和模塊版本的不兼容,也可能導致系統崩潰,因此,嚴格的版本檢查是必需的。盡管內核模塊的引入同時也帶來不少問題,但是模塊機制確實是擴充內核功能一種行之有效的方法,也是在內核級進行編程的有效途徑。希望對您有所幫助,望採納,謝謝

㈦ linux程序發布的時候都會保留一份符號表嗎

#!/bin/bash #name:remove_one.sh #用途:查找並刪除重復文件,每個文件只保留一個樣本 #將文件依據大小排序並輸出 ls -lS awk 'BEGIN { #得到第一行total總數並丟棄,讀取下一行 getline;getline; name1=$9;size=$5; } { name2=$9; if(size==$5) #大小一樣的可能是內容相同的文件 { #用md5進行校驗和 (md5sum name1)getline; csum1=$1; (md5sum name2)getline; csum2=$1; #如果校驗和相同則為內容相同的文集,輸出名字 if( csum1==csum2 ) { {print name1;print name2} } }; size=$5;name1=name2; }' sort -u > plicate_files #計算重復文件的md5sum,將重復文件中的一采樣寫入plicate_sample中 cat plicate_filesxargs -I {} md5sum {} sort uniq -w 32 awk '{print $2}' sort -u > plicate_sample echo Removing... #刪除在plicate_files中列出且未被plicate_sample列出的全部文件 comm plicate_files plicate_sample -2 -3tee /dev/stderrxargs rm echo Removed plicates files successfully -------------------------------------------------------- 執行: [root@node1 tmp]# sh remove_one.sh 過濾的是當前目錄下的,不處理目錄,不遞歸處理子目錄

㈧ vmlinux去除符號表後還能用么

vmlinux是未壓縮的內核,vmlinux 是ELF文件,即編譯出來的最原始的文件。用於kernel-debug,產生system.map符號表,不能用於直接載入,不可以作為啟動內核。只是啟動過程中的中間媒體
vmlinuz是可引導的、壓縮的內核。「vm」代表「Virtual Memory」。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制
以是我在CSDN中看到的,可以使用反匯編查看這個文件:
arm-eabi-objmp -d kernel/vmlinux > 1.S

㈨ linux 怎麼隱藏內核符號表

所謂內核符號表就是在內核內部函數或變數中可供外部引用的函數和變數的符號表。你隱藏它做什麼?

熱點內容
阿里雲伺服器root密碼 發布:2024-10-27 05:07:38 瀏覽:976
android命令apk 發布:2024-10-27 05:05:26 瀏覽:990
java或條件 發布:2024-10-27 05:01:10 瀏覽:363
安卓手機怎麼傳dvd 發布:2024-10-27 04:49:59 瀏覽:360
大逃殺腳本 發布:2024-10-27 04:49:58 瀏覽:417
安卓浙里辦的智能政務助理在哪裡 發布:2024-10-27 04:43:26 瀏覽:247
公眾號雲伺服器 發布:2024-10-27 04:15:14 瀏覽:797
如何設置第二個窗口密碼 發布:2024-10-27 04:06:50 瀏覽:319
java插入演算法 發布:2024-10-27 03:40:42 瀏覽:813
浙江伺服器dns地址雲空間 發布:2024-10-27 03:31:19 瀏覽:678