arm學習之linux核心移植分析

2021-07-09 21:30:26 字數 1962 閱讀 5492

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 的核心原始碼目錄 安裝交叉工具鏈,然後修改環...