diff options
Diffstat (limited to 'arch/riscv64/conf')
| -rw-r--r-- | arch/riscv64/conf/apos.its | 48 | ||||
| -rw-r--r-- | arch/riscv64/conf/boot.cmd | 4 | ||||
| -rwxr-xr-x | arch/riscv64/conf/init | bin | 0 -> 968 bytes | |||
| -rw-r--r-- | arch/riscv64/conf/init-link.S | 31 | ||||
| -rw-r--r-- | arch/riscv64/conf/initrd | bin | 0 -> 1536 bytes | |||
| -rw-r--r-- | arch/riscv64/conf/kernel-link.S | 26 | ||||
| -rwxr-xr-x | arch/riscv64/conf/mkimage.sh | 31 | ||||
| -rwxr-xr-x | arch/riscv64/conf/rmimage.sh | 9 | ||||
| -rw-r--r-- | arch/riscv64/conf/rootfs.fd | 9 | ||||
| -rw-r--r-- | arch/riscv64/conf/s.S | 4 |
10 files changed, 162 insertions, 0 deletions
diff --git a/arch/riscv64/conf/apos.its b/arch/riscv64/conf/apos.its new file mode 100644 index 0000000..da48860 --- /dev/null +++ b/arch/riscv64/conf/apos.its @@ -0,0 +1,48 @@ +/dts-v1/; + +/ { + description = "FUCK"; +#address-cells = <1>; + + images { + kernel { + description = "Garbaggio"; + data = /incbin/("../../../apos.bin"); + type = "kernel"; + arch = "riscv"; + os = "apos"; + compression = "none"; + load = <0x80080000>; + entry = <0x80080000>; + hash-1 { + algo = "sha1"; + }; + }; + + initrd { + description = "Gargabbio initrd"; + data = /incbin/("initrd"); + type = "ramdisk"; + arch = "riscv"; + os = "apos"; + compression = "none"; + load = <0x88300000>; + hash-1 { + algo = "sha1"; + }; + }; + }; + + configurations { + default = "config"; + + config { + description = "Default configuration"; + kernel = "kernel"; + ramdisk = "initrd"; + hash-1 { + algo = "sha1"; + }; + }; + }; +}; diff --git a/arch/riscv64/conf/boot.cmd b/arch/riscv64/conf/boot.cmd new file mode 100644 index 0000000..a7517fd --- /dev/null +++ b/arch/riscv64/conf/boot.cmd @@ -0,0 +1,4 @@ +fdt move ${fdt_addr} ${fdt_addr_r} +fdt addr ${fdt_addr_r} +load ${devtype} ${devnum} ${kernel_addr_r} apos.itb +bootm ${kernel_addr_r} ${kernel_addr_r} ${fdt_addr_r} diff --git a/arch/riscv64/conf/init b/arch/riscv64/conf/init Binary files differnew file mode 100755 index 0000000..f05254f --- /dev/null +++ b/arch/riscv64/conf/init diff --git a/arch/riscv64/conf/init-link.S b/arch/riscv64/conf/init-link.S new file mode 100644 index 0000000..baabcc6 --- /dev/null +++ b/arch/riscv64/conf/init-link.S @@ -0,0 +1,31 @@ +OUTPUT_ARCH(riscv) +ENTRY(_start) + +SECTIONS { + . = ABSOLUTE(PM_KERN_BASE); + __init_start = .; + + /* objcopy only copies these three sections (as far as I'm aware) into the + produces binary, so __init_end should point to the correct location in the + final binary + */ + .text ALIGN(4K) : AT(0) { + *(.init.start) + *(.text*); + } + + .rodata : { + *(.rodata*) + } + + .data : { + *(.data*) + } + + .bss : { + *(.sbss*) *(.bss*) *(COMMON) + } + + __init_end = . ; + __kernel_size = <KERNEL_SIZE>; +} diff --git a/arch/riscv64/conf/initrd b/arch/riscv64/conf/initrd Binary files differnew file mode 100644 index 0000000..90344c1 --- /dev/null +++ b/arch/riscv64/conf/initrd diff --git a/arch/riscv64/conf/kernel-link.S b/arch/riscv64/conf/kernel-link.S new file mode 100644 index 0000000..c6a910a --- /dev/null +++ b/arch/riscv64/conf/kernel-link.S @@ -0,0 +1,26 @@ +OUTPUT_ARCH(riscv) +ENTRY(main) + +SECTIONS { + . = ABSOLUTE(VM_KERN); + __kernel_start = .; + + .text ALIGN(4K) : AT(0) { + *(.kernel.start); + *(.text*); + } + + .rodata : { + *(.rodata*) + } + + .data : { + *(.data*) + } + + .bss : { + *(.sbss*) *(.bss*) *(COMMON) + } + + __kernel_end = .; +} diff --git a/arch/riscv64/conf/mkimage.sh b/arch/riscv64/conf/mkimage.sh new file mode 100755 index 0000000..d097248 --- /dev/null +++ b/arch/riscv64/conf/mkimage.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +if [ ! -e fs ]; then + mkdir fs +fi + +if [ ! -e rootfs.img ]; then + virt-make-fs --partition=mbr --type=vfat --size=10M fs rootfs.img +fi + + +SSIZE=$(fdisk -l rootfs.img | awk '$1=="Units:" {print $8}') +OFFSET=$(fdisk -l rootfs.img | awk '$1=="rootfs.img1" {print $2}') +mount -o loop,offset=$((${SSIZE}*${OFFSET})) rootfs.img fs + +# not entirely pleased with this solution, although eventually I should probably +# move `run` out of the kernel repo and into some `aposos` repo with a runtime +# and proper initrd etc. so this is good enough for now +../u-boot-apos/tools/mkimage -f arch/riscv64/conf/apos.its fs/apos.itb +../u-boot-apos/tools/mkimage -A riscv -O apos -T script \ + -d arch/riscv64/conf/boot.cmd fs/boot.scr + +umount -l fs + +qemu-system-riscv64 -machine virt \ + -kernel ../u-boot-apos/u-boot \ + -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \ + -device virtio-blk-device,drive=hd0 \ + -drive file=rootfs.img,format=raw,id=hd0 \ + -S -s -m 2G \ + -serial stdio diff --git a/arch/riscv64/conf/rmimage.sh b/arch/riscv64/conf/rmimage.sh new file mode 100755 index 0000000..8d6457f --- /dev/null +++ b/arch/riscv64/conf/rmimage.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ -e fs ]; then + rm -r fs +fi + +if [ -e rootfs.img ]; then + rm rootfs.img +fi diff --git a/arch/riscv64/conf/rootfs.fd b/arch/riscv64/conf/rootfs.fd new file mode 100644 index 0000000..59fb5f8 --- /dev/null +++ b/arch/riscv64/conf/rootfs.fd @@ -0,0 +1,9 @@ +label: gpt +label-id: DBD1F99F-BFA3-D448-828F-0B505DF81F17 +device: rootfs.img +unit: sectors +first-lba: 2048 +last-lba: 20446 +sector-size: 512 + +rootfs.img1 : start= 2048, size= 18399, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=B129DB0D-F225-5C48-AA6D-DD8C049FA72C diff --git a/arch/riscv64/conf/s.S b/arch/riscv64/conf/s.S new file mode 100644 index 0000000..80a3a11 --- /dev/null +++ b/arch/riscv64/conf/s.S @@ -0,0 +1,4 @@ +.text +.global _start +_start: +ecall |
