linux板級裝置的初始化過程

2021-04-24 03:24:56 字數 2130 閱讀 4921

出處:

start_kernel() -> setup_arch(&command_line) -> mdesc = setup_machine(machine_arch_type) -> list = lookup_machine_type(nr) -> return struct machine_desc.

核心在啟動的時候就是最先執行start_kernel() , 然後她就會呼叫體系結構相關的setup_arch(&command_line), 如arm體系結構的在arch/arm/kernel/setup.c中, 進一步, 她就要初始化板級相關的裝置,   但在此之前, 她必須找到這塊目標板的描述結構, 所以她就先通過lookup_machine_type(nr)來查詢這個結構, 傳入的引數是又uboot傳過來的, 儲存在r2中. 如假設她傳入的是'smdk2410' 的nr, lookup_machine_type(nr) 就會找到如下的machine_desc. 這個結構在乙個專門描述sddk2410的檔案中--arch/arm/mach-s3c2410/mach-smdk2410.c

machine_start(smdk2410, "smdk2410") /* @todo: request a new identifier and switch

* to smdk2410 */

/* maintainer: jonas dietsche */

.phys_io    = s3c2410_pa_uart,

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

.boot_params    = s3c2410_sdram_pa + 0x100,

//重要的板級初始化函式

.map_io        = smdk2410_map_io,

.init_irq    = s3c24xx_init_irq,

.init_machine    = smdk2410_init,

.timer        = &s3c24xx_timer,

machine_end

machine_start的第乙個引數是用來構造機器的型別的, 如這裡的smdk2410 ,  

又下面的定義

.nr        = mach_type_##_type

有 nr =

mach_type_smdk2410

而mach_type_smdk2410這些機器型別則在/include/asm-arm/mach-types.h中定義:

#define mach_type_smdk2410             193

完整的結構描述如下:

struct machine_desc ;

/** set of macros to define architecture features. this is built into

* a table by the linker.

*/#define machine_start(_type,_name)            /

static const struct machine_desc __mach_desc_##_type    /

__used                            /

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

在arch/arm/mach-s3c2410/mach-smdk2410.c 定義了以下兩個函式實現:

static struct map_desc smdk2410_iodesc __initdata = ;

static struct platform_device *smdk2410_devices __initdata = ;

static void __init smdk2410_map_io(void)

static void __init smdk2410_init(void)

/* devices we initialise */

static struct platform_device __initdata *smdk_devs = ;

void __init smdk_machine_init(void)

初始化 鍵盤裝置

1 bool initinput hwnd hwnd 216 第二步 建立裝置,滑鼠,鍵盤等。17 res pinput createdevice 18 guid syskeyboard,裝置的guid,這裡使用定義好的 19 pkeyboard,裝置指標 20null 21if succeeded...

第十課 板級初始化

板級初始化即 hal 層 硬體抽象層 初始化,其中執行了平台初始化,hal層的記憶體初始化,中斷初始化,最後是核心層初始化。該檔案中只有這乙個函式,呼叫函式用於初始化 hal層和核心層 為了分離硬體的特性,設計了 hal層,把硬體相關的操作集中在這個層,並向上提供介面,目的是讓核心上層不用關注硬體相...

類初始化和例項初始化過程

類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...