一.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...