S5PV210靜態對映表的構建過程

2021-07-25 06:08:08 字數 2564 閱讀 3169

注:分析的三星官方的核心。

一、板子啟動相關

1.首先得明白一般與板子相關的啟動初始化都在mach-***.c檔案。因為靜態對映表我們主要關注的是板子的gpio,而gpio也屬於板子啟動必須初始化的部分,所以我們要找的檔案就是/kernel/arch/arm/mach-s5pv210/mach-smdkc110.c檔案。

2.熟悉核心的人都知道板子的啟動相關初始化都在乙個結構體當中。

(1)相關的**片段

#ifdef config_mach_smdkc110

machine_start(smdkc110, "smdkc110")

#elif config_mach_smdkv210

machine_start(smdkv210, "smdkv210")

#endif

/* maintainer: kukjin kim */

.phys_io = s3c_pa_uart & 0xfff00000,

.io_pg_offst = (((u32)s3c_va_uart) >> 18) & 0xfffc,

.boot_params = s5p_pa_sdram + 0x100,

//.fixup = smdkv210_fixup,

.init_irq = s5pv210_init_irq,

.map_io = smdkc110_map_io,

.init_machine = smdkc110_machine_init,

.timer = &s5p_systimer,

machine_end

(2)machine_start和machine_end是乙個巨集定義,主要是用來定乙個結構體變數的,並且填充其內部一部分變數

#define machine_start(_type,_name)          \

static

const

struct machine_desc __mach_desc_##_type \

__used \

//__attribute__是給這個結構體設定乙個段屬性,當核心鏈結時會根據段的順序(具體的段順序在鏈結指令碼裡面指定)。來鏈結生成zimage。

__attribute__((__section__(".arch.info.init"))) = ;

(3)因為我們分析的s5pv210,所以我們肯定在核心中定義了config_mach_smdkv210,所以上面的巨集,展開後就是

static const struct machine_desc __mach_desc_smdkv210   \

__used \

__attribute__((__section__(".arch.info.init"))) = ;

3.(聰明點的人一眼就能看出)smdkc110_map_io函式就是靜態對映表的構建函式。因為名字很顯眼嘛。好進入函式,下面有乙個叫s5p_init_io(null, 0, s5p_va_chipid)的函式。繼續追,關鍵的**就在這個函式裡面了。

二、s5p_init_io函式分析

1.s5p_iodesc分析

(1)map_desc結構體在/kernel/arch/arm/include/asm/mach/map.h裡面定義

struct map_desc ;

(2)可見定義了乙個map_desc型別的陣列,裡面包含了對應模組的對映資訊,每乙個元素代表乙個對映關係(虛擬位址到實體地址)。

static struct map_desc s5p_iodesc __initdata = , , , , , , ,

};

void __init iotable_init(struct map_desc *io_desc, int nr)

2.而s5p_iodesc結構裡面的s5p_va_chipid、s3c_va_sys類似的這些巨集定義是三星出場針對不同的cpu來定義的。

(1)主對映表位於:arch/arm/plat-s5p/include/plat/map-s5p.h

(2)虛擬位址基位址定義在:arch/arm/plat-samsung/include/plat/map-base.h

#define s3c_addr_base   (0xfd000000)
三、建立好對映表之後

1.在核心啟動的時候這個表就會被建立。

2.建立的過程函式,就是一條線路。自己分析。(每乙個tab鍵就是乙個函式層次關係)

start_kernel

setup_arch

paging_init

devicemaps_init

if (mdesc->map_io)

mdesc->map_io();

能力有限,我也是學習者,只能分析到這個程度,大概了解。。。。

S5PV210的記憶體對映

s5pv210是基於arm crotex a8架構32位cpu的微處理器。內部擁有32根位址線和32位資料線,32根位址線決定了cpu的位址空間最大為4g,這4g的記憶體空間如何分配,就是記憶體對映 s5pv210 datasheet中section 01 02章節 memory map有講。記憶體...

S5PV210的位址對映

一 概念 s5pv210屬於arm cortex a8架構,32位cpu,cpu設計時就有32根位址線和32根資料線。32根位址線決定了cpu的位址空間為4g,那麼這4g空間的分配使用,就是位址對映問題。儲存器 儲存器是用來儲存程式和各種資料資訊的記憶部件。儲存器可分為主儲存器 簡稱主存或記憶體 和...

S5PV210 裸機中斷

這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...