diff --git a/checkpoint_scripts/config.yaml b/checkpoint_scripts/config.yaml index 196f58a..c3fb145 100644 --- a/checkpoint_scripts/config.yaml +++ b/checkpoint_scripts/config.yaml @@ -17,7 +17,8 @@ base_config: mem_bind: 0 bootloader: "opensbi" all_in_one_workload: true - boot_for_test: true + boot_for_test: false + enable_h_ext: false archive_id_config: gcc_version: "gcc12.2.0" riscv_ext: "rv64gcb" diff --git a/checkpoint_scripts/generate_bbl.py b/checkpoint_scripts/generate_bbl.py index c3858a7..2ed550a 100644 --- a/checkpoint_scripts/generate_bbl.py +++ b/checkpoint_scripts/generate_bbl.py @@ -13,9 +13,11 @@ def __init__(self, archive_buffer_layout, spec_info, path_env_vars_to_check=None """Initialize Builder with optional environment variables to check.""" super().__init__(path_env_vars_to_check=path_env_vars_to_check, env_vars_to_check=env_vars_to_check) self.kernel_list: List[Tuple[str, str]] = [] + self.host_initramfs_list: List[Tuple[str, str]] = [] self.opensbi_fw_payload: List[Tuple[str, str]] = [] self.gcpt_bin_list: List[Tuple[str, str]] = [] self.initramfs_list: List[Tuple[str, str]] = [] + self.rcs_list: list[Tuple[str, str]] = [] self.config.update( **{ "archive_buffer_layout": { @@ -24,6 +26,7 @@ def __init__(self, archive_buffer_layout, spec_info, path_env_vars_to_check=None "logs_build": archive_buffer_layout.get("logs_build"), "opensbi": archive_buffer_layout.get("opensbi"), "linux": archive_buffer_layout.get("linux"), + "host_linux": archive_buffer_layout.get("host_linux"), "gcpt": archive_buffer_layout.get("gcpt"), "gcpt_bins": archive_buffer_layout.get("gcpt_bins"), "assembly": archive_buffer_layout.get("assembly"), @@ -60,10 +63,375 @@ def __init__(self, archive_buffer_layout, spec_info, path_env_vars_to_check=None "", "# SPEC" #, "dir /spec 755 0 0", # "file /spec/run.sh ${RISCV_ROOTFS_HOME}/rootfsimg/run.sh 755 0 0" - ] + ], + "default_initramfs_dirs": [ + "dir /bin 755 0 0", + "dir /sbin 755 0 0", + "dir /usr 755 0 0", + "dir /usr/lib 755 0 0", + "dir /usr/bin 755 0 0", + "dir /usr/sbin 755 0 0", + "dir /etc 755 0 0", + "dir /etc/init.d 755 0 0", + "dir /dev 755 0 0", + "dir /proc 755 0 0", + "dir /sys 755 0 0", + "dir /lib 755 0 0", + "dir /tmp 755 0 0", + "dir /mnt 755 0 0", + "dir /var 755 0 0", + "dir /var/tmp 755 0 0", + "dir /root 755 0 0", + "dir /var/log 755 0 0", + "dir /apps 755 0 0", + "", + "nod /dev/console 644 0 0 c 5 1", + "nod /dev/null 644 0 0 c 1 3", "", + "nod /dev/urandom 644 0 0 c 1 9", + "nod /dev/random 644 0 0 c 1 8", + ], + "default_initramfs_busybox": [ + "", # /bin + "file /bin/busybox ${RISCV_ROOTFS_HOME}/rootfsimg/build/busybox 755 0 0", + "file /etc/fstab ${RISCV_ROOTFS_HOME}/rootfsimg/fstab 755 0 0", + "slink /init /bin/busybox 755 0 0", + "slink /bin/arch /bin/busybox 755 0 0", + "slink /bin/ash /bin/busybox 755 0 0", + "slink /bin/base64 /bin/busybox 755 0 0", + "slink /bin/bash /bin/busybox 755 0 0", + "slink /bin/cat /bin/busybox 755 0 0", + "slink /bin/chattr /bin/busybox 755 0 0", + "slink /bin/chgrp /bin/busybox 755 0 0", + "slink /bin/chmod /bin/busybox 755 0 0", + "slink /bin/chown /bin/busybox 755 0 0", + "slink /bin/conspy /bin/busybox 755 0 0", + "slink /bin/cp /bin/busybox 755 0 0", + "slink /bin/cpio /bin/busybox 755 0 0", + "slink /bin/cttyhack /bin/busybox 755 0 0", + "slink /bin/date /bin/busybox 755 0 0", + "slink /bin/dd /bin/busybox 755 0 0", + "slink /bin/df /bin/busybox 755 0 0", + "slink /bin/dmesg /bin/busybox 755 0 0", + "slink /bin/dnsdomainname /bin/busybox 755 0 0", + "slink /bin/dumpkmap /bin/busybox 755 0 0", + "slink /bin/echo /bin/busybox 755 0 0", + "slink /bin/ed /bin/busybox 755 0 0", + "slink /bin/egrep /bin/busybox 755 0 0", + "slink /bin/false /bin/busybox 755 0 0", + "slink /bin/fatattr /bin/busybox 755 0 0", + "slink /bin/fgrep /bin/busybox 755 0 0", + "slink /bin/fsync /bin/busybox 755 0 0", + "slink /bin/getopt /bin/busybox 755 0 0", + "slink /bin/grep /bin/busybox 755 0 0", + "slink /bin/gunzip /bin/busybox 755 0 0", + "slink /bin/gzip /bin/busybox 755 0 0", + "slink /bin/hostname /bin/busybox 755 0 0", + "slink /bin/hush /bin/busybox 755 0 0", + "slink /bin/iostat /bin/busybox 755 0 0", + "slink /bin/kbd_mode /bin/busybox 755 0 0", + "slink /bin/kill /bin/busybox 755 0 0", + "slink /bin/link /bin/busybox 755 0 0", + "slink /bin/linux32 /bin/busybox 755 0 0", + "slink /bin/linux64 /bin/busybox 755 0 0", + "slink /bin/ln /bin/busybox 755 0 0", + "slink /bin/login /bin/busybox 755 0 0", + "slink /bin/ls /bin/busybox 755 0 0", + "slink /bin/lsattr /bin/busybox 755 0 0", + "slink /bin/lzop /bin/busybox 755 0 0", + "slink /bin/mkdir /bin/busybox 755 0 0", + "slink /bin/mknod /bin/busybox 755 0 0", + "slink /bin/mktemp /bin/busybox 755 0 0", + "slink /bin/mount /bin/busybox 755 0 0", + "slink /bin/mpstat /bin/busybox 755 0 0", + "slink /bin/mv /bin/busybox 755 0 0", + "slink /bin/netstat /bin/busybox 755 0 0", + "slink /bin/nice /bin/busybox 755 0 0", + "slink /bin/nuke /bin/busybox 755 0 0", + "slink /bin/pidof /bin/busybox 755 0 0", + "slink /bin/ping /bin/busybox 755 0 0", + "slink /bin/printenv /bin/busybox 755 0 0", + "slink /bin/ps /bin/busybox 755 0 0", + "slink /bin/pwd /bin/busybox 755 0 0", + "slink /bin/resume /bin/busybox 755 0 0", + "slink /bin/rm /bin/busybox 755 0 0", + "slink /bin/rmdir /bin/busybox 755 0 0", + "slink /bin/sed /bin/busybox 755 0 0", + "slink /bin/setpriv /bin/busybox 755 0 0", + "slink /bin/setserial /bin/busybox 755 0 0", + "slink /bin/sh /bin/busybox 755 0 0", + "slink /bin/sleep /bin/busybox 755 0 0", + "slink /bin/stat /bin/busybox 755 0 0", + "slink /bin/stty /bin/busybox 755 0 0", + "slink /bin/su /bin/busybox 755 0 0", + "slink /bin/sync /bin/busybox 755 0 0", + "slink /bin/tar /bin/busybox 755 0 0", + "slink /bin/touch /bin/busybox 755 0 0", + "slink /bin/true /bin/busybox 755 0 0", + "slink /bin/umount /bin/busybox 755 0 0", + "slink /bin/uname /bin/busybox 755 0 0", + "slink /bin/uncompress /bin/busybox 755 0 0", + "slink /bin/usleep /bin/busybox 755 0 0", + "slink /bin/vi /bin/busybox 755 0 0", + "slink /bin/watch /bin/busybox 755 0 0", + "slink /bin/zcat /bin/busybox 755 0 0", + "" # /linuxrc + "slink /linuxrc /bin/busybox 755 0 0", + "" # /sbin + "slink /sbin/arp /bin/busybox 755 0 0", + "slink /sbin/blkid /bin/busybox 755 0 0", + "slink /sbin/blockdev /bin/busybox 755 0 0", + "slink /sbin/bootchartd /bin/busybox 755 0 0", + "slink /sbin/devmem /bin/busybox 755 0 0", + "slink /sbin/fbsplash /bin/busybox 755 0 0", + "slink /sbin/fdisk /bin/busybox 755 0 0", + "slink /sbin/fsck /bin/busybox 755 0 0", + "slink /sbin/fstrim /bin/busybox 755 0 0", + "slink /sbin/getty /bin/busybox 755 0 0", + "slink /sbin/halt /bin/busybox 755 0 0", + "slink /sbin/hwclock /bin/busybox 755 0 0", + "slink /sbin/ifconfig /bin/busybox 755 0 0", + "slink /sbin/ifdown /bin/busybox 755 0 0", + "slink /sbin/ifup /bin/busybox 755 0 0", + "slink /sbin/init /bin/busybox 755 0 0", + "slink /sbin/insmod /bin/busybox 755 0 0", + "slink /sbin/ip /bin/busybox 755 0 0", + "slink /sbin/ipaddr /bin/busybox 755 0 0", + "slink /sbin/iplink /bin/busybox 755 0 0", + "slink /sbin/ipneigh /bin/busybox 755 0 0", + "slink /sbin/iproute /bin/busybox 755 0 0", + "slink /sbin/iprule /bin/busybox 755 0 0", + "slink /sbin/iptunnel /bin/busybox 755 0 0", + "slink /sbin/klogd /bin/busybox 755 0 0", + "slink /sbin/loadkmap /bin/busybox 755 0 0", + "slink /sbin/logread /bin/busybox 755 0 0", + "slink /sbin/losetup /bin/busybox 755 0 0", + "slink /sbin/lsmod /bin/busybox 755 0 0", + "slink /sbin/makedevs /bin/busybox 755 0 0", + "slink /sbin/mkdosfs /bin/busybox 755 0 0", + "slink /sbin/mke2fs /bin/busybox 755 0 0", + "slink /sbin/mkfs.ext2 /bin/busybox 755 0 0", + "slink /sbin/mkfs.vfat /bin/busybox 755 0 0", + "slink /sbin/mkswap /bin/busybox 755 0 0", + "slink /sbin/modinfo /bin/busybox 755 0 0", + "slink /sbin/poweroff /bin/busybox 755 0 0", + "slink /sbin/reboot /bin/busybox 755 0 0", + "slink /sbin/rmmod /bin/busybox 755 0 0", + "slink /sbin/route /bin/busybox 755 0 0", + "slink /sbin/run-init /bin/busybox 755 0 0", + "slink /sbin/setconsole /bin/busybox 755 0 0", + "slink /sbin/sulogin /bin/busybox 755 0 0", + "slink /sbin/swapoff /bin/busybox 755 0 0", + "slink /sbin/swapon /bin/busybox 755 0 0", + "slink /sbin/switch_root /bin/busybox 755 0 0", + "slink /sbin/sysctl /bin/busybox 755 0 0", + "slink /sbin/syslogd /bin/busybox 755 0 0", + "slink /sbin/tc /bin/busybox 755 0 0", + "slink /sbin/uevent /bin/busybox 755 0 0", + "", # /usr/bin + "slink /usr/bin/[ /bin/busybox 755 0 0", + "slink /usr/bin/[[ /bin/busybox 755 0 0", + "slink /usr/bin/ar /bin/busybox 755 0 0", + "slink /usr/bin/awk /bin/busybox 755 0 0", + "slink /usr/bin/basename /bin/busybox 755 0 0", + "slink /usr/bin/bc /bin/busybox 755 0 0", + "slink /usr/bin/blkdiscard /bin/busybox 755 0 0", + "slink /usr/bin/bunzip2 /bin/busybox 755 0 0", + "slink /usr/bin/bzcat /bin/busybox 755 0 0", + "slink /usr/bin/bzip2 /bin/busybox 755 0 0", + "slink /usr/bin/cal /bin/busybox 755 0 0", + "slink /usr/bin/chpst /bin/busybox 755 0 0", + "slink /usr/bin/chvt /bin/busybox 755 0 0", + "slink /usr/bin/cksum /bin/busybox 755 0 0", + "slink /usr/bin/clear /bin/busybox 755 0 0", + "slink /usr/bin/cmp /bin/busybox 755 0 0", + "slink /usr/bin/comm /bin/busybox 755 0 0", + "slink /usr/bin/cryptpw /bin/busybox 755 0 0", + "slink /usr/bin/cut /bin/busybox 755 0 0", + "slink /usr/bin/deallocvt /bin/busybox 755 0 0", + "slink /usr/bin/diff /bin/busybox 755 0 0", + "slink /usr/bin/dirname /bin/busybox 755 0 0", + "slink /usr/bin/dos2unix /bin/busybox 755 0 0", + "slink /usr/bin/du /bin/busybox 755 0 0", + "slink /usr/bin/env /bin/busybox 755 0 0", + "slink /usr/bin/envdir /bin/busybox 755 0 0", + "slink /usr/bin/envuidgid /bin/busybox 755 0 0", + "slink /usr/bin/expand /bin/busybox 755 0 0", + "slink /usr/bin/expr /bin/busybox 755 0 0", + "slink /usr/bin/factor /bin/busybox 755 0 0", + "slink /usr/bin/fallocate /bin/busybox 755 0 0", + "slink /usr/bin/fgconsole /bin/busybox 755 0 0", + "slink /usr/bin/find /bin/busybox 755 0 0", + "slink /usr/bin/fold /bin/busybox 755 0 0", + "slink /usr/bin/free /bin/busybox 755 0 0", + "slink /usr/bin/ftpget /bin/busybox 755 0 0", + "slink /usr/bin/ftpput /bin/busybox 755 0 0", + "slink /usr/bin/fuser /bin/busybox 755 0 0", + "slink /usr/bin/groups /bin/busybox 755 0 0", + "slink /usr/bin/hd /bin/busybox 755 0 0", + "slink /usr/bin/head /bin/busybox 755 0 0", + "slink /usr/bin/hexdump /bin/busybox 755 0 0", + "slink /usr/bin/hexedit /bin/busybox 755 0 0", + "slink /usr/bin/hostid /bin/busybox 755 0 0", + "slink /usr/bin/id /bin/busybox 755 0 0", + "slink /usr/bin/install /bin/busybox 755 0 0", + "slink /usr/bin/killall /bin/busybox 755 0 0", + "slink /usr/bin/last /bin/busybox 755 0 0", + "slink /usr/bin/less /bin/busybox 755 0 0", + "slink /usr/bin/logger /bin/busybox 755 0 0", + "slink /usr/bin/logname /bin/busybox 755 0 0", + "slink /usr/bin/lsof /bin/busybox 755 0 0", + "slink /usr/bin/lspci /bin/busybox 755 0 0", + "slink /usr/bin/lsscsi /bin/busybox 755 0 0", + "slink /usr/bin/lsusb /bin/busybox 755 0 0", + "slink /usr/bin/lzcat /bin/busybox 755 0 0", + "slink /usr/bin/lzma /bin/busybox 755 0 0", + "slink /usr/bin/man /bin/busybox 755 0 0", + "slink /usr/bin/md5sum /bin/busybox 755 0 0", + "slink /usr/bin/mesg /bin/busybox 755 0 0", + "slink /usr/bin/microcom /bin/busybox 755 0 0", + "slink /usr/bin/mkfifo /bin/busybox 755 0 0", + "slink /usr/bin/mkpasswd /bin/busybox 755 0 0", + "slink /usr/bin/nc /bin/busybox 755 0 0", + "slink /usr/bin/netcat /bin/busybox 755 0 0", + "slink /usr/bin/nl /bin/busybox 755 0 0", + "slink /usr/bin/nmeter /bin/busybox 755 0 0", + "slink /usr/bin/nohup /bin/busybox 755 0 0", + "slink /usr/bin/nproc /bin/busybox 755 0 0", + "slink /usr/bin/nsenter /bin/busybox 755 0 0", + "slink /usr/bin/nslookup /bin/busybox 755 0 0", + "slink /usr/bin/od /bin/busybox 755 0 0", + "slink /usr/bin/openvt /bin/busybox 755 0 0", + "slink /usr/bin/passwd /bin/busybox 755 0 0", + "slink /usr/bin/paste /bin/busybox 755 0 0", + "slink /usr/bin/patch /bin/busybox 755 0 0", + "slink /usr/bin/pgrep /bin/busybox 755 0 0", + "slink /usr/bin/pkill /bin/busybox 755 0 0", + "slink /usr/bin/pmap /bin/busybox 755 0 0", + "slink /usr/bin/printf /bin/busybox 755 0 0", + "slink /usr/bin/pstree /bin/busybox 755 0 0", + "slink /usr/bin/pwdx /bin/busybox 755 0 0", + "slink /usr/bin/readlink /bin/busybox 755 0 0", + "slink /usr/bin/realpath /bin/busybox 755 0 0", + "slink /usr/bin/reset /bin/busybox 755 0 0", + "slink /usr/bin/resize /bin/busybox 755 0 0", + "slink /usr/bin/runsv /bin/busybox 755 0 0", + "slink /usr/bin/runsvdir /bin/busybox 755 0 0", + "slink /usr/bin/seq /bin/busybox 755 0 0", + "slink /usr/bin/setfattr /bin/busybox 755 0 0", + "slink /usr/bin/setkeycodes /bin/busybox 755 0 0", + "slink /usr/bin/setuidgid /bin/busybox 755 0 0", + "slink /usr/bin/sha1sum /bin/busybox 755 0 0", + "slink /usr/bin/sha256sum /bin/busybox 755 0 0", + "slink /usr/bin/sha3sum /bin/busybox 755 0 0", + "slink /usr/bin/sha512sum /bin/busybox 755 0 0", + "slink /usr/bin/showkey /bin/busybox 755 0 0", + "slink /usr/bin/shred /bin/busybox 755 0 0", + "slink /usr/bin/shuf /bin/busybox 755 0 0", + "slink /usr/bin/smemcap /bin/busybox 755 0 0", + "slink /usr/bin/softlimit /bin/busybox 755 0 0", + "slink /usr/bin/sort /bin/busybox 755 0 0", + "slink /usr/bin/split /bin/busybox 755 0 0", + "slink /usr/bin/ssl_client /bin/busybox 755 0 0", + "slink /usr/bin/sum /bin/busybox 755 0 0", + "slink /usr/bin/sv /bin/busybox 755 0 0", + "slink /usr/bin/svc /bin/busybox 755 0 0", + "slink /usr/bin/svok /bin/busybox 755 0 0", + "slink /usr/bin/tac /bin/busybox 755 0 0", + "slink /usr/bin/tail /bin/busybox 755 0 0", + "slink /usr/bin/taskset /bin/busybox 755 0 0", + "slink /usr/bin/tee /bin/busybox 755 0 0", + "slink /usr/bin/telnet /bin/busybox 755 0 0", + "slink /usr/bin/test /bin/busybox 755 0 0", + "slink /usr/bin/tftp /bin/busybox 755 0 0", + "slink /usr/bin/time /bin/busybox 755 0 0", + "slink /usr/bin/top /bin/busybox 755 0 0", + "slink /usr/bin/tr /bin/busybox 755 0 0", + "slink /usr/bin/truncate /bin/busybox 755 0 0", + "slink /usr/bin/ts /bin/busybox 755 0 0", + "slink /usr/bin/tty /bin/busybox 755 0 0", + "slink /usr/bin/unexpand /bin/busybox 755 0 0", + "slink /usr/bin/uniq /bin/busybox 755 0 0", + "slink /usr/bin/unix2dos /bin/busybox 755 0 0", + "slink /usr/bin/unlink /bin/busybox 755 0 0", + "slink /usr/bin/unlzma /bin/busybox 755 0 0", + "slink /usr/bin/unshare /bin/busybox 755 0 0", + "slink /usr/bin/unxz /bin/busybox 755 0 0", + "slink /usr/bin/unzip /bin/busybox 755 0 0", + "slink /usr/bin/uptime /bin/busybox 755 0 0", + "slink /usr/bin/users /bin/busybox 755 0 0", + "slink /usr/bin/uudecode /bin/busybox 755 0 0", + "slink /usr/bin/uuencode /bin/busybox 755 0 0", + "slink /usr/bin/vlock /bin/busybox 755 0 0", + "slink /usr/bin/w /bin/busybox 755 0 0", + "slink /usr/bin/wc /bin/busybox 755 0 0", + "slink /usr/bin/wget /bin/busybox 755 0 0", + "slink /usr/bin/which /bin/busybox 755 0 0", + "slink /usr/bin/who /bin/busybox 755 0 0", + "slink /usr/bin/whoami /bin/busybox 755 0 0", + "slink /usr/bin/whois /bin/busybox 755 0 0", + "slink /usr/bin/xargs /bin/busybox 755 0 0", + "slink /usr/bin/xxd /bin/busybox 755 0 0", + "slink /usr/bin/xz /bin/busybox 755 0 0", + "slink /usr/bin/xzcat /bin/busybox 755 0 0", + "slink /usr/bin/yes /bin/busybox 755 0 0", + "", #/usr/sbin + "slink /usr/sbin/addgroup /bin/busybox 755 0 0", + "slink /usr/sbin/add-shell /bin/busybox 755 0 0", + "slink /usr/sbin/adduser /bin/busybox 755 0 0", + "slink /usr/sbin/arping /bin/busybox 755 0 0", + "slink /usr/sbin/brctl /bin/busybox 755 0 0", + "slink /usr/sbin/chpasswd /bin/busybox 755 0 0", + "slink /usr/sbin/chroot /bin/busybox 755 0 0", + "slink /usr/sbin/delgroup /bin/busybox 755 0 0", + "slink /usr/sbin/deluser /bin/busybox 755 0 0", + "slink /usr/sbin/fbset /bin/busybox 755 0 0", + "slink /usr/sbin/fsfreeze /bin/busybox 755 0 0", + "slink /usr/sbin/i2cdetect /bin/busybox 755 0 0", + "slink /usr/sbin/i2cdump /bin/busybox 755 0 0", + "slink /usr/sbin/i2cget /bin/busybox 755 0 0", + "slink /usr/sbin/i2cset /bin/busybox 755 0 0", + "slink /usr/sbin/i2ctransfer /bin/busybox 755 0 0", + "slink /usr/sbin/killall5 /bin/busybox 755 0 0", + "slink /usr/sbin/loadfont /bin/busybox 755 0 0", + "slink /usr/sbin/nbd-client /bin/busybox 755 0 0", + "slink /usr/sbin/nologin /bin/busybox 755 0 0", + "slink /usr/sbin/partprobe /bin/busybox 755 0 0", + "slink /usr/sbin/powertop /bin/busybox 755 0 0", + "slink /usr/sbin/remove-shell /bin/busybox 755 0 0", + "slink /usr/sbin/setfont /bin/busybox 755 0 0", + "slink /usr/sbin/setlogcons /bin/busybox 755 0 0", + "slink /usr/sbin/svlogd /bin/busybox 755 0 0", + "slink /usr/sbin/telnetd /bin/busybox 755 0 0", + "slink /usr/sbin/ubirename /bin/busybox 755 0 0", + "", + ], + "default_initramfs_libs": [ + "# libraries", + "file /lib/ld-linux-riscv64-lp64d.so.1 ${RISCV}/sysroot/lib/ld-linux-riscv64-lp64d.so.1 755 0 0", + "file /lib/libc.so.6 ${RISCV}/sysroot/lib/libc.so.6 755 0 0", + "file /lib/libresolv.so.2 ${RISCV}/sysroot/lib/libresolv.so.2 755 0 0", + "file /lib/libm.so.6 ${RISCV}/sysroot/lib/libm.so.6 755 0 0", + "file /lib/libdl.so.2 ${RISCV}/sysroot/lib/libdl.so.2 755 0 0", + "file /lib/libpthread.so.0 ${RISCV}/sysroot/lib/libpthread.so.0 755 0 0", + "", + ], } ) + def prepare_rcS(self, guest_memory, guest_cpus, spec, scripts_archive_folder): + lines = [] + lines.append("#! /bin/sh") + lines.append("set -x") + lines.append("/bin/mount -a") + lines.append("mkdir -p /dev") + lines.append("/bin/mount -t devtmpfs devtmpfs /dev") + + lines.append(f'/apps/lkvm-static run -m {guest_memory} -c{guest_cpus} --console serial -p "earlycon=sbi" -k /apps/guest_Image --debug') + with open(os.path.join(scripts_archive_folder, "{}_rcS-spec.txt".format(spec)), "w", encoding="utf-8") as f: + f.writelines(map(lambda x: x + "\n", lines)) + + self.rcs_list.append((spec, os.path.join(scripts_archive_folder, f"{spec}_rcS-spec.txt"))) + def prepare_rootfs(self, spec, using_cpu2017, copies, with_nemu_trap, redirect_output, emu): archive_buffer_layout = self.config["archive_buffer_layout"] self.__generate_initramfs(archive_buffer_layout["scripts"], archive_buffer_layout["elf"], spec, os.path.join(self.config["path_env_vars"]["RISCV_ROOTFS_HOME"], "rootfsimg"), using_cpu2017, copies) @@ -85,6 +453,22 @@ def traverse_path(self, path, stack=""): all_files.extend(sub_files) return (all_dirs, all_files) + def __generate_host_initramfs_files(self, guest_Image_path): + host_initramfs_files = [ + "file /apps/lkvm-static ${RISCV_ROOTFS_HOME}/apps/lkvm-static 755 0 0", + f"file /apps/guest_Image {guest_Image_path} 755 0 0" + ] + return host_initramfs_files + + def __generate_host_initramfs(self, scripts_archive_folder, spec): + host_initramfs = [x for lst in (self.config["default_initramfs_dirs"], self.config["default_initramfs_busybox"], self.config["default_initramfs_libs"], self.__generate_host_initramfs_files(self.kernel_list.pop()[1])) for x in lst] + host_initramfs.append(f"file /etc/init.d/rcS {self.rcs_list.pop()[1]} 755 0 0") + with open( + os.path.join(scripts_archive_folder, + "{}_host_initramfs-spec.txt".format(spec)), "w", encoding="utf-8") as f: + f.writelines(map(lambda x: x + "\n", host_initramfs)) + + self.host_initramfs_list.append((spec, os.path.join(scripts_archive_folder, f"{spec}_host_initramfs-spec.txt"))) # original func is: https://github.com/OpenXiangShan/riscv-rootfs/blob/c61a659b454e5b038b5374a9091b29ad4995f13f/rootfsimg/spec_gen.py#L558 def __generate_initramfs(self, scripts_archive_folder, elf_folder, spec, dest_path, using_cpu2017=False, copies=1): @@ -265,6 +649,61 @@ def build_spec_bbl(self, spec, build_log_folder, spec_bin_folder, bin_suffix, as ("build/gcpt.bin", "", spec_bin_folder), ]) + def build_host_linux_kernel(self, spec, bin_suffix): + archive_buffer_layout = self.config["archive_buffer_layout"] + HOST_LINUX_HOME = self.path_env_vars.get("LINUX_HOME") + if not HOST_LINUX_HOME: + raise EnvironmentError("Environment variable LINUX_HOME is not set or not initialized.") + ROOTFSIMG = self.path_env_vars.get("RISCV_ROOTFS_HOME") + if not ROOTFSIMG: + raise EnvironmentError("Environment variable RISCV_ROOTFS_HOME is not set or not initialized.") + ARCH = self.env_vars.get("ARCH") + if not ARCH or ARCH != "riscv": + raise EnvironmentError("Environment variable ARCH is not set or not initialized.") + + out_log = os.path.join(archive_buffer_layout["logs_build"], f"build-host-kernel-with-{spec}-out.log") + err_log = os.path.join(archive_buffer_layout["logs_build"], f"build-host-kernel-with-{spec}-err.log") + + + prepare_linux_config = [ + ["make", "-C", HOST_LINUX_HOME, f"O={archive_buffer_layout['host_linux']}", "xiangshanhost_defconfig"], + ] + shared_linux_command = [ + ["make", "-C", HOST_LINUX_HOME, f"O={archive_buffer_layout['host_linux']}", "-j70"] + ] + + self.run_commands(prepare_linux_config, None, out_log, err_log) + config_file = os.path.join(archive_buffer_layout['linux'], ".config") + _, initramfs_file_path = self.host_initramfs_list.pop() + + try: + with open(config_file, 'r', encoding="utf-8") as f: + lines = f.readlines() + + with open(config_file, 'w', encoding="utf-8") as f: + for line in lines: + if line.startswith("CONFIG_INITRAMFS_SOURCE="): + f.write(f'CONFIG_INITRAMFS_SOURCE="{initramfs_file_path}"\n') + else: + f.write(line) + except FileNotFoundError: + print(f"File {config_file} not found") + exit(1) + except Exception as e: + print(f"An error occured: {e}") + exit(1) + self.run_commands(shared_linux_command, None, out_log, err_log) + + if not isinstance(archive_buffer_layout["binary_archive"], str): + raise ValueError("binary_archive value is not str") + + self.copy(archive_buffer_layout['linux'], spec, bin_suffix, [ + ("arch/riscv/boot/Image", "._hostImage", archive_buffer_layout["binary_archive"]), + ]) + + self.kernel_list.append((spec, f"{archive_buffer_layout['binary_archive']}/{spec}{bin_suffix}._hostImage")) + + def build_linux_kernel(self, spec, bin_suffix): archive_buffer_layout = self.config["archive_buffer_layout"] LINUX_HOME = self.path_env_vars.get("LINUX_HOME") @@ -420,11 +859,15 @@ def boot_test(self, copies, emu): except subprocess.TimeoutExpired: pass - def build_opensbi_payload(self, spec, copies, bin_suffix = "", gcpt_bin_suffix = "", withGCPT = False): + def build_opensbi_payload(self, spec, copies, enable_h_ext, bin_suffix = "", gcpt_bin_suffix = "", withGCPT = False): print(f"build {spec}-opensbi-linux-spec...{' with GCPT' if withGCPT else ''}") self.build_linux_kernel(spec, bin_suffix) + if enable_h_ext: + self.prepare_rcS("4G", "1", spec, self.config["archive_buffer_layout"]["scripts"]) + self.__generate_host_initramfs(self.config["archive_buffer_layout"]["scripts"], spec) + self.build_host_linux_kernel(spec, bin_suffix) self.build_opensbi(spec=spec, copies=copies, bin_suffix=bin_suffix) if withGCPT: diff --git a/checkpoint_scripts/generate_checkpoint.py b/checkpoint_scripts/generate_checkpoint.py index 9ebc11d..a6966e7 100644 --- a/checkpoint_scripts/generate_checkpoint.py +++ b/checkpoint_scripts/generate_checkpoint.py @@ -136,6 +136,7 @@ def __init__(self, config_path) -> None: self.config["archive_buffer_layout"].update(**{ "linux": os.path.join(self.__buffer_path, "build", "linux"), + "host_linux": os.path.join(self.__buffer_path, "build", "host_linux"), "opensbi": os.path.join(self.__buffer_path, "build", "opensbi"), "rootfs": os.path.join(self.__buffer_path, "build", "rootfs"), "gcpt": os.path.join(self.__buffer_path, "build", "gcpt") @@ -231,6 +232,7 @@ def main(config_ctx: GlobalConfigCtx): if base_config["bootloader"] == "opensbi": builder.build_opensbi_payload(spec_app, base_config["copies"], + base_config["enable_h_ext"], withGCPT=True) else: builder.build_spec_bbl(spec_app,