sd 카드 플래싱 쉘로 자동화하기
virtual box에서 윈도우 클립보드 공유하는 법은 다음과 같다.
이렇게 양방향 설정하고, 같은 메뉴에서 게스트 확장 CD 이미지 삽입을 누른다.
옆에 cd가 뜰텐데
누르고
재부팅 해주자.
이러면 클립보드 공유되고. 윈도우에서 ctrl + c하고, 우분투에서는 ctrl + shift + v 해주면 된다.
우선 디렉토리를 만들자
$ cd ~
$ mkdir flashing
$ cd flashing
다음 쉘 스크립트 2개를 작성한다.
1. sd_flashing.sh
if [ $# -ne 1 ]; then echo $# arg number error echo arg1 can be disk character like a, b, c, d. exit -1 fi sudo umount /dev/sd$11 sudo umount /dev/sd$12 sudo ./partitioning.sh $1 sudo mkfs.vfat -F 32 /dev/sd$11 sudo mkfs.ext4 /dev/sd$12 sudo mount /dev/sd$11 /mnt rm -rf /mnt/* sudo cp ./MLO /mnt sudo cp ./u-boot.img /mnt sudo cp ./zImage ./am335x-boneblack.dtb ./uboot.env /mnt sudo sync sudo umount /mnt sleep 2 sudo mount /dev/sd$12 /mnt rm -rf /mnt/* sudo tar -xvf core-* -C /mnt sudo sync sudo umount /mnt
2. partitioning.sh
#!/bin/expect set timeout 10 set number [lindex $argv 0] spawn fdisk /dev/sd$number expect "Command (m for help):" send "d\n" expect ":" send "\n" expect ":" send "d\n" expect ":" send "\n" expect ":" send "n\n" expect ":" send "p\n" expect ":" send "\n" expect ":" send "\n" expect ":" send "+64M\n" expect ":" send "Y\n" expect ":" send "n\n" expect ":" send "p\n" expect ":" send "\n" expect ":" send "\n" expect ":" send "\n" expect ":" send "Y\n" expect ":" send "t\n" expect ":" send "1\n" expect ":" send "0c\n" expect ":" send "a\n" expect ":" send "1\n" expect ":" send "w\n" expect EOF exit
아래 파일들과 쉘 파일을 같은 디렉토리에 위치시킨다.
.dtbo 파일은 오버레이 설정할 때 나중에 추가될 것이니까 신경쓰지 말자.
fdisk로 sd카드 sd 몇인지 읽어서 사용해주면 된다
sd카드가 /dev/sdb로 되어 있으면
$ sudo ./sd_flashing.sh b
해주면 알아서 파티션 나누고 이미지 압축 풀고 해줄 것이다.
번외)
IMAGE_FSTYPES:append = " wic.zst"
local.conf에 추가하면 wic.zst를 이미지를 뱉는데 이걸 dd로 sd카드에 자동으로 플래싱 하게 할 수 있다.
그런데 이러면 파티션 2번 sd카드 공간을 다 못쓴다.
따라서 파일시스템 크기를 늘려줘야 하는데 local.conf 에서
IMAGE_ROOTFS_EXTRA_SPACE = "20242880"
이렇게 rootfs의 추가 공간을 지정해 주고 dd명령어를 사용해 sd카드에 플래싱 해주면 된다.
dd 커맨드가 너무 느리다. bs = 4M 설정해도 256분이나 걸린다;;
그래서 fdisk 활용한 쉘 파일로 자동화하여 플래싱하도록 했다. 
대략 10분이면 플래싱 끝난다...
댓글
댓글 쓰기