RaspberryPi

라즈베리파이 usb메모리 능동적 인식 프로그램 만들기

이팔청춘 2022. 9. 20. 11:30

부팅부터 USB메모리를 항상 장착하고 해제하지 않는다면 인터넷에 방법은 얼마든지 있다.

다만, 때에 따라 USB메모리를 꼈다 뺐다 하면 어떻게 될 것인가.

1. 포맷을 먼저 살펴봐야 한다. NTFS는 현재로서는 도중에 인식하기 어렵다

부팅시에 연동하라는 메시지가 나온다.

2. FAT32는 제일 쉬움

FAT32는 최대 32G까지 인식이 잘 돼며, 4G이상의 파일을 한번에 처리할 수는 없다.

apt-get install usbmout를 통해 설치하므로써,(패키지 업데이트는 중지되었다고 한다.)

/media/usb0에 인식된다. 해제할때도 깔끔하게 빠진다.

3. exFAT는 중간난이도

먼저 패키지를 설치한다. 찾아보면 나온다.

원래 이 포맷도 usbmount를 통해 운영이 가능하다고 나온 곳이 있다

https://raspberrypi.stackexchange.com/questions/41959/automount-various-usb-stick-file-systems-on-jessie-lite

 

그러나 실패. 하하.

이 부분은 mount와 umount를 통해 수동으로 처리해야 한다.

프로그램을 짠다면 주기적으로 아래 구문을 처리해줘야 하는데

1) /dev/sda1이 있다면 mount를 통해서 인식(그 전에 폴더는 만들어 놓는다)

sudo mount -t exfat /dev/sda1 /mnt/extusb

2) USB를 빼도 mount된 폴더는 살아있다.

따라서 항상 /dev/sda1이 있는지 먼저 보고, 없는데도 해당 폴더가 마운트 되어있다면,

umount를 해줘야 한다(사실 1)번보다 먼저 선행되어야 함)

sudo umount -l /mnt/extusb

3) 그 이후 /dev/sda1 발견때마다 mount를 해주면 됌

주의할 것은 umount를 해주지 않으면 추 후 인식할때 sda1가 아니라 sdb1, sdc1이 될 수 있다.

참고로 QT로 어플리케이션을 짤 때는

QProcess를 적극 활용하고 그 응답에 grep을 통해 처리해야 한다.

QString exe;

QString output;

exe = "sudo ls /dev | grep sd";

prs.start("sh",QStringList()<<"-c" << exe);

prs.waitForFinished();

output = (prs.readAllStandardOutput());

cout << output.toStdString() << endl;

이런식으로.