diff --git a/scripts/create-image.sh b/scripts/create-image.sh index c1ad9c2..3b02635 100755 --- a/scripts/create-image.sh +++ b/scripts/create-image.sh @@ -7,13 +7,11 @@ pushd "$base" &>/dev/null || exit 1 img="$base/moss.img" dd if=/dev/zero of="$img" bs=1M count=128 -mkfs.vfat -F 32 "$img" +mkfs.ext4 -F "$img" -mmd -i "$img" ::/bin -mmd -i "$img" ::/dev -mmd -i "$img" ::/proc -mmd -i "$img" ::/tmp - -mcopy -i "$img" "$base/build/bin"/* "::/bin" +debugfs -w -f "$base/scripts/symlinks.cmds" "$img" +for file in "$base/build/bin"/*; do + debugfs -w "$img" -R "write $file /bin/$(basename "$file")" +done popd &>/dev/null || exit 1 diff --git a/scripts/mac-experimental/README.md b/scripts/mac-experimental/README.md index 2ebc7ff..8636de0 100644 --- a/scripts/mac-experimental/README.md +++ b/scripts/mac-experimental/README.md @@ -11,7 +11,7 @@ Regardless of stdlib, you will need: - [aarch64-none-elf](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads) - [Homebrew](https://brew.sh) - QEMU (`brew install qemu`) -- dosfstools (`brew install dosfstools`) +- e2fsprogs (`brew install e2fsprogs`) If building for the GNU library: - aarch64-unknown-linux-gnu (`brew tap messense/macos-cross-toolchains && brew install aarch64-unknown-linux-gnu`) diff --git a/scripts/mac-experimental/create-image.sh b/scripts/mac-experimental/create-image.sh index 5a396b2..200c51a 100755 --- a/scripts/mac-experimental/create-image.sh +++ b/scripts/mac-experimental/create-image.sh @@ -10,19 +10,11 @@ mount="$base/build/mount" mkdir -p "$mount" dd if=/dev/zero of="$img" bs=1M count=128 -mkfs.vfat -F 32 "$img" +mkfs.ext4 -F "$img" -if ! mount | grep -q "$mount"; then - hdiutil attach -mountpoint "$mount" "$img" -fi +debugfs -w -f "$base/scripts/symlinks.cmds" "$img" +for file in "$base/build/bin"/*; do + debugfs -w "$img" -R "write $file /bin/$(basename "$file")" +done -mkdir -p "$mount/bin" -mkdir -p "$mount/dev" - -cp "$base/build/bin"/* "$mount/bin" - -mounted=$(mount | grep "on $mount " | awk '{print $1}') -if [ -n "$mounted" ]; then - hdiutil detach "$mounted" -fi popd &>/dev/null || exit 1 diff --git a/scripts/qemu-runner.sh b/scripts/qemu-runner.sh index 4a650fe..bfb1a9d 100755 --- a/scripts/qemu-runner.sh +++ b/scripts/qemu-runner.sh @@ -23,4 +23,4 @@ bin="${elf%.elf}.bin" # Convert to binary format aarch64-none-elf-objcopy -O binary "$elf" "$bin" -qemu-system-aarch64 -M virt,gic-version=3 -initrd moss.img -cpu cortex-a72 -m 2G -smp 4 -nographic -s -kernel "$bin" -append "--init=$init_script --rootfs=fat32fs --automount=/dev,devfs --automount=/tmp,tmpfs --automount=/proc,procfs" +qemu-system-aarch64 -M virt,gic-version=3 -initrd moss.img -cpu cortex-a72 -m 2G -smp 4 -nographic -s -kernel "$bin" -append "--init=$init_script --rootfs=ext4fs --automount=/dev,devfs --automount=/tmp,tmpfs --automount=/proc,procfs" diff --git a/scripts/symlinks.cmds b/scripts/symlinks.cmds new file mode 100644 index 0000000..f836a23 --- /dev/null +++ b/scripts/symlinks.cmds @@ -0,0 +1,406 @@ +mkdir /bin +mkdir /dev +mkdir /proc +mkdir /tmp +symlink /bin/[ /bin/busybox +symlink /bin/[[ /bin/busybox +symlink /bin/acpid /bin/busybox +symlink /bin/add-shell /bin/busybox +symlink /bin/addgroup /bin/busybox +symlink /bin/adduser /bin/busybox +symlink /bin/adjtimex /bin/busybox +symlink /bin/arch /bin/busybox +symlink /bin/arp /bin/busybox +symlink /bin/arping /bin/busybox +symlink /bin/ascii /bin/busybox +symlink /bin/ash /bin/busybox +symlink /bin/awk /bin/busybox +symlink /bin/base32 /bin/busybox +symlink /bin/base64 /bin/busybox +symlink /bin/basename /bin/busybox +symlink /bin/bc /bin/busybox +symlink /bin/beep /bin/busybox +symlink /bin/blkdiscard /bin/busybox +symlink /bin/blkid /bin/busybox +symlink /bin/blockdev /bin/busybox +symlink /bin/bootchartd /bin/busybox +symlink /bin/brctl /bin/busybox +symlink /bin/bunzip2 /bin/busybox +symlink /bin/bzcat /bin/busybox +symlink /bin/bzip2 /bin/busybox +symlink /bin/cal /bin/busybox +symlink /bin/cat /bin/busybox +symlink /bin/chat /bin/busybox +symlink /bin/chattr /bin/busybox +symlink /bin/chgrp /bin/busybox +symlink /bin/chmod /bin/busybox +symlink /bin/chown /bin/busybox +symlink /bin/chpasswd /bin/busybox +symlink /bin/chpst /bin/busybox +symlink /bin/chroot /bin/busybox +symlink /bin/chrt /bin/busybox +symlink /bin/chvt /bin/busybox +symlink /bin/cksum /bin/busybox +symlink /bin/clear /bin/busybox +symlink /bin/cmp /bin/busybox +symlink /bin/comm /bin/busybox +symlink /bin/conspy /bin/busybox +symlink /bin/cp /bin/busybox +symlink /bin/cpio /bin/busybox +symlink /bin/crc32 /bin/busybox +symlink /bin/crond /bin/busybox +symlink /bin/crontab /bin/busybox +symlink /bin/cryptpw /bin/busybox +symlink /bin/cttyhack /bin/busybox +symlink /bin/cut /bin/busybox +symlink /bin/date /bin/busybox +symlink /bin/dc /bin/busybox +symlink /bin/dd /bin/busybox +symlink /bin/deallocvt /bin/busybox +symlink /bin/delgroup /bin/busybox +symlink /bin/deluser /bin/busybox +symlink /bin/depmod /bin/busybox +symlink /bin/devmem /bin/busybox +symlink /bin/df /bin/busybox +symlink /bin/dhcprelay /bin/busybox +symlink /bin/diff /bin/busybox +symlink /bin/dirname /bin/busybox +symlink /bin/dmesg /bin/busybox +symlink /bin/dnsd /bin/busybox +symlink /bin/dnsdomainname /bin/busybox +symlink /bin/dos2unix /bin/busybox +symlink /bin/dpkg /bin/busybox +symlink /bin/dpkg-deb /bin/busybox +symlink /bin/du /bin/busybox +symlink /bin/dumpkmap /bin/busybox +symlink /bin/dumpleases /bin/busybox +symlink /bin/echo /bin/busybox +symlink /bin/ed /bin/busybox +symlink /bin/egrep /bin/busybox +symlink /bin/eject /bin/busybox +symlink /bin/env /bin/busybox +symlink /bin/envdir /bin/busybox +symlink /bin/envuidgid /bin/busybox +symlink /bin/ether-wake /bin/busybox +symlink /bin/expand /bin/busybox +symlink /bin/expr /bin/busybox +symlink /bin/factor /bin/busybox +symlink /bin/fakeidentd /bin/busybox +symlink /bin/fallocate /bin/busybox +symlink /bin/false /bin/busybox +symlink /bin/fatattr /bin/busybox +symlink /bin/fbset /bin/busybox +symlink /bin/fbsplash /bin/busybox +symlink /bin/fdflush /bin/busybox +symlink /bin/fdformat /bin/busybox +symlink /bin/fdisk /bin/busybox +symlink /bin/fgconsole /bin/busybox +symlink /bin/fgrep /bin/busybox +symlink /bin/find /bin/busybox +symlink /bin/findfs /bin/busybox +symlink /bin/flock /bin/busybox +symlink /bin/fold /bin/busybox +symlink /bin/free /bin/busybox +symlink /bin/freeramdisk /bin/busybox +symlink /bin/fsck /bin/busybox +symlink /bin/fsck.minix /bin/busybox +symlink /bin/fsfreeze /bin/busybox +symlink /bin/fstrim /bin/busybox +symlink /bin/fsync /bin/busybox +symlink /bin/ftpd /bin/busybox +symlink /bin/ftpget /bin/busybox +symlink /bin/ftpput /bin/busybox +symlink /bin/fuser /bin/busybox +symlink /bin/getopt /bin/busybox +symlink /bin/getty /bin/busybox +symlink /bin/grep /bin/busybox +symlink /bin/groups /bin/busybox +symlink /bin/gunzip /bin/busybox +symlink /bin/gzip /bin/busybox +symlink /bin/halt /bin/busybox +symlink /bin/hd /bin/busybox +symlink /bin/hdparm /bin/busybox +symlink /bin/head /bin/busybox +symlink /bin/hexdump /bin/busybox +symlink /bin/hexedit /bin/busybox +symlink /bin/hostid /bin/busybox +symlink /bin/hostname /bin/busybox +symlink /bin/httpd /bin/busybox +symlink /bin/hush /bin/busybox +symlink /bin/hwclock /bin/busybox +symlink /bin/i2cdetect /bin/busybox +symlink /bin/i2cdump /bin/busybox +symlink /bin/i2cget /bin/busybox +symlink /bin/i2cset /bin/busybox +symlink /bin/i2ctransfer /bin/busybox +symlink /bin/id /bin/busybox +symlink /bin/ifconfig /bin/busybox +symlink /bin/ifdown /bin/busybox +symlink /bin/ifenslave /bin/busybox +symlink /bin/ifplugd /bin/busybox +symlink /bin/ifup /bin/busybox +symlink /bin/inetd /bin/busybox +symlink /bin/init /bin/busybox +symlink /bin/insmod /bin/busybox +symlink /bin/install /bin/busybox +symlink /bin/ionice /bin/busybox +symlink /bin/iostat /bin/busybox +symlink /bin/ip /bin/busybox +symlink /bin/ipaddr /bin/busybox +symlink /bin/ipcalc /bin/busybox +symlink /bin/ipcrm /bin/busybox +symlink /bin/ipcs /bin/busybox +symlink /bin/iplink /bin/busybox +symlink /bin/ipneigh /bin/busybox +symlink /bin/iproute /bin/busybox +symlink /bin/iprule /bin/busybox +symlink /bin/iptunnel /bin/busybox +symlink /bin/kbd_mode /bin/busybox +symlink /bin/kill /bin/busybox +symlink /bin/killall /bin/busybox +symlink /bin/killall5 /bin/busybox +symlink /bin/klogd /bin/busybox +symlink /bin/last /bin/busybox +symlink /bin/less /bin/busybox +symlink /bin/link /bin/busybox +symlink /bin/linux32 /bin/busybox +symlink /bin/linux64 /bin/busybox +symlink /bin/linuxrc /bin/busybox +symlink /bin/ln /bin/busybox +symlink /bin/loadfont /bin/busybox +symlink /bin/loadkmap /bin/busybox +symlink /bin/logger /bin/busybox +symlink /bin/login /bin/busybox +symlink /bin/logname /bin/busybox +symlink /bin/logread /bin/busybox +symlink /bin/losetup /bin/busybox +symlink /bin/lpd /bin/busybox +symlink /bin/lpq /bin/busybox +symlink /bin/lpr /bin/busybox +symlink /bin/ls /bin/busybox +symlink /bin/lsattr /bin/busybox +symlink /bin/lsmod /bin/busybox +symlink /bin/lsof /bin/busybox +symlink /bin/lspci /bin/busybox +symlink /bin/lsscsi /bin/busybox +symlink /bin/lsusb /bin/busybox +symlink /bin/lzcat /bin/busybox +symlink /bin/lzma /bin/busybox +symlink /bin/lzop /bin/busybox +symlink /bin/makedevs /bin/busybox +symlink /bin/makemime /bin/busybox +symlink /bin/man /bin/busybox +symlink /bin/md5sum /bin/busybox +symlink /bin/mdev /bin/busybox +symlink /bin/mesg /bin/busybox +symlink /bin/microcom /bin/busybox +symlink /bin/mim /bin/busybox +symlink /bin/mkdir /bin/busybox +symlink /bin/mkdosfs /bin/busybox +symlink /bin/mke2fs /bin/busybox +symlink /bin/mkfifo /bin/busybox +symlink /bin/mkfs.ext2 /bin/busybox +symlink /bin/mkfs.minix /bin/busybox +symlink /bin/mkfs.vfat /bin/busybox +symlink /bin/mknod /bin/busybox +symlink /bin/mkpasswd /bin/busybox +symlink /bin/mkswap /bin/busybox +symlink /bin/mktemp /bin/busybox +symlink /bin/modinfo /bin/busybox +symlink /bin/modprobe /bin/busybox +symlink /bin/more /bin/busybox +symlink /bin/mount /bin/busybox +symlink /bin/mountpoint /bin/busybox +symlink /bin/mpstat /bin/busybox +symlink /bin/mt /bin/busybox +symlink /bin/mv /bin/busybox +symlink /bin/nameif /bin/busybox +symlink /bin/nanddump /bin/busybox +symlink /bin/nandwrite /bin/busybox +symlink /bin/nbd-client /bin/busybox +symlink /bin/nc /bin/busybox +symlink /bin/netstat /bin/busybox +symlink /bin/nice /bin/busybox +symlink /bin/nl /bin/busybox +symlink /bin/nmeter /bin/busybox +symlink /bin/nohup /bin/busybox +symlink /bin/nologin /bin/busybox +symlink /bin/nproc /bin/busybox +symlink /bin/nsenter /bin/busybox +symlink /bin/nslookup /bin/busybox +symlink /bin/ntpd /bin/busybox +symlink /bin/od /bin/busybox +symlink /bin/openvt /bin/busybox +symlink /bin/partprobe /bin/busybox +symlink /bin/passwd /bin/busybox +symlink /bin/paste /bin/busybox +symlink /bin/patch /bin/busybox +symlink /bin/pgrep /bin/busybox +symlink /bin/pidof /bin/busybox +symlink /bin/ping /bin/busybox +symlink /bin/ping6 /bin/busybox +symlink /bin/pipe_progress /bin/busybox +symlink /bin/pivot_root /bin/busybox +symlink /bin/pkill /bin/busybox +symlink /bin/pmap /bin/busybox +symlink /bin/popmaildir /bin/busybox +symlink /bin/poweroff /bin/busybox +symlink /bin/powertop /bin/busybox +symlink /bin/printenv /bin/busybox +symlink /bin/printf /bin/busybox +symlink /bin/ps /bin/busybox +symlink /bin/pscan /bin/busybox +symlink /bin/pstree /bin/busybox +symlink /bin/pwd /bin/busybox +symlink /bin/pwdx /bin/busybox +symlink /bin/raidautorun /bin/busybox +symlink /bin/rdate /bin/busybox +symlink /bin/rdev /bin/busybox +symlink /bin/readahead /bin/busybox +symlink /bin/readlink /bin/busybox +symlink /bin/readprofile /bin/busybox +symlink /bin/realpath /bin/busybox +symlink /bin/reboot /bin/busybox +symlink /bin/reformime /bin/busybox +symlink /bin/remove-shell /bin/busybox +symlink /bin/renice /bin/busybox +symlink /bin/reset /bin/busybox +symlink /bin/resize /bin/busybox +symlink /bin/resume /bin/busybox +symlink /bin/rev /bin/busybox +symlink /bin/rm /bin/busybox +symlink /bin/rmdir /bin/busybox +symlink /bin/rmmod /bin/busybox +symlink /bin/route /bin/busybox +symlink /bin/rpm /bin/busybox +symlink /bin/rpm2cpio /bin/busybox +symlink /bin/rtcwake /bin/busybox +symlink /bin/run-init /bin/busybox +symlink /bin/run-parts /bin/busybox +symlink /bin/runlevel /bin/busybox +symlink /bin/runsv /bin/busybox +symlink /bin/runsvdir /bin/busybox +symlink /bin/rx /bin/busybox +symlink /bin/script /bin/busybox +symlink /bin/scriptreplay /bin/busybox +symlink /bin/sed /bin/busybox +symlink /bin/seedrng /bin/busybox +symlink /bin/sendmail /bin/busybox +symlink /bin/seq /bin/busybox +symlink /bin/setarch /bin/busybox +symlink /bin/setconsole /bin/busybox +symlink /bin/setfattr /bin/busybox +symlink /bin/setfont /bin/busybox +symlink /bin/setkeycodes /bin/busybox +symlink /bin/setlogcons /bin/busybox +symlink /bin/setpriv /bin/busybox +symlink /bin/setserial /bin/busybox +symlink /bin/setsid /bin/busybox +symlink /bin/setuidgid /bin/busybox +symlink /bin/sh /bin/busybox +symlink /bin/sha1sum /bin/busybox +symlink /bin/sha256sum /bin/busybox +symlink /bin/sha3sum /bin/busybox +symlink /bin/sha512sum /bin/busybox +symlink /bin/showkey /bin/busybox +symlink /bin/shred /bin/busybox +symlink /bin/shuf /bin/busybox +symlink /bin/slattach /bin/busybox +symlink /bin/sleep /bin/busybox +symlink /bin/smemcap /bin/busybox +symlink /bin/softlimit /bin/busybox +symlink /bin/sort /bin/busybox +symlink /bin/split /bin/busybox +symlink /bin/ssl_client /bin/busybox +symlink /bin/start-stop-daemon /bin/busybox +symlink /bin/stat /bin/busybox +symlink /bin/strings /bin/busybox +symlink /bin/stty /bin/busybox +symlink /bin/su /bin/busybox +symlink /bin/sulogin /bin/busybox +symlink /bin/sum /bin/busybox +symlink /bin/sv /bin/busybox +symlink /bin/svc /bin/busybox +symlink /bin/svlogd /bin/busybox +symlink /bin/svok /bin/busybox +symlink /bin/swapoff /bin/busybox +symlink /bin/swapon /bin/busybox +symlink /bin/switch_root /bin/busybox +symlink /bin/sync /bin/busybox +symlink /bin/sysctl /bin/busybox +symlink /bin/syslogd /bin/busybox +symlink /bin/tac /bin/busybox +symlink /bin/tail /bin/busybox +symlink /bin/tar /bin/busybox +symlink /bin/taskset /bin/busybox +symlink /bin/tc /bin/busybox +symlink /bin/tcpsvd /bin/busybox +symlink /bin/tee /bin/busybox +symlink /bin/telnet /bin/busybox +symlink /bin/telnetd /bin/busybox +symlink /bin/test /bin/busybox +symlink /bin/tftp /bin/busybox +symlink /bin/tftpd /bin/busybox +symlink /bin/time /bin/busybox +symlink /bin/timeout /bin/busybox +symlink /bin/top /bin/busybox +symlink /bin/touch /bin/busybox +symlink /bin/tr /bin/busybox +symlink /bin/traceroute /bin/busybox +symlink /bin/traceroute6 /bin/busybox +symlink /bin/tree /bin/busybox +symlink /bin/true /bin/busybox +symlink /bin/truncate /bin/busybox +symlink /bin/ts /bin/busybox +symlink /bin/tsort /bin/busybox +symlink /bin/tty /bin/busybox +symlink /bin/ttysize /bin/busybox +symlink /bin/tunctl /bin/busybox +symlink /bin/ubiattach /bin/busybox +symlink /bin/ubidetach /bin/busybox +symlink /bin/ubimkvol /bin/busybox +symlink /bin/ubirename /bin/busybox +symlink /bin/ubirmvol /bin/busybox +symlink /bin/ubirsvol /bin/busybox +symlink /bin/ubiupdatevol /bin/busybox +symlink /bin/udhcpc /bin/busybox +symlink /bin/udhcpc6 /bin/busybox +symlink /bin/udhcpd /bin/busybox +symlink /bin/udpsvd /bin/busybox +symlink /bin/uevent /bin/busybox +symlink /bin/umount /bin/busybox +symlink /bin/uname /bin/busybox +symlink /bin/unexpand /bin/busybox +symlink /bin/uniq /bin/busybox +symlink /bin/unix2dos /bin/busybox +symlink /bin/unlink /bin/busybox +symlink /bin/unlzma /bin/busybox +symlink /bin/unshare /bin/busybox +symlink /bin/unxz /bin/busybox +symlink /bin/unzip /bin/busybox +symlink /bin/uptime /bin/busybox +symlink /bin/users /bin/busybox +symlink /bin/usleep /bin/busybox +symlink /bin/uudecode /bin/busybox +symlink /bin/uuencode /bin/busybox +symlink /bin/vconfig /bin/busybox +symlink /bin/vi /bin/busybox +symlink /bin/vlock /bin/busybox +symlink /bin/volname /bin/busybox +symlink /bin/w /bin/busybox +symlink /bin/wall /bin/busybox +symlink /bin/watch /bin/busybox +symlink /bin/watchdog /bin/busybox +symlink /bin/wc /bin/busybox +symlink /bin/wget /bin/busybox +symlink /bin/which /bin/busybox +symlink /bin/who /bin/busybox +symlink /bin/whoami /bin/busybox +symlink /bin/whois /bin/busybox +symlink /bin/xargs /bin/busybox +symlink /bin/xxd /bin/busybox +symlink /bin/xz /bin/busybox +symlink /bin/xzcat /bin/busybox +symlink /bin/yes /bin/busybox +symlink /bin/zcat /bin/busybox +symlink /bin/zcip /bin/busybox