经过了三天的填坑,终于在Exynos4412上移植成功了Uboot2015+Linux4.1.36+Rootfs。
具体的移植操作过程在前文在Exynos4412上使用SD卡烧写Linux已经赘述。本文用于记录经验总结。
问题一:设置的内核地址不正确,uboot无法启动内核
解决办法:
在SSH工具上对SD卡进行hexdump打印前5M的地址数据,保存到.txt文件,然后使用Hex Editor打开uImage文件,可以看到第一个数据是2705,但是实际上这个数据的存放位置是颠倒的,于是在.txt里进行搜索前三组数据,找到偏移地址200000。
在uboot启动的时候会打印出uboot的启动地址是7fe7d000,加上偏移地址得到内核启动时所处的地址8007D000,最后我们设置bootargs里的kerneladdr为0x8007D000,成功启动内核!!
问题2:无法挂接SD卡,提示找不到bootargs里的块设备
解决办法:
2.1.首先是因为在Kernel打印信息没有sdhci有关的信息,因此意识到Kernel没有添加SD/MMC里的S3C驱动,添加PCI驱动支持,另外防止出现由于内核映像是由虚拟机生成,将Fusion MPT driver和LPC编进内核。
2.2.识别出了SD卡,但是找不到init /linuxrc,由于我错误的将rootfs.ext2直接地移到了文件系统分区,没有解压所以找不到init /linuxrc,直接将Buildroot目录output下target/里的所有文件拷贝到文件系统分区即可找到init /linuxrc。位于在Exynos4412上使用SD卡烧写Linux的最后一步有写具体操作。
2.3.由于拔插SD卡步骤有问题,导致SD卡处于写保护状态,因此需要格式化Rootfs所在的分区,再重新刷入Rootfs。
最后挂接成功。在设置bootargs时可以设置root=179:2,179是SD卡的主设备号,2是SD卡文件系统分区的从设备号,当然也可以设置为root=/dev/mmcblk0p2,0代表SD卡,1代表板子的emmc,p2指第二分区。
欠缺:
/*
*目前LCD功能尚未实现需要修改调试,继续填坑。
*SD卡作为文件系统的可靠性有待提高
*/