x210-2023-03-31

发布时间 2023-04-01 10:12:04作者: migui

1、在参考网上的一些开启NFS文章时,发现有一个问题,就是他们在---Network File Systems底下都有一个[] Root File system on NFS,但是自己配置这里却没有,而且刚开始的时候也是弄不出来,然后去网上查了个遍,有说直接修改xxx_defconfig文件添加CONFIG_NFS_FS=y、CONFIG_IP_PNP=y的,可是加了并不起效,然后有说根据make menuconfig搜索功能查CONFIG_ROOT_NFS这个配置宏所有依赖然后逐一去打开,但是搜索出来的依赖要不就是已经开启了的(一开始还以为是这些子依赖的depend没做到满足,于是根据一个个depend的内容再往下搜依赖,到最后发现有些depend的子内容搜出来压根不敢确定是不是那项,因为字面内容完全和选项不是很匹配甚至压根没有,导致你根本不确定是否已经开够所有需要的依赖),其实是由于NFS_client_support这项没选对,需要在*模式才能引出[] Root File system on NFS,而在M模式则不可以,这时想起,因为第一次按下空格默认选择的是M模式(如下图),但是实际上要再多按一下空格使其选择到*模式,可是自己完全没注意到,因为被选择项有蓝颜色打掩护,眼神不好以及忙着配别的项所以压根没注意到这里没选择正确,至于能发现这个细微错漏实在是得益于前面make menuconfig搜索依赖的这个折腾过程,有点意识到了某些选项在*、M是完全不一样的,所以直到第二天再次尝试的时候会特别注意甄别自己配置的每一项和参考文章的有没有对上。

 

 2、全部镜像都使用SD卡烧录,但是只有搬移的uImage能对上,而initrd.img.gz对不上,检查发现是uboot的mmc_relocate过程循环代码j错写成了i,检查的办法就是检查hexdump -C和md右侧的ASCII内容(因为hexdump的字节内容是大端格式的,所以字节内容部分只做辅助观察),其实也可以得出思路就是借助hexdump的ASCII内容反过来帮助查看是否烧录或下载到位。

 

 3、根据网上查到的大多数出现restting...、start kernel...uncompressing linux...的情况,绝大部分说都是由于下载地址和链接地址不正确的缘故,所以开始想起好好查查这个0x3000_8000(因为目前在用并不是这个,而是0x2000_8000,其中一个原因是并不满意网上说的为了将512M连起来用,而另一个原因是当时看DDR2初始化视频的时候还没下到友善的板子原理图,而自己的板子虽有原理图但由于那会刚接触所以对其接法还理解不够透,所以只照着视频的模仿来初始化),不过中间插入了个杂事,就是想从机械硬盘拷贝那份友善板子原理图时发现笔记本识别不了这个硬盘(不仅硬盘,鼠标也出现过这个现象),经过多次尝试才发现原来是笔记本内存不够导致的(关掉内存占用多的虚拟机就能识别上了),现在两份原理图(一份九鼎x210cv3一份友善的Mini210s_v1.0_1213),两个对比着看,其实能发现到两者还是有差别的,九鼎的这个不仅用了Xm1,还用到了Xm2,但是友善的只用了Xm1,而Xm2没有用到,所以想起来其实自己的DRAM初始化如果完全照着视频《48-编写自己的DDR初始化代码1》一样去做是有问题的。

 不用mkimage自动生成uImage,而是采取手动命令生成,以便指定Entry Point,烧录结果如下图。

4、在修改的过程测试发现,果然会有问题出现,一是会跑飞(就是使用md查看地址内容时,但是具有不确定性,有时候碰上有时碰不到,自己就碰到过两次),这个需要将memconfig0的chip_map从0x0改为0x1,即使用Interleaved,二是间隔0x0200_0000的两个地址它们的存的值是一样的(改动其中一个都会导致另一个跟着变),这个就需要chip_mask选为能正确反映所接芯片大小的那个掩码值,由于我原来是按视频模仿的配为了512M,但是实际DMC0只接有256M,所以就出现了第二个的现象(说到这里,我又想起后面移植三星的uboot时查阅资料过程中已经有人指出他们的0x2000_0000和0x3000_0000地址内容是同步的,由于他们的uboot开启了MMU,但是还没查到是如何将0x2000_0000映射到0x3000_0000的,因为根据他们说所使用的是smdkc110的,只是从smdkc110开启MMU的注释来看,没看出来有把0x2000_0000映射到0x3000_0000的过程,如果说要是通过DRAM初始化的DMC_MEMCONFIG0来控制映射的话,我测试到的结果是并不能做到,或许也有可能我其它配置步骤里数值没做到完全正确;另外还要再补充说的就是,DMC0、DMC1的memconfig0和memconfig1一定要自己动手配,换成不同的数值、不同的组合看一下情况再下结论,因为不同平台可能存在着差异)。