之前尝试了编译了一下uboot 成功后,买的zeropi 的板子也终于到,断断续续,终于编译并且成功运行了起来,
虽然zeropi wiki 上有直接提供windos 下的完成img 和 烧写工具,可以一键搞定。
但是作为才入门linux的萌新来说,还是有必要折腾一下的,在这折腾的过程中也学习了不少知识,过程曲折记录整理,
主要流程参考还是wiki:http://wiki.friendlyarm.com/wiki/index.php/Building_U-boot_and_Linux_for_H5/H3/H2%2B/zh
不过以上这个教程的流程上还缺了一环,就是根目录制作。
一、uboot 编译
uboot 是git 上下载的分支版本,
下载了近十几次终于才成功的下载了一次:https://github.com/friendlyarm/u-boot.git -b sunxi-v2017.x --depth 1
有了之前的练习,所以也就没什么多大的问题,一路顺利过掉。
二、Linux编译
linux4.14版本 原本也是准备下载git 上的,但是这个同样下载了十几次没一次成功的,索性就放弃了,
后来在网上找到了一个接近的 4.11版本的就拿来用下。
https://www.cnblogs.com/edan/p/9330708.html
同时linux部分编译也是参考此链接。毕竟是 allwiner 的bsp 也是一路顺利
三、busybox 编译
一开始,也是为了图方便,网上随便找了个资源下载的,但是死活编译不过提示:undefined reference to `stime'
百度了一下原因及解决方法:https://blog.csdn.net/o_alpha/article/details/113487031
然后去官网下了个最新的 https://busybox.net/downloads/
终于好不容易编译过了。
四、遇到的问题记录及解决
一切准备就绪之后烧录,上电一跑,各种问题随之而来:
uboot 阶段 板子能正确识别:zeropi 但是设备树文件显示的是 sun8i-h3-nanopi-m1-pluse 的,
同时一开始不知道 uboot 还要设置,直接提示 未识别的文件系统,忘记截图,大概是:unrecognized fs type
配置 bootcmd 和 bootargs 之后终于继续走了下去,到了 Starting kernel 之后没下文了。
网上搜索了一圈答案,同时也对uboot 阶段跳入 linux 阶段也是有所了解了,并且这个Starting kernel 应该是uboot 最后输出的,
网上人家的提问中后边 还带有 uncom.... 什么解压image 镜像 什么的提示的,和我的有些区别,我的如上图已经提示 zImage 还有 设备树文件 已经读取到。
后来在了解设备树文件的时候,还真是发现了问题,那个4.11 bsp Linux 文件夹中的sun8i-h3-nanopi-m1-pluse设备树 和 zeropi完全是不一样的。
zeropi wiki 的电气原理图 http://wiki.friendlyarm.com/wiki/images/7/71/ZeroPi_20190731_Schematic.pdf
状态led 的IO口 就对不上了.....
后来一想既然uboot 中设备树文件识别成sun8i-h3-nanopi-m1-pluse,那是不是 uboot 中的设备树文件 应该是可用的,而且 dtb 是最终的二进制文件,所以应该可以直接拿来用。
按照这个思路直接替换 设备树文件,居然还真继续跑下去了。
不过最后还是报错了:end Kernel panic .... No working init found ...一开始只看到了这最后的错误提示,没想着回看,
直接从错误提示找:No working init found 不过相同的问题寥寥无几,看了一大圈,不过可以大体定位是和根文件系统有关的,也顺便了解了一波根文件信息。
也是鬼使神差,往上翻内核的打印信息的时候,突然才看到mmc2 这边有些问题:waiting for root device /dev/mmcblk2p1
分区识别是p1 和 p2 但是 p1 是内核镜像和设备树文件分区,跟文件区域是 分区是p2
所以重新设置 bootargs 参数 ,终于是解决了。
但是新的问题又出现了,couldn’t execute it (error -8)这个网上找了一圈,
主要得到的解决方法有两种,权限问题还有elf 二进制的文件格式 不一致,但是笔者试了一下都没什么用。
但是从错误提示看:文件是存在的,结合上面一句runaway loop modprobe binfmt-464c 看 应该的确是和二进制格式有关系。
后来在这里面找到了原因:https://www.freesion.com/article/44611148946/
重新编译解决,之后终于进入到了控制台,一切ok,测试了一下 usb 挂载,终于是成功了