initrd.sh 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/bin/sh
  2. set -e
  3. sdst=initrd/sbin
  4. ssrc=rootfs/sbin
  5. rm -fr $sdst; mkdir -p $sdst
  6. cp -at $sdst $ssrc/system/findblk
  7. cp -at $sdst $ssrc/system/switchroot
  8. cp -at $sdst $ssrc/system/reboot
  9. cp -at $sdst $ssrc/service/udevmod
  10. cp -at $sdst $ssrc/modprobe
  11. cp -at $sdst $ssrc/runwith
  12. cp -at $sdst $ssrc/kmount
  13. cp -at $sdst $ssrc/msh
  14. kver=`ls rootfs/usr/lib/modules | grep '^[3-4]' | head -1`
  15. if [ -z "$kver" ]; then
  16. echo "Cannot determine kernel version" >&2
  17. exit 1
  18. elif [ ! -d "rootfs/usr/lib/modules/$kver" ]; then
  19. echo "No modules in rootfs for $kver" >&2
  20. exit 2
  21. fi
  22. msrc=rootfs/lib/modules/$kver/kernel
  23. mdst=initrd/lib/modules/$kver/kernel
  24. rm -fr initrd/lib/modules; mkdir -p $mdst
  25. addkobj() {
  26. ksrc="$msrc/$1"
  27. kdst="$mdst/$1"
  28. ddir=`dirname "$kdst"`
  29. test -f "$kdst" && return
  30. mkdir -p "$ddir"
  31. cp -a "$ksrc" "$kdst"
  32. }
  33. addmod() {
  34. modprobe -d rootfs -S $kver --show-depends $@ |\
  35. sed -e "s!.*/$kver/kernel/!addkobj !" > addmod.tmp
  36. source ./addmod.tmp
  37. rm addmod.tmp
  38. }
  39. addall() {
  40. find "$msrc/$1" -name "*.ko*" | while read i; do
  41. m=`basename "$i" | sed -e 's/\.ko.*$//'`
  42. test -n "$m" && addmod "$m"
  43. done
  44. }
  45. addmod ext4
  46. addmod xhci-hcd
  47. addmod uhci-hcd
  48. addmod ehci-hcd
  49. addmod usb_storage
  50. addmod cdrom
  51. #addmod i8042
  52. addmod ata_piix
  53. addmod sd_mod
  54. addmod sr_mod
  55. find $mdst -name '*.ko.xz' -exec xz -d \{\} \;
  56. cp -at initrd/lib/modules/$kver rootfs/lib/modules/$kver/modules.{builtin,order}
  57. depmod -b initrd $kver
  58. rm initrd/lib/modules/$kver/*.bin
  59. (cd initrd && find . | cpio -oH newc) | gzip -c > initrd.img