Closed JamesTimothyMeech closed 1 year ago
I'm very keen to hear any advice on how to proceed with debugging this as it is blocking my progress on an important project! Or any other promising projects that will allow me to run C programs from an SD card.
I'll take a look asap. Seems that smthg was changed in LiteX that breaks LiteOS compilation.
Do you remember an old version of LiteX which you know it works for? Maybe I could revert to that version for the time being if you have the commit SHA?
I think that LiteX commit f8863bb works. Please tell me whether it works for you. I am currently trying to fix compilation for current version (but I do that in parallel with many other things, so I make slow progress).
Thanks! I checked out that commit of LiteX and the Makefile in the LiteOs directory completed successfully!
Although I have to revert to the newest version of LiteX if I want commands like this:
python3 -m litex_boards.targets.gsd_orangecrab --cpu-type femtorv --cpu-variant petitbateau --build --load --device 25F --sdram-device MT41K64M16 --ecppack-compress --with-spi-sdcard
Yes, using an old version of LiteX is just a temporary fix, I'm trying to fix everything for the newest version (for now I have a couple of things to do with the version for the ULX3S that has a few add-ons that no longer work with the newest LiteX, in particular the ability to switch the SDCard between the ECP5 and the ESP32 dynamically, which is useful to send files to the SDCard through WIFI directly...)
Thanks for your help with this! So far I have got the LiteOs binary that I managed to compile running on an orangecrab 85-F by copying boot.bin to the SD card (I am waiting to get my hands on a ULX3S unfortunately) but it appears to hang before I get the LiteOs prompt:
jamesmeech@Jamess-MacBook-Pro-10 LiteX % litex_term /dev/tty.usbmodem143101
__ _ __ _ __
/ / (_) /____ | |/_/
/ /__/ / __/ -_)> <
/____/_/\__/\__/_/|_|
Build your hardware, easily!
(c) Copyright 2012-2023 Enjoy-Digital
(c) Copyright 2007-2015 M-Labs
BIOS built on Jun 8 2023 18:06:45
BIOS CRC passed (f0753371)
LiteX git sha1: c6adf703
--=============== SoC ==================--
CPU: FemtoRV-PETITBATEAU @ 48MHz
BUS: WISHBONE 32-bit @ 4GiB
CSR: 32-bit data
ROM: 128.0KiB
SRAM: 8.0KiB
L2: 8.0KiB
SDRAM: 128.0MiB 16-bit @ 192MT/s (CL-6 CWL-5)
MAIN-RAM: 128.0MiB
--========== Initialization ============--
Initializing SDRAM @0x40000000...
Switching SDRAM to software control.
Read leveling:
m0, b00: |01110000| delays: 02+-01
m0, b01: |00000000| delays: -
m0, b02: |00000000| delays: -
m0, b03: |00000000| delays: -
best: m0, b00 delays: 02+-01
m1, b00: |01110000| delays: 02+-01
m1, b01: |00000000| delays: -
m1, b02: |00000000| delays: -
m1, b03: |00000000| delays: -
best: m1, b00 delays: 02+-01
Switching SDRAM to hardware control.
Memtest at 0x40000000 (2.0MiB)...
Write: 0x40000000-0x40200000 2.0MiB
Read: 0x40000000-0x40200000 2.0MiB
Memtest OK
Memspeed at 0x40000000 (Sequential, 2.0MiB)...
Write speed: 7.8MiB/s
Read speed: 11.7MiB/s
--============== Boot ==================--
Booting from serial...
Press Q or ESC to abort boot completely.
sL5DdSMmkekro
Timeout
Booting from SDCard in SPI-Mode...
Booting from boot.json...
boot.json file not found.
Booting from boot.bin...
Copying boot.bin to 0x40000000 (14864 bytes)...
[########################################]
Executing booted program at 0x40000000
--============= Liftoff! ===============--
The output unfortunately stops there.
Different things you can try:
(I have a 45F orange crab at home, I'll try with it as soon as I have time)
I tried with electron after recompiling boot.bin and copying it the the SDcard but I had the same problem:
jamesmeech@Jamess-MacBook-Pro-10 LiteOS % litex_term /dev/tty.usbmodem143101
__ _ __ _ __
/ / (_) /____ | |/_/
/ /__/ / __/ -_)> <
/____/_/\__/\__/_/|_|
Build your hardware, easily!
(c) Copyright 2012-2023 Enjoy-Digital
(c) Copyright 2007-2015 M-Labs
BIOS built on Jun 9 2023 13:26:09
BIOS CRC passed (ca08dc12)
LiteX git sha1: c6adf703
--=============== SoC ==================--
CPU: FemtoRV-ELECTRON @ 48MHz
BUS: WISHBONE 32-bit @ 4GiB
CSR: 32-bit data
ROM: 128.0KiB
SRAM: 8.0KiB
L2: 8.0KiB
SDRAM: 128.0MiB 16-bit @ 192MT/s (CL-6 CWL-5)
MAIN-RAM: 128.0MiB
--========== Initialization ============--
Initializing SDRAM @0x40000000...
Switching SDRAM to software control.
Read leveling:
m0, b00: |01110000| delays: 02+-01
m0, b01: |00000000| delays: -
m0, b02: |00000000| delays: -
m0, b03: |00000000| delays: -
best: m0, b00 delays: 02+-01
m1, b00: |01110000| delays: 02+-01
m1, b01: |00000000| delays: -
m1, b02: |00000000| delays: -
m1, b03: |00000000| delays: -
best: m1, b00 delays: 02+-01
Switching SDRAM to hardware control.
Memtest at 0x40000000 (2.0MiB)...
Write: 0x40000000-0x40200000 2.0MiB
Read: 0x40000000-0x40200000 2.0MiB
Memtest OK
Memspeed at 0x40000000 (Sequential, 2.0MiB)...
Write speed: 7.8MiB/s
Read speed: 13.5MiB/s
--============== Boot ==================--
Booting from serial...
Press Q or ESC to abort boot completely.
sL5DdSMmkekro
Timeout
Booting from SDCard in SPI-Mode...
Booting from boot.json...
boot.json file not found.
Booting from boot.bin...
Copying boot.bin to 0x40000000 (14816 bytes)...
[########################################]
Executing booted program at 0x40000000
--============= Liftoff! ===============--
I'll try vexriscv with the demobudle next.
I have been deleting this line from the main.c files as it causes this error:
main.c:75:35: error: expected ')' before 'MIGEN_GIT_SHA1' 75 | printf(" Migen git sha1: "MIGEN_GIT_SHA1"\n");
I'm having trouble compiling demobundle for vexriscv_smp so I'll try FemtoRV again:
jamesmeech@Jamess-MacBook-Pro-10 DemoBundle % make
CC tinyraytracer.o
CC mandelbrot.o
CC oled_test.o
demos/oled_test.c:8:13: warning: 'oled_test' defined but not used [-Wunused-function]
8 | static void oled_test(int nb_args, char** args) {
| ^~~~~~~~~
CC oled_riscv_logo.o
demos/oled_riscv_logo.c:69:13: warning: 'oled_riscv_logo' defined but not used [-Wunused-function]
69 | static void oled_riscv_logo(int nb_args, char** args) {
| ^~~~~~~~~~~~~~~
CC oled_julia.o
demos/oled_julia.c:49:13: warning: 'oled_julia' defined but not used [-Wunused-function]
49 | static void oled_julia(int nb_args, char** args) {
| ^~~~~~~~~~
CC pi.o
CC complete.o
CC helpers.o
CC readline.o
CC cmd_bios.o
CC commands.o
CC isr.o
CC main.o
CC crt0.o
CC lite_oled.o
../Libs/lite_oled.c: In function 'oled_init':
../Libs/lite_oled.c:10:8: warning: unused variable 'trigger_warning' [-Wunused-variable]
10 | int trigger_warning; // LiteX synthesized without OLED support (graphics commands will be ignored)
| ^~~~~~~~~~~~~~~
CC lite_fb.o
CC lite_elf.o
CC lite_stdio.o
../Libs/lite_stdio.c: In function 'lx_mount':
../Libs/lite_stdio.c:82:9: warning: implicit declaration of function 'fatfs_set_ops_spisdcard' [-Wimplicit-function-declaration]
82 | fatfs_set_ops_spisdcard();
| ^~~~~~~~~~~~~~~~~~~~~~~
CX imgui.o
CX imgui_demo.o
CX imgui_draw.o
CX imgui_tables.o
CX imgui_widgets.o
CX imgui_sw.o
ar cq libliteos.a lite_oled.o lite_fb.o lite_elf.o lite_stdio.o imgui.o imgui_demo.o imgui_draw.o imgui_tables.o imgui_widgets.o imgui_sw.o
ranlib libliteos.a
warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: libliteos.a the table of contents is empty (no object file members in the library define global symbols)
CC demo.elf
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: warning: demo.elf has a LOAD segment with RWX permissions
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L39':
<artificial>:(.text+0x2ea): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L51':
<artificial>:(.text+0x3d4): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x406): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x448): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L99':
<artificial>:(.text+0x548): undefined reference to `oled_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `leds_handler':
<artificial>:(.text+0xe50): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0xe78): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L220':
<artificial>:(.text+0xfe4): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1004): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L219':
<artificial>:(.text+0x1052): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1072): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L245':
<artificial>:(.text+0x140a): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L260':
<artificial>:(.text+0x1432): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `run_tinyraytracer':
<artificial>:(.text+0x1bb6): undefined reference to `oled_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1c80): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1c9c): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1db6): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1de2): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1e06): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x22be): undefined reference to `fb_base'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x22c2): undefined reference to `fb_base'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x2422): undefined reference to `fb_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/radiona_ulx3s/software/libc/libc.a(libm_math_sf_pow.c.o): in function `powf':
/Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/radiona_ulx3s/software/libc/../../../../../../Enjoy_Digital/pythondata-software-picolibc/pythondata_software_picolibc/data/newlib/libm/math/sf_pow.c:165: undefined reference to `__truncdfsf2'
collect2: error: ld returned 1 exit status
make: *** [demo.elf] Error 1jamesmeech@Jamess-MacBook-Pro-10 DemoBundle % make
CC tinyraytracer.o
CC mandelbrot.o
CC oled_test.o
demos/oled_test.c:8:13: warning: 'oled_test' defined but not used [-Wunused-function]
8 | static void oled_test(int nb_args, char** args) {
| ^~~~~~~~~
CC oled_riscv_logo.o
demos/oled_riscv_logo.c:69:13: warning: 'oled_riscv_logo' defined but not used [-Wunused-function]
69 | static void oled_riscv_logo(int nb_args, char** args) {
| ^~~~~~~~~~~~~~~
CC oled_julia.o
demos/oled_julia.c:49:13: warning: 'oled_julia' defined but not used [-Wunused-function]
49 | static void oled_julia(int nb_args, char** args) {
| ^~~~~~~~~~
CC pi.o
CC complete.o
CC helpers.o
CC readline.o
CC cmd_bios.o
CC commands.o
CC isr.o
CC main.o
CC crt0.o
CC lite_oled.o
../Libs/lite_oled.c: In function 'oled_init':
../Libs/lite_oled.c:10:8: warning: unused variable 'trigger_warning' [-Wunused-variable]
10 | int trigger_warning; // LiteX synthesized without OLED support (graphics commands will be ignored)
| ^~~~~~~~~~~~~~~
CC lite_fb.o
CC lite_elf.o
CC lite_stdio.o
../Libs/lite_stdio.c: In function 'lx_mount':
../Libs/lite_stdio.c:82:9: warning: implicit declaration of function 'fatfs_set_ops_spisdcard' [-Wimplicit-function-declaration]
82 | fatfs_set_ops_spisdcard();
| ^~~~~~~~~~~~~~~~~~~~~~~
CX imgui.o
CX imgui_demo.o
CX imgui_draw.o
CX imgui_tables.o
CX imgui_widgets.o
CX imgui_sw.o
ar cq libliteos.a lite_oled.o lite_fb.o lite_elf.o lite_stdio.o imgui.o imgui_demo.o imgui_draw.o imgui_tables.o imgui_widgets.o imgui_sw.o
ranlib libliteos.a
warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: libliteos.a the table of contents is empty (no object file members in the library define global symbols)
CC demo.elf
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: warning: demo.elf has a LOAD segment with RWX permissions
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L39':
<artificial>:(.text+0x2ea): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L51':
<artificial>:(.text+0x3d4): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x406): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x448): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L99':
<artificial>:(.text+0x548): undefined reference to `oled_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `leds_handler':
<artificial>:(.text+0xe50): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0xe78): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L220':
<artificial>:(.text+0xfe4): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1004): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L219':
<artificial>:(.text+0x1052): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1072): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L245':
<artificial>:(.text+0x140a): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `.L260':
<artificial>:(.text+0x1432): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccwqIwV1.ltrans0.ltrans.o: in function `run_tinyraytracer':
<artificial>:(.text+0x1bb6): undefined reference to `oled_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1c80): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1c9c): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1db6): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1de2): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1e06): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x22be): undefined reference to `fb_base'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x22c2): undefined reference to `fb_base'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x2422): undefined reference to `fb_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/radiona_ulx3s/software/libc/libc.a(libm_math_sf_pow.c.o): in function `powf':
/Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/radiona_ulx3s/software/libc/../../../../../../Enjoy_Digital/pythondata-software-picolibc/pythondata_software_picolibc/data/newlib/libm/math/sf_pow.c:165: undefined reference to `__truncdfsf2'
collect2: error: ld returned 1 exit status
make: *** [demo.elf] Error 1
I am able to make LiteOs by just running git checkout f8863bb
in litex without running ./litex_setup.py --init --install --user
while make demobundle fails
I'll see if I can make demobundle after running ./litex_setup.py --init --install --user
It seems to produce the same error:
jamesmeech@Jamess-MacBook-Pro-10 DemoBundle % make clean
rm -f *.d *.o *.a *.elf *.list .*~ *~
jamesmeech@Jamess-MacBook-Pro-10 DemoBundle % make
CC tinyraytracer.o
CC mandelbrot.o
CC oled_test.o
demos/oled_test.c:8:13: warning: 'oled_test' defined but not used [-Wunused-function]
8 | static void oled_test(int nb_args, char** args) {
| ^~~~~~~~~
CC oled_riscv_logo.o
demos/oled_riscv_logo.c:69:13: warning: 'oled_riscv_logo' defined but not used [-Wunused-function]
69 | static void oled_riscv_logo(int nb_args, char** args) {
| ^~~~~~~~~~~~~~~
CC oled_julia.o
demos/oled_julia.c:49:13: warning: 'oled_julia' defined but not used [-Wunused-function]
49 | static void oled_julia(int nb_args, char** args) {
| ^~~~~~~~~~
CC pi.o
CC complete.o
CC helpers.o
CC readline.o
CC cmd_bios.o
CC commands.o
CC isr.o
CC main.o
CC crt0.o
CC lite_oled.o
../Libs/lite_oled.c: In function 'oled_init':
../Libs/lite_oled.c:10:8: warning: unused variable 'trigger_warning' [-Wunused-variable]
10 | int trigger_warning; // LiteX synthesized without OLED support (graphics commands will be ignored)
| ^~~~~~~~~~~~~~~
CC lite_fb.o
CC lite_elf.o
CC lite_stdio.o
../Libs/lite_stdio.c: In function 'lx_mount':
../Libs/lite_stdio.c:82:9: warning: implicit declaration of function 'fatfs_set_ops_spisdcard' [-Wimplicit-function-declaration]
82 | fatfs_set_ops_spisdcard();
| ^~~~~~~~~~~~~~~~~~~~~~~
CX imgui.o
CX imgui_demo.o
CX imgui_draw.o
CX imgui_tables.o
CX imgui_widgets.o
CX imgui_sw.o
ar cq libliteos.a lite_oled.o lite_fb.o lite_elf.o lite_stdio.o imgui.o imgui_demo.o imgui_draw.o imgui_tables.o imgui_widgets.o imgui_sw.o
ranlib libliteos.a
warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: libliteos.a the table of contents is empty (no object file members in the library define global symbols)
CC demo.elf
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: warning: demo.elf has a LOAD segment with RWX permissions
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L39':
<artificial>:(.text+0x2ea): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L51':
<artificial>:(.text+0x3d4): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x406): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x448): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L99':
<artificial>:(.text+0x548): undefined reference to `oled_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `leds_handler':
<artificial>:(.text+0xe50): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0xe78): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L220':
<artificial>:(.text+0xfe4): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1004): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L219':
<artificial>:(.text+0x1052): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1072): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L245':
<artificial>:(.text+0x140a): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `.L260':
<artificial>:(.text+0x1432): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /var/folders/p7/23012dkx5dd9vcjx2glbl9mh0000gn/T//ccVJA33P.ltrans0.ltrans.o: in function `run_tinyraytracer':
<artificial>:(.text+0x1bb6): undefined reference to `oled_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1c80): undefined reference to `__extendsfdf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1c9c): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1db6): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1de2): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x1e06): undefined reference to `__truncdfsf2'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x22be): undefined reference to `fb_base'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x22c2): undefined reference to `fb_base'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: <artificial>:(.text+0x2422): undefined reference to `fb_init'
/opt/riscv/lib/gcc/riscv32-unknown-elf/12.2.0/../../../../riscv32-unknown-elf/bin/ld: /Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/radiona_ulx3s/software/libc/libc.a(libm_math_sf_pow.c.o): in function `powf':
/Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/radiona_ulx3s/software/libc/../../../../../../Enjoy_Digital/pythondata-software-picolibc/pythondata_software_picolibc/data/newlib/libm/math/sf_pow.c:165: undefined reference to `__truncdfsf2'
collect2: error: ld returned 1 exit status
make: *** [demo.elf] Error 1
It seems to be happy to run the litex demo.bin file:
jamesmeech@Jamess-MacBook-Pro-10 demo % litex_term /dev/tty.usbmodem143101
__ _ __ _ __
/ / (_) /____ | |/_/
/ /__/ / __/ -_)> <
/____/_/\__/\__/_/|_|
Build your hardware, easily!
(c) Copyright 2012-2023 Enjoy-Digital
(c) Copyright 2007-2015 M-Labs
BIOS built on Jun 9 2023 14:04:22
BIOS CRC passed (c05077c0)
LiteX git sha1: c6adf703
--=============== SoC ==================--
CPU: FemtoRV-GRACILIS @ 48MHz
BUS: WISHBONE 32-bit @ 4GiB
CSR: 32-bit data
ROM: 128.0KiB
SRAM: 8.0KiB
L2: 8.0KiB
SDRAM: 128.0MiB 16-bit @ 192MT/s (CL-6 CWL-5)
MAIN-RAM: 128.0MiB
--========== Initialization ============--
Initializing SDRAM @0x40000000...
Switching SDRAM to software control.
Read leveling:
m0, b00: |01110000| delays: 02+-01
m0, b01: |00000000| delays: -
m0, b02: |00000000| delays: -
m0, b03: |00000000| delays: -
best: m0, b00 delays: 02+-01
m1, b00: |01110000| delays: 02+-01
m1, b01: |00000000| delays: -
m1, b02: |00000000| delays: -
m1, b03: |00000000| delays: -
best: m1, b00 delays: 02+-01
Switching SDRAM to hardware control.
Memtest at 0x40000000 (2.0MiB)...
Write: 0x40000000-0x40200000 2.0MiB
Read: 0x40000000-0x40200000 2.0MiB
Memtest OK
Memspeed at 0x40000000 (Sequential, 2.0MiB)...
Write speed: 8.7MiB/s
Read speed: 13.6MiB/s
--============== Boot ==================--
Booting from serial...
Press Q or ESC to abort boot completely.
sL5DdSMmkekro
Timeout
Booting from SDCard in SPI-Mode...
Booting from boot.json...
boot.json file not found.
Booting from boot.bin...
boot.bin file not found.
SDCard boot failed.
No boot medium found
--============= Console ================--
litex> help
LiteX BIOS, available commands:
leds - Set Leds value
flush_l2_cache - Flush L2 cache
flush_cpu_dcache - Flush CPU data cache
crc - Compute CRC32 of a part of the address space
ident - Identifier of the system
help - Print this help
sdcardboot - Boot from SDCard
serialboot - Boot from Serial (SFL)
reboot - Reboot
boot - Boot from Memory
mem_cmp - Compare memory content
mem_speed - Test memory speed
mem_test - Test memory access
mem_copy - Copy address space
mem_write - Write address space
mem_read - Read address space
mem_list - List available memory regions
sdram_mr_write - Write SDRAM Mode Register
sdram_cal - Calibrate SDRAM
sdram_test - Test SDRAM
sdram_init - Initialize SDRAM (Init + Calibration)
I can't really explain what is happening here because I can only see one demo.bin on the SD card and it does not contain the code that prints out those statements!
The messages that you see come from the BIOS, that is bundled with the bitstream sent to the FPGA.
It says "boot.bin: file not found", it seems that for some reason the SDCard does not work.
You can try running demo .bin
by sending it through litex_term
:
$ litex_term --kernel demo.bin /dev/ttyUSBnn
litex> reboot
When you invoke reboot, it restarts the code that downloads demo.bin
through the serial connection then starts it.
Is there any way to debug my SD card setup? It is a brand new SanDisk SD card that is FAT32 formatted and has nothing but the demo.bin binary on there. I gave the SD card a name on my computer but that is all I have changed.
Should mem_list show the SD card?
litex> mem_list
Available memory regions:
ROM 0x00000000 0x20000
SRAM 0x01000000 0x2000
MAIN_RAM 0x40000000 0x8000000
CSR 0x82000000 0x10000
It seems that others have had trouble with the SD card on the Orangecrab: https://github.com/litex-hub/linux-on-litex-vexriscv/issues/123
Hi, I had to struggle too a while ago, and I think I remember two things:
Update: I just checked, mem_list
is not supposed to show the SDCard (it just shows ROM, SRAM, main RAM, video framebuffer and CSRs).
Do not give up ! I have a little bit of time this week, and I understood compilation problems with latest LiteX, if things go well, at least I'll have everything working on my ULX3S this week, will keep you updated.
To compile LiteOS with latest LiteX:
edit build/<platform>/software/include/generated/variables.mak
and replace in CPU_FLAGS
the string rv32i2p0_mc
with rv32i
or rv32im
(depending on CPU)
Then it will link
It will still complain about a missing memtest
symbol, I'm investigating...
Pushed a new learn-fpga/LiteX/software/makefile.inc
that works with up-to-date LiteX
libgcc
(no longer need to manually edit generated/variables.mak
like in previous post)libbase
, that has now memspeed()
and memtest()
I'll test that tomorrow with my ULX3S (and also OrangeCrab as soon as I have time). We are nearly there...On my ULX3S, with the new makefile.inc
I could successfully synthesize a femtorv-gracilis
, compile LiteOS
for it, boot it from the SDCard and start example programs.
I'll try with an OrangeCrab tomorrow.
Note: some C++ programs do not link (something remains to be fixed in makefile.inc
, to be investigated)
On the ULX3S, a small modification in one of LiteX files needs to be done to let the FPGA access the SDCard, I have filed a LiteX issue (all details given there if you want to try it)
I confirm that LiteOS works on my OrangeCrab.
Synthesize and program:
$ cd learn-fpga/LiteX
$ python3 -m litex_boards.targets.gsd_orangecrab --device 25F --cpu-type femtorv --cpu-variant gracilis --with-spi-sdcard --build --load --ecppack-compress
Build software:
Edit software/makefile.inc
LITEX_DIR
and LEARNFPGA_DIR
LITEX_PLATFORM
to gsd_orangecrab
$ cd software/LiteOS
$ make
$ cd ../Programs
$ make hello.elf
Copy LiteOS/boot.bin
and Programs/hello.elf
to a SDCard
Insert the SDCard in the OrangeCrab
$ litex_term /dev/ttyACM0
$ reboot
This should load LiteOS from the SDCard
liteOS> run hello.elf
Awesome! It also works on my 85F Orangecrab! Thanks so much for your help with this! I will close the issue now!
When I run
make
for LiteOS (after fixing some errors I got from unescaped "" in a printf statement) I get this error:ar cq libliteos.a lite_oled.o lite_fb.o lite_elf.o lite_stdio.o imgui.o imgui_demo.o imgui_draw.o imgui_tables.o imgui_widgets.o imgui_sw.o ranlib libliteos.a warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive library: libliteos.a the table of contents is empty (no object file members in the library define global symbols) CC boot.elf /usr/local/Cellar/riscv-gnu-toolchain/main/lib/gcc/riscv64-unknown-elf/12.2.0/../../../../riscv64-unknown-elf/bin/ld: warning: boot.elf has a LOAD segment with RWX permissions /usr/local/Cellar/riscv-gnu-toolchain/main/lib/gcc/riscv64-unknown-elf/12.2.0/../../../../riscv64-unknown-elf/bin/ld: /Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/digilent_arty/software/liblitedram/liblitedram.a(sdram.o): in function
sdram_init': /Users/jamesmeech/Desktop/Casino/Enjoy_Digital/litex/litex/soc/software/liblitedram/sdram.c:1179: undefined reference tomemtest' /usr/local/Cellar/riscv-gnu-toolchain/main/lib/gcc/riscv64-unknown-elf/12.2.0/../../../../riscv64-unknown-elf/bin/ld: /Users/jamesmeech/Desktop/Casino/learn-fpga/LiteX/build/digilent_arty/software/liblitedram/liblitedram.a(sdram.o): in function
csr_write_simple': /Users/jamesmeech/Desktop/Casino/Enjoy_Digital/litex/litex/soc/software/include/hw/common.h:33: undefined reference tomemspeed' collect2: error: ld returned 1 exit status make: *** [boot.elf] Error 1
How can I fix this?