新开一个系列挖坑贴,尝试从0开始使用主线的uboot/kernel等支持f1c100s/f1c200s,一下内容有错误时欢迎讨论补充
好的,废话不多说,先把现在摸索的进展贴一下:
目前主线uboot 2020.04已成功编译运行,但好像不分驱动还有些问题:
请忽略Run@……的调试信息,这是我自己加的正在调试的。
(以下简称f1c100s,我实际是在f1c200s上调试的(tiny200),但应该是通用的)
1,一些前提介绍(大神欢迎指点,记录下也方便解答一下我以前一直不是清楚的地方):
f1c100s芯片的启动顺序,论坛里已经有介绍过了,具体是参考V3s手册中的介绍,详细链接见https://whycan.cn/t_1746.html中晕哥的解答。
简单来说芯片上电后后启动芯片的BROM固话代码,该启动代码会按照sdc0-> spi0 nor -> spi0 nand -> usb顺序尝试启动
我现在测试用的spi0 nor
spi0 nor时,BROM会先加载uboot固件中的spl代码(Secondary Program Loader),然后由spl加载真正的uboot,所以你看到启动时会先打印u-boot spl 然后再打印一次u-boot。
uboot 后会再去加载kernel,加载rootfs真正完成linux启动
2,一些工具源码准备:
主线用到的工具或源码:
2.1 编译工具链官网:https://www.linaro.org/(或https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain后文以linaro为例)
进入support->downloads可以看到下载页面,点击稳重的GNU cross-toolchain binary archives,可以进入对应下载列表https://releases.linaro.org/components/toolchain/binaries/,可以看到各个版本的toolchain,这里我使用的latest-7/arm-linux-gnueabi/即gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi
2.2 Uboot官网:http://www.denx.de/wiki/U-Boot/WebHome
进入source code,可以找到源码的Git路径:https://gitlab.denx.de/u-boot/u-boot.git
2.3 Kernel官网:https://www.kernel.org/
下载Git源码,可以自行选择对应的分支(5.4.x/4.19.x/...),点击browse,下一个页面点击summary,最下边clone可以看到对应的git地址
2.4 rootfs:一般建议用https://buildroot.org/,也有其他如Yocto,OpenWRT/LEDE等(这些都没用过)
3,一般步骤:
编译uboot,编译kernel,打包rootfs,最后打包完整镜像,烧写。
后续开始从楼下开始正文
离线
uboot 折腾记录:
uboot我使用主线的v2020.04版本,参考licheepinano给的资料(他的uboot是基于v2018.01)
通过对比v2018.01与licheepinano官方uboot的差异,逐一合并入v2020.04,以下是一些合并的记录,目前还没解决完,解决完以后放出差异文件:
目前有问题的是dm tree已经有了这个flash,但是系统其它模块好像没识别,sf等命令会提示重新挂载flash,而实际probe时,又报错。
准备对一下v2018.01的执行顺序和v2020.04的执行顺序,看看差异在哪,今天折腾不动了。
最近编辑记录 羽剑天涯 (2020-06-22 06:51:22)
离线
占个楼,后续更新Kernel折腾记录用
离线
自己发的帖子不能编辑了吗?
更新一下最新进展:
uboot可以正常读取spi flash了,原来是v2020.04的spi驱动drivers/spi/spi-sunxi.c不能直接用,
无法按参数树读取clock等信息。替换进来v2018.01的spi驱动drivers/spi/sun6i_spi.c并修改Makefile和config使用这个驱动就可以了。
摸索中学到的一些flashlayout信息:
offset-start offset-end content 其他说明
0 0x8000 uboot-spl offset-end由下一个offset-start决定,实际大小为u-boot-spl.bin的大小
0x8000 0x100000 uboot offset-start由menuconfig中的CONFIG_SYS_SPI_U_BOOT_OFFS决定
0x100000 0x110000 kernel offset-start由uboot的bootcmd中的sf read决定,目前是从100000读0x4000到0x80C00000
0x110000 0x510000 rootfs offset-start由uboot的bootcmd中的sf read决定,目前是从110000读0x400000到0x80008000
后边继续继续开始准备折腾主线kernel
离线
合并后的提交在https://gitee.com/wang33__winner/u-boot.git分支v2020.04-f1cxxx
感兴趣的可以试试,主要就是比较了原来版本的差异,合并入主线v2020.04,碰到的一些问题做了处理,目前可以正常编译运行
不能编辑楼层,那之前占楼白占楼了,后边折腾kernel的再单独开贴吧。
离线
本帖目的不是为了让大家用我提交的那个版本(我不会做很好维护,会提交一些我自己定制的东西),而是抛砖引玉,通过折腾让各位了解一下如何使用最新版本的uboot/kernel等(最主要是让我摸索学习一下:P )。
有些人可能就是有这种“洁癖”,希望能跟上最新的主线代码(比如我,哈哈),那么这里可以参考一下,后边有v2020.07甚至v2021.xx也可以自己动手,合并后跟上相应主线代码。
这里的toolchain也是选择的latest-7(说不定8或9也可以,各位也可以自己试一下)
离线
u-boot v2020.07发布了,合并后的提交在https://gitee.com/wang33__winner/u-boot.git分支v2020.07-suniv
同时把差异文件也放一份,喜欢折腾的可以自己折腾:
v2020_07.zip
离线