歡迎您光臨本站 登入註冊首頁

arm linux演藝(五)

admin @ 2014-03-25 , reply:0

概述

長篇連載--armlinux演藝---第五回------------------------------------------------------------------------------……

長篇連載--arm linux演藝---第五回
--------------------------------------------------------------------------------

好,從本節開始,我們走過了bootloader的漫長征途,開始進入linux的內核:說實話,linux寶典的確高深莫測,洋人花了十幾年修鍊,各種內功心法層處不窮。有些地方反覆推敲也領悟不了其中奧妙,煉不到第九重啊。。

linux的入口是一段彙編代碼,用於基本的硬體設置和建立臨時頁表,對於ARM LINUX是 linux/arch/arm/kernle/head-armv.S, 走!

#if defined(CONFIG_MX1)
mov r1, #MACH_TYPE_MX1
#endif

這第一句話好像就讓人看不懂,好像葵花寶典開頭的八個字:欲練神功。。。。

那來的MACH_TYPE_MX1?其實,在head-armv.S中的一項重要工作就是設置內核的臨時頁表,不然mmu開起來也玩不轉,但是內核怎麼知道如何映射內存呢?linux的內核將映射到虛地址0xCxxx xxxx處,但他怎麼知道把哪一片ram映射過去呢?

因為不通的系統有不通的內存影像,所以,LINUX約定,內核代碼開始的時候,R1放的是系統目標平台的代號,對於一些常見的,標準的平台,內核已經提供了支持,只要在編譯的時候選中就行了,例如對X86平台,內核是從物理地址1M開始映射的。如果老兄是自己攢的平台,只好麻煩你自己寫了。

小弟拿人錢財,與人消災,用的是摩托的MX1,只好自己寫了,定義了#MACH_TYPE_MX1,當然,還要寫一個描述平台的數據結構:

MACHINE_START(MX1ADS, "Motorola MX1ADS")
MAINTAINER("SPS Motorola")

BOOT_MEM(0x08000000, 0x00200000, 0xf0200000)

FIXUP(mx1ads_fixup)
MAPIO(mx1ads_map_io)
INITIRQ(mx1ads_init_irq)
MACHINE_END

看起來怪怪的,但現在大家只要知道他定義了基本的內存映象:RAM從0x08000000開始,i/o空間從0x00200000開始,i/o空間映射到虛擬地址空間0xf0200000開始處。摩托的晶元i/o和內存是統一編址的。
其他的項,在下面的初始化過程中會逐個介紹到。

好了好了,再看下面的指令:

mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode //設置為SVC模式,允許中斷和快速中斷
//此處設定系統的工作狀態,arm有7種狀態
//每種狀態有自己的堆棧

msr cpsr_c, r0 @ and all irqs diabled
bl __lookup_processor_type

//定義處理器相關信息,如value, mask, mmuflags,
//放在proc.info段中
//__lookup_processor_type 取得這些信息,在下面
//__lookup_architecture_type 中用

這一段是查詢處理器的種類,大家知道arm有arm7, arm9等類型,如何區分呢?
在arm協處理器中有一個只讀寄存器,存放處理器相關信息。__lookup_processor_type將返回如下的結構:

__arm920_proc_info:
.long 0x41009200 //CPU id
.long 0xff00fff0 //cpu mask
.long 0x00000c1e @ mmuflags
b __arm920_setup
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT
.long cpu_arm920_info
.long arm920_processor_functions

第一項是CPU id,將與協處理器中讀出的id作比較,其餘的都是與處理器相關的信息,到下面初始化的過程中自然會用到。。

arm linux 第五回終。。。


[admin via 研發互助社區 ] arm linux演藝(五)已經有2412次圍觀

http://cocdig.com/docs/show-post-42761.html