开发板:立宇泰6410(百度,谷歌上搜下有很多介绍,我也是点点鼠标知道的)
系统:linux2.6.28(也可以支持Android,ubuntu,WINCE6.0(R2/R3操作系统,这点我觉得超赞)
因为研究项目要求需要购置一款开发板做研发,朋友介绍一款Samsung S3C6410处理器,ARM1176JZF-S内核的板子,这点是符合,但其它要素也要考虑的!去网上搜了下,很
多网站上都有产品宣传资料及一些评价!初步看了下,硬件配件资源还不错,基本符合我们的要求,评价大多数都是正面的,这让我开始想了解下立宇泰其它产品特性及评价及报
价之类的,产品好报价太高这个我们不会优先考虑的,谁不想买个物美价廉的呢!去他们官网看了下,产品介绍都很详细,软硬件配置及图片都挺吸引人的,用户手册、升级说明
等都有文档展示,还有一点很重要的是有售后支持,这样产品购买后有问题也不需要担心怎么处理了!虽然只是购买一款核心板,就那么一块小小的板子,但是马虎不得的,如果
没有购买好,对项目研究及成果都有很大影响,所以我也有压力啊!对比了下几家主流的开发板公司,一些公司产品质量是不错就是价格让人难以接受,还有一些开发板公司面向
的是学生市场,价格是低就是让人有点不放心。但是一份价格一份货,如果要作为产品开发,我自然还是要选择可靠点的。
最后选择联系立宇泰公司,听了详细介绍及报价后,拍案决定先购置一款带3.5寸屏的开发板套餐,套餐组合就不详细介绍了,发个链接,有兴趣的可以去看看,当然还有很
多其它配置的产品的!http://www.hzlitai.com.cn/plus/view.php?aid=1778 使用之后发现,速度果然很不错,跟ARM9的S3C2440不可同日而语,当然项目也做的非常成功!
当然,这中间也会有一些技术问题需要一些支持,不过都很快得到解决。就比如说Linux下内存大小的传递,对于一些资深研究人员这当然是简单的问题,可是对于刚开始学
习的我还是需要琢磨下!立宇泰技术支持给我发了个文档,跟着操作问题很快解决!发一些资料上来分享下,希望能帮助跟我一样的人!
Memory: 128MB = 128MB total
Memory: 70556KB available (3888K code, 493K data, 520K init)
这打印出自于:arch/arm/mm/init.c
void __init mem_init(void)
内存地址:arch/arm/mach-s3c6400/include/mach/memory.h
内存大小:arch/arm/kernel/setup.c中设定。MEM_SIZE (64*1024*1024) 不对。
arm linux中一般在cmdline或传递tag参数中设置, 个别板子在machine_desc.fixup函数中设置. 按顺序分别说明:
1, 出现顺序(内核版本2.6.25.20,下同)
start_kernel()
->setup_arch()
->mdesc->fixup()
->parse_tags()
->parse_tag_mem32()
->parse_cmdline()
->early_mem()
2, fixup()函数
这个函数arm平台用的很少. 我只找到eseries.c, mach-smdk2413.c, mach-vstms.c这几个arm板子有, smdk2413_fixup()是在bootloader传递tag地址与machine_desc预设tag
地址(mem_PA+0x100)不同时设置memory的start和size. 如果fixup起作用, 会从tag中把mem tag改为ATAG_NONE, 后面的"parse_tag_mem32"就没用了.
3, parse_tag_mem32()
该函数定义在"arch\arm\kernel\setup.c". 把bootloader传入的mem tag(ATAG_MEM)的start和size参数通过"arm_add_memory()"加入到meminfo的最后一个bank中. start是
memory物理起始地址.
4, early_mem()
该函数定义在"arch\arm\kernel\setup.c". 处理cmdline中的"mem=size@start".
如果没有定义mem起始地址, 使用PHYS_OFFSET(arm中应由arm开发板设置)作为start. early_mem()会覆盖前面设置的meminfo.
呵呵, 你为什么会想到找这个? 我当初是板级移植u-boot到s3c2410时分析的代码, 当时还不知道sourceinsight, 用grep查找的
"arch\arm\mm\init.c"文件和这个好像没关系, 里面的"bootmem_init()"会根据这里设置的meminfo计算出high_memory. 系统物理memory会1:1映射到"AGE_OFFSET---
high_memory-1".
==========================================================
三种方式:
1.使用内核源代码中的定义
通常ARM嵌入式开发板的系统物理内存仅有一块,系统物理内存的指定通常通过三个宏:
PHYS_OFFSET:系统内存的物理起始地址,板级相关,在include/asm-arm/arch-xxx/memory.h中
PAGE_OFFSET:系统内存的虚拟起始地址,体系结构相关,为0xC0000000,在include/asm-arm/memory.h中
MEM_SIZE:系统内存大小,如果板级(include/asm-arm/arch-xxx/xxx.h)没有指定,则使用体系结构的缺省值16M(arch/arm/kernel/setup.c)
在没有内存命令从内核命令行(cmdline)传入的情况下 ,setup_arch()函数 (arch/arm/kernel/setup.c文件中)会使用PHYS_OFFSET和MEM_SIZE指定为系统内存并且映射到
PAGE_OFFSET。
2.通过fixup函数设置
也可通过fixup_xxx()函数(arch/arm/mach-xxx/arch.c)设置内存的起始地址和大小,映射到PAGE_OFFSET,此项设置会覆盖(1)的设置
3.通过内核命令行传入
如果内核命令行中有系统内存相关的命令(mem=XXXM[@YYY])则会覆盖掉(1),(2)中所介绍的映射而将XXX作为内存大小,YYY作为内存物理起始地址(如果有)映射到
PAGE_OFFSET
以上是2.4内核,2.6内核基本差不多