今天测试 DE1-SOC (http://www.terasic.com.cn/cgi-bin/page/archive.pl?Language=China&CategoryNo=182&No=870&PartNo=4) 的这个image:DE1_SoC_FB.img:

设置msel为01010, 结果 启动的时候一直卡在 starting kernel这里:

 当我设置msel 为00000时,则开发板linux可以正常启动。我有点疑惑,因为我前不久测试DE10-Standard 的 DE10_Standard_LXDE.img 

http://www.terasic.com.cn/cgi-bin/page/archive.pl?Language=China&CategoryNo=182&No=1105)的时候我一直设置01010没有问题。

那么这之间的差异到底在哪呢?

我先去找C5的handbook,我看到:

看来rbf在转换的时候被压缩,则符合01010模式,如果没有压缩,则选择00000。那在哪里可以看到rbf转化的时候有没有被压缩呢?我打开DE1_SoC_FB.img对应的Quartus工程 里面的sof_to_rbf.bat文件:

DE1-SoC_v.5.1.3_HWrevF.revG_SystemCD\Demonstrations\SOC_FPGA\DE1_SOC_Linux_FB,找到sof_to_rbf.bat文件:

对比 DE10-Standard的sof_to_rbf.bat文件:

 原来默认是未压缩的,加上-o bitstream_compression=on后就压缩了,所以这才是DE1-SOC 的DE1_SoC_FB.img 不能设置为01010来启动的原因。

再后来看到网上某个教材这样写:

 

 其实画横线的地方描述是有误的,uboot也可以使用压缩的rbf,是否压缩是根据msel来判断的。

 比如DE10_Standard_LXDE.img 其rbf是经过压缩的,但是也是在boot阶段启动,启动的时候设置01010:

 那些需要在linux应用程序中配置fpga的,rbf文件(还有dtbo文件等)都会放在板子linux系统起来以后的/lib/firmware路径下,比如友晶科技官方提供的de10_standard_linux_console.img就是这样。