首先uname -r看一下你當前的linux內核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname -r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核 make menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make bzImage、make moles、make moles
4、安裝,make install
5、.創建系統啟動映像,到 /boot 目錄下,執行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於 /boot/grub/grub.cfg 文件的設置,找到if [ "${linux_gfx_mode}" != "text" ]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改 set default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make menuconfig這一步,改好後就萬事ok了。
最後再用uname -r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?
⑵ Linux中top命令輸出指標詳解
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器。top顯示系統當前的進程和其他狀況,是一個動態顯示過程,可以自動或者通過用戶按鍵來不斷刷新當前狀態。如果在前台執行該命令,它將獨占前台,直到用戶終止該程序為止.。比較准確的說,top命令提供了實時的對系統處理器的狀態監控,顯示系統中CPU最「敏感」的任務列表。top命令可以按CPU使用、內存使用和執行時間對任務進行排序。而且該命令的很多特性都可以通過互動式命令或者在個人定製文件中進行設定.。
下面詳細介紹它的使用方法。
對於一個新手來說,如果從來沒有使用過top命令,在命令行模式下直接輸入top,可以查看到當前所有進程的信息。
輸出結果中,有很多指標。下面介紹各個指標都代表什麼含義。
top命令輸出結果中,統計信息區前五行是系統整體的統計信息。
第一行是任務隊列信息,同 uptime 命令的執行結果。其內容如下:
第二、三行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:
最後兩行為內存信息。內容如下:
進程信息區統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示內容。
參考列表:
⑶ linux系統作業,求代碼過程
謝謝!
Linux內核配置系統由三部組別:
?Makefile:布 Linux 內核源代碼 Makefile定義 Linux 內核編譯規則;
?配置文件(config.in):給用戶提供配置選擇功能;
?配置工具:包括配置命令解釋器(配置腳本使用配置命令進行解釋)配置用戶界面(提供基於字元界面、基於 Ncurses 圖形界面及基於 Xwindows 圖形界面用戶配置界面各自應於 Make config、Make menuconfig make xconfig)
些配置工具都使用腳本語言 Tcl/TK、Perl 編寫(包含些用 C 編寫代碼)本文並配置系統本身進行析介紹何使用配置系統所除非配置系統維護者般內核發者須解原理需要知道何編寫 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:規則文件所 Makefile 使用
用戶通 make config 配置產 .config頂層 Makefile 讀入 .config 配置選擇頂層 Makefile 兩主要任務:產 vmlinux 文件內核模塊(mole)達目頂層 Makefile 遞歸進入內核各目錄別調用位於些目錄 Makefile至於底進入哪些目錄取決於內核配置頂層 Makefile 句:include arch/$(ARCH)/Makefile包含特定 CPU 體系結構 Makefile Makefile 包含平台相關信息
位於各目錄 Makefile 同根據 .config 給配置信息構造前配置需要源文件列表並文件 include $(TOPDIR)/Rules.make
Rules.make 文件起著非重要作用定義所 Makefile 共用編譯規則比需要本目錄所 c 程序編譯匯編代碼需要 Makefile 編譯規則:
%.s: %.c
$(CC) $(CFLAGS) -S $< -o $@
目錄都同要求需要各自 Makefile 包含編譯規則比較麻煩 Linux 內核則類編譯規則統放置 Rules.make 並各自 Makefile 包含進 Rules.make(include Rules.make)避免 Makefile 重復同規則於面例 Rules.make 應規則:
%.s: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $< -o $@
2.2 Makefile 變數
頂層 Makefile 定義並向環境輸許變數各目錄 Makefile 傳遞些信息些變數比 SUBDIRS僅頂層 Makefile 定義並且賦初值且 arch/*/Makefile 作擴充
用變數幾類:
1) 版本信息
版本信息:VERSIONPATCHLEVEL, SUBLEVEL, EXTRAVERSIONKERNELRELEASE版本信息定義前內核版本比 VERSION=2PATCHLEVEL=4SUBLEVEL=18EXATAVERSION=-rmk7共同構內核發行版本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 由規則產:
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 定義編譯通用規則具體特定場合需要明確給編譯環境編譯環境變數定義針交叉編譯要求定義 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 表示本編譯選項應內核代碼靜態編譯進 Linux 內核;m 表示本編譯選項應內核代碼編譯模塊;n 表示選擇編譯選項;根本沒選擇配置變數值空
2.3 Rules.make 變數
前面講Rules.make 編譯規則文件所 Makefile 都包括 Rules.makeRules.make 文件定義許變數重要些編譯、鏈接列表變數
O_OBJSL_OBJSOX_OBJSLX_OBJS:本目錄需要編譯進 Linux 內核 vmlinux 目標文件列表其 OX_OBJS LX_OBJS "X" 表明目標文件使用 EXPORT_SYMBOL 輸符號
M_OBJSMX_OBJS:本目錄需要編譯裝載模塊目標文件列表同MX_OBJS "X" 表明目標文件使用 EXPORT_SYMBOL 輸符號
O_TARGETL_TARGET:每目錄都 O_TARGET 或 L_TARGETRules.make 首先源代碼編譯 O_OBJS OX_OBJS 所目標文件使用 $(LD) -r 鏈接 O_TARGET 或 L_TARGETO_TARGET .o 結尾 L_TARGET .a 結尾
⑷ 如何從Linux源碼創建RPM或DEB包
在Linux系統操作中,因為某些原因而想要直接從源碼創建安裝的軟體包,下面就如何在Linux系統下從源碼創建RPM或DEB包,以便將來可以更容易的卸載程序。
如果已經從它的源碼運行「make install」安裝了linux程序。想完整移除它將變得真的很麻煩,除非程序的開發者在Makefile里提供了uninstall的目標設置。否則必須在安裝前後比較系統里文件的完整列表,然後手工移除所有在安裝過程中加入的文件。
這時候Checkinstall就可以派上使用。Checkinstall會跟蹤install命令行所創建或修改的所有文件的路徑(例如:「make install」、「make install_moles」等)並建立一個標準的二進制包,讓能用發行版的標准包管理系統安裝或卸載它,(例如Red Hat的yum或者Debian的apt-get命令)。已知它在 Slackware、SuSe、Mandrake 和 Gentoo 上也工作很好,請參考其官方文檔。
在這只集中在紅帽子和Debian為基礎的發行版,並展示怎樣從源碼使用Checkinstall創建一個RPM和DEB軟體包
在linux上安裝Checkinstall
在Debian及其衍生發行版上安裝Checkinstall:
# aptitude install checkinstall
在紅帽子的發行版上安裝Checkinstall,你需要下載一個已經打包好的Checkinstall rpm包(例如:從 http://rpm.pbone.net/找到),不過它已經從Repoforge庫里刪除了。這個包是針對Cent OS6的,不過也可在Cent OS7里工作。
# wget
ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm# yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm
一旦checkinstall安裝好,你就可以用下列格式創建一個特定的軟體包
# checkinstall 《install-command》
如果沒有參數,默認安裝命令「make install」將被使用
用Checkinstall創建一個RPM或DEB包
在這個例子里,我們將創建一個htop包,這是一個linux互動式文本模式進程查看器(類似 top)。
首先,讓我們從項目的官方網站下載源代碼,作為一個好的習慣,我們存儲源碼包到/usr/local/src下,並解壓它。
# cd /usr/local/src# wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz# tar xzf htop-1.0.3.tar.gz# cd htop-1.0.3
讓我們看看htop的安裝命令是什麼,以便我們能用Checkinstall命令調用它,如下面所示,htop用「make install」命令安裝。
# 。/configure# make install
因此,要創建一個htop安裝包,我們可以不帶任何參數的調用checkinstall,這將使用「make install」命令創建一個包。在這個過程中, checkinstall命令會問你幾個問題。
簡而言之,如下命令會創建一個htop包:
# 。/configure# checkinstall
「Should I create a default set of package docs?(我會創建一個默認設置的包文件?)」,回答「Y」:
此可以輸入一個包的簡短描述,然後按兩次回車:
輸入一個數字以修改下面的任何值或ENTER繼續:
上面就來Linux系統下使用checkinstall從源碼創建RPM或DEB包的方法。
⑸ 如何查看 linux 內核源代碼
Linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。
對於源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對於linux內核源代碼來講,我認為,基本要求是:1、操作系統的基本知識;2、對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標准C的擴展的知識的了解。另外在閱讀之前,還應該知道Linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網路等組成。看一下Linux內核源代碼就可看出,各個目錄大致對應了這些方面。Linux內核源代碼的組成如下(假設相對於linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬體體系結構相關的核心代碼。如對於X86平台就是i386。
include 這個目錄包括了核心的大多數include文件。另外對於每種支持的體系結構分別有一個子目錄。
init 此目錄包含核心啟動代碼。
mm 此目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/*/mm目錄下,如對應於X86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位於此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
moles 此目錄包含已建好可動態載入的模塊。
fs Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。
net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/*/lib/目錄下。
scripts此目錄包含用於配置核心的腳本文件。
Documentation 此目錄是一些文檔,起參考作用。
俗話說:「工欲善其事,必先利其器」。 閱讀象Linux核心代碼這樣的復雜程序令人望而生畏。它象一個越滾越大的雪球,閱讀核心某個部分經常要用到好幾個其他的相關文件,不久你將會忘記你原來在干什麼。所以沒有一個好的工具是不行的。由於大部分愛好者對於Window平台比較熟悉,並且還是常用Window系列平台,所以在此我介紹一個Window下的一個工具軟體:Source Insight。這是一個有30天免費期的軟體,可以從www.sourcedyn.com下載。安裝非常簡單,和別的安裝一樣,雙擊安裝文件名,然後按提示進行就可以了。安裝完成後,就可啟動該程序。這個軟體使用起來非常簡單,是一個閱讀源代碼的好工具。它的使用簡單介紹如下:先選擇Project菜單下的new,新建一個工程,輸入工程名,接著要求你把欲讀的源代碼加入(可以整個目錄加)後,該軟體就分析你所加的源代碼。分析完後,就可以進行閱讀了。對於打開的閱讀文件,如果想看某一變數的定義,先把游標定位於該變數,然後點擊工具條上的相應選項,該變數的定義就顯示出來。對於函數的定義與實現也可以同樣操作。別的功能在這里就不說了,有興趣的朋友可以裝一個Source Insight,那樣你閱讀源代碼的效率會有很大提高的。怎麼樣,試試吧!
⑹ 如何從Linux源碼創建RPM或DEB包
你好,這個需要安裝Checkinstall創建一個RPM和DEB軟體包。
在linux上安裝Checkinstall,在Debian及其衍生發行版上安裝Checkinstall:
# aptitude install checkinstall
在紅帽子的發行版上安裝Checkinstall,需要下載一個已經打包好的Checkinstall rpm包。
# wget
ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories
/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm#
yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm
一旦checkinstall安裝好,就可以用下列格式創建一個特定的軟體包
# checkinstall 《install-command》
如果沒有參數,默認安裝命令「make install」將被使用Checkinstall創建一個RPM或DEB包。在這個例子里,將創建一個htop包,這是一個linux互動式文本模式進程查看器(類似 top)。
首先,讓從項目的官方網站下載源代碼,作為一個好的習慣,存儲源碼包到/usr/local/src下,並解壓。