안경잡이개발자

728x90
반응형

  시리얼(Serial)은 말 그대로 직렬이라는 의미를 가지고 있습니다.

 

  일반적인 시리얼 통신 방식은 UART (Universal Asynchronous serial Receiver and Transmitter) 방식을 의미합니다. UART는 하드웨어적으로 구현이 간단한 편이며, 대표적인 비동기 통신 방식입니다. 다시 말해 통신을 수행하는 두 기기가 클럭(Clock)을 공유하지 않습니다. 그래서 두 기기가 동일한 속도를 가지도록 추가적으로 속도를 맞추어 주어야 합니다.

 

  시리얼 통신 속도 (Speed)는 여러 개의 BPS (Bits Per Second) 중에서 하나를 선택해야 합니다. 4800, 9600, 19200 등이 있는데요. 대표적인 것이 바로 9600입니다. 당연히 호스트(Host) 컴퓨터와 USB 장치랑 이러한 BPS를 맞추지 않으면 통신이 안 되겠죠? 그러한 작업은 기본적으로 수행됩니다.

 

  다른 시리얼 통신 방법으로는 SPI (Serial Peripheral Interface)가 있습니다. SPI는 라인이 더 많아 데이터 송수신을 동시에 할 수 있으며 UART에 비해서 훨씬 빠릅니다.  또한 두 기기가 같은 클럭(Clock)을 사용하여 통신을 하므로 시작 단계부터 동기화 작업이 수행됩니다.

 

  한 번 예시 코드를 확인해 보겠습니다. Serial.begin() 함수를 이용하여 초기화를 수행할 수 있습니다. 다만 기본적으로 Serial 객체가 초기화 될 때까지 기다려야 합니다. 초기화 된 이후에는 바로 Serial.println() 함수를 이용하여 원하는 문자열을 호스트(Host) 쪽으로 보내어 출력할 수 있습니다.

 

void setup() {
    // 시리얼 통신을 열고 포트가 열릴 때까지 기다립니다.
    Serial.begin(9600);
    while (!Serial) {
        ; // 시리얼 포트가 연결될 때까지 기다립니다.
    }
    Serial.println("Setup이 완료되었습니다.");
}

void loop() {
    Serial.println("Loop 함수를 호출합니다.");
    delay(1000);
}

 

  코드를 작성한 뒤에 USB Type으로는 [Serial]을 선택합니다.

 

 

  업로드를 해보시면 1초에 한 번씩 Serial 통신이 수행되어 문자열이 출력됩니다.

 

 

※ 유의할 점 ※

 

  Teensy에서는 기본적으로 Serial 통신을 이용할 때 Serial을 포함하는 USB Type을 설정했는지 확인할 필요가 있습니다. 만약에 RawHID와 Serial 통신을 같이 사용해야 할 때에는 RawHID를 선택할 수 있는데요. 다만 RawHID는 기본적으로 Serial 통신을 메인으로 사용하지 않으며, setup() 함수에 포함되어 있는 Serial 작업은 무시될 수 있습니다. 이 점을 유의하셔야 합니다.

 

 

  예를 들어 이와 같이 USB TypeRaw HID로 설정하여 동일한 코드를 실행하면 다음과 같이 setup() 함수에 정의되어 있던 출력 구문은 출력되지 않는 것을 알 수 있습니다.

 

728x90
반응형

728x90
반응형

  Oracle VirtualBox가상 머신(Virtual Machine)을 위한 소프트웨어 중 하나입니다. 예를 들어 윈도우(Windows) 운영체제 위에서 우분투(Ubuntu)와 같은 운영체제를 구동시키기 위한 목적으로 사용할 수 있습니다. 저는 기본적으로 처음에 가상 디스크의 크기를 설정할 때 [고정 할당]을 이용하여 고정된 크기의 디스크를 할당했습니다. 그런데 이 용량이 다 차게 되었습니다.

 

 

※ 디스크 복사하기 ※

 

  이렇게 고정으로 할당된 디스크를 [동적 할당]으로 바꾸고 그 용량을 자유자재로 늘리고 싶다면 다음과 같이 하면 됩니다. 먼저 [파일]에서 [가상 미디어 관리자]에 들어갑니다.

 

 

  이후에 다음과 같이 기존에 존재하는 하나의 디스크를 확인할 수 있습니다. 이제 여기에서 [복사] 버튼을 눌러서 디스크를 복사할 수 있습니다.

 

 

  복사를 할 때는 그대로 VDI를 이용하겠습니다. 이때 [전문가 모드(E)]를 눌러서 자세한 설정을 적용할 수 있도록 합니다.

 

 

  그러면 다음과 같이 세부적인 설정을 할 수 있습니다. 여기에서는 [동적 할당(D)]을 눌러서 디스크의 형식을 동적 할당으로 변경합니다.

 

 

  이제 다음과 같이 VDI를 저장할 경로를 설정합니다.

 

 

  그러면 다음과 같이 복사가 완료됩니다.

 

 

  복사가 된 이후에는 복사된 디스크를 이용해 우분투를 부팅할 수 있는지 확인합니다.

 

 

  복사된 하드 디스크를 선택할 수 있습니다.

 

 

  이후에 [시작] 버튼을 눌러서 한 번 부팅을 해봅시다.

 

 

  이제 바뀐 디스크로 정상적으로 부팅이 되는 것을 확인할 수 있습니다.

 

 

※ 디스크 용량 올리기 (증가시키기) ※

 

  이제 명령 프롬프트를 관리자 권한으로 실행한 뒤에 다음과 같은 명령어를 입력합니다. 여기에서 VBoxManage.exe는 VirtualBox를 설치했을 때 설치되는 응용 프로그램입니다. 명령어를 확인해 보시면 32GB (32,768 MB)로 크기를 변경하는 것을 확인할 수 있습니다.

 

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd "E:\VirtualBox\Ubuntu_2.vdi" --resize 32768

 

 

  다만 저장소 파일 자체의 크기가 32GB가 되었다고 해서, 실제로 사용 가능한 용량이 바로 32GB가 되는 것은 아닙니다. 우분투에서도 실제 사용 가능한 용량이 커질 수 있도록 파티션을 처리해야 합니다. 따라서 가장 먼저 우분투에서 GParted 라이브러리를 설치합니다.

 

sudo apt-get install gparted 

 

 

  이때 불필요한 패키지가 설치되어 있어서 용량이 부족하다는 메시지 때문에 설치가 안 될 수 있습니다. 그럴 때는 다음의 명령어를 사용해보세요.

 

sudo apt autoremove

 

 

  아무튼 GParted를 설치한 뒤에 관리자 권한(sudo)으로 열면 다음과 같은 모양이 됩니다.

 

 

  바로 메인 파티션인 /dev/sda1를 우클릭 한 뒤에 [Resize] 버튼을 눌러서 크기를 바꿀 수 있습니다.

 

※ 만약 GParted에서 Resize가 안 된다면? ※

 

  저는 /dev/sda2를 스와프(swap) 목적의 파티션으로 쓰고 있어서, 메인 파티션인 /dev/sda1의 크기를 바꿀 수 없습니다. 다음과 같이 30,000MB로 새롭게 크기를 설정하려고 해도 설정이 안 됩니다. 다시 말해 /dev/sda1 파티션 바로 오른쪽에 /dev/sda2가 자리잡고 있기 때문에 크기 변경이 안 되는 겁니다.

 

 

  이처럼 리눅스 swap을 위한 목적으로 실행되는 /dev/sda2 때문에 /dev/sda1를 확장할 수 없다면, 먼저 sudo swapoff -a를 입력한 뒤에 swap 파티션이 사용되지 않도록 처리합니다. 이제 해당 파티션의 위치를 이동할 수 있습니다. 즉, 먼저 공간을 비워주는 겁니다.

 

 

  다음과 같이 /dev/sda2를 제일 오른쪽으로 밀어 버립니다.

 

 

  이후에 그 안에 있는 모든 파티션(/dev/sda5)들도 오른쪽으로 밀어 주시구요.

 

 

  이후에 다시 /dev/sda2의 크기를 줄이면 다음과 같이 /dev/sda1의 바로 오른쪽에 자리가 많이 남게 됩니다.

 

 

  이제 /dev/sda1를 오른쪽으로 쭉 밀어주시면 됩니다.

 

 

  최종적으로 [확인] 버튼을 눌러 주세요.

 

 

  참고로 저의 전체 수행 결과는 다음과 같습니다.

 

 

  이제 재부팅 이후에 df -h 명령어로 전체 디스크의 용량을 확인합니다. 그러면 성공적으로 용량이 늘어난 것을 확인할 수 있습니다.

 

728x90
반응형