|
開(kāi)發(fā)板:立宇泰6410(百度,谷歌上搜下有很多介紹,我也是點(diǎn)點(diǎn)鼠標(biāo)知道的)
系統(tǒng):linux2.6.28(也可以支持Android,ubuntu,WINCE6.0(R2/R3操作系統(tǒng),這點(diǎn)我覺(jué)得超贊)
因?yàn)檠芯宽?xiàng)目要求需要購(gòu)置一款開(kāi)發(fā)板做研發(fā),朋友介紹一款Samsung S3C6410處理器,ARM1176JZF-S內(nèi)核的板子,這點(diǎn)是符合,但其它要素也要考慮的!去網(wǎng)上搜了下,很多網(wǎng)站上都有產(chǎn)品宣傳資料及一些評(píng)價(jià)!初步看了下,硬件配件資源還不錯(cuò),基本符合我們的要求,評(píng)價(jià)大多數(shù)都是正面的,這讓我開(kāi)始想了解下立宇泰其它產(chǎn)品特性及評(píng)價(jià)及報(bào)價(jià)之類(lèi)的,產(chǎn)品好報(bào)價(jià)太高這個(gè)我們不會(huì)優(yōu)先考慮的,誰(shuí)不想買(mǎi)個(gè)物美價(jià)廉的呢!去他們官網(wǎng)看了下,產(chǎn)品介紹都很詳細(xì),軟硬件配置及圖片都挺吸引人的,用戶(hù)手冊(cè)、升級(jí)說(shuō)明等都有文檔展示,還有一點(diǎn)很重要的是有售后支持,這樣產(chǎn)品購(gòu)買(mǎi)后有問(wèn)題也不需要擔(dān)心怎么處理了!雖然只是購(gòu)買(mǎi)一款核心板,就那么一塊小小的板子,但是馬虎不得的,如果沒(méi)有購(gòu)買(mǎi)好,對(duì)項(xiàng)目研究及成果都有很大影響,所以我也有壓力啊!對(duì)比了下幾家主流的開(kāi)發(fā)板公司,一些公司產(chǎn)品質(zhì)量是不錯(cuò)就是價(jià)格讓人難以接受,還有一些開(kāi)發(fā)板公司面向的是學(xué)生市場(chǎng),價(jià)格是低就是讓人有點(diǎn)不放心。但是一份價(jià)格一份貨,如果要作為產(chǎn)品開(kāi)發(fā),我自然還是要選擇可靠點(diǎn)的。
最后選擇聯(lián)系立宇泰公司,聽(tīng)了詳細(xì)介紹及報(bào)價(jià)后,拍案決定先購(gòu)置一款帶3.5寸屏的開(kāi)發(fā)板套餐,套餐組合就不詳細(xì)介紹了,發(fā)個(gè)鏈接,有興趣的可以去看看,當(dāng)然還有很多其它配置的產(chǎn)品的!http://www.hzlitai.com.cn/plus/view.php?aid=1778 使用之后發(fā)現(xiàn),速度果然很不錯(cuò),跟ARM9的S3C2440不可同日而語(yǔ),當(dāng)然項(xiàng)目也做的非常成功!
當(dāng)然,這中間也會(huì)有一些技術(shù)問(wèn)題需要一些支持,不過(guò)都很快得到解決。就比如說(shuō)Linux下內(nèi)存大小的傳遞,對(duì)于一些資深研究人員這當(dāng)然是簡(jiǎn)單的問(wèn)題,可是對(duì)于剛開(kāi)始學(xué)習(xí)的我還是需要琢磨下!立宇泰技術(shù)支持給我發(fā)了個(gè)文檔,跟著操作問(wèn)題很快解決!發(fā)一些資料上來(lái)分享下,希望能幫助跟我一樣的人!
Memory: 128MB = 128MB total
Memory: 70556KB available (3888K code, 493K data, 520K init)
這打印出自于:arch/arm/mm/init.c
void __init mem_init(void)
內(nèi)存地址:arch/arm/mach-s3c6400/include/mach/memory.h
內(nèi)存大小:arch/arm/kernel/setup.c中設(shè)定。MEM_SIZE (64*1024*1024) 不對(duì)。
arm linux中一般在cmdline或傳遞tag參數(shù)中設(shè)置, 個(gè)別板子在machine_desc.fixup函數(shù)中設(shè)置. 按順序分別說(shuō)明:
1, 出現(xiàn)順序(內(nèi)核版本2.6.25.20,下同)
start_kernel()
->setup_arch()
->mdesc->fixup()
->parse_tags()
->parse_tag_mem32()
->parse_cmdline()
->early_mem()
2, fixup()函數(shù)
這個(gè)函數(shù)arm平臺(tái)用的很少. 我只找到eseries.c, mach-smdk2413.c, mach-vstms.c這幾個(gè)arm板子有, smdk2413_fixup()是在bootloader傳遞tag地址與machine_desc預(yù)設(shè)tag地址(mem_PA+0x100)不同時(shí)設(shè)置memory的start和size. 如果fixup起作用, 會(huì)從tag中把mem tag改為ATAG_NONE, 后面的"parse_tag_mem32"就沒(méi)用了.
3, parse_tag_mem32()
該函數(shù)定義在"arch\arm\kernel\setup.c". 把bootloader傳入的mem tag(ATAG_MEM)的start和size參數(shù)通過(guò)"arm_add_memory()"加入到meminfo的最后一個(gè)bank中. start是memory物理起始地址.
4, early_mem()
該函數(shù)定義在"arch\arm\kernel\setup.c". 處理cmdline中的"mem=size@start".
如果沒(méi)有定義mem起始地址, 使用PHYS_OFFSET(arm中應(yīng)由arm開(kāi)發(fā)板設(shè)置)作為start. early_mem()會(huì)覆蓋前面設(shè)置的meminfo.
呵呵, 你為什么會(huì)想到找這個(gè)? 我當(dāng)初是板級(jí)移植u-boot到s3c2410時(shí)分析的代碼, 當(dāng)時(shí)還不知道sourceinsight, 用grep查找的
"arch\arm\mm\init.c"文件和這個(gè)好像沒(méi)關(guān)系, 里面的"bootmem_init()"會(huì)根據(jù)這里設(shè)置的meminfo計(jì)算出high_memory. 系統(tǒng)物理memory會(huì)1:1映射到"AGE_OFFSET---high_memory-1".
==========================================================
三種方式:
1.使用內(nèi)核源代碼中的定義
通常ARM嵌入式開(kāi)發(fā)板的系統(tǒng)物理內(nèi)存僅有一塊,系統(tǒng)物理內(nèi)存的指定通常通過(guò)三個(gè)宏:
PHYS_OFFSET:系統(tǒng)內(nèi)存的物理起始地址,板級(jí)相關(guān),在include/asm-arm/arch-xxx/memory.h中
PAGE_OFFSET:系統(tǒng)內(nèi)存的虛擬起始地址,體系結(jié)構(gòu)相關(guān),為0xC0000000,在include/asm-arm/memory.h中
MEM_SIZE:系統(tǒng)內(nèi)存大小,如果板級(jí)(include/asm-arm/arch-xxx/xxx.h)沒(méi)有指定,則使用體系結(jié)構(gòu)的缺省值16M(arch/arm/kernel/setup.c)
在沒(méi)有內(nèi)存命令從內(nèi)核命令行(cmdline)傳入的情況下 ,setup_arch()函數(shù) (arch/arm/kernel/setup.c文件中)會(huì)使用PHYS_OFFSET和MEM_SIZE指定為系統(tǒng)內(nèi)存并且映射到PAGE_OFFSET。
2.通過(guò)fixup函數(shù)設(shè)置
也可通過(guò)fixup_xxx()函數(shù)(arch/arm/mach-xxx/arch.c)設(shè)置內(nèi)存的起始地址和大小,映射到PAGE_OFFSET,此項(xiàng)設(shè)置會(huì)覆蓋(1)的設(shè)置
3.通過(guò)內(nèi)核命令行傳入
如果內(nèi)核命令行中有系統(tǒng)內(nèi)存相關(guān)的命令(mem=XXXM[@YYY])則會(huì)覆蓋掉(1),(2)中所介紹的映射而將XXX作為內(nèi)存大小,YYY作為內(nèi)存物理起始地址(如果有)映射到PAGE_OFFSET
以上是2.4內(nèi)核,2.6內(nèi)核基本差不多 |
|