用过龙芯的小朋友应该都知道,以前的cpu,调试完Pmon下s1和内存参数之后,内核几乎不用改,一下子就可以跑通,为什么现在2k下既要配置pmon,也要配置什么dts, wf! 美其名曰:遵守大内核规范,要理解这个问题,首先还得看一下源码中的处理,以2h和2k为例分别解析:
2h比较老,骨灰级玩家无需解释,以前帮客户适配板卡,pmon下搞一搞s1和参数,嗖一下,内核不用怎么配,就正常启动,压力测试也能过,内存大小也能自动适配,原因是内核里解析了pmon传递的boot_param结构体中的emap成员,该成员里有内存的分段和大小信息,调用关系如下:
prom_init(在arch/mips/loongson2/loongson2hsoc/init.c文件中)
->prom_env_parse(arch/mips/loongson2/loongson2hsoc/env文件中)解析pmon传递过来的emap
->prom_memory_init(arch/mips/loongson2/loongson2hsoc/mem.c)把分区,内存大小传递到内核结构体boot_mem_map中,完成内存配置的交接;
2k上呢,没有什么boot_param,有也没有用,问了也是人家就是这么设计的,需要多一步配置dts,原因上一句已经解释了,代码中调用过程如下:
early_init_dt_scan_memory_arch(arch/mips/kernel/prom.c)
->early_init_dt_scan_memory(drivers/of/fdt.c)
->early_init_dt_add_memory_arch(arch/mips/kernel/prom.c)
不要问上面的代码干嘛的,我也不知道,呜呜呜!!!