linuxmvn後台編譯
在 Ubuntu 下寫過一年代碼,之間折騰過各種 Linux Distribution,最後還是放棄了(詳情見 我的Linux發行版/桌面環境選擇之路 ),Linux 桌面太坑,還是留在伺服器端吧。
現在用的是 Win8.1 + Ubuntu Server 14.04 (跑在 VM 里)。
平時用 Win 下的 PHP 環境足矣,實在不行就用後台的方式開啟 VM,用 Xshell 登錄進去操作。
這樣,就實現了在 Windows 下寫代碼,在 Linux 下運行。(SSD表示毫無壓力)
最關鍵的是,不耽誤你打 Dota !
其實作為一個 PHP程序員,我覺得更重要的是 PHP 開發工具的選擇(用 VIM 的人請無視)。我現在用的是 PHPStorm。(JetBrains, 業界良心!)
你也可以去後盾人那看看.那有很多教學視頻.定能幫你解答.
㈡ 如何編譯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下編譯maven工程,報外部jar包找不到的問題,已經使用extdirs引入了外部jar包,求助。
變換幾種方案修改配置排排錯,或換個server環境再試。
沒遇到過這種問題,祝早日解決!
㈣ linux環境下怎麼用maven編譯一個已有的java項目
mvn clean compile
㈤ linux 編譯
孩子,你考慮多了,makefile在make時只會編譯修改過的文件,然後再重新生成靜態庫和動態庫加上最後的可執行程序,就這么多了,不會整個重新編譯,除非是菜鳥寫得makefile依賴關系有問題。
像整個軟體make需要1個小時,只會在初次編譯或者make clean後再次make才會這樣,放心吧,正式的開源軟體你改幾個源文件或模塊不會那麼久的
㈥ linux編譯安裝命令
Linux編譯安裝相關命令,下面以Linux安裝Mysql工具為例進行說明,代碼如下:
1、測試環境在Linux MySQL下進行,版本系統為CentOS5,以下為相關軟體:
mysql-5.1.30
memcached-1.2.6
libevent-1.4.7-stable
memcached_functions_mysql-0.8
libmemcached-0.26
2、編譯安裝Linux MySQL
[root@localhost~]#tarxzfmysql-5.1.30.tar_001.gz
[root@localhost~]#cdmysql-5.1.30
[root@localhost~]#./configure--prefix=/usr/local/mysql51
[root@localhost~]#make
[root@localhost~]#makeinstall
[root@localhost~]#./scripts/mysql_install_db--user=mysql--skip-name-resolve
[root@localhost~]#/usr/local/mysql51/bin/mysqld_safe
#連接符&這是放入後台,&&是前一個正確執行,才會執行後一個
#Linux編譯安裝流程./configure&&make&&makeinstall(默認目錄安裝)
#./configure--prefix=/usr/local/pcre&&make&&makeinstall(指定安裝目錄)
㈦ linux編譯 java 文件
1.首先用vim 在linux下編寫一個名為Test.java的文件,代碼如下:
class
Test{ public static void main(String []args){
System.out.println("test input main arguments");
System.out.println(args[0]+" "+args[1]);
System.out.println("end of main"); } }
代碼很簡單,只有一個main函數用來輸出我輸入的前兩個參數,注意前兩個參數如果不輸入會拋數組越界 的異常。
2.vim編輯完後按esc進入命令模式,然後shift+ZZ保存並退出。然後通過javac Test.java 即可對該文件進行編譯,編譯會可以看到在該目錄下生成了一個Test.class文件。
3。編譯時沒有拋出異常說明代碼成功編譯,接下來看看怎麼運行吧,其實也很簡單,就通過如下命令即可:
java Test hello world
輸出結果是:
test input main arguments
hello world
end of main
㈧ Linux系統里如何編譯匯編程序。
linux 編譯匯編程序常用的有兩種,一種是A&T方式的,你gcc 就可以編譯了。還有一種是80X86方式,一般是用NASM,NASM你要在安裝LINUX時就要添加軟體包,或者你進入圖型界面,增加NASM軟體包,就可以編譯了。
㈨ linux 下 如何實現c++文件編譯完直接運行
一條命令的就是
gcc
XXXXXXXXXXX
&&
./XXXXXX
&&
是前面運行正確後面繼續運行。
||
是前面錯誤後面繼續運行
;
是前面運行完不管對錯都繼續運行
&
是前面後台運行,之後馬上繼續運行後面的,也就是不管前面是不是運行完成,還是對錯,都馬上繼續運行後面的(這個可以後面不要命令,注意這個是一個
&
)。
其實
Shell
腳本相對更適合你的要求。這樣不需要自己再輸入這堆命令,直接運行腳本就行了。
㈩ 做linux後台開發需要對linux操作系統學習到什麼程度
linux入門學習
一、關於Linux
1、Linux干什麼用?
首先,很少有人用Linux做桌面系統,因為Windows桌面系統已經足夠好了。我們主要把Linux用作網路伺服器的操作系統。如果你和你的應用符合下面的幾條,那麼你合適使用Linux:
*不願意花錢在操作系統和網路應用上。
*用D版系統受良心譴責或害怕承擔責任。
*想得到和花錢的系統差不多的性能。
*在用戶面前顯得水平較高。
*認識幾個弄Linux的高手,或者知道在哪裡能夠找到問題答案。
2、每種Linux發行包差別很多嗎?
如果你在上世紀80年代末到95年之前這段時間大量使用PC機的話,那對於Linux你應該很好理解:它就象一個有著32位搶先多任務核心的DOS,其區別在於外表看起來像是一種UNIX。Linux是好多人用智慧堆砌起來的,初學者經常問:「RedHat好還是Slackware好?」。這個人同時還面臨上百種選擇,這的確讓人頭痛。大部分Linux發行包實際上很簡單,幾乎所有的發行包都有相同的內核(也許是不同版本),外部命令和數據文件的差別也僅僅局限於在文件系統中的存放位置不同(這導致了某些兼容性問題,因為在某些地方找不到特定的文件嘛)。另外就是有些發行包為了顯示自己的卓而不群,在發行包中增加了一些自己的實用程序。實際上動手修改內核的廠商不算太多,因為這樣會內核官方版本的不斷更新而手忙腳亂。當然有一些嵌入式系統開發商在Linux基礎上做了自己的系統另說。
擁有眾多的發行包是Linux的一個很討厭的問題,在這一點上,我更喜歡FreeBSD,因為它只有一個官方發行版本,也運行得比較穩定。可給Linux做軟體的程序員太多了,Linux上面的資料也更多。記住:當一個傢伙跟你說用哪個發行版本無所謂的時候,那他就是專家。
3、Linux業余愛好者的東西嗎?
這樣的宣傳給了很多人這樣的印象。其實,Linux是一個嚴肅的操作系統,擁有一切操作系統共有的特性。它可以用在很多嚴肅的場合。
4、Linux性能比Windows更好嗎?
這里的答案會讓你失望,據我以往的實際測試,2.2版本的Linux核心的性能比windows2000要低。值得欣慰的是2.4版本的核心性能有大幅度提高基本上接近了Windows2000。但Windows2000復雜的圖形界面佔用了相當的系統資源。
5、Linux比Windows更復雜更專業嗎?
從復雜度上說,Windows2000要比Linux復雜很多。在核心技術上,Windows也更先進。
6、Linux更可靠嗎?
應該從兩個角度評價系統的可靠性。(1)系統自身的可靠性,兩者象差不多。人們普遍認為的Windwos不如Linux可靠的印象來源於Windows眾多的良莠不齊的軟體。當然,Linux比Windows結構簡單,在一定程度上也可以提高可靠性。(2)從安全性角度來說,Linux遠遠高於Windows系統,道理很簡單:樹大招風嘛。另外,Linux的源代碼開放機制使得漏洞發現和消滅得很快。而Windows相對就顯得比較官僚了。這里補充一點,我用過的最可靠的系統是BSD類的OS,可靠性和安全性都可圈可點。
7、Linux真的不用花一分錢嗎?
大部分的發行包需要花少量的錢購買。當然你也可以從網路上DOWN。其實這些發行包未必符合你的應用,一般都需要經過一些改動和定製才能運行好。當然,花的錢跟Windows沒法比。
二、Linux安裝注意事項
現在的大部分發行包都很容易安裝,基本上都是圖形向導式的,每個發行包都不太相同,也無法一一描述,如果你連安裝都不明白,那就別用Linux了。這里僅僅說明幾個注意的問題。
1、如果要和Windows混裝,一定要先裝Windows,後裝Linux。
2、分區的時候,根據計劃安裝的軟體靈活決定分區。一般分區有:/,/root,/usr,/var和swap分區,其中swap分區類型和其他不同需要專門選擇一下,它的空間一般是物理內存的兩倍即可。/root分區是緊急情況root用的,有64兆就行了。
3、當然,為了方便,你可以安裝發行包給你做好的軟體。但我安裝Linux的習慣做法是開始就安裝一個最小系統,然後安裝所有的編譯工具。安裝編譯工具的方法一般都通過你用的發行包的包管理工具實現,這樣最方便。比如在TurboLinux中,運行/usr/sbin/Turbopkg就可以了。在管理工具中選擇所有關於Developoment相關的選項或gcc相關選項,一般就可以了。
4、lilo一定要裝。否則一旦出現分區問題都不好辦。
5、如果和Windows混裝的時候,裝完了系統起不來了。可以用98啟動盤啟動,然後用FDISK
/MBR回復主引導分區來保住Windows分區。
在安裝了最小系統和全套的編譯器後,我們應該得到一個比較干凈的系統。在這個系統上,可以下載和安裝各種應用軟體了。
三、基本使用
1、文件系統
無論有多少個分區,整個文件系統都是一棵完整的樹結構。經常用到的目錄有:
(1)/usr:存放各種應用程序文件用。其中的/usr/local用來存放後安裝的軟體
(2)/var:用來存放所有的數據文件
(3)/proc:裡面的文件用來表示系統內核的各種配置和狀態。這一塊不是真正的文件系統,而是內存裡面的各種數據。可以從這里得到一些常用的系統信息。比如CPU內存什麼的。
(4)/etc:這里是放置所有的系統配置文件。一般情況下,後安裝的軟體的配置文件不會放到這里。除非你是用RPM安裝的隨發行包配的軟體或者故意這樣做。我不喜歡把不同軟體的文件混在一起,因此通常讓不同的軟體的配置文件放在各自的目錄中。
2、常用的命令
這里我列出一些經常用的命令,具體的用法可以參見相關手冊頁(希望你的英文不象我這么差)。
vi(一定要會用這個你非常討厭的東西,如果你屈服了,可以選擇另一個叫做pico的編輯器,它有點象DOS的edit)
head(用來看很長的文件用)
tail(同上)
netstat(看網路狀態)
tar(解開.tar.gz的壓縮包)
ps(察看進程)
kill(幹掉進程)
top(看系統狀況)
shutdown(關閉系統)
cat(看文件內容)
ping
(看網路連通狀況)
ftp(傳輸文件)
man(手冊)
上面這些命令都是最最常用的,一定要把基本用法記牢。事實上,每人能記住全部命令或一個命令的全部參數,記住幾個常用的就行了。其他的查書。
3、內核升級
如果你不願意冒險,可以跳過這個部分。不過根據我實際使用的經驗,2.4.x版本的內核性能比2.2.x的性能至少提高40%,還是很值得一試的。現在最新的發行包幾乎都帶有新的2.4內核,但是版本號想對保守。這里,我的建議是在決定升級任何部分的時候,一定要首先看一下所謂的「currect
version release
note」信息,裡面告訴你本次版本升級都有些什麼改動。如果改動的內容不涉及你當前的環境或需求,只是增加了一些邪門設備的驅動,你大可不必急著升級。補充一句話:Linux的內核版本號的中間一位是奇數的是非穩定版本,比如2.3,是偶數的才是穩定版本。
升級內核的步驟如下:
(1)首先在網上找到你打算升級的內核文件,一般名字是:linux-2.x.xx.tar.gz,把這個文件復制到/usr/src。(不知道在哪裡找?看看:http://www.kernel.org ,最好找到.tar.gz格式的,比如這里:http://www.kernel.org/pub/linux/kernel/v2.x/)。下面的升級舉例是從2.2.18升級到2.5.7(這是最新的內核了,你使用其它的版本別忘了改變版本號)
(2)解壓縮:tar
zxvf linux-2.5.7.tar.gz後生成一個目錄:linux-2.5.7。
(3)進入/usr/src,用ls –l
命令可以看到src裡面有一個連接,類似於:linux -> linux-2.2.18/ (連接指向你當前用的內核版本)。首先刪除這個連接(rm
linux),用ln -s linux-2.5.7 linux 命令重建連接。我想你一定不會連這里的版本號都照抄吧?
(4)進入linux-2.5.7
目錄,如果不是第一次編譯這個內核,最好用命令:make mrproper
刪掉上次編譯產生的.o文件等,當然以前保存的配置也丟了。
(5)用命令:make
menuconfig命令調整內核配置以適應你目前的環境,記住,不懂的配置不要亂動。首要任務是調整各種硬體的環境,比如SCSI卡:SCSI
support/SCSI low-level drivers,不知道現在的SCSI卡型號?在/proc/scsi中可以找到。還有網卡,在Network
Device Support
裡面。不知道現在的網卡型號?在這個文件裡面寫著呢:/proc/net/PRO_LAN_Adapters/eth0.info或/proc/pci文件中也可以找到
。在menuconfig中用空格鍵改變選項狀態,前面的<*>表示該功能編譯在內核中,主要是運行速度快。<
>表示不需要該功能。表示把該功能編譯成模塊,通常為了減小尺寸,和更換方便而把某些驅動編譯成模塊。
(6)下面的事情比較程序化,照著做:make
dep (檢查文件的完整性,過程很復雜)
(7)make bzImage
注意大小寫(真正開始編譯了耶!我覺著這個最過癮了,屏幕「嘩啦嘩啦」的,這時候你會感覺到,多少不知名的程序員在這個復雜的系統中貢獻了自己的一份力量)
(8)make
moles (編譯那些被標記為的功能模塊或驅動程序)
(9)make
moles_install(把編譯好的模塊復制到指定地點,一般是:/lib/moles/
。注意:不同版本號的模塊是完全分開在不同目錄中的,因為moles跟內核是緊密相關的,混用容易導致系統崩潰)
(10)cd
/usr/src/linux-2.5.7/arch/i386/boot ,用命令:cp
/usr/src/linux2.5.7/arch/i386/boot/bzImage /boot/vmlinuz-2.5.7
把文件bzImage文件改名成vmlinuz-2.5.7復制到/boot/
(11)cp
/usr/src/linux-2.5.7/System.map /boot/System.map-2.5.7
(12)進入/boot目錄,rm
System.map
(13)在/boot目錄中運行ln System.map-2.5.7 System.map
10-13兩個步驟每次重新編譯都要做。
(14)我開始提醒過的,但願你安裝了lilo
(否則你就高唱:「神啊,救救我吧!」),編輯文件:/etc/lilo.conf
,做下面的編輯:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
lba32
default=linux-2.5.7
image=/boot/vmlinuz
label=linux
initrd=/boot/initrd
read-only
root=/dev/sda5
image=/boot/vmlinuz-2.5.7
label=linux-2.5.7
initrd=/boot/initrd
read-only
root=/dev/sda5
黑體字部分是後加的和修改的。萬一你沒有安裝lilo,你只能修改/boot下面的連接指向你新的System.map和vmlinuz
, 而不用修改lilo了。這樣也能啟動,但是一旦出現問題,你的機器就啟動不了了。
(15)執行命令:lilo
(用來更新lilo數據),注意輸出的結果:帶星號的是預設的。
(16)祈禱,然後reboot 系統重新啟動後,用uname –a
可看到新的內核起作用了。如果出現任何問題不能引導了,你需要在lilo的引導界面選擇原來的內核啟動,進入系統後重新改變內核參數,調整硬體或其他配置。然後重復前面所有過程。