新聞中心
vmlinux.bin是Linux內核代碼的可執(zhí)行鏡像。了解其結構以及影響是Linux內核開發(fā)者的必備基礎知識。本文將深入探析vmlinux.bin的結構、特征以及其對Linux內核開發(fā)的影響。

創(chuàng)新互聯(lián)專注于徐州網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供徐州營銷型網站建設,徐州網站制作、徐州網頁設計、徐州網站官網定制、小程序開發(fā)服務,打造徐州網絡公司原創(chuàng)品牌,更為您提供徐州網站排名全網營銷落地服務。
一、vmlinux.bin的結構
vmlinux.bin的結構可以分為文件頭、代碼段、數據段等幾個部分。下面分別介紹。
1. 文件頭
文件頭在vmlinux.bin中的位置是固定的,它的長度是固定的,一般為52個字節(jié)。文件頭包括的信息如下:
1)Magic Number:用來標識這是一個Linux內核可執(zhí)行文件,它的值為0x7f 0x45 0x4c 0x46,“ELF”四個字符的ASCII碼。
2)Class:用來描述寄存器的長度,它的值為1或2,分別表示32位或64位寄存器長度。
3)Data:用來描述存儲器的字節(jié)順序,它的值為1或2,分別表示小端序或大端序。
4)Version:用來描述ELF頭的版本號。
5)Entry:用來描述程序執(zhí)行的入口地址。
6)Phoff:用來描述程序頭表的偏移量。
7)Shoff:用來描述節(jié)頭表的偏移量。
8)Flags:用來描述ELF文件的屬性。
9)Ehsize:用來描述ELF頭的大小。
10)Phnum:用來描述程序頭表中的描述段的數量。
11)Shnum:用來描述節(jié)頭表中的描述節(jié)的數量。
12)Shstrndx:用來描述區(qū)節(jié)名稱字符串所在節(jié)的索引值。
2. 代碼段
vmlinux.bin代碼段包括代碼和常量數據,它們是編譯過程中生成的機器指令和全局符號。其中,代碼是CPU直接執(zhí)行的指令,而常量數據是不可改變的。
在vmlinux.bin中,代碼段一般以“.text”節(jié)的形式存儲。代碼是存放在文本段(text segment)中的,它是只讀的,且只有可執(zhí)行權限。
3. 數據段
vmlinux.bin數據段主要由全局變量、靜態(tài)變量和初始化數據等組成。其中,全局變量指的是在任何函數之外定義的變量,它們的作用域是整個文件,靜態(tài)變量指的是在函數內部定義的變量,但生存期是整個程序執(zhí)行期間都存在的,它們的作用域也是整個文件。
在vmlinux.bin中,數據段一般以“.data”或“.rodata”節(jié)的形式存儲。數據段是存放已初始化的變量和常量的文本段,它是可讀可寫的,但是沒有執(zhí)行權限。
二、vmlinux.bin的特征
1. 可執(zhí)行目標文件格式
vmlinux.bin是一種可執(zhí)行格式的目標文件,這是Linux內核開發(fā)者必須熟悉的。
可執(zhí)行目標文件格式一般包括代碼段、數據段、符號表、重定位表、修復表等部分。當一個程序被編譯鏈接成一個可執(zhí)行目標文件時,其實就是將代碼段、數據段等部分組合在一起生成一個可執(zhí)行文件。
2. 調試信息
vmlinux.bin中包含了大量的調試信息,這是Linux內核開發(fā)者進行工作時必不可少的。
調試信息包括源文件名、行號、變量名、函數名等信息,它們可以幫助開發(fā)者在出現問題時更快地定位和解決問題。
3. 模塊結構
Linux內核可以以模塊化的方式組織代碼和功能,而vmlinux.bin正是這些模塊的。
每個模塊都可以獨立編譯鏈接成一個目標文件,可以在運行時動態(tài)加載和卸載,這就增強了可維護性和可擴展性。
三、vmlinux.bin對Linux內核開發(fā)的影響
vmlinux.bin對Linux內核開發(fā)有著深遠的影響,主要體現在以下幾個方面。
1. 提高了代碼的可重用性
模塊化設計可以讓Linux內核更加靈活和可維護,模塊之間可以互相調用和使用,這就提高了代碼的可重用性。
2. 加強了內核安全性
vmlinux.bin的只讀和不可執(zhí)行權限設計可以限制不必要的內存訪問和執(zhí)行權限,從而加強了Linux內核的安全性。
3. 改善了內核性能
vmlinux.bin中的代碼和數據都是精心優(yōu)化過的,它們可以幫助Linux內核獲得更好的性能和運行效率。
4. 便于內核調試和分析
vmlinux.bin中的調試信息非常豐富,這就方便了Linux內核開發(fā)者進行調試和分析。
vmlinux.bin對Linux內核開發(fā)者來說非常重要,了解它的結構和特征對于開發(fā)出高效、可靠、安全的Linux內核至關重要。
相關問題拓展閱讀:
- linux系統(tǒng)作業(yè),求代碼過程
- linux下安裝后綴為bin的Java JDK
linux系統(tǒng)作業(yè),求代碼過程
謝謝!
Linux內核配置系統(tǒng)由三部組別:
?Makefile:布 Linux 內核源代碼 Makefile定義 Linux 內核編譯規(guī)則;
?配置文件圓哪(config.in):給用戶提供配置選擇功能;
?配置工具:包括配置命令解釋器(配置腳本使用配置命令進行解釋)配置用戶界面(提供基于字符界面、基于 Ncurses 圖形界面及基于 Xwindows 圖形界面用戶配州孝置界面各自應于 Make config、Make menuconfig make xconfig)
些配置工具都使用腳本語言 Tcl/TK、Perl 編寫(包含些用 C 編寫代碼)本文并配置系統(tǒng)本身進行析介紹何使用配置系統(tǒng)所除非配置系統(tǒng)維護者般內核發(fā)者須解原理需要知道何編寫 Makefile 配置文件所本文我 Makefile 配置文件進行討論另外凡涉及與具體 CPU 體系結構相關內容我都 ARM 例僅討論問題明確化且內容本身產影響橘跡碼
2. Makefile
2.1 Makefile 概述
Makefile 作用根據配置情況構造需要編譯源文件列表別編譯并目標代碼鏈接起終形 Linux 內核二進制文件
由于 Linux 內核源代碼按照樹形結構組織所 Makefile 布目錄樹Linux 內核 Makefile 及與 Makefile 直接相關文件:
?Makefile:頂層 Makefile整內核配置、編譯總體控制文件
?.config:內核配置文件包含由用戶選擇配置選項用存放內核配置結( make config)
?arch/*/Makefile:位于各種 CPU 體系目錄 Makefile arch/arm/Makefile針特定平臺 Makefile
?各目錄 Makefile:比 drivers/Makefile負責所目錄源代碼管理
?Rules.make:規(guī)則文件所 Makefile 使用
用戶通 make config 配置產 .config頂層 Makefile 讀入 .config 配置選擇頂層 Makefile 兩主要任務:產 vmlinux 文件內核模塊(module)達目頂層 Makefile 遞歸進入內核各目錄別調用位于些目錄 Makefile至于底進入哪些目錄取決于內核配置頂層 Makefile 句:include arch/$(ARCH)/Makefile包含特定 CPU 體系結構 Makefile Makefile 包含平臺相關信息
位于各目錄 Makefile 同根據 .config 給配置信息構造前配置需要源文件列表并文件 include $(TOPDIR)/Rules.make
Rules.make 文件起著非重要作用定義所 Makefile 共用編譯規(guī)則比需要本目錄所 c 程序編譯匯編代碼需要 Makefile 編譯規(guī)則:
%.s: %.c
$(CC) $(CFLAGS) -S $
目錄都同要求需要各自 Makefile 包含編譯規(guī)則比較麻煩 Linux 內核則類編譯規(guī)則統(tǒng)放置 Rules.make 并各自 Makefile 包含進 Rules.make(include Rules.make)避免 Makefile 重復同規(guī)則于面例 Rules.make 應規(guī)則:
%.s: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $
2.2 Makefile 變量
頂層 Makefile 定義并向環(huán)境輸許變量各目錄 Makefile 傳遞些信息些變量比 SUBDIRS僅頂層 Makefile 定義并且賦初值且 arch/*/Makefile 作擴充
用變量幾類:
1) 版本信息
版本信息:VERSIONPATCHLEVEL, SUBLEVEL, EXTRAVERSIONKERNELRELEASE版本信息定義前內核版本比 VERSION=2PATCHLEVEL=4SUBLEVEL=18EXATAVERSION=-rmk7共同構內核發(fā)行版本KERNELRELEASE:2.4.18-rmk7
2) CPU 體系結構:ARCH
頂層 Makefile 用 ARCH 定義目標 CPU 體系結構比 ARCH:=arm 等許目錄 Makefile 要根據 ARCH 定義選擇編譯源文件列表
3) 路徑信息:TOPDIR, SUBDIRS
TOPDIR 定義 Linux 內核源代碼所根目錄例各目錄 Makefile 通 $(TOPDIR)/Rules.make 找 Rules.make 位置
SUBDIRS 定義目錄列表編譯內核或模塊頂層 Makefile 根據 SUBDIRS 決定進入哪些目錄SUBDIRS 值取決于內核配置頂層 Makefile SUBDIRS 賦值 kernel drivers mm fs net ipc lib;根據內核配置情況 arch/*/Makefile 擴充 SUBDIRS 值參見4)例
4) 內核組信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS
Linux 內核文件 vmlinux 由規(guī)則產:
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o
–start-group
$(CORE_FILES)
$(DRIVERS)
$(NETWORKS)
$(LIBS)
–end-group
-o vmlinux
看vmlinux 由 HEAD、main.o、version.o、CORE_FILES、DRIVERS、NETWORKS LIBS 組些變量( HEAD)都用定義連接 vmlinux 目標文件庫文件列表其HEADarch/*/Makefile 定義用確定先鏈接進 vmlinux 文件列表比于 ARM 系列 CPUHEAD 定義:
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
表明 head-$(PROCESSOR).o init_task.o 需要先鏈接 vmlinux PROCESSOR armv 或 armo取決于目標 CPU CORE_FILESNETWORKDRIVERS LIBS 頂層 Makefile 定義并且由 arch/*/Makefile 根據需要進行擴充 CORE_FILES 應著內核核文件 kernel/kernel.omm/mm.ofs/fs.oipc/ipc.o看些組內核重要文件同arch/arm/Makefile CORE_FILES 進行擴充:
# arch/arm/Makefile
# If we have a machine-specific directory, then include it in the build.
MACHDIR := arch/arm/mach-$(MACHINE)
ifeq ($(MACHDIR),$(wildcard $(MACHDIR)))
SUBDIRS += $(MACHDIR)
CORE_FILES := $(MACHDIR)/$(MACHINE).o $(CORE_FILES)
endif
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
SUBDIRS += arch/arm/kernel arch/arm/mm arch/arm/lib arch/arm/nwfpe
CORE_FILES := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)
LIBS := arch/arm/lib/lib.a $(LIBS)
5) 編譯信息:CPP, CC, AS, LD, ARCFLAGSLINKFLAGS
Rules.make 定義編譯通用規(guī)則具體特定場合需要明確給編譯環(huán)境編譯環(huán)境變量定義針交叉編譯要求定義 CROSS_COMPILE比:
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
……
CROSS_COMPILE 定義交叉編譯器前綴 arm-linux-表明所交叉編譯工具都 arm-linux- 所各交叉編譯器工具前都加入 $(CROSS_COMPILE)組完整交叉編譯工具文件名比 arm-linux-gcc
CFLAGS 定義傳遞給 C 編譯器參數
LINKFLAGS 鏈接 vmlinux 由鏈接器使用參數LINKFLAGS arm/*/Makefile 定義比:
# arch/arm/Makefile
LINKFLAGS :=-p -X -T arch/arm/vmlinux.lds
6) 配置變量CONFIG_*
.config 文件許配置變量等式用說明用戶配置結例 CONFIG_MODULES=y 表明用戶選擇 Linux 內核模塊功能
.config 頂層 Makefile 包含形許配置變量每配置變量具確定值:y 表示本編譯選項應內核代碼靜態(tài)編譯進 Linux 內核;m 表示本編譯選項應內核代碼編譯模塊;n 表示選擇編譯選項;根本沒選擇配置變量值空
2.3 Rules.make 變量
前面講Rules.make 編譯規(guī)則文件所 Makefile 都包括 Rules.makeRules.make 文件定義許變量重要些編譯、鏈接列表變量
O_OBL_OBOX_OBLX_OB:本目錄需要編譯進 Linux 內核 vmlinux 目標文件列表其 OX_OB LX_OB “X” 表明目標文件使用 EXPORT_SYMBOL 輸符號
M_OBMX_OB:本目錄需要編譯裝載模塊目標文件列表同MX_OB “X” 表明目標文件使用 EXPORT_SYMBOL 輸符號
O_TARGETL_TARGET:每目錄都 O_TARGET 或 L_TARGETRules.make 首先源代碼編譯 O_OB OX_OB 所目標文件使用 $(LD) -r 鏈接 O_TARGET 或 L_TARGETO_TARGET .o 結尾 L_TARGET .a 結尾
你網上隨基賣便祥鋒和搜一下Linux文件權限,主要謹盯是chmod,chown這兩個命令看一看就明白了!
mkdir test
touch file1
chmod o+w file1
chmod g-r file1
chmod 755 file1
chmod 400 file1
二、
chmod 744 backup.tar.gz
chmod 777 backup.tar.gz
chmod 755 backup.tar.gz
chgrp adm backup.tar.gz
chown adm backup.tar.gz
linux下安裝后綴為bin的Java JDK
1、sun網站上下載jdk-6u13-linux-i586.bin;
2、一般默認下載到文檔;
3、比如安裝到/usr/java目錄下;
4、使用命令建握御立目錄:sudo mkdir -v /usr/java;
5、拷貝下載的jdk-6u13-linux-i586.bin到以上建立的目錄中:sudo cp -v /home/wmseal/文檔/jdk-6u13- linux-i586.bin /usr/java;
6、擾祥進入安裝目錄:cd /usr/java;
7、賦予權限:sudo chmod u+x jdk-6u10-linux-i586.bin;
8、執(zhí)行安裝:段李巖sudo ./jdk-6u10-linux-i586.bin;
9、配置環(huán)境變量: export JAVA_HOME=/usr/java/jdk1.6.0_13 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
10、測試是否成功:java -version java version “1.6.0_13” Java(TM) SE Runtime Environment (build 1.6.0_13-b33) Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing) 見到這個信息就是你安裝成功了!
關于vmlinux.bin結構的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網、IDC服務、應用軟件開發(fā)、網站建設推廣的公司,為客戶提供互聯(lián)網基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)成都老牌IDC服務商,專注四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質idc數據中心機房租用、服務器托管、機柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。
網站題目:深入探析vmlinux.bin結構及其影響(vmlinux.bin結構)
轉載來于:http://www.5511xx.com/article/cdcchip.html


咨詢
建站咨詢
