Blame view

buildroot/buildroot-2016.08.1/board/chromebook/snow/mksd.sh 2.45 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  #!/bin/sh
  
  # This scripts makes a minimal bootable SD card image for the Chromebook.
  # The resulting file is called bootsd.img. It should be written directly
  # to the card:
  #
  #	SD=/dev/mmcblk1		# check your device name!
  #	dd if=output/images/bootsd.img of=$SD
  #
  # The partitions are created just large enough to hold the kernel and
  # the rootfs image. Most of the card will be empty, and the secondary
  # GPT will not be in its proper location.
  
  # cgpt does not create protective MBR, and the kernel refuses to read
  # GPT unless there's some kind of MBR in sector 0. So we need parted
  # to write that single sector before doing anything with the GPT.
  cgpt=$HOST_DIR/usr/bin/cgpt
  parted=$HOST_DIR/usr/sbin/parted
  kernel=$BINARIES_DIR/uImage.kpart
  rootfs=$BINARIES_DIR/rootfs.ext2
  
  run() { echo "$@"; "$@"; }
  die() { echo "$@" >&2; exit 1; }
  test -f $kernel || die "No kernel image found"
  test -f $rootfs || die "No rootfs image found"
  test -x $cgpt || die "cgpt not found (host-vboot-utils have not been built?)"
  
  # True file sizes in bytes
  kernelsize=`stat -t $kernel | cut -d\  -f2`
  rootfssize=`stat -t $rootfs | cut -d\  -f2`
  
  # The card is partitioned in sectors of 8KB.
  # 4 sectors are reserved for MBR+GPT. Their actual size turns out
  # to be 33 512-blocks which is just over 2 sectors, but we align
  # it to a nice round number.
  sec=8192
  kernelsec=$(((kernelsize+8191)>>13))
  rootfssec=$(((rootfssize+8191)>>13))
  headersec=4
  
  # There is also a copy of MBR+GPT at the end of the image.
  # It's going to be useless but both tools assume it's there.
  imagesec=$((2*headersec+kernelsec+rootfssec))
  bootsd="$BINARIES_DIR/bootsd.img"
  run dd bs=$sec count=$imagesec if=/dev/zero of=$bootsd
  
  # cgpt needs offsets and sizes in 512-blocks.
  block=512
  kernelstart=$((headersec<<4))
  kernelblocks=$((kernelsec<<4))
  rootfsblocks=$((rootfssec<<4))
  rootfsstart=$((kernelstart+kernelblocks))
  
  # This command initializes both GPT and MBR
  run $parted -s $bootsd mklabel gpt
  
  # The kernel partition must be marked as bootable, that's why -S -T -P
  run $cgpt add -i 1 -b $kernelstart -s $kernelblocks \
  	-t kernel -l kernel \
  	-S 1 -T 1 -P 10 $bootsd
  
  # It does not really matter where the rootfs partition is located as long
  # as the kernel can find it.
  # However, if anything is changed here, kernel.args must be updated as well.
  run $cgpt add -i 2 -b $rootfsstart -s $rootfsblocks \
  	-t data -l rootfs $bootsd
  
  run dd bs=$block if=$kernel of=$bootsd seek=$kernelstart
  run dd bs=$block if=$rootfs of=$bootsd seek=$rootfsstart