
Linux內(nèi)核是操作系統(tǒng)中最核心的部分,它負(fù)責(zé)管理計(jì)算機(jī)硬件資源,并提供對應(yīng)用程序和其他系統(tǒng)組件的訪問接口,控制著計(jì)算機(jī)的內(nèi)存、處理器、設(shè)備驅(qū)動程序和文件系統(tǒng)等關(guān)鍵功能,今天小編就給各位小伙伴介紹一下如何獲取Linux內(nèi)核源碼。
獲取Linux內(nèi)核源碼的渠道
Linux有一個(gè)龐大的開源社區(qū),每個(gè)人都可以向開源社區(qū)提交代碼。由于Linux內(nèi)核十分龐大所以每個(gè)模塊都有對應(yīng)的維護(hù)人員。維護(hù)人員的工作就是審核人們提交的代碼是否正確,如果沒有問題,就會合并到主分支上。這樣就會使Linux內(nèi)核不斷完善和更新。
接下來就是芯片原廠例如恩智浦,開發(fā)人員會不定期在Linux官網(wǎng)下載穩(wěn)定版本的內(nèi)核,將其適配到各個(gè)芯片上,芯片原廠也會對內(nèi)核進(jìn)行維護(hù)形成自己的維護(hù)版本。
最后是板卡廠商,會到芯片原廠獲取已經(jīng)適配好的穩(wěn)定版本的內(nèi)核,在其基礎(chǔ)上進(jìn)行各個(gè)外設(shè)接口的適配,然后給用戶提供移植好的板級開發(fā)包。板卡廠商也會對移植好的內(nèi)核版本進(jìn)行維護(hù),例如一些BUG修復(fù)或者物料替換。
獲取Linux內(nèi)核源碼的方法
一、獲取Linux官網(wǎng)源碼
地址:https://mirrors.edge.kernel.org/pub/Linux/kernel/
如果不是在芯片原廠工作一般不會到Linux官網(wǎng)下載源碼,但我們有必要了解這種獲取源碼的方法。因?yàn)長inux官網(wǎng)對一些bug或者驅(qū)動更新的比較及時(shí),在遇到一些內(nèi)核問題時(shí)就可以到Linux官網(wǎng)的源碼中查一下是不是有相關(guān)的提交記錄。

二、獲取芯片原廠的Linux源碼
每個(gè)芯片原廠都有自己的git倉庫,他們會把已經(jīng)開發(fā)完成的內(nèi)核源碼放到git倉庫中,供用戶查看和下載。下面以NXP的倉庫為例進(jìn)行講解。
地址:https://github.com/nxp-imx/Linux-imx
(一)切換到對應(yīng)的版本,因?yàn)殚_發(fā)板是在Linux4.1.15上進(jìn)行的適配,所以講解均以4.1.15版本內(nèi)核為例。

(二)可以選擇使用git克隆,也可以選擇下載ZIP壓縮包

三、獲取ELF1開發(fā)板源碼
ELF1的內(nèi)核源碼在資料包當(dāng)中的路徑如下:ELF1開發(fā)板資料包\02-Linux源代碼\02-0 出廠內(nèi)核和uboot源碼\內(nèi)核源碼\Linux-4.1.15-elf1.tar.bz2
下面以ELF1的內(nèi)核源碼為例,給大家介紹一下內(nèi)核源代碼的目錄結(jié)構(gòu)和文件說明。
內(nèi)核源代碼的目錄結(jié)構(gòu)和文件說明
將:ELF1開發(fā)板資料包\02-Linux源代碼\02-0 出廠內(nèi)核和uboot源碼\內(nèi)核源碼\Linux-4.1.15-elf1.tar.bz2
內(nèi)核源碼壓縮包復(fù)制到ubuntu系統(tǒng)的/home/elf/work/目錄下,解壓縮:
elf@ubuntu:~/work$ tar -xvf Linux-4.1.15-elf1.tar.bz2
解壓完成之后使用ls命令查看Linux源碼目錄:
Linux內(nèi)核目錄下有很多的文件夾和文件,很多文件夾和文件我們不需要關(guān)注,我們主要了解比較常用的一些文件夾和文件的涵義就夠用了。
目錄 | 目錄說明 |
arch/ | 可支持的不同CPU架構(gòu)下的核心代碼。例如arm就是arm架構(gòu)相關(guān)的代碼,arm目錄下包括很多處理器平臺,也包括了啟動代碼boot、架構(gòu)相關(guān)配置文件configs、內(nèi)核相關(guān)文件kernel、內(nèi)存管理mm和庫lib等 |
block/ | 塊設(shè)備相關(guān)通用函數(shù) |
crypto/ | 常見的加密算法相關(guān)代碼 |
Documentation/ | 說明文檔,對每個(gè)目錄和模塊有詳細(xì)說明 |
drivers/ | 設(shè)備驅(qū)動程序,其中每一個(gè)目錄都代表一種設(shè)備驅(qū)動 |
firmware/ | 固件代碼 |
fs/ | 可支持的文件系統(tǒng)相關(guān)代碼 |
include/ | 通用的頭文件 |
init/ | 內(nèi)核初始化核心代碼 |
ipc/ | 內(nèi)核進(jìn)程間通信相關(guān)代碼 |
kernel/ | 內(nèi)核核心代碼,目錄下實(shí)現(xiàn)了多數(shù)Linux系統(tǒng)的內(nèi)核函數(shù) |
lib/ | 內(nèi)核共用的函數(shù)庫 |
mm/ | 內(nèi)存管理相關(guān)代碼 |
net/ | 網(wǎng)絡(luò)相關(guān)代碼 |
sample/ | 示例代碼 |
scripts/ | 用于內(nèi)核配置的腳本文件,用于實(shí)現(xiàn)內(nèi)核配置的圖形界面 |
security/ | 安全性相關(guān),支持安全操作系統(tǒng)相關(guān)代碼。包括SELinux、Apparmor、Smack和TOMOYO Linux安全模塊。 |
tools/ | 常用工具代碼 |
usr/ | 內(nèi)核啟動相關(guān)代碼 |
virt/ | 內(nèi)核虛擬化相關(guān)代碼 |
內(nèi)核源代碼的目錄結(jié)構(gòu)和文件說明就介紹到這里。之后我們還會介紹內(nèi)核編譯以及如何給在NXP的源碼上適配ELF 1開發(fā)板。希望能對各位小伙伴在學(xué)習(xí)嵌入式開發(fā)的時(shí)候有所幫助。
-
嵌入式
+關(guān)注
關(guān)注
5132文章
19488瀏覽量
314086 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1406瀏覽量
41038 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5466瀏覽量
101627 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
317瀏覽量
22149
發(fā)布評論請先 登錄
Linux內(nèi)核開發(fā)工具介紹

一文詳解Linux內(nèi)核源碼組織結(jié)構(gòu)
淺談Linux內(nèi)核源碼的Makefile、Kconfig和.config文件

飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡介
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡介
Linux-2.6.11.12內(nèi)核源碼(帶注釋)
Linux內(nèi)核源碼之我見——內(nèi)核源碼的分析方法
Linux內(nèi)核源碼目錄結(jié)構(gòu)
I.MX6ULL-ElfBoard ELF1板卡 獲取內(nèi)核源碼的方法。
嵌入式學(xué)習(xí)——ElfBoard ELF1板卡 獲取內(nèi)核源碼的方法
需要掌握的Linux內(nèi)核源碼分析方法

STM32MP157 Linux系統(tǒng)移植開發(fā)篇8:Linux內(nèi)核配置方法及編譯

評論