免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4831 | 回复: 7
打印 上一主题 下一主题

[操作系统] linux arm ddr flash 配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-12 22:29 |只看该作者 |倒序浏览
请问各位大虾,kernel里面  arm的ddr sdram  以及 flash 的大小配置是在哪个地方啊?   start_kernel  这个函数里面吗

论坛徽章:
0
2 [报告]
发表于 2014-03-12 22:40 |只看该作者
start_kernel --》 setup_arch --》 paging_init  会初始化页表,但是 这个和 ddr sdram 具体有多大好像没有直接联系吧?

论坛徽章:
0
3 [报告]
发表于 2014-03-12 22:42 |只看该作者
网上搜了很久没搜到啊,抓狂了,有没有人 帮我解答一下,万分感谢

论坛徽章:
0
4 [报告]
发表于 2014-03-13 13:37 |只看该作者
没研究这么深。

论坛徽章:
0
5 [报告]
发表于 2014-03-13 13:53 |只看该作者
自己来解决一下, 移植内核的时候, 会建立自己的machine 相关文件,放在 linux-xxxx/arch/arm/mach-xxx/ 下, 而这个文件中会定义

MACHINE_START(MINI2440, "MINI2440")
    /* Maintainer: Michel Pollet <buserror@gmail.com> */
    .atag_offset = 0x100,
    .map_io = mini2440_map_io,
    .init_machine = mini2440_init,
    .init_irq = s3c24xx_init_irq,
    .timer = &s3c24xx_timer,
    .restart = s3c244x_restart,
MACHINE_END

这里的
    .init_machine = mini2440_init,

mini2440_init 是自己实现的函数,会对ddr sram, flash大小等进行统一配置。

另外,似乎bootloader 传上来的参数中也会带ddr sram的大小。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 2014-03-13 17:29 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-03-13 17:53 编辑

ddr的size配置,4种方法:
使用dtb时:
1,dtb中的memory节点的reg属性来设置,这个memory节点必须具备device_type = "memory"这个属性才能够被内核作为ddr size使用
2,dtb中的chosen节点的bootargs属性里的mem=字段来设置
不使用dtb,即老的ATAG_CORE方法时:
3,ATAG_MEM来设置
4,bootargs中的mem=字段来设置

1和2都存在时,内核会使用2忽略1
3和4都存在时,内核会使用4忽略3
1和3是等价的,2和4是等价的

修改1或2都需要重新编译dtb文件
使用3需要修改uboot的代码,因为他是在uboot里写死的
使用4直接修改uboot的环境变量bootargs就可以了

3.3的内核起,arm才能支持dtb
不过mach-244x貌似不支持dtb(三星真尼玛懒),所以就直接用4是最方便的






flash的size是通过id得到的,驱动会读取flash id,然后根据id就能够知道size,参考nand_ids.c

mtd分区可以在内核里写死,也可以通过uboot的环境变量mtdparts传递给内核(PS:由于直接使用裸的nand flash,所以没有emmc/ssd/hdd那样的mbr/gpt,所以分区表并没有保存在nand flash里面)

论坛徽章:
0
7 [报告]
发表于 2014-03-14 17:10 |只看该作者
十分感谢,再问一下,这里的第四点中 bootargs mem=   设置了之后是不是会解析到第三点的 ATAG_MEM呢?  因为我看到代码里__tagtable(ATAG_MEM, parse_tag_mem32);   是不是说bootloader 传上来的参数在这里被解析呢  回复 6# arm-linux-gcc


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2014-03-14 17:17 |只看该作者
回复 7# nomaze


    不是,而是先解析ATAG_MEM,后解析mem=,这两者的解析是在不同的函数中,后者解析出来的结果会直接覆盖前者的结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP