paq.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <../boot/boot.h>
  4. char *fparts[] =
  5. {
  6. "add bootldr 0x0000000 0x0040000",
  7. "add params 0x0040000 0x0080000",
  8. "add kernel 0x0080000 0x0140000",
  9. "add user 0x0140000 0x0200000",
  10. "add ramdisk 0x0200000 0x0600000",
  11. };
  12. void
  13. configpaq(Method*)
  14. {
  15. int fd;
  16. int i;
  17. if(bind("#F", "/dev", MAFTER) < 0)
  18. fatal("bind #c");
  19. if(bind("#p", "/proc", MREPL) < 0)
  20. fatal("bind #p");
  21. fd = open("/dev/flash/flashctl", OWRITE);
  22. if(fd < 0)
  23. fatal("opening flashctl");
  24. for(i = 0; i < nelem(fparts); i++)
  25. if(fprint(fd, fparts[i]) < 0)
  26. fatal(fparts[i]);
  27. close(fd);
  28. }
  29. int
  30. connectpaq(void)
  31. {
  32. int p[2];
  33. char **arg, **argp;
  34. print("paq...");
  35. if(pipe(p)<0)
  36. fatal("pipe");
  37. switch(fork()){
  38. case -1:
  39. fatal("fork");
  40. case 0:
  41. arg = malloc(10*sizeof(char*));
  42. argp = arg;
  43. *argp++ = "paqfs";
  44. *argp++ = "-v";
  45. *argp++ = "-i";
  46. *argp++ = "/dev/flash/ramdisk";
  47. *argp = 0;
  48. dup(p[0], 0);
  49. dup(p[1], 1);
  50. close(p[0]);
  51. close(p[1]);
  52. exec("/boot/paqfs", arg);
  53. fatal("can't exec paqfs");
  54. default:
  55. break;
  56. }
  57. waitpid();
  58. close(p[1]);
  59. return p[0];
  60. }