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.打印出来发现不对的话,修改好,然后继续启动过程是吧?
离线
要修改.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的分区划分。以上是我猜测,不过应该是接近真理。
这么说的话,固件编译的时候,或者说编译完的固件不受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对比入手比较好。
能启动的官方固件和不能启动的我自己编译的固件的uboot是没有变化的,在uboot命令行(看你的帖子,发现有可能我的uboot不带命令行)里打印bootarg会有可能不同吗?能启动的版本与不能启动的版本只有固件部分不同
离线
晕哥,我晕了,你是说官方出的编好的bin里的dts和它源码里的dts有区别?它出的bin也写着是LINKIT版本的?有没有可能我的固件里就是没有根文件系统?make menuconfig或者某个地方配置会导致rootfs没包进bin吗?我编译出来的bin好像是小一些
离线
sgf201 说:晕哥,我晕了,你是说官方出的编好的bin里的dts和它源码里的dts有区别?它出的bin也写着是LINKIT版本的?有没有可能我的固件里就是没有根文件系统?make menuconfig或者某个地方配置会导致rootfs没包进bin吗?我编译出来的bin好像是小一些
方便发个帖子告诉我LINKIT怎么编译吗?我手里有widora mt7688开发板,或许我可以帮你试一试。
好的,晚上发
离线
感谢大老支招
我那个7688的板子刷wadora的boot 波特率是115200打出来全是乱码,只有几个 1 2 3 能打印出来,然后我感觉就是我编译的固件没有文件系统,因为我编出来是2.8M,官方的是3.3M,kernel能启动是不是说明flash的驱动没问题呢?稍后我贴一下编译过程吧
离线