內核編譯器
⑴ 詳細介紹linux內核開發工具都有哪些
1、Source Insight
Source Insight是Windows平台下一款流行度極高的源碼閱讀和編輯工具。不少Linux開發人員還是習慣於在Windows下進行源碼編輯,甚至查看和編輯Linux內核源碼,依然在Source Insight中完成。
說明:Source Insight是一款版權軟體,需要自行解決版權問題。
安裝Source Insight軟體後,新建一個工程,取名並指定數據存放位置,如圖 1.1所示。
圖 1.1 新建工程
點擊OK按鈕,進入工程設置界面,如圖 1.2所示。
圖 1.2 工程設置
然後添加源碼。瀏覽選中Linux內核源碼文件夾後,點擊「Add Tree」按鈕,將內核源碼樹的全部文件添加到工程中,如圖 1.3所示。
圖 1.3 添加內核源碼
添加完成,即可在Source Insight中進行源碼閱讀和編輯了,如圖 1.4所示。
圖 1.4 在Source Insight中閱讀源碼
2、Eclipse
Eclipse是一個跨平台IDE,既能運行於Windows平台,也能在Linux下運行。不少習慣於圖形界面操作的開發人員,在Linux下則習慣於用Eclipse來查看和編輯Linux源碼。
如果僅僅是在Eclipse中查看Linux內核源碼,則可以不必事先安裝交叉編譯器,否則則須事先安裝好交叉編譯器。
創建內核源碼工程。點擊FileàNewàProject,開始創建工程,在工程創建界面選擇創建C工程,如圖 1.5所示。
圖 1.5 創建C工程
點擊Next,在C Project界面的Project name欄中填寫工程名稱,去掉「Use default location」的勾,點擊Browse將Location設置為Linux內核源碼目錄,如圖 1.6所示。如果不在Eclipse中編譯內核,則使用Linux GCC即可,否則請使用安裝好的Cross GCC。
圖 1.6 導入Linux內核源碼
然後點擊Finish,完成Linux內核源碼導入,在Eclipse中即可進行代碼閱讀和編輯了,如圖 1.7所示。
圖 1.7 在Eclipse中瀏覽內核源碼
在Eclipse中進行源碼跟蹤,只需選擇函數、變數或者宏定義後按F3即可。更多的操作可在Navigate中找到。
3、vim+ctags+cscope
Vi/Vim是一個文本編輯器,在Vim中能高效的實現代碼編輯。但Vim的功能不僅僅是一個文本編輯器,藉助ctags和cscope的配合,Vim能實現堪比圖形IDE環境的源碼編輯和閱讀功能,在某種程度上甚至比圖形IDE更方便。
Vi/Vim的安裝不再介紹了。如果不是通過遠程登錄在遠程伺服器上工作,而是在本地桌面系統操作,還可以用gvim啟動Vi編輯器。
Taglist
Taglist是Vim的一個源碼瀏覽插件,可從http://www.vim.org網站獲得。下載到壓縮包後,在本地解壓,然後將解壓得到目錄中的plugin目錄復制到~/.vim目錄。如果用戶主目錄下沒有.vim目錄,則建立一個這樣的目錄即可。
Ctags
Ctags是一個用於產生tags文件的軟體,可以下載源碼進行編譯安裝,在Ubuntu下,可通過apt-get進行安裝:
sudo apt-get install exuberant-ctags
源碼閱讀和跟蹤
進入准備查看的源碼所在目錄,首先生成tags文件:
ctags -R
執行時間長短取決於源碼數量的多少,執行完畢,在當前目錄下可看到一個tags文件。源碼越多,執行時間越長,產生的tags文件也越大。
注意:如果修改了源碼,代碼行號發生了變化,需要重新生成tags文件。
(1)查看函數等定義。用Vi/Vim打開一個C文件。若想知道某個函數、變數、結構或者宏定義在什麼地方定義,先將游標移動到函數(變數、結構或者宏定義)上,然後按CTRL+]即可。查看後,按CTRL+o可回到原來所在位置。
(2)查看文件函數列表。打開C文件後,在Vi/Vim的命令狀態下輸入:TlistToggle(Vi/Vim的命令輸入支持補全),在Vi/Vim左邊就會出現函數列表側欄,如圖 1.8所示。按CTRL+ww(2次w),可在列表和代碼查看區間切換。
圖 1.8 Vi/Vim的函數列表側欄
如果在本地桌面,用Gvim打開C文件,使用起來比較接近IDE集成環境。用滑鼠雙擊函數即可跳轉到函數定義的地方,CTRL+滑鼠右鍵即可回退到原來所在位置。更多實用特性,還需要在實際操作中體驗。
4、LXR
LXR是Linux Cross Referencer的縮寫,是一個比較流行的Linux源碼查看工具,當然也不僅僅局限於查看Linux源碼。LXR的下載地址為:http://lxr.sourceforge.net,參考該網站的安裝說明,很容易在本機搭建一個本地LXR用於源碼查看。
如果不想搭建本地LXR,可以直接瀏覽已經搭好的LXR網站,推薦兩個網站:一個是開源中國網站提供的Linux源碼在線閱讀http://lxr.oss.org.cn,另一個是http://lxr.free-electrons.com網站,前者速度較快,但是提供的Linux內核版本較少,後者則提供的版本較多。網站提供了源碼閱讀、關鍵字搜索和自由文本搜索功能。兩者的網頁快照分別如圖 1.9和圖 1.10所示。
⑵ 操作系統內核和編譯器哪個難度更大
整體而言,是同級別的難,但難點各有側重。
若論演算法,編譯器更難,而且難不止一個級別。操作系統的演算法難度只能算一般水平。
但是操作系統涉及的東西更多,本身結構更復雜,硬體處理也更加復雜。
⑶ 硬體與內核的關系,或者說 硬體與編譯器的關系
操作系統主要分為兩部分:內核(Kernel),殼(Shell)。
顧名思義,內核主要實現計算機硬體與殼之間的信息傳遞與溝通,是一個操作系統最核心技術的體現;殼主要負責傳遞內核與應用程序之間的信息交流,將內核與軟體的內外部命令用利用底層語言進行相互轉譯,實現一個個的操作請求。對於Windows系統來說,內核與殼之間相互聯系,就如同一個只會外語的洋老闆與中國翻譯的位置,是一個管理與被管理的關系;對於Unix與Linux來說,由於將內核與殼完全分離,就如同一個廠商與一個代理商之間的關系,雙方互利協作,廠商可以隨時取消代理商的代理權來另找代理,而代理同時也可以不需要這個代理權。
WINDOWS操作系統大家應該都不會陌生,這是全球最大的操作系統開發商——Microsoft公司開發的。其伺服器操作系統重要版本WINNT 4.0 Server、Win2000/Advanced Server、Win2003/Advanced Server,也支撐起目前市面上應用最多的伺服器操作系統——Windows伺服器操作系統派應用。
NetWare操作系統對現在一些IT圈裡的朋友可能就比較陌生,由於種種原因,它的市場佔有率已經非常局限,主要應用在某些特定的行業中。也就是因為此,在很多朋友在劃分操作系統派系的時候,去除了NETWARE的代表權。其實,如果80年代前出生的老IT,對於NetWare這個名詞就會異常熟悉了,因為在當初各種設備和網路都比較落後的年代,NetWare在區域網應用中占據著絕對的高額市場;而就算是目前,在一些特定行業和事業單位中,NetWare優秀的批處理功能和安全、穩定的系統性能也有很大的生存空間。NetWare目前常用的版本主要有Novell的3.11、3.12、4.10、5.0等中英文版。
Unix操作系統由AT&T公司和SCO公司共同推出,主要支持大型的文件系統服務、數據服務等應用。由於一些出眾的伺服器廠商生產的高端伺服器產品中甚至只支持Unix操作系統,因而在很多人的眼中,Unix甚至成為高端操作系統的代名詞。目前市面上流傳的主要有SCO SVR、BSD Unix、SUN Solaris、IBM-AIX 。
Linux操作系統是國外幾位IT前輩,在Posix和Unix基礎上開發出來的,支持多用戶、多任務、多線程、多CPU。Linux開放源代碼政策,使得基於其平台的開發與使用無須支付任何單位和個人的版權費用,成為後來很多操作系統廠家創業的基石,同時也成為目前國內外很多保密機構伺服器操作系統采購的首選。目前國內主流市場中使用的主要有Novell的中文版Suse Linux 9.0、小紅帽系列、紅旗Linux系列等。
⑷ linux Kbuild詳解系列(0) - 內核的編譯操作
歡迎進入Linux內核編譯操作的探索之旅!此系列博客將詳盡闡述Linux內核從編譯到安裝的全過程,重點介紹Linux的Kbuild系統。Kbuild系統復雜性較高,理解它對於深入Linux內核配置、調試及開發大有裨益。建議閱讀本系列前先回顧Makefile知識。
學習Linux內核編譯安裝機制,能夠為後續配置、調試及開發奠定堅實基礎。我們從內核編譯操作開始,逐步深入。
內核的編譯
我們先從下載源碼談起。Linux源碼託管在GitHub,通過在搜索欄輸入「torvalds/linux」即可找到主線代碼。
下載源碼後,進入根目錄,執行配置步驟。配置為何重要?因為它允許用戶選擇各種功能模塊,如存儲、時鍾、外設等,靈活裁剪內核大小,滿足不同設備需求。
配置
配置通常涉及選擇模塊,包括平台選擇。配置命令在根目錄執行,生成的.config文件記錄所有配置選項,為編譯器提供內核源碼編譯依據。
架構選擇
在嵌入式開發中,通常採用交叉編譯,以提高效率。交叉編譯在功能強大的PC機上進行,編譯成果在目標開發板上運行。架構差異要求對編譯器進行適配。
編譯內核
編譯過程需考慮目標平台與交叉編譯器。配置後生成鏡像文件vmlinix。鏡像根據架構不同,可進一步處理為vmlinuz、Image、zImage、bzImage等。
編譯模塊
配置階段將模塊分為內核編譯與外部模塊。內核編譯模塊直接存在於鏡像中,外部模塊需載入後使用。
安裝
編譯後需將內核和模塊安裝至目標平台。鏡像文件根據架構不同而異,通常通過替換或定製系統文件完成安裝。模塊安裝遵循相似流程,可能需復制至特定目錄。
總結
內核編譯與安裝關鍵步驟包括:
- 配置
- 編譯內核與模塊
- 安裝內核與模塊
同時,嵌入式開發中需關注交叉編譯。通過此系列,希望您對Linux內核編譯過程有更深入的理解與掌握。
⑸ 如何編譯Linux內核
一、編譯環境
ubuntu 5.10,要編譯的內核源碼版本2.6.12 二、下載並解壓源代碼 首先從linux內核的官網www.kernel.org把源代碼下載下來。為了和後面實驗要求符合,我們要下載使用O(1)調度器的源碼。因此這里下載了2.6.12版本源碼。下載 下linux-2.6.12.tar.bz2,將下載源碼放入/usr/src/目錄下。如下圖所示: 解壓該源碼: 三、構建編譯環境 現在我們得到的只是源代碼,只是許許多多的文本文件,要想使這些文件成為可以運行的程序,需要使用編譯器進行編譯以及鏈接。編譯器有很多,但在里linux下一般都使用gnu的開源編譯器套件,這里包括gcc等,現在我們安裝基本的編譯器套件,如圖所示: 四、安裝ncurses庫 這里使用Ubuntu系統,因為系統自帶的ncurses庫在支持make menuconfig的時候會出錯,所以,依然要安裝ncurses庫,這里我們從源碼安裝。首先去ncurses官網http://ftp.gnu.org/pub/gnu/ncurses/ 上下載源碼。這里我們下載5.9版本,並通過簡單的安裝方式.configure 和make、make install方式安裝。如下圖所示: 五、配置內核 一切准備工作做完,現在我們就可以配置內核了,這里我們使用make menuconfig方式。如下圖: 在使用make menuconfig這個命令後,會出現如下的字元界面,我們就可以在這個界面上對內核進行配置。但是如果這不是你第一次配置這個內核,那麼請先運行:make mrproper來清除以前的配置,回到默認配置,然後再運行:make menuconfig.
在這里,我們以對cpu支持的配置為例,其餘的選項就不一一詳述,首先查看本機的cpu類型,如下圖:
在這里我們可以看到,我的電腦的cpu是AMD Athlon的,因此我們在cpu選項裡面選用AMD,如下圖所示:
在這里需要注意的是:
A、 cpu的設置在linux內核編譯過程中,不是必需的,即使保持默認的386選項(我們剛才把它改成了AMD),內核也能正常運行,只不過運行慢一些而已。
B、 一般容易出問題的地方在於Device Driver的設置。我在一開始就遇到了在內核編譯完,通過grub引導系統過程中報 「ALERT! /dev/sda1 does not exist . Dropping to a shell!」的錯誤。這是因為硬碟驅動沒有配置好而造成的。運行lspci命令,查看到下面這行:
由此確定,需要配置SCSI、PCI-X、Fusion-MPT驅動,需要在響應的驅動選項里將[M]設置為[*],因為硬碟驅動是在系統開機的時候載入,所以不能以模塊形式載入。
把這幾個驅動內部的選項全部改為[*]:
六、編譯內核
對內核的配置完成之後,現在就可以開始編譯內核了,只需要一個簡單的make命令即可,之後我們就只能慢慢等,直到編譯完成,在我的電腦上,大概用了25分鍾。下圖是運行make後的部分輸出。
七、安裝內核
編譯完成之後,我們需要安裝內核,主要分為如下幾步:
1)、安裝模塊
安裝模塊,對於內核來說,每一個內核版本有自己的模塊目錄,默認在/lib/moles/內核版本號這個目錄下,make moles_install會創建對應的目錄,並把對應的模塊文件拷貝過去。注意,這一步必須要在編譯過內核再做。
2)、拷貝bzImage文件
bzImage文件是內核映像文件,是啟動內核所必需的,我們應當把它拷貝到/boot目錄下。在這里,我為自己新建了一個目錄,我們把它拷貝過去,並且按照一般內核映像文件的命名方式為它改名為vmlinuz-2.6.12。
3)、製作initrd文件
initrd文件命名為initrd.img-2.6.12
4)、修改grub啟動項
要能引導起我們的新系統,需要更改grub配置,增加啟動選項。ubuntu 5.10的grub版本比較低,配置文件為/boot/grub/menu.lst,高版本的grub可能在/boot/grub/grub.cfg里。在原有啟動項基礎上,添加我們自己的啟動項,並把它設為默認啟動項,配置如下:
5)重啟
不出意外的話,我們的內核已經正常載入了,運行uname -a,會發現,內核版本已經是2.6.12了。
⑹ linux內核編譯出錯解決辦法
遇到Linux內核編譯中出現menuconfig沒有配置界面出來的錯誤,通常是因為缺少必要的庫文件導致無法載入curses功能。為解決此問題,首先需要確保系統已安裝了curses庫。通過運行以下命令進行安裝:
sudo apt-get install libncurses5-dev
完成安裝後,嘗試再次執行make menuconfig命令,內核配置界面應能正常顯示。
若在編譯Linux內核時遇到yylloc錯誤,這通常與編譯器或相關工具鏈的版本不兼容有關。yylloc錯誤多見於使用flex和bison進行解析的項目。為解決此問題,可採取以下步驟:
1. 確保flex和bison的版本與內核編譯所需版本匹配。可通過運行以下命令檢查flex和bison的版本:
flex --version
bison --version
2. 若版本不匹配,考慮更新或回滾至兼容版本。可以通過apt或包管理器實現版本更新或回滾。
3. 在編譯內核前,先確保系統環境變數PATH包含flex和bison的安裝路徑,以確保編譯器能找到所需的工具。
4. 使用正確的編譯選項和參數進行內核編譯,確保所有依賴項都已正確配置。
通過上述步驟,應能有效解決Linux內核編譯過程中遇到的menuconfig配置界面缺失和yylloc錯誤問題,確保編譯過程順利進行。