【问题标题】:Linux doesn't recognize multicore Rocket on FPGALinux 无法识别 FPGA 上的多核 Rocket
【发布时间】:2015-10-15 14:09:03
【问题描述】:

我按照How to make a multicore system using the RISC-V Rocket-chip processor 的说明为 FPGA(板:Xilinx ZC706)生成多核 Rocket,但 Linux 无法识别额外的内核。

我确信 Linux 与 SMP 配合得很好,因为当我用火箭芯片仿真器或 Spike ISA 仿真器替换 FPGA 时,它可以识别多核。

screenshot

更新:应用多核修复提交后,riscv Linux 停止:

root@zynq:~# ./fesvr-zynq +disk=/nfs/root.bin bbl /nfs/linux-3.14.33/vmlinux 
              vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                  vvvvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr       vvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr      vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr    vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr    vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr    vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr      vvvvvvvvvvvvvvvvvvvvvv  
rrrrrrrrrrrrr       vvvvvvvvvvvvvvvvvvvvvv    
rr                vvvvvvvvvvvvvvvvvvvvvv      
rr            vvvvvvvvvvvvvvvvvvvvvvvv      rr
rrrr      vvvvvvvvvvvvvvvvvvvvvvvvvv      rrrr
rrrrrr      vvvvvvvvvvvvvvvvvvvvvv      rrrrrr
rrrrrrrr      vvvvvvvvvvvvvvvvvv      rrrrrrrr
rrrrrrrrrr      vvvvvvvvvvvvvv      rrrrrrrrrr
rrrrrrrrrrrr      vvvvvvvvvv      rrrrrrrrrrrr
rrrrrrrrrrrrrr      vvvvvv      rrrrrrrrrrrrrr
rrrrrrrrrrrrrrrr      vv      rrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrr          rrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrr      rrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrr  rrrrrrrrrrrrrrrrrrrrrr

       INSTRUCTION SETS WANT TO BE FREE

****************Sometimes halt here************************

[    0.000000] Linux version 3.14.33-g043bb5d (guanglin@guanglin-a11-linux) (gcc version 5.2.0 (GCC) ) #5 SMP Tue Oct 13 14:56:14 EDT 2015
[    0.000000] Detected 0xfe00000 bytes of physical memory
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x00200000-0x0fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x00200000-0x0fffffff]
[    0.000000] PERCPU: Embedded 8 pages/cpu @ffffffff8062d000 s9432 r0 d23336 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 64135
[    0.000000] Kernel command line: root=/dev/htifblk0
[    0.000000] PID hash table entries: 1024 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
[    0.000000] Sorting __ex_table...
[    0.000000] Memory: 253320K/260096K available (1898K kernel code, 119K rwdata, 368K rodata, 85K init, 221K bss, 6776K reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=2.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS:2
[    0.150000] Calibrating delay using timer specific routine.. 20.02 BogoMIPS (lpj=100145)
[    0.150000] pid_max: default: 32768 minimum: 301
[    0.150000] Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
[    0.150000] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
[    0.150000] Brought up 2 CPUs
[    0.150000] devtmpfs: initialized
[    0.150000] NET: Registered protocol family 16
[    0.150000] bio: create slab <bio-0> at 0
[    0.150000] Switched to clocksource riscv_clocksource
[    0.150000] NET: Registered protocol family 2
[    0.150000] TCP established hash table entries: 2048 (order: 2, 16384 bytes)
[    0.150000] TCP bind hash table entries: 2048 (order: 3, 32768 bytes)
[    0.150000] TCP: Hash tables configured (established 2048 bind 2048)
[    0.150000] TCP: reno registered
[    0.150000] UDP hash table entries: 256 (order: 1, 8192 bytes)
[    0.150000] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[    0.150000] NET: Registered protocol family 1
[    0.150000] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.150000] io scheduler noop registered
[    0.150000] io scheduler cfq registered (default)
[    0.180000] htifcon htif1: detected console
[    0.190000] console [htifcon0] enabled
[    0.190000] htifblk htif2: detected disk
[    0.190000] htifblk htif2: added htifblk0
[    0.190000] TCP: cubic registered

****************Sometimes halt here************************

[    0.190000] VFS: Mounted root (ext2 filesystem) readonly on device 254:0.
[    0.190000] devtmpfs: mounted
[    0.190000] Freeing unused kernel memory: 84K (ffffffff80000000 - ffffffff80015000)
/ # 
/ # 
/ # cd /
/ # cd /usr
/usr # echo abc
abc
/usr # ls

****************Sometimes halt here************************

【问题讨论】:

  • 请不要张贴文字图片,尤其是文字图片的链接。首先,不是每个人都可以阅读图像中的文字,其次链接可能会消失,这可能会使您的问题变得毫无价值。而是将实际文本复制并粘贴到问题正文中。
  • 好主意,谢谢。 @JoachimPileborg
  • SMP linux 在运行 ls 后有时会停止是一个错误(在尖峰下也会发生)。如果能调试就好了。
  • 令人惊讶的是,我没有观察到 SMP Linux on Spike 的脆弱性。现在我看到 Spike SMP Linux 有时会停顿,但比 FPGA 少。 @user2548418

标签: linux riscv


【解决方案1】:

您需要重新构建 riscv-fesvr 并将其安装到 FPGA 上。这个commit 解决了这个问题。 rebuilding riscv-fesvr的说明。

【讨论】:

  • 非常感谢!重建后,riscv linux 在启动时识别第二个内核。然而,riscv linux 很快就会停止(有时我什至无法从屏幕上看到内核启动信息)。我使用的启动命令是“LD_PRELOAD=./libfesvr.so ./fesvr-zedboard +disk=/path/to/root.bin bbl /path/to/vmlinux”
  • 按照rebuilding riscv-fesvr 的说明生成fesvr-zedboard,但实际上我使用的是更大的ZC706。有关系吗?
  • 不,你可以重命名为 fesvr-zynq。您可以将libfesvr.so复制到板上的/usr/local/lib。
  • 谢谢。但我怀疑多核修复commit 的成熟度。 RISCV Linux 在启动后很快停止。但是,如果我在没有该修复的情况下回滚到以前的 git 提交,那么 RISCV Linux 在一个内核上工作得很好。
  • 我更新了我的问题,以便您可以看到 RISCV Linux 停止的位置。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-04-20
  • 2017-11-12
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多