Closed enjoy-digital closed 5 years ago
Later i can give a try with that linux images on the VexRiscv verilator simulation.
@Dolu1990 thanks, i haven't investigated yet, the emulator code catches something since it stops the simulation.
Make sure the memory size is set correctly in https://github.com/enjoy-digital/linux-on-litex-vexriscv/blob/master/buildroot/board/litex_vexriscv/litex_vexriscv.dts#L63 as well as the command line. The startup logs still refer to 128MB of RAM.
You might also want to reduce swiotlb further (I think each unit takes up 512KB, and I don't think it's important for anything atm)
looks like rootfs is being loaded on top of Image.
And the cmdline args like daveshah1 mentioned
Kernel takes up ~2MB. initramfs about 8MB.
12MB reserved.
Should still have 10MB free.
Be carefull about mega pages. I'm not sure how the linux would behave if things aren't 4 MB aligned. At least have multiple of 4MB for each parts i would say in a first time.
I think reducing swiotlb should reduce the amount of "reserved" memory. In the longer term, the rootfs could probably be on the SD card rather than using an initrd.
Thanks, fixing the remaining 128MB makes it work:
__ _ __ _ __
/ / (_) /____ | |/_/
/ /__/ / __/ -_)> <
/____/_/\__/\__/_/|_|
(c) Copyright 2012-2019 Enjoy-Digital
(c) Copyright 2012-2015 M-Labs Ltd
BIOS built on May 7 2019 11:17:11
BIOS CRC passed (21f2eb48)
--============ SoC info ================--
CPU: VexRiscv @ 1MHz
ROM: 32KB
SRAM: 4KB
MAIN-RAM: 32768KB
--========= Peripherals init ===========--
--========== Boot sequence =============--
Booting from serial...
Press Q or ESC to abort boot completely.
sL5DdSMmkekro
Timeout
Executing booted program at 0x20000000
--============= Liftoff! ===============--
VexRiscv Machine Mode software built May 7 2019 11:15:54
--========== Booting Linux =============--
[ 0.000000] No DTB passed to the kernel
[ 0.000000] Linux version 5.0.9 (florent@lab) (gcc version 8.3.0 (Buildroot 2019.05-git-00938-g75f9fcd0c9)) #1 Thu May 2 17:43:30 CEST 2019
[ 0.000000] Initial ramdisk at: 0x(ptrval) (8388608 bytes)
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x00000000c0000000-0x00000000c1ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00000000c0000000-0x00000000c1ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x00000000c0000000-0x00000000c1ffffff]
[ 0.000000] elf_hwcap is 0x1101
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 8128
[ 0.000000] Kernel command line: mem=32M@0x40000000 rootwait console=hvc0 root=/dev/ram0 init=/sbin/init swiotlb=32
[ 0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.000000] Sorting __ex_table...
[ 0.000000] Memory: 21588K/32768K available (1957K kernel code, 92K rwdata, 317K rodata, 104K init, 184K bss, 11180K reserved, 0K cma-reserved)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x114c1bade8, max_idle_ns: 440795203839 ns
[ 0.000160] sched_clock: 64 bits at 75MHz, resolution 13ns, wraps every 2199023255546ns
[ 0.001538] Console: colour dummy device 80x25
[ 0.008144] printk: console [hvc0] enabled
[ 0.009248] Calibrating delay loop (skipped), value calculated using timer frequency.. 150.00 BogoMIPS (lpj=300000)
[ 0.009927] pid_max: default: 32768 minimum: 301
[ 0.016569] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.017112] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.046477] devtmpfs: initialized
[ 0.065334] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.066348] futex hash table entries: 256 (order: -1, 3072 bytes)
[ 0.128120] clocksource: Switched to clocksource riscv_clocksource
[ 0.264355] Unpacking initramfs...
[ 2.008315] workingset: timestamp_bits=30 max_order=13 bucket_order=0
[ 2.181809] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
[ 2.182267] io scheduler mq-deadline registered
[ 2.182623] io scheduler kyber registered
[ 3.044680] random: get_random_bytes called from init_oops_id+0x4c/0x60 with crng_init=0
[ 3.057582] Freeing unused kernel memory: 104K
[ 3.057905] This architecture does not have kernel memory protection.
[ 3.058295] Run /init as init process
mount: mounting tmpfs on /dev/shm failed: Invalid argument
mount: mounting tmpfs on /tmp failed: Invalid argument
mount: mounting tmpfs on /run failed: Invalid argument
Starting syslogd: OK
Starting klogd: OK
Initializing random number generator... [ 4.395597] random: dd: uninitialized urandom read (512 bytes read)
done.
Starting network: ip: socket: Function not implemented
ip: socket: Function not implemented
FAIL
Welcome to Buildroot
buildroot login: root
login[48]: root login on 'hvc0'
#
This still needs to be merged correctly, but at leat we know it works.
Board-specific device trees would probably be a good idea, so all boards can use their full amount of RAM. This would also be useful once we start adding other peripherals like Ethernet and SD cards.
@daveshah1 yes i was also thinking about that, or even generating the device tree directly from the target.
For now i added board-specific device trees and dts are recompiled before loading/flashing the board. The default dts/dtb is the 32MB variant which will run on all targets.
Currently, the minimum requirement is 64MB. Reducing the minimum requirement would be interesting to run on less expensive boards: ULX3S, Minispartan6.
An initial test has been done with the following patch:
But the simulation is not going to user space:
When running on the ULX3S (32MB SDRAM), the behaviour is seen. Investigation needs to be done with the simulations, ULX3S will probably work after that.