lowrisc-chip
lowrisc-chip copied to clipboard
ariane-v0.7 build issue
Dear Dr. Jonathan,
I tried to clone the ariane-v0.7 with "git clone -b ariane-v0.7 --recursive https://github.com/lowRISC/lowrisc-chip.git" And then got this issue:
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb' Cloning into 'capstone'... fatal: unable to connect to git.qemu.org: git.qemu.org[0: 172.99.69.163]: errno=Connection timed out
fatal: clone of 'git://git.qemu.org/capstone.git' into submodule path 'capstone' failed Failed to recurse into submodule path 'qemu'
I checked the qemu folder under "https://github.com/lowrisc/qemu/tree/7ae23bc1974f8738b5009125873e43e6a8b1d848"
The capstone @ 22ead3e and dtc @ e543880 are not accessible.
It seems these two links are expired.
Where can I get them?
Any recent version of QEMU would do here. The QEMU user executable is needed for the Debian bootstrap, originally the thread was about using buildroot. You can also download a prerelease of the complete root file system from the release area of GitHub.
Thanks for the prompt reply. I manually download the qemu and remove the update operation. The qemu build passed.
Then another error happened.
make -C debian-riscv64 cpio
make[1]: Entering directory '/home/riscv_project/temp/lowrisc-chip2/lowrisc-chip/debian-riscv64'
make[1]: Warning: File 'work/makefile.inc' has modification time 34 s in the future
sudo debootstrap --arch=riscv64 --variant=minbase --keyring=/etc/apt/trusted.gpg \
--include=gnupg --exclude=cgmanager sid work/debian-riscv64-chroot \
http://deb.debian.org/debian-ports || exit 1
I: Retrieving InRelease
I: Checking Release signature
E: **Release signed by unknown key (key id DA1B2CEA81DCBC61)**
work/makefile.inc:28: recipe for target 'work/debian-riscv64-chroot/usr/bin/apt' failed
make[1]: *** [work/debian-riscv64-chroot/usr/bin/apt] **Error** 1
make[1]: Leaving directory '/home/riscv_project/temp/lowrisc-chip2/lowrisc-chip/debian-riscv64'
Makefile:55: recipe for target 'linux-5.1.3-lowrisc/initramfs.cpio' failed
make: *** [linux-5.1.3-lowrisc/initramfs.cpio] **Error** 2
After added "--no-check-gpg" to the debootstrap, it unblocked me but gave me another error:
I: Extracting util-linux...
I: Extracting zlib1g...
W: Failure trying to run: chroot /home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip2/debian-riscv64/work/debian-riscv64-chroot mount -t proc proc /proc
W: See /home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip2/debian-riscv64/work/debian-riscv64-chroot/debootstrap/debootstrap.log for details
work/makefile.inc:28: recipe for target 'work/debian-riscv64-chroot/usr/bin/apt' failed
make[1]: *** [work/debian-riscv64-chroot/usr/bin/apt] Error 1
make[1]: Leaving directory '/home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip2/debian-riscv64'
Makefile:55: recipe for target 'linux-5.1.3-lowrisc/initramfs.cpio' failed
make: *** [linux-5.1.3-lowrisc/initramfs.cpio] Error 2
"
The "debian-riscv64-chroot/debootstrap/debootstrap.log" shows:
chroot: failed to run command 'mount': Exec format error
I can see the mount command format is wrong but cann't find where is this command is used. Did I do something wrong?
There should be a command in the Makefile or subsidiary shell scripts to import any necessary keys. You can add any missing keys here. I’m away just now and not in a position to update it.
It already added that key ( key id DA1B2CEA81DCBC61) in line 24 of https://github.com/lowRISC/debian-riscv64/blob/031543c7f555c23d8dfa588983d5e404d7fc7fbf/work/makefile.inc#L24.
Perhaps your version of O/S stores its keyring in a different location. You can also disable the key checking on the command line, but not recommended.
Thank you for always giving my help.
It seems these key are not exist on the keyserver or expired?
lowrisc-chip3$sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 8B48AD6246925553 7638D0442B90D010 04EE7237B7D453EC DA1B2CEA81DCBC61
Executing: /tmp/tmp.PX9r48K7Op/gpg.1.sh --recv-keys
--keyserver
keyserver.ubuntu.com
8B48AD6246925553
7638D0442B90D010
04EE7237B7D453EC
DA1B2CEA81DCBC61
gpg: requesting key 46925553 from hkp server keyserver.ubuntu.com
gpg: requesting key 2B90D010 from hkp server keyserver.ubuntu.com
gpg: requesting key B7D453EC from hkp server keyserver.ubuntu.com
gpg: requesting key 81DCBC61 from hkp server keyserver.ubuntu.com
gpg: keyserver timed out
gpg: keyserver receive failed: keyserver error
I tried to disable the key checking with --no-check-gpg
and it passed the key checking.
Then I got another error:
I: Extracting util-linux...
I: Extracting zlib1g...
W: Failure trying to run: chroot /home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip3/debian-riscv64/work/debian-riscv64-chroot **mount -t proc proc /proc**
W: See /home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip3/debian-riscv64/work/debian-riscv64-chroot/debootstrap/debootstrap.log for details
work/makefile.inc:28: recipe for target 'work/debian-riscv64-chroot/usr/bin/apt' failed
make[1]: *** [work/debian-riscv64-chroot/usr/bin/apt] Error 1
make[1]: Leaving directory '/home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip3/debian-riscv64'
Makefile:55: recipe for target 'linux-5.1.3-lowrisc/initramfs.cpio' failed
make: *** [linux-5.1.3-lowrisc/initramfs.cpio] Error 2
Here is the content of the debootstrap.log file:
chroot: failed to run command 'mount': Exec format error
How could I around this issue?
Is there any user documentation for the ariane-v0.7 branch at this moment?
Sorry, I haven’t written the v0.7 specific stuff but the Debian configuration stuff is similar to the v0.6 release. Perhaps you forgot the riscv misc filesystem stuff?
If you follow the step by step instructions for the Debian build on v0.6, you should be good for v0.7, or in the first instance use it instead. However both releases were based on Debian unstable so there is always going to be an issue with keys being updated. The latest fork was in August but I don’t think the riscv architecture made it into the mainline.
Thanks, Dr. Jonathan. I followed the v0.6 and here is what I got,
sudo cp work/sources.list work/debian-riscv64-chroot/etc/apt
sudo chroot work/debian-riscv64-chroot apt-key adv --recv-keys --keyserver keyserver.ubuntu.com DA1B2CEA81DCBC61
Warning: apt-key output should not be parsed (stdout is not a terminal)
Executing: /tmp/apt-key-gpghome.uaN3Ah9ZVX/gpg.1.sh --recv-keys --keyserver keyserver.ubuntu.com DA1B2CEA81DCBC61
gpg: keyserver receive failed: Connection timed out
work/makefile.inc:28: recipe for target 'work/debian-riscv64-chroot/usr/bin/apt' failed
make: *** [work/debian-riscv64-chroot/usr/bin/apt] Error 2
root@msl-mip-dev18:/home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip3/debian-riscv64$make cpio
rm -rf bin etc dev home lib proc sbin sys tmp usr mnt nfs root run init
mkdir -p bin etc dev home lib proc sbin sys tmp usr mnt nfs root run usr/bin usr/lib usr/sbin usr/share/perl5 usr/share/udhcpc lib/riscv64-linux-gnu usr/lib/riscv64-linux-gnu # usr/share/sysvinit
cp -p work/usr-share-udhcpc-default.script usr/share/udhcpc/default.script
cp -p work/debian-riscv64-chroot/sbin/mount.nfs ./sbin
cp: cannot stat 'work/debian-riscv64-chroot/sbin/mount.nfs': No such file or directory
work/makefile.inc:272: recipe for target 'init' failed
make: *** [init] Error 1
It seems the key hasn't been put into the mainline. But at the second time run of the "map cpio", a new error appears.
Thanks.
There are other key servers you can consult. Eg keyring.debian.org
Sorry for bothering you so many times. But is still doesn't work... Is there a version without depending on the key?
You can use the lowrisc-quickstart repository to download pre-built images of Debian and anything else you need instead of building from upstream repositories. I will investigate the issues you have noticed on my return. Sorry for any instability.
Thank you very much for always giving me help.
I have an idea to achieve my goal but not sure about it. The goal is booting the Linux system from the QSPI flash on the FPGA.
I know the lowrisc-chip/ariane-v0.7 has achieved this. Reading from the Makefile of the pulp-platform/ariane, I found the FPGA bitstream building and the building of bbl + Linux kernel are two independent steps. Is that correct? For my case, I already build the bbl + Linux kernel before with buildroot and it works with the pulp-platform/ariane FPGA bitstream. The only thing that doesn't work for me is pulp-platform/ariane FPGA bitstream doesn't support booting OS from QSPI flash.
So I am thinking to build the bitstream with the lowrisc-chip/ariane-v0.7. After that, use /write_cfgmem.tcl to generate the final .msc file for(bitstream + bbl + linux image).
Do you think this work?
Thanks.
You can mix and match the Ariane buildroot based root filing system with the bitstream from the LowRISC ariane-v0.7 release, provided that you ensure that the combined size is less than the maximum QSPI size. You need to use my bitstream or copy my QSPI peripheral to the main Ariane repository. You need to use my boot loader also. After that you can make the modifications for your target board. There is no requirement to use the Debian root file system, and indeed it will be difficult to cut it down to a suitable size. You will also need to remove any missing peripherals from the XML config file that the bootloader uses.
ariane-v0.7 contains the more up to date material.
Sent from my iPhone
On 12 Sep 2019, at 20:05, mathmax12 [email protected] wrote:
Thanks, I will try with this.
BTW, I noticed there are two branches under the lowrisc-chip, i.e. ariane-v0.7 and lowrisc-chip-ariane-v0.7. Which one do you suggest?
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.
Thanks.
I start with using the pre-build files from Lowrisc with dual Rocket/Ariane support and X-windows. The flow in https://www.lowrisc.org/docs/getting-started/ is followed. genesys2_ariane_xilinx.bit is used to program the genesys2 board.
But a hang happened. It seems it doesn't find A DHCP server. Do we need this one during booting?
[....] Configuring network interfaces...Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
[ 159.792450] Open device, request interrupt 3
Listening on LPF/eth0/00:18:3e:02:e3:c1
Sending on LPF/eth0/00:18:3e:02:e3:c1
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
[ 165.175628] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 19
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 12
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 12
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 1
No DHCPOFFERS received.
No working leases in persistent database - sleeping.
done.
[ ok ] Starting RPC port mapper daemon: rpcbind.
[FAIL] Starting NFS common utilities: statd idmapd failed!
[ ok ] Cleaning up temporary files....
[FAIL] startpar: service(s) returned failure: nfs-common ... failed!
INIT: Entering runlevel: 2
[info] Using makefile-style concurrent boot in runlevel 2.
[ ok ] Starting NTP server: ntpd.
Recovering nvi editor sessions.
none found.
[ ok ] Starting OpenBSD Secure Shell server: sshd.
If you know or suspect networking doesn’t work, you can disable the network start task and anything else you don’t want by modifying the root filing system on the workstation using a chroot - it will work similar to a native Debian system. When you chroot into your SD-Card the QEMU user mode executable should launch automatically if you followed the instructions to enable it in the misc filesystem.
Thanks. I set up a DHCP server on the host. Now the connection between the GenesysII board (Ariane) and host works.
DHCPREQUEST for 10.1.30.44 on eth0 to 255.255.255.255 port 67
DHCPACK of 10.1.30.44 from 10.1.30.250
bound to 10.1.30.44 -- renewal in 19760 seconds.
done.
[ ok ] Starting RPC port mapper daemon: rpcbind.
[FAIL] Starting NFS common utilities: statd idmapd failed!
[ ok ] Cleaning up temporary files....
[FAIL] startpar: service(s) returned failure: nfs-common ... failed!
INIT: Entering runlevel: 2
[info] Using makefile-style concurrent boot in runlevel 2.
[ ok ] Starting NTP server: ntpd.
Recovering nvi editor sessions.
none found.
[ ok ] Starting OpenBSD Secure Shell server: sshd.
But it stopped there. No login line. I can ssh [email protected] to the board and it required a password to log in. I know the first time we can not ssh to log in the board system. But this at least tells me the Ethernet connection is good. Why I didn't get a login interface? Any suggestions will be appreciated.
sshd does not allow root to login without a secret key exchange. You could copy your public key to /root/.ssh/authorized_keys on the SD-Card (partition 2) to see if it helps. Also test your configuration with genesys2_rocket_xilinx.bit to see if you have an older version of Ariane with the floating point divider bug. You can also modify your root filing system to boot straight into a shell. And you will in due course want to build your own bitstream from the latest sources, in which case you can substitute your own custom startup script. Finally I haven’t got X windows working in Ariane yet, it only boots to the command line. You might prefer to work with the root filing system that comes with the ariane-sdk repository.
Thanks a lot for always giving me suggestions. I appreciate that. I replaced the root filing system with the one from ariane-sdk and it worked.
I want to build the FPGA RTL and regenerate the bitstream. But I can not find the definition of $(ariane_pkg) $(util) $(src) $(fpga_src) in line https://github.com/lowRISC/lowrisc-chip/blob/64986933820090fb647ac7066079a100e62b66f4/Makefile#L72. Where can I find the definition for them in the branch ariane-v0.7?
Thanks.
This Makefile contains the statement
include sources.inc
It should get included and defined automatically if you do
make genesys2_ariane
in this directory. If this doesn't work perhaps your version of make is incompatible.
Thanks. I noticed that I missed that file on my local. Sorry about that.
When I run the "make genesys2_ariane", an error was thrown at the [line ](riscv-pk/serial/vmlinux-serial: riscv-pk/serial/Makefile $(LINUX)/.config) in the Makefile.
make -C linux-5.1.3-lowrisc ARCH=riscv CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-elf- CONFIG_SERIAL_8250_CONSOLE=y CONFIG_VT_CONSOLE=n CONFIG_LOWRISC_VGA_CONSOLE=n -j 4 make[1]: Entering directory '/home/riscv_project/lowrisc-chip_ariane0d7/lowrisc-chip4/linux-5.1.3-lowrisc' HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o ... ... VDSOLD arch/riscv/kernel/vdso/vdso-dummy.o CC init/init_task.o CC arch/riscv/kernel/cpu.o VDSOLD arch/riscv/kernel/vdso/vdso.so.dbg /opt/riscv/lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/bin/ld: -shared not supported collect2: error: ld returned 1 exit status LD arch/riscv/kernel/vdso/vdso-syms.o OBJCOPY arch/riscv/kernel/vdso/vdso.so /opt/riscv/bin/riscv64-unknown-elf-objcopy: 'arch/riscv/kernel/vdso/vdso.so.dbg': No such file arch/riscv/kernel/vdso/Makefile:50: recipe for target 'arch/riscv/kernel/vdso/vdso.so' failed make[3]: *** [arch/riscv/kernel/vdso/vdso.so] Error 1 scripts/Makefile.build:486: recipe for target 'arch/riscv/kernel/vdso' failed make[2]: *** [arch/riscv/kernel/vdso] Error 2 make[2]: *** Waiting for unfinished jobs.... CC init/version.o Makefile:1051: recipe for target 'arch/riscv/kernel' failed make[1]: *** [arch/riscv/kernel] Error 2 make[1]: *** Waiting for unfinished jobs.... AR init/built-in.a make[2]: warning: Clock skew detected. Your build may be incomplete. make[1]: *** wait: No child processes. Stop. Makefile:48: recipe for target 'riscv-pk/serial/vmlinux-serial' failed make: *** [riscv-pk/serial/vmlinux-serial] Error 2
This may be related to the cross-compiler from riscv-gnu-toolchain-1. I noticed the riscv-gnu-toolchain is different from the riscv-gnu-toolchain. I tried to build the cross-compiler with both toolchains but get the error as above.
Did I miss something?
My version of the tool chain incorporates a hack for this problem (on certain host O/S) which unfortunately is not worthy to upstream. If you build my version it should solve the problem.
From the Ariane-SDK make file I found the riscv64-unknown-linux-gnu- is recommended.
CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-elf- is an embedded elf toolchain. riscv64-unknown-linux-gnu- instead should be used from Linux toolchain.
This works.
The Unknown-linux-gnu- variant is intended to compile programs that run under Linux, the unknown-elf- variant is for bare metal programs such as the boot loader and Linux itself. This distinction prevents programs from making use of facilities such as system calls that are not available under bare metal environments. Of course the Linux kernel never does this, so it is safe to use the same compiler for kernel and userland. Linux under RISCV occasionally traps into machine mode, so it is not totally true to describe it as running on bare metal.
I see. Thanks a lot!
I wonder is there a way to emerge the boot.bin and rootfs.tar.xz to one file. I want to use the write_cfgmem.tcl to combine the above-generted file and the FPGA bitstream file into one *.mcs file.
The existing build environment already merges the .bit file and boot.bin into a single file, you probably noticed that already. When you build Linux, you can replace the .cpio file with any root filing system of your choice. However, beware size limits on the combined .mcs file, on the Genesys2, the total including bitstream will be limited to 16MBytes or so (from memory, check this figure) if it needs to fit in QSPI memory.
Thanks a lot.
I didn't find the command line to generate the "boot.bin" , but in the Build Berkeley boot loader page I noticed that the riscv-pk/serial/bbl actually is the "boot.bin".
If this is correct, then the write_cfgmenm.tcl in the lowrisc-chip/ariane-v0.7 generates a *mcs file contains everything (bitstream, linux kernel, initramfs, Berkeley boot loader) except the real rootfs. Is that corret?
I use the makefile under the arianev0.7+ relased initramfs.cpio build a bbl (riscv-pk/serial/bbl) and cp this to the SD card as the boot.bin instead of the release one. But the booting stopped at the below:
`Hello from Ariane! Please wait a moment...
Relocating to DDR memory
Hello World!
swp[0] = 0
swp[1] = DEADBEEF
swp[2] = 0
swp[3] = 0
swp[4] = 0
Setup MAC addr
QSPI OEM[0] = 0
QSPI OEM[1] = 18
QSPI OEM[2] = 3e
QSPI OEM[3] = 2
QSPI OEM[4] = e3
QSPI OEM[5] = c1
Switch setting = 0,0
Random seed = 0
Switch setting = 0,0
Random seed = 0
Switch setting = 0,0
Random seed = 0
Switch setting = 0,0
Random seed = 0
SD boot
u-boot based first stage boot loader
MMC: mmc created at 86800248, host = 86800200
lowrisc_sd: 0
Device: lowrisc_sd
Manufacturer ID: 3
OEM: 5344
Name: SC16G
Bus Speed: 5000000
High Capacity: Yes
Capacity: 14.8 GiB
Bus Width: 4-bit
0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ef be ad de 00 00 80 00
1c0: 01 01 0c 3f 1f 20 00 08 00 00 ff ff 00 00 00 00 01 21 83 3f 20 20 00 08 01 00 00 00 40 00 00 00
1e0: 01 21 82 3f a0 20 00 08 41 00 00 00 10 00 00 00 81 21 83 1f e0 59 00 08 51 00 00 c4 89 01 55 aa
Load boot.bin into memory
load elf to DDR memory
|Section[0]: elfn(80000000,0x1000,0x6f38);
|Section[1]: elfn(80007000,0x8000,0x10a0);
|memset(800080a0,0,0x9fe0);
|Section[2]: elfn(80200000,0x200000,0x820f2c);
|Boot the loaded program at address 80000000...
Am I right? or did I miss something?
The boot sequence looks to be valid, but BBL never prints anything. I would expect the machine configuration to be printed if that option is enabled. I cannot comment further as I don’t know what, if anything, has been changed. For example, if the wrong version of riscv-pk was checked out, it might not recognise the UART hardware configuration, and so stuff could be happening, but it would be invisible.