linux核心可從 kernel.org 上獲得,其中偶數版本為穩定版本。
linux核心**結構:
kernel/核心管理的核心**(系統相關**在arch/*/kernel中)
arch/ 體系結構相關**,每個目錄**乙個體繫結構
include/ linux 標頭檔案
include/asm- 體系結構相關標頭檔案
include/linux linux kernel core 標頭檔案
lib/ 核心的庫**,和處理器體系結構相關的**在arch/*/lib下
drivers/ 系統中驅勱程式**
fs/ 檔案系統
ipc/ ipc(迚程通訊**)
mm/ 記憶體管理**,和處理器體系結構相關的**在arch/*/mm下
net/ 網路協議**
scripts/ 編譯配置指令碼檔案
sound/ 聲音驅動程式
documentation/ 核心文件目錄
readme 概要和編譯介紹
makefile 頂層makefile檔案,我們後面的配置要進行修改,也從makefile進行分析
核心配置步驟:
1:cp arch/arm/s5pv210_defconfig .config
2:修改makefile
arch=arm
cross_compile=arm-linux-
3:執行配置命令
make menuconfig
然後進入圖形配置介面
4:配置完畢,開始編譯
make zimage
zimage:經過zlib壓縮後的linux核心
uimage:uboot格式的核心檔案,是uboot預設引導的核心,如果需要引導zimage還需要自己向uboot新增命令
vmlinux:未經壓縮的linux核心,是elf格式
image:從vmlinux生成的二進位制格式,核心映像檔案,沒有壓縮
核心啟動分析:
1:核心自解壓(zimage)
2:檢查核心是否支援此cpu的id號
2:初始化乙個硬體,也就是靜態編譯進核心的驅動模組
3:開始掛載根檔案系統
4:啟動init程序
arch/arm/kernel/vmlinux.lds 可見有:
381 __proc_info_begin = .;
382 *(.proc.info.init)
383 __proc_info_end = .;
384 __arch_info_begin = .;
385 *(.arch.info.init)
386 __arch_info_end = .;
這些段是用來存處理器id和開發板id的。
從makefile檔案可知核心最先執行的**是head.s檔案位於 arch/arm/kernel/head.s
81 mrc p15, 0, r9, c0, c0
將儲存在協處理器中cpu的id號讀到arm處理器的r9暫存器
82 bl __lookup_processor_type
核心是否支援此cpu的id號
381 __proc_info_begin = .;
382 *(.proc.info.init)
383 __proc_info_end = .;
用r9中id號到__proc_info_begin->__proc_info_end中匹配,如果匹配成功,核心繼續執行,如果匹配不成功,核心不 啟動
85 bl __lookup_machine_type
thekernel(0, 2456, 0x20000100)
r0 r1 r2
用uboot通過r1暫存器傳遞來板子的2456號,到以下段匹配,如果匹配成功,返回開發板結構體,核心繼續執行,如果
不成功,核心不啟動
今天就到這裡吧!
linux學習筆記核心篇,核心移植
1.將核心從flash讀到記憶體 2.設定tag引數,3.啟動kernel,引數1r0 0,r1 機器id,r3 tag位址 1.讀取機器碼,呼叫相對應的初始化函式。2.解析tag引數,3.裝載驅動,網絡卡,flash等驅動 4.掛載根檔案系統,5.啟動應用程式。1.啟動核心函式檔案 cmd boo...
linux核心移植
1.基本開發環境 u boot版本 u boot 2012.04.01 假設u boot已經移植好 linux平台 虛擬機器下ubuntu 14.04 交叉編譯工具 gcc 4.4.3 arm開發板 mini2440 cpu s3c2440 sdram 64m,nor flash 2m,nand f...
Linux核心移植
實驗步驟 1 準備工作 2 修改頂層makefile 3 修改falsh 分割槽 4 配置編譯核心 下面以linux2.6.30.4核心移植到gec2440為例 cd linux 2.6.30.4 解壓後會在當前目錄下生成乙個linux 2.6.30.4 的核心原始碼目錄 安裝交叉工具鏈,然後修改環...