init_script_riscv64.sh 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/mnt/busybox sh
  2. BUSYBOX=/mnt/busybox
  3. freeze() {
  4. echo "an error occurred while executing '''$@''', freezing..." >&2
  5. while true; do
  6. true
  7. done
  8. }
  9. do_or_freeze() {
  10. if $@; then
  11. return
  12. fi
  13. freeze $@
  14. }
  15. do_or_freeze $BUSYBOX mkdir -p /dev
  16. do_or_freeze $BUSYBOX mknod -m 666 /dev/console c 5 1
  17. do_or_freeze $BUSYBOX mknod -m 666 /dev/null c 1 3
  18. do_or_freeze $BUSYBOX mknod -m 666 /dev/zero c 1 5
  19. do_or_freeze $BUSYBOX mknod -m 666 /dev/vda b 8 0
  20. do_or_freeze $BUSYBOX mknod -m 666 /dev/vda1 b 8 1
  21. do_or_freeze $BUSYBOX mknod -m 666 /dev/vdb b 8 16
  22. do_or_freeze $BUSYBOX mknod -m 666 /dev/ttyS0 c 4 64
  23. do_or_freeze $BUSYBOX mknod -m 666 /dev/ttyS1 c 4 65
  24. echo -n -e "deploying busybox... " >&2
  25. do_or_freeze $BUSYBOX mkdir -p /bin
  26. do_or_freeze $BUSYBOX --install -s /bin
  27. do_or_freeze $BUSYBOX mkdir -p /lib
  28. export PATH="/bin"
  29. echo ok >&2
  30. do_or_freeze mkdir -p /etc /root /proc
  31. do_or_freeze mount -t procfs proc proc
  32. # Check if the device /dev/vdb is available and can be read
  33. if dd if=/dev/vdb of=/dev/null bs=512 count=1; then
  34. echo -n -e "Mounting the ext4 image... " >&2
  35. do_or_freeze mkdir -p /mnt1
  36. do_or_freeze mount -t ext4 /dev/vdb /mnt1
  37. echo ok >&2
  38. fi
  39. cp /mnt/ld-musl-i386.so.1 /lib/ld-musl-i386.so.1
  40. ln -s /lib/ld-musl-i386.so.1 /lib/libc.so
  41. cat > /etc/passwd <<EOF
  42. root:x:0:0:root:/root:/mnt/busybox sh
  43. EOF
  44. cat > /etc/group <<EOF
  45. root:x:0:root
  46. EOF
  47. cat > /etc/profile <<EOF
  48. export PATH=/bin
  49. EOF
  50. cat > /root/.profile <<EOF
  51. export HOME=/root
  52. alias ll="ls -l "
  53. alias la="ls -la "
  54. EOF
  55. cat > /root/test.c <<EOF
  56. #include <stdio.h>
  57. int main() {
  58. int var = 0;
  59. printf("Hello, world!\n");
  60. printf("Please input a number: \n");
  61. scanf("%d", &var);
  62. if (var > 0) {
  63. printf("You typed a positive number.\n");
  64. } else if (var == 0 ) {
  65. printf("You input a zero.\n");
  66. } else {
  67. printf("You typed a negative number.\n");
  68. }
  69. return 0;
  70. }
  71. EOF
  72. exec $BUSYBOX sh -l < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0
  73. # We don't have a working init yet, so we use busybox sh directly for now.
  74. # exec /mnt/init /bin/sh -c 'exec sh -l < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0'