當前位置:首頁 » 編程軟體 » gentoo編譯

gentoo編譯

發布時間: 2024-10-22 15:55:49

1. arch和gentoo的區別和優缺點,如何選擇呢

不同於其他常見的linux distro (如 ubuntu等), 兩個系統都是屬於 「從零」做起,默認系統安裝好後,除了最基本的系統軟體(如shell,及一些核心軟體如sed/find等)外,其他任何應用程序(比如 X系統, 桌面程序,firefox, office, 郵件工具等)都沒有安裝。 這時你需要根據自己的需要來逐步安裝。

Arch 於 Gentoo 的區別在於, Gentoo 的任何一個軟體(包括linux kernel)安裝時,實際上是下載源代碼然後在本機上編譯獲得,這樣用戶可以根據自己的物理硬體情況 (CPU類型,單核或多核等) 來調節編譯選項從而獲得更好的優化 (比如編譯內核時可以去掉不需要的模塊等),對於高手而言,這種方式得到的系統應該是非常優化的,但是如果是新手,有可能因為配置不當反而得到低效的軟體甚至導致出現問題。 而 Arch 安裝軟體時,下載的是 Arch 維護者已經編譯打包好的程序,直接下載到本機使用的, 雖然可能會損失一定的優化(在當前的硬體水平下,應該是感覺不出來的),但是安裝程序的速度會比較快,同時不用關心源碼,另外 Arch也能支持類似於Gentoo的從源碼安裝的方式,一般用這種方式來安裝linux內核。

Arch/Gentoo 於其他發行版 (如ubuntu/debian)相比,升級是「無縫」的,不存在像ubuntu那樣隔半年一個新版本,不同版本間的升級可能導致很多問題,而Arch/Gentoo的升級就是通過平時定期的軟體更新。 另外, Arch/Gentoo相對於其他發行版,一般總能更新到最新的軟體,但是往往有可能因為更新太快而出現問題。

總而言之, Arch/Gentoo適用於對Linux系統比較了解的人使用,一般來說 Arch/Gentoo用戶需要對linux kernel的編譯,linux系統的管理,目錄結構,常用系統管理/維護工具等有較深入的了解。當使用Arch/Gentoo出現問題時,能通過日誌/google等方式來排查解決問題。

而其他發行版(尤其是ubuntu),最適合普通用戶,安裝好後就能上網/office,而不需要對linux本身有太多了解,當然隨著使用這些發行版,用戶自然也能學到一些linux知識。

2. gentoo 和 archlinux 有什麼優缺點

Gentoo和Arch都是滾動更新的Distro。但是Gentoo是基於源碼的,而Arch是二進制。
Gentoo優點是強大的定製性、滾動更新但仍然足夠穩定;缺點是編譯比較耗費時間(CPU沒有足夠快的話),對機器特別是CPU要求高。
Arch的優點是軟體包多,滾動更新且升級迅速,相較Gentoo更易掌握使用;缺點是近乎強迫式必須緊跟最新滾動升級,不然容易出問題。

3. 編譯gentoo內核時,錯誤:No rule to make target 'firmware/radeon/r900_rlc.bin'

有可能你選內核選項時,r900依賴的選項你沒有選

4. 如何用gentoo交叉編譯一個基本系統

嵌入式系統的編譯環境
為某個平台開發軟體,首先需要一個編譯環境。一般來說,編譯環境包括三部分:工具 鏈/運行環境/編譯方法。對於嵌入式系統來說,常見的編譯環境有三種:

本地環境。如很流行的Ubuntu for ARM,利用官方製作好的目標機鏡像(通常包含了 編譯環境),直接在目標機上編譯/安裝軟體,與PC機開發完全一樣。這種方法簡單省 事。缺點也顯而易見,編譯速度慢,耗時長,特別是較大的軟體包(如xbmc)的時候, 程序員不是停下來喝杯咖啡就可以收攤,恐怕得打場通宵dota後才能看到結果 了…(或許distcc能有所改善)

虛擬環境。在PC上建立目標機的虛擬環境,如QEMU-ARM,然後chroot到虛擬環境 中編譯/安裝軟體。這種方法利用了PC的處理能力,速度比本地環境要快得多,但 QEMU並不能完美的模擬目標機環境,如不支持某些系統調用等,這可能導致它不能 正確的編譯某些軟體。

交叉編譯。為目標機交叉編譯軟體,這是最常規的辦法,也是上面兩種方法實現的基 礎。說交叉編譯是「臟活」,是因為需要手工解決軟體包的所有依賴問題,手工編譯 每一個軟體包,並且解決軟體包對目標機兼容問題… 看網上鋪天蓋地關於求教/指導 某個軟體包如何正確交叉編譯就知道,有多少程序員在被它虐?

gentoo下的交叉編譯
gentoo是一個metadistribution,從源代碼構建整個系統,同時支持很多不同的體 系如alpha/arm/hppa/ppc/sh/sparc/s390等,也為交叉編譯提供了便利的工具,這是 其它二進制發行版沒有辦法比擬的(scratchbox也顯得弱爆了)。

gentoo下的交叉編譯通過crossdev和portage來實現。portage帶來的好處是自 動解決依賴和自動升級更新系統,跟本機環境一樣。

製作工具鏈
crossdev用來製作交叉工具鏈,並且還提供了交叉編譯環境下的emerge的輔助腳本。如 下編譯arm平台的工具鏈:

$ sudo crossdev -t arm-supertux-linux-gnueabi
這樣,crossdev最終製作了符合「gentoo規范」的arm交叉編譯器。

運行環境
crossdev生成/usr/arm-supertux-linux-gnueabi/目錄作為目標系統 $buildroot。編譯後生成的目標會被emerge到$buildroot,編譯時依賴的環境(如 鏈接庫/頭文件/pkgconfig等)也都在$buildroot。

交叉編譯
有了工具鏈/運行環境,使用的crossdev封裝過的emerge,就可以自由的emerge了。 如交叉編譯bash:

$ sudo emerge-arm-supertux-linux-gnueabi -avu bash
porage會自動把bash的依賴如ncurses/readline一起emerge到$buildroot。 交叉編譯就是變得如此簡單…

碰到的問題
站在巨人的肩膀上可以看的更遠,前提是我們先要爬上巨人的肩膀。portage是一個快 速更新迭代的系統,並不完美,維護者沒有辦法測試每個軟體包的所有兼容性。所以, 當你想安裝一個圖形環境如$emerge -avu enlightenment時,很可能會出現錯誤。但 portage提供了細粒度的控制幫助解決這樣的問題。下面是我碰到過一些情形和解決方 法:

由於軟體包的環境變數引起的問題,如鏈接庫指向了/usr/bin,而非 $buildroot。可以配置$buldroot/etc/portage/env/目錄下相應的文 件,portage會自動source該文件,從而改變編譯時的環境。

portage沒有包含該軟體或portage自身的bug引起,如默認使能了某個在目標機 平台不能使用的特性。建立一個針對目標機的overlay,自己編寫相應軟體包的 ebuild文件指導portage進行交叉編譯。

當某個軟體包分階段編譯時,如perl編譯時先生成miniperl,通過miniperl最 後生成perl目標映像。由於miniperl被交叉編譯器生成目標機的映像,正常情況 下不能主機環境中繼續運行生成最終的目標映像。這就要藉助qemu-arm+binfmt模 擬目標機環境,讓miniperl在主機環境中也能無縫的運行。

從形式上看,處理上面幾種情況,也是「臟活」。不僅需要了解該軟體包的編譯環境, 還需要了解portage的原理,還要知道ebuild的書寫語法。但是,與傳統的交叉編譯 方式比起來,這是一勞永逸的工作,別人使用我的運行環境和overlay,即不需再做什 么就能生成最終的目標機系統。

5. gentoo重新編譯內核,是否需要重新安裝之前安裝的軟體詳細點。

大部分的軟體不需要重新編譯
少量的會需要重新編譯下,比如:顯卡驅動等硬體驅動或者一些需要內核模塊支持的程序

如果你更換了內核版本,那麼這些程序一定需要重新編譯
如果你沒有更換內核版本,但是改動涉及很多硬體方面的內容,那也需要重新編譯這部分軟體,否則會這些軟體/硬體沒辦法工作~

有一個工具:mole_rebuild (emerge mole_rebuild就可以了)
如果你不確定是否需要emerge編譯哪些軟體,那就執行:
mole_rebuild list (在我的電腦上就一個軟體需要重新編譯,就是閉源的ati顯卡驅動)

則會列出需要重新編譯的軟體(它不會記住你是否重新編譯過了這些軟體,而是告訴你這些可能需要重新安裝,所以你更新內核之後執行一次mole-rebuild就可以了)
然後你可以執行:mole-rebuild rebuild來重新安裝這些軟體~

熱點內容
linux使用命令 發布:2024-10-22 18:45:43 瀏覽:253
演算法遞歸題 發布:2024-10-22 18:41:51 瀏覽:879
qq空間怎麼清除緩存 發布:2024-10-22 18:37:39 瀏覽:649
演算法開發板 發布:2024-10-22 18:23:54 瀏覽:190
ftp條款 發布:2024-10-22 18:06:36 瀏覽:695
客服的服務密碼是什麼 發布:2024-10-22 17:55:24 瀏覽:802
列印asp源碼 發布:2024-10-22 17:52:36 瀏覽:300
充值卡如何查詢卡號密碼 發布:2024-10-22 17:43:09 瀏覽:476
scrollerandroid 發布:2024-10-22 17:40:13 瀏覽:445
pythonaesecb 發布:2024-10-22 17:30:45 瀏覽:731