核心之框架介紹及簡單修改

2021-07-22 20:28:14 字數 2411 閱讀 1374

一.u-boot啟動核心的流程:

1.從nand/nor

中將核心讀取到記憶體

2.設定tag引數

3.跳轉執行核心:thekernel(0,機器

id,引數存放位址

)二.核心的啟動流程

1. 根據r1

,判斷能否支援該單板,如果能夠支援呼叫機器相關的初始化函式,否則卡死

2. 解析tag引數

3. 裝載驅動程式(flash

、網絡卡)

4. 掛接根檔案系統

5. 啟動應用程式

三.核心啟動流程,據此配置核心(機器id)

1.修改makefile

arch  ?=  arm//架構

cross_compile ?= arm-linux-//

交叉編譯工具鏈

2.使用預設配置

make s3c2410_defconfig

3.make uimage

u-boot的預設機器id為

mach_type_smdk2410

四.修改

1.make uimage一次編譯成功,編譯成功後用

nfs

nfs 32000000 192.168.1.19:/work/nfs_root/uimage_new//

這個命令的意思是用nfs

命令,從伺服器指定資料夾將

uimage

32000000

位址bootm 32000000

2.分析u-boot

中啟動核心的原始碼:

cmd_bootm.c

(1)u_boot_cmd(

bootm,

config_sys_maxargs,

1,do_bootm,//

呼叫do_bootm函式

"\tpassing arguments 'arg ...'; when booting a linux kernel,\n"

"\t'arg' can be the address of an initrd image\n"

(2)u-boot跳轉執行核心

static void boot_jump_linux(bootm_headers_t *images)//

(bootm.c

)在這個函式中如果通過設定了machid

即s = getenv("machid");

則使用這個設定的

id,否則使用預設的

機器id

,gd->bd->bi_arch_number=mach_type_smdk2410

這個機器id

必須為核心所支援的機器

id(3)在linux

核心中根據

u-boot

傳遞的機器

id,找到該款單板的初始化函式

如何確定核心支援哪些單板?

cd arch/arm/mach*.c

機器id

的作用

例如:設定的機器id

是16a

,則會根據這個數值在

arch/arm/mach-s3c24xx/mach-smdk2440.c

中找到machine_start(s3c2440

,」smdk2440」)結構體,呼叫其中的初始化函式

machine_start(s3c2440, "smdk2440")

/* maintainer: ben dooks */

.atag_offset

= 0x100,

.init_irq

= s3c24xx_init_irq,

.map_io

= smdk2440_map_io,

.init_machine

= smdk2440_machine_init,

.timer

= &s3c24xx_timer,

.restart

= s3c244x_restart,

machine_end

這個結構體可以展開:

static const struct machine_desc __mach_desc_s3c2440

__used

__attribute__((__section__(

「.arch.info.init

」)))=;

五.遇到的問題

1.使用7cf

的機器id

時,串列埠能夠有正確的輸出資訊,使用

16a的機器

id時,串列埠出現亂碼

修改:在arch/arm/mach-s3c24xx/mach-smdk2440.c

中有乙個函式:

s3c24xx_init_clocks(12000000);//這個函式是設定晶振頻率,由於單板使用的是

12mhz   晶振,所以必須將數值設定為12000000

Hibernata框架簡單介紹及使用

什麼是框架?框架可以理解為是乙個半成品,如果要使用框架必須遵守hibernate的規則。否則會出錯。使用框架的好處?大大提高開發效果,可是也降低了 orm 是隨著物件導向的軟體開發方法發展而產生的。用來把物件模型表示的物件對映到基於s q l 的關係模型資料庫結構中去。這樣,我們在具體的操作實體物件...

Dubbo核心實現之SPI簡單介紹

這個部分單獨寫一頁,看起來更高大上一些。1.概括 dubbo採用微核心 外掛程式體系,使得設計優雅,擴充套件性強。那所謂的微核心 外掛程式體系是如何實現的呢!jdk實現spi服務查詢 serviceloader 2.定義示例介面 serviceloader會遍歷所有jar查詢meta inf ser...

Live555 實戰之框架簡單介紹

先對live555有乙個巨集觀的認識,為今後的實戰打個基礎。livemedia 專案的源 包含四個主要的庫,各種測試 以及 ive555 media server 四個主要的庫各自是 usageenvironment taskscheduler groupsock livemedia basicus...