HLK-7688开发板,由于官方uboot没有输出信息,刷了Wooya的uboot,固件下载OPenwrt官方的LINKIT开发板版本LEDE17版本的可以正常开机,刷LEDE15版本也可以,但是我自己编译固件bin然后下载的话就会提示下面的Panic.
[ 0.730000] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
[ 0.740000] Please append a correct "root=" boot option; here are the available partitions:
[ 0.760000] 1f00 192 mtdblock0 (driver?)
[ 0.770000] 1f01 64 mtdblock1 (driver?)
[ 0.780000] 1f02 64 mtdblock2 (driver?)
[ 0.790000] 1f03 32448 mtdblock3 (driver?)
[ 0.800000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 0.800000] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 82.700000] random: nonblocking pool is initialized
大概意思就是无法挂载根文件系统。可是我编译的时候芯片选择的7688,开发板选择的LINKIT别的什么都没有改动,但是17和15两个版本都会panic.
查网上的文档,有人说是uboot中文件系统地址写的和固件中地址不一样,原因是有的uboot分了0x2000,有的分了0x3000,导致文件系统位置错位,自然就无法识别。
可是有个问题是如果是这个原因为何官方编译的bin固件就可以启动呢?
由于我没有编程器,不敢改动boot.怕费了就费了,我把固件dts文件中uboot的大小从3000改为了2000,重新编译依然是报相同的错误。
麻烦大侠们给分析下情况,在不改动boot的状态下如何填下这个坑。
如果还是怀疑uboot的问题的话,有没有啥官方途径能得到正确的uboot,自己编的不敢写,没有编程器,谢谢啦
离线
晕哥,你说的bootargs是指的解压内核前打印的还是解压后打印的?官方内核解压完内核启动信息就改成串口三打印了,我的开发板没有串口三,Wpanic这段在切换之后
离线
关键问题是官方的固件也应该是用个我一样的编译配置编出来的,官方的没事,我的却不行,这个arg是在编译阶段修改的吗?
离线
好的,我去打印下
离线
如果是uboot有问题,官方固件有可能不用uboot传入的信息吗?在传信息这步自己编和官网编的有可能有区别?两个都是LINKIT板子
离线
启动过程中,我可以进boot.打印出来发现不对的话,修改好,然后继续启动过程是吧?
离线
你看下这个帖子的三楼: openwrt分区问题
bootargs里面这个参数 mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,9M(kernel)ro,-(rootfs)可以划分spi flash分区,
前提当然是 .config 里面把 CONFIG_MTD_CMDLINE_PARTS=y 编译开关打开
不过应该是已经打开了,如果没有打开就自己打开一下。
离线
要修改.config的话,是不是就得重编uboot呀?另外编固件的时候有办法让uboot传过来的参数不生效,而用dts里边的分区信息吗?
离线
要修改.config的话,是不是就得重编uboot呀
CONFIG_MTD_CMDLINE_PARTS=y 是linux内核的编译开关, 不是u-boot的
u-boot的dts我觉得是给u-boot的命令行用的,方便在u-boot操作flash里面的文件,
一旦 kernel跑起来了, 根本就不认u-boot dts里面设置的分区了,
kernel 只认自己驱动或者bootargs的分区划分。
以上是我猜测,不过应该是接近真理。
离线
要修改.config的话,是不是就得重编uboot呀
CONFIG_MTD_CMDLINE_PARTS=y 是linux内核的编译开关, 不是u-boot的
u-boot的dts我觉得是给u-boot的命令行用的,方便在u-boot操作flash里面的文件,
一旦 kernel跑起来了, 根本就不认u-boot dts里面设置的分区了,
kernel 只认自己驱动或者bootargs的分区划分。以上是我猜测,不过应该是接近真理。
这么说的话,固件编译的时候,或者说编译完的固件不受dts文件的影响哈dts文件的话也是在uboot读取使用的是吧,为何LEDE固件源码里有dts,而且启动内核后log信息打印也确实是按dts里配置的走,是说dts里的分区是给uboot看的,但像打印一类的还是内核看的吗?还是说内核启动了其实uboot也还有代码段在被kernel调用然后去查询的dts文件?
离线
u-boot也会将某些参数(比如LCD)传导给内核,
这样只要在u-boot里面设置一次参数即可,参考 如何讲uboot和内核的启动过程输出到液晶屏上?具体需要哪些操作?
这个V3s就是只要在u-boot里面设置一次LCD参数,然后用技巧把u-boot的参数读到kernel的dts里面,使之共享了这组参数。
但是我觉得你这个系统两个dts应该还是互不影响的, 从u-boot命令行读出bootargs对比入手比较好。
离线
u-boot也会将某些参数(比如LCD)传导给内核,
这样只要在u-boot里面设置一次参数即可,参考 如何讲uboot和内核的启动过程输出到液晶屏上?具体需要哪些操作?
这个V3s就是只要在u-boot里面设置一次LCD参数,然后用技巧把u-boot的参数读到kernel的dts里面,使之共享了这组参数。但是我觉得你这个系统两个dts应该还是互不影响的, 从u-boot命令行读出bootargs对比入手比较好。
能启动的官方固件和不能启动的我自己编译的固件的uboot是没有变化的,在uboot命令行(看你的帖子,发现有可能我的uboot不带命令行)里打印bootarg会有可能不同吗?能启动的版本与不能启动的版本只有固件部分不同
离线
晕哥 说:u-boot也会将某些参数(比如LCD)传导给内核,
这样只要在u-boot里面设置一次参数即可,参考 如何讲uboot和内核的启动过程输出到液晶屏上?具体需要哪些操作?
这个V3s就是只要在u-boot里面设置一次LCD参数,然后用技巧把u-boot的参数读到kernel的dts里面,使之共享了这组参数。但是我觉得你这个系统两个dts应该还是互不影响的, 从u-boot命令行读出bootargs对比入手比较好。
能启动的官方固件和不能启动的我自己编译的固件的uboot是没有变化的,在uboot命令行(看你的帖子,发现有可能我的uboot不带命令行)里打印bootarg会有可能不同吗?能启动的版本与不能启动的版本只有固件部分不同
正是因为你没有修改 u-boot的bootargs的参数导致不能启动,
因为两个版本kernel里面分区划分不同,
导致另外一个版本的kernel没有办法加载 根文件系统rootfs, 所以启动失败。
有两个办法
1. 你把不能启动的kernel的dts调整与可以启动的一致
2. 你把不能启动的kernel的u-boot把bootargs设置与kernel要求的一致.
这两个办法最终都是能让Linux启动找到自己的根文件系统,否则系统就会起不来!
离线
晕哥,我晕了,你是说官方出的编好的bin里的dts和它源码里的dts有区别?它出的bin也写着是LINKIT版本的?有没有可能我的固件里就是没有根文件系统?make menuconfig或者某个地方配置会导致rootfs没包进bin吗?我编译出来的bin好像是小一些
离线
晕哥,我晕了,你是说官方出的编好的bin里的dts和它源码里的dts有区别?它出的bin也写着是LINKIT版本的?有没有可能我的固件里就是没有根文件系统?make menuconfig或者某个地方配置会导致rootfs没包进bin吗?我编译出来的bin好像是小一些
方便发个帖子告诉我LINKIT怎么编译吗?我手里有widora mt7688开发板,或许我可以帮你试一试。
离线
sgf201 说:晕哥,我晕了,你是说官方出的编好的bin里的dts和它源码里的dts有区别?它出的bin也写着是LINKIT版本的?有没有可能我的固件里就是没有根文件系统?make menuconfig或者某个地方配置会导致rootfs没包进bin吗?我编译出来的bin好像是小一些
方便发个帖子告诉我LINKIT怎么编译吗?我手里有widora mt7688开发板,或许我可以帮你试一试。
好的,晚上发
离线
openwrt里,cc15版本,bootargs放到了dts里,没有处理uboot传过来的。
无涯那孙子抄我的uboot,现在固件已经不敢抄我的了。
所以你直接刷widora的uboot: wiki.widora.cn
内核也直接刷,如果能跑,就按照wiki编译即可。
这种问题要么是启动参数确实错误了,要么是你编译的那份代码里缺少它的SPI flash驱动。
最近编辑记录 mango (2018-03-24 21:04:19)
歪朵拉开源硬件: https://widora.cn
淘宝: https://widora.taobao.com/
离线
这个倒没啥生气的,只要无涯、还有什么云联芯这些不太过分就行。
做开源尤其是在国内本来不易,还有几个苍蝇跟在后边乱咬,就比较容易上火了。
哦,对了,wooya的商标在我手里。:D
歪朵拉开源硬件: https://widora.cn
淘宝: https://widora.taobao.com/
离线
国内开源事业确实不容易。
这不,今天看到这个
http://linux-sunxi.org/GPL_Violations
我用google自动翻译:
GPL违规
Allwinner一再违反GPL(通过代理,所以大多数硬件制造商和经销商使用或销售基于Allwinner芯片组的产品)。要么根本不提供(Linux / Android)内核或u-boot源代码,要么通过提供预构建的二进制文件并且没有匹配的源代码来交付树。他们甚至公然在其用户空间库中使用LGPL许可代码进行媒体解码。
随着时间的推移,Allwinner只会增加其内核树中存在的二进制斑点,清楚地表明 - 尽管Allwinner在此期间(2014年3月)加入了Linaro,但并未取得进展。事实上恰恰相反,如果一个成员被允许像这样行事,就必须担心Linaro会员的真正价值。
Allwinner也于 2015年6月加入Linux基金会,但合规问题显然依然存在。
连大公司都不遵守开源规则、协议,个人就可想而知了。
最近编辑记录 cityf (2018-03-24 21:50:26)
离线
感谢大老支招
我那个7688的板子刷wadora的boot 波特率是115200打出来全是乱码,只有几个 1 2 3 能打印出来,然后我感觉就是我编译的固件没有文件系统,因为我编出来是2.8M,官方的是3.3M,kernel能启动是不是说明flash的驱动没问题呢?稍后我贴一下编译过程吧
离线
@sgf201
默认固件是6MB
uboot乱码你肯定用了ch340,建议换掉,用cp2102,ft232这些,兼容性好也稳定。
可以直接到 wiki.widora.cn 下载固件先测试
歪朵拉开源硬件: https://widora.cn
淘宝: https://widora.taobao.com/
离线
我把HLK7688A刷了widora的uboot,直接uart0/1都歇菜,没有任何输出,也不能交互,倒是可以引到linux。
只能想办法拆开刷spi flash了。
最近编辑记录 regbbs (2020-04-30 03:12:08)
离线