분류

2018년 1월 31일 수요일

Yocto 학습 : 작업 #2 - 첫 번째 빌드

---------------------------------------------------------------------------------------------------
이 문서는 Yocto Training - HOME 문서를 한글 화 한 것입니다. 저자이신 Daiane Angolini 님의 수락 하에 한글 화 작업을 진행하고 있습니다. 일부 주석을 첨부 할 것이며, 필요하면 의역을 통해 일부 내용이 변경 되거나 누락 될 수 있습니다. 하지만 기본은 구글이 번역하겠습니다.

원본은 https://community.nxp.com/docs/DOC-94849 입니다.
---------------------------------------------------------------------------------------------------


보유한 소스 코드를 동기화 합니다.
소스 코드는 주기적으로 업데이트 해 주는 것이 좋습니다. 첫 번째 단계는 동기화 입니다.
$repo sync


로컬 분기점 생성


repo start <새 분기 이름> --all 

로컬 분기를 만드는 이유 :
만약에 어떤 소스 코라도 변경 한 상태에서(다른 선호 커널을 선택하는 등의) 다시 동기화를 하고 싶다 거나, dylan 대신 마스터를 하는 경우에 변경 사항을 유지한 상태로 프로젝트를 동기화 할 수 있습니다.
※ 로컬 분기 없이 동기화 할 경우 변경한 소스가 모두 사라지는 경험을 하실 수도 있습니다. 


빌드를 위한 보드 선택


새 빌드 디렉터리 생성 
$ source setup-environment build
이제 새로운 빌드 디렉터리가 생성 되었습니다.
※어째서인지 콘솔을 죽였다 살리면 저는 source setup-environment build 명령은 콘솔을 재시작 하거나 시스템 재시작시 반드시 사용해야 하는군요;

dora의 기본 보드는 imx6qsabresd 입니다. 원하는 경우 QSB 또는 imx28을 선택할 수 있습니다.
$ vi conf/local.conf 

※개인적으로 core-image-base에 ssh를 추가설치 하였습니다.


${yoctodir}/build/conf/local.conf 파일을 변경해야 합니다.
conf에 추가할 수 있는 내용을 보시려면 클릭
CORE_IMAGE_EXTRA_INSTALL += "openssh"
CORE_IMAGE_EXTRA_INSTALL += "openssh-sftp-server"

local.conf에 들어가는 자세한 파라미터에 대한 내용은 이 파일을 확인하세요 

#{yoctodir}./sources/poky/meta/conf/documentation.conf
이 링크를 사용하셔도 됩니다. 

타겟 보드에 설치되는 gcc 버전을 변경하고 싶다면 위해 추가적으로 해야 할 일이 또 있습니다. (yocto를 통해 arm 보드에 gcc 버전을 변경하는 방법입니다.)
TCMODE 를 변경해줘야 합니다. TCMODE는 아래에 폴더에 있는 파일을 선택하는 명령입니다.
$ls ./sources/poky/meta/conf/distro/include/ 

예) linaro 버전의 gcc를 사용할 때 예 
local.conf 및 tcmode-external-linaro.inc 의 예제 (클릭하면 확대되요) 
생성 내용은 이 링크를 참조하세요 
local.conf 파일은 아래와 비슷한 구성을 하고 있을 것입니다.

MACHINE ??= 'imx6qsabresd'
DISTRO ?= 'poky'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES = "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
      STOPTASKS,${TMPDIR},1G,100K \
      STOPTASKS,${DL_DIR},1G,100K \
      STOPTASKS,${SSTATE_DIR},1G,100K \
      ABORT,${TMPDIR},100M,1K \
      ABORT,${DL_DIR},100M,1K \
      ABORT,${SSTATE_DIR},100M,1K"
CONF_VERSION = "1"

BB_NUMBER_THREADS = '2'
PARALLEL_MAKE = '-j 2'

DL_DIR ?= "${BSPDIR}/downloads/"
ACCEPT_FSL_EULA = "1"

MACHINE 부분의 'imx6qsabresd' 를 자신이 사용하는 보드 이름으로 변경하세요. 지원되는 보드의 목록은 아래 명령을 사용하면 확인할 수 있습니다.
※늘곰씨는 $ source setup-environment build_imx6solo 를 통해 빌드 루트를 생성하였고, MACHINE 을 imx6solosabresd 보드로 변경하였습니다. 하지만 이미지 생성의 문제인지 부팅이 되지 않는 상태에 빠졌고, imx6qsabresd 를 사용해서 해결되었습니다. mcimx6q-sdb 제품의 이미지는 imx6solo가 아닌 imx6qsabresd 입니다. 



$ ls ../sources/meta-fsl-arm/conf/machine/*.conf -l
-rw-rw-r-- 1 thkim thkim 539 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx23evk.conf
-rw-rw-r-- 1 thkim thkim 2440 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx28evk.conf
-rw-rw-r-- 1 thkim thkim 667 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx31pdk.conf
-rw-rw-r-- 1 thkim thkim 603 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx35pdk.conf
-rw-rw-r-- 1 thkim thkim 333 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx51evk.conf
-rw-rw-r-- 1 thkim thkim 469 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx53ard.conf
-rw-rw-r-- 1 thkim thkim 460 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx53qsb.conf
-rw-rw-r-- 1 thkim thkim 638 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6dlsabreauto.conf
-rw-rw-r-- 1 thkim thkim 393 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6dlsabresd.conf
-rw-rw-r-- 1 thkim thkim 533 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6qsabreauto.conf
-rw-rw-r-- 1 thkim thkim 432 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6qsabresd.conf
-rw-rw-r-- 1 thkim thkim 432 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6slevk.conf
-rw-rw-r-- 1 thkim thkim 615 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6solosabreauto.conf
-rw-rw-r-- 1 thkim thkim 468 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6solosabresd.conf
-rw-rw-r-- 1 thkim thkim 542 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/twr-vf65gs10.conf

프리스케일 이외 지원 보드 목록
$ ls ../sources/meta-fsl-arm-extra/conf/machine/*.conf -l
-rw-rw-r-- 1 thkim thkim 155 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10036.conf
-rw-rw-r-- 1 thkim thkim 199 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10037.conf
-rw-rw-r-- 1 thkim thkim 234 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10049.conf
-rw-rw-r-- 1 thkim thkim 234 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10055.conf
-rw-rw-r-- 1 thkim thkim 229 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10056.conf
-rw-rw-r-- 1 thkim thkim 255 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10057.conf
-rw-rw-r-- 1 thkim thkim 255 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10058.conf
-rw-rw-r-- 1 thkim thkim 466 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cgtqmx6.conf
-rw-rw-r-- 1 thkim thkim 246 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx233-olinuxino-
maxi.conf
-rw-rw-r-- 1 thkim thkim 190 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx233-olinuxino-
micro.conf
-rw-rw-r-- 1 thkim thkim 188 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx233-olinuxino-
mini.conf
-rw-rw-r-- 1 thkim thkim 508 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx6qsabrelite.conf
-rw-rw-r-- 1 thkim thkim 726 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/m28evk.conf
-rw-rw-r-- 1 thkim thkim 767 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/m53evk.conf
-rw-rw-r-- 1 thkim thkim 786 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/nitrogen6x-lite.conf
-rw-rw-r-- 1 thkim thkim 1641 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/nitrogen6x.conf
-rw-rw-r-- 1 thkim thkim 538 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/wandboard-dual.conf
-rw-rw-r-- 1 thkim thkim 529 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/wandboard-quad.conf
-rw-rw-r-- 1 thkim thkim 465 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/wandboard-solo.conf
이제 지원되는 모든 보드의 목록을 알게 되었습니다.
더 많은 지원 보드 목록을 확인하시려면 Freescale/meta-fsl-arm-extra · GitHub
또는, meta-fsl-arm : dora 릴리스 노트를 참조하세요 : Freescale 커뮤니티 BSP 릴리스 노트 1.5 문서

빌드 시작

가장 큰 용량의 이미지는 meta-fsl-demos의 fsl-image-gui 입니다. 이 이미지는 imx53과 QT4.8을 위한 X11, gstreamer, fsl codec(gstreamer에서 사용되는), unit-test, gpu, gpu 샘플(소스 코드와 함께)이 포함되어 있습니다. 그러나 이것을 빌드 하려면 영원의 시간이 걸립니다. (만약에 운이 좋고 강력한 머신을 갖고 있다면, 단 몇 시간 만에 빌드 될 것입니다.)

제 PC에서는 처음 빌드 완료까지 4,5시간이 소요되었습니다. 빌드를 이미 한번 완료했을 경우 아무것도 변경되지 않았다면 3초가 걸리며, 이미지를 제작할 때 15분이 소요될 것 입니다. (750MB의 rootfs입니다. 용량이 큰 파일을 만들수록 더 많은 시간이 소요됩니다.)

※ 늘곰씨는 core2개, 3GB메모리, 60GB 디스크를 할당한 상태에서 작업했을 경우 5시간이 소요 되었습니다. core와 cpu는 되도록 많이 할당하는 것이 작업의 속도를 높여주는 것 같습니다. 처음 코어1개를 할당했을 경우 8시간이 지나도 종료되지 않았습니다.

그 외에도 많은 이미지들이 있습니다. 이미지 확인 명령어는 아래와 같습니다.

$ find ../sources -name *image*.bb
※ bb라는 파일과 py라는 확장자의 파일이 주로 보이는데 .bb 파일이 이미지 인 것 같습니다. 약 30여종이 보입니다.
빌드 디렉터리 내에서 작업해야 합니다.
$ bitbake core-image-base
참고 (24Feb2014) : 빌드 이미지의 필수 디스크 공간은 약 18GB입니다.
※ 저는 bitbake 명령을 root 계정으로 수행할 때 알 수 없는 오류가 발생하였습니다. 검색도 되지 않는 이상한 오류가 납니다.... 그리고 처음 1기가 메모리를 할당 시 1회 메모리 초과 오류가 발생하였고, cpu/core 1개 할당시 8시간이 넘어도 완료되지 않았습니다. 그리고 40gb 하드를 할당하였는데 디스크 초과 오류가 발생했었습니다. 최종 사용되는 디스크는 18gb이지만 빌드 시 사용되는 디스크 공간은 20gb를 초과할 수 있다고 생각됩니다. 
vmware 를 사용하시고 디스크 용량 부족이 발생하셨다면 이 링크를 확인하세요 
vmware+ ubuntu 시스템 파티션 확장법(gparted 사용) ※ bitbake 명령을 통해 빌드 하던 중 시스템 오류 등으로 실패할 경우 bitbake -c clean 타겟 (현재는 core-image-base) 명령을 통해 클린 해주면 됩니다. 전 이상하게 빌드가 자주 실패해서 이 명령을 자주 사용합니다. 

Yocto 교육 문서 - 홈

알림 :
이 문서는 Yocto Training - HOME 문서를 한글 화 한 것입니다. 저자이신 Daiane Angolini 님의 수락 하에 한글 화 작업을 진행하고 있습니다. 일부 주석을 첨부 할 것이며, 필요하면 의역을 통해 일부 내용이 변경 되거나 누락 될 수 있습니다. 하지만 기본은 구글이 번역하겠습니다.

Arm 과 Embedded에 대한 학습 중 인터넷을 통해 접한 여러 문서 중에서 실습 과정이 가장 체계적이고, 쉽게, 그리고 오류 없이 따라할 수 있는 문서라 생각하여 한글 화를 수행하게 되었습니다.

원본은 https://community.nxp.com/docs/DOC-94849 링크를 클릭하시면 확인 하실 수 있습니다. YOCTO 학습 중 발생하는 질문은 NXP 커뮤니티를 통해 질문하시면 답변을 쉽게 받으실 수 있습니다. 저도 초보라서 모르는 부분은 검색해가며 주석을 달고 있습니다.

오류에 대한 지적은 받겠습니다.
우선 yocto란 무엇인가에 대한 문서는 타 블로그에 이미 한글화 된 것이 있어 링크합니다.
Yocto란-무엇인가
---------------------------------------------------------------------------------------------------

Yocto 교육 문서 - 홈

이 교육 문서는 Yocto를 통해 이미지를 만들고, 수행하고, 어떻게 맞춤형으로 제작하는 방법을 단계적으로 보여줄 것 입니다.

이 문서는 10개의 단계로 구성됩니다.
# 한글 화 되는 데로 링크를 추가하도록 하겠습니다.  원래는 모든 작업을 마친 후 공유하려 하였으나, Google blogger 에서 문서 작성 중 지속적으로 문서가 사라지는 이상한 오류때문에 작업이 완료되지 않은 상태에서 공유를 시작하게 되었습니다. 죄송합니다. 

작업 #1 - 소스 다운로드

Yocto 학습 : 작업 #2 - 첫 번째 빌드

Yocto 학습 : 작업 #3 - 빌드 결과

Yocto 학습 : 작업 #4 - 배포 및 테스트

Yocto 학습 : 작업 #5 - 커널

Yocto 학습 : 작업 #6 - 사용자 정의 이미지 만들기

Yocto 학습 : 작업 #7 - 툴 체인 만들기

Yocto 학습 : 작업 #8 - 생성된 툴 체인을 사용하여 수동으로 커널 빌드

Yocto 학습 : 작업 #9 - bad/ugly 추가 방법 (플러그인에 대한 옵션 인 것 같습니다.)

Yocto 학습 : 작업 #10 - 맞춤형 계층을 만드는 법

추가 콘텐츠
이미지에 대한 설명

Yocto build를 위한 QT Creator 설정

YOCTO 프로젝트 레이아웃 맵

이 문서는 매주 하나의 과제를 진행하는 방법으로 작성이 되었습니다.

imx6 , imx53qsb, imx28evk 보드를 사용하실 수 있습니다.

NXP 커뮤니티는 언제든 가입할 수 있습니다.

작업을 진행하며 발생하는 질문 사항은 NXP 커뮤니티를 통해 질문하십시오. 모든 질문에 대답할 수는 없겠지만, 커뮤니티가 도움이 될 수 있다고 생각합니다.

Leonardo Sandoval Gonzalez가 작성하고 게시 한 많은 문서 가 있습니다. 여기를 참조하십시오.
https://community.freescale.com/docs/DOC-94023

Yocto 학습 : 작업 #1 - 소스 다운로드

---------------------------------------------------------------------------------------------------
이 문서는 Yocto Training - HOME 문서를 한글 화 한 것입니다. 저자이신 Daiane Angolini 님의 수락 하에 한글 화 작업을 진행하고 있습니다. 일부 주석을 첨부 할 것이며, 필요하면 의역을 통해 일부 내용이 변경 되거나 누락 될 수 있습니다. 하지만 기본은 구글이 번역하겠습니다.

원본은 https://community.nxp.com/docs/DOC-94849 입니다.
---------------------------------------------------------------------------------------------------

호스트 환경 준비

LINUX 계열의 OS를 설치한 컴퓨터나, 가상 컴퓨터(vm) 1GB메모리 32GB 디스크가 필요합니다.
※ 제가 사용한 환경은 램을 CORE2개, 3GB, DISK 60GB로 증설하게 되었습니다. BUILD 작업 중 메모리 초과 오류가 발생 했고, 최종 18GB의 용량은 맞으나, 작업 중 디스크 부족 역시 한번 발생해서 입니다. 최종적으로 이미지에 대한 여러 테스트를 수행하고 싶다면 300gb이상의 디스크를 할당 하는 것이 바람직합니다. 

먼저 Yocto 패키지 설치를 확인 합니다.
Ubuntu 명령
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev xterm curl

Fedora 명령
$ sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath ccache SDL-devel xterm

소스 코드 다운로드

Google Repo 설치
※ repo는 프로젝트 단위 소스 코드 관리를 위한 도구 입니다.
$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ PATH=$PATH:~/bin
$ chmod a+x ~/bin/repo

BSP 소스 다운로드 :
※ BSP : board support package의 약자로, 보드 제조사에서 제공하는 지원 및 개발 도구를 이야기 합니다.
$ mkdir fsl-community-bsp
$ cd fsl-community-bsp
$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b dora
$ repo sync 


※ 아래는 레포지토리 초기화 시 스크린입니다. branch 와 tag라는 명칭으로 분류되어 있는데 branch 는 소스에 새로운 작업을 하기 위해 나눈 것, 즉 새 프로젝트가 진행 중이라고 생각하시면 됩니다. tag는 배포 버전에 대한 기록을 위해 작성합니다. 

소스 코드 다운은 약 15분 걸립니다. 
※ 한국에서 야간에 사용 시 해외 망의 속도가 나오지 않아서 인지 2시간이 소요됩니다. 주간에는 제법 빠르게 진행됩니다. 
 repo 필요 공간은 238메가입니다.

dora는 현재 2013.10월이 최종 버전입니다.
※2018년 1월 현재는 추가 배포가 없기 때문에 그냥 사용하시면 됩니다. 릴리즈 노트를 확인하세요. 
dora의 배포 정보 노트 입니다. : https://lists.yoctoproject.org/pipermail/meta-freescale/2013-October/005286.html
dora 소스 코드를 업데이트 하려면 아래 명령을 사용하세요
$ repo init –b dora

업데이트 된 dora버전을 사용하기 위해선 새로운 build 디렉터리를 생성해야 합니다.
그렇지 않을 경우 여러 패키지에서 버전 충돌로 인한 알 수 없는 오류가 발생할 수 있습니다.

Yocto 교육 문서 - 홈 
Yocto 학습 : 작업 #2 - 첫 번째 빌드

2018년 1월 30일 화요일

ARM Embedded / 라즈베리파이 초보 개발자의 이슈 정리

본 문서는 ARM+Embedded 초보로서 발생했던 문제들에 대한 정리이며, 지속적으로 업데이트 되어 갈 것임을 알려 드립니다.

ARM을 접하기 시작 한지 어느덧 한 달이 되어가면서, 발생했던 이슈에 대한 정리를 하나하나 해가려 합니다. 제일 처음 ARM 보드를 접했을 때 발생한 문제는 여러가지 있습니다. 그리고 그 물음들은 차차 해결되어가고 있습니다.

1. ARM 보드에 파일 전송은 어떻게 해야 돼?

처음 ARM 보드를 접했을 때 WINDOW 환경인 제 PC에서 ARM 보드에 파일을 적재 하는 것이 쉽지 않았습니다. 일단 Linux용으로 포맷 된 플래카드를 WINDOW 에서 사용할 수 없으니 답답했고, COM 포트와 SSH를 이용한 접속은 되지만, 기이하게도 파일 전송을 할 수 없는 보드가 있었습니다.  현재 사용하는 보드는 임베디드 리눅스가 설치된 Cortex A5,7,8,9 보드입니다.

보드의 제조사 마다 다른 것 같은데 라즈베리 파이가 설치된 5 7 8은 sftp 서버가 설치되어 있어 대수롭지 않게 파일 전송을 할 수 있었는데 a9보드만(i.mx6solo) sftp가 깔려있지 않았습니다.


위 사진과 같이 ssh는 dropbear 라는 녀석이 깔려있고, sftp는 커맨드가 없습니다. 처음에 이 녀석에 sftp 서버를 크로스컴파일 해서 설치 해보자 라는 생각을 했는데 인터넷에 나온 여러 방식들을 수행해본 결과, make 오류가 납니다. 하지만 초보라서 이 오류에 대한 해결을 할 수 없었습니다. (애써 툴 체인과 컴파일 환경 설정을 하느라 4시간이 걸렸습니다.)

그래서 ssh에서 파일 전송 안되나 하는 것을 생각해봤고 ssh 파일 전송을 검색하니 winscp라는 녀석이 검색되었습니다. 저는 윈도우 환경에서 vm으로 리눅스를 사용합니다. 따라서 window던 리눅스던 파일 전송만 되면 됩니다.
Winscp의 지원 프로토콜 목록
WinSCP :  sftp, SCP, ftp, webDAV 라는 4개의 프로토콜을 지원해주는데 이중 SCP라는 프로토콜이 SSH에서 파일 전송을 가능하게 해줍니다. 게다가 익숙한 GUI 환경입니다.

SCP 프로토콜위키 링크

2. 알수없는 컴파일 오류

ARM에 대해 학습할 시간도 없이 프로그램 테스트에 투입되면서 마주친 건 이유 없는 컴파일 오류였습니다.
프로그램 테스트 때에는 이상이 없었던 프로그램이 컴파일러로 넘어가면서 오류가 나는 것이었는데 알고 보니 윈도우 줄 바꿈 문자열 인식 불가에 의한 오류였습니다. 아래는 해당 내용입니다.
(CRLF는 Windows에서 사용하는 줄 바꿈 문자이고 LINUX에선 사용되지 않는다고 합니다.)
root@ubuntu:/home/test# ls
test.c  TEST2.c  make_test1.sh  make_test2.sh  main.c
root@ubuntu:/home/test# file make_test1.sh
make_test1.sh: ASCII text, with CRLF line terminators<---CRLF 라인이 포함되어있음        
root@ubuntu:/home/test# file make_test2.sh
make_test2.sh: ASCII text<---ASCII만으로 구성되어 있음                                            
root@ubuntu:/home/test# ./make_test1.sh                                                             
COMPILING TEST PROGRAM FOR LINUX
/tmp/ccqjcWXL.o: In function `main':
main.c:(.text+0xb4): undefined reference to `tesfunct'                                               
collect2: error: ld returned 1 exit status   <---오류가 발생하면서 컴파일이 종료됨           
/tmp/ccsrD3GX.o: In function `main':                                                                     
main.c:(.text+0xb4): undefined reference to `tesfunct'                                              
collect2: error: ld returned 1 exit status                                                                 
root@ubuntu:/home/test# ls
test.c  TEST2.c  make_test1.sh  make_test2.sh  main.c
root@ubuntu:/home/test# ./make_test1.sh
COMPILING TEST PROGRAM FOR LINUX
main.c: In function ‘tesfunct’:                                                                               
main.c:333:20: warning: comparison between pointer and integer                               
    while ((line[i] != NULL) && (i<(MAXLINE - 1)) && (line[i] != 0xff)) {                         
                    ^                     <---경고가 발생하지만 컴파일이 수행됨                     
test.c: In function ‘tesfunct’:                                                                                
test.c:333:20: warning: comparison between pointer and integer                                 
    while ((line[i] != NULL) && (i<(MAXLINE - 1)) && (line[i] != 0xff)) {                         
                    ^                                                                                              
root@ubuntu:/home/test# ls
test.c  TEST2.c   make_test1.sh  make_test2.sh  main.c
test     test2.exe  test1.exe 
컴파일 된 test 폴더와 test1.exe, test2.exe 파일이 생성됨 
완전히 동일한 내용의 파일에서도 window 환경에서 편집한 문서일 경우 컴파일이 안되면서 특이한 오류가 발생하게 됩니다. 까다로운 녀석이 엔터 값, 탭 값 하나 그냥 넘어가 주지 않습니다. ㅎㅎ;

3. 디버깅 환경 어떻게 해야되?

ubuntu 에서는 기본적으로 컴파일러를 통한 디버깅이 가능하다고 합니다.
GDB DEBUGGER 라는 것을 사용할 수 있다고 하는데요, 저는 개인적으로 ECLIPSE를 선호하기에 ECLIPSE에서 디버깅을 하려고 합니다.
우분투에서 이클립스를 통한 디버깅 환경 설정에 대한 문서는 타 블로그에 자세히 나와있습니다.
우분투에서 이클립스를 통한 c/c++ 개발환경 구축 (크로스컴파일 포함)


4.VMWARE에서 SD카드 어떻게 연결해?

VM에서는 노트북 자체에 달려있는 SD카드 리더기는 읽어들이지 않네요. 이부분 불편합니다.  (PCIE 방식의 카드리더는 GUEST-OS에서 사용할 수 없다고 합니다. )
그래서 어쩔 수 없이 카드리더기를 구매했습니다.

처음에는 VMWARE에 IDE를 설정해서 연결하는것을 해봤는데, 장치를 뺄경우 오류가 뜨면서 VM이 종료됩니다. 그냥 이동형 장치로 한번씩 눌러주는 것이 낫습니다.


① 가상머신에서 오른쪽 마우스 클릭
② Removable Device
③ 자신의 usb 명칭을 선택 (대체로 storage 가 들어있음)
④ Connect 클릭 하면 df명령으로 추가된 놈들이 보입니다.

해당 디스크를 보려면 DF 명령도 있지만
$sudo fdisk -l 을 보시는 편이 낫습니다.  디스크 별로 파티션이 나와서 보기 편해요 ㅎㅎ


5. 라즈베리파이는 어떻게 설치해야되?

라즈베리파이는 기본이 쉽고, 여러곳에서 지원해서 어려울게 없네요 ㅎㅎ;;
위키가 매우 잘 구성되어있습니다. 한글로요 https://wikidocs.net/3277
라즈베리안 os 다운로드 https://www.raspberrypi.org/downloads/raspbian/

6. 라즈베리파이 커널은 어떻게 변경해야돼?

라즈베리 파이 커널은 https://github.com/raspberrypi/linux/ 요기 들어가시면 확인할 수 있구요 커널 목록이 무엇이 있는지 확인할 수 있습니다.  (라즈베리 파이는 git에서 rpi- 이후에 나오는 숫자가 커널버전입니다. )
빨간 줄 친 저곳을 누르면 모든 브랜치 목록을 확인할 수 있어요. 특정 커널의 브랜치만 다운 받으시고 싶으시면 해당 커널의 숫자를 입력하면 나옵니다. 저는 3.18을 사용해야 합니다. 커널 빌드하기는 https://wikidocs.net/3243 문서를 참조하시면 되고, 커널 버전을 변경하고 싶으면 소스를 받는 부분만 고치시면 됩니다.
git clone --depth=1 https://github.com/raspberrypi/linux 부분을 
git clone --depth=1  -b rpi-3.18.y https://github.com/raspberrypi/linux 이렇게 바꾸시면 됩니다. 
기본적인 다른 부분은 동일하기에 별다른 설명도 필요 없습니다.

7. 콘솔에서 wify 어떻게 설정해야해 ?

2개의 파일을 편집하면 됩니다.
1) 네트워크 설정
우선 네트워크 설정파일을 변경합니다.
$ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback 


allow-hotplug wlan0
iface wlan0 inet dhcp 

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf 

auto eth0
iface eth0 inet dhcp
그 다음 wpa-conf  파일로 지정한 파일을 수정합니다.
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf 

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1 


network={
ssid="wifi의 ssid"
psk=비밀번호 


6. 컴파일러 여러개인데 편하게 쓸수 있어? 

컴파일러는 보드의 버전에 따라 여러개 사용할 수도있고, 여러 작업 환경에 의해 바뀔 수 있습니다. 따라서 alternative라는 단축키 비슷한 것을 사용할 수 있습니다. 리눅스에서도 windows와 마찬가지로 단축 아이콘이 존재합니다. ln이라는 명령을 통해서 만들 수 잇고, alternatives로 미리 저장해놨다가 필요할때 변경하면서 사용할 수 있습니다.

update-alternatives  라는 명령에 대해 간략하게 이야기 하자면 4개의 명령어로 나뉩니다.
1. alternatives 조회 
$ update-alternatives --list <이름>

2. alternatives 추가 
$ sudo update-alternatives --install    <링크파일> 이름   <실제파일>      구분 
예) sudo update-alternatives --install /usr/bin/gcc  gcc  /usr/bin/gcc-4.9    49

※ 하나의 파일이 바뀔때 같이 바뀌어야 하는 파일이 있다면 이런식으로 종속 설정을 할 수 있습니다.  --slave <링크파일> 이름  <실제파일> 

예) sudo update-alternatives --install /usr/bin/gcc gcc  /usr/bin/gcc-4.9 49 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9

3. alternatives 삭제 
$ sudo update-alternatives --remove 이름  <실제파일>
예) sudo update-alternatives --remove gcc /usr/bin/gcc-4.9

4. 변경 (혹은 선택)
$ sudo update-alternatives --config 이름
예) sudo update-alternatives --config gcc

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-4.9   49        auto mode
  1            /usr/bin/gcc-4.9   49        manual mode
  2            /usr/bin/gcc-6     6         manual mode


Press <enter> to keep the current choice[*], or type selection number: 0

선택창이 나와서 번호를 입력하여 선택할 수 있습니다. 

2018년 1월 18일 목요일

vmware+ ubuntu 시스템 파티션 확장법(gparted 사용)

최근 arm을 통한 프로그래밍을 학습하는 중 발생하는 여러 문제점에 직면하고 있습니다. 차차 해당 부분들에 대한 포스트를 진행하겠지만, 그중 vm에 이런저런 프로그램을 깔던 중 발생한 디스크 용량 증설에 대한 방법을 기술하겠습니다.
 
리눅스의 파티션 확장 방법은 여러 가지가 있지만 그중 gparted를 사용한 확장법입니다.
일단 vm에 설치해서 가동하고 있는 리눅스는 root 디렉토리가 포함된 디스크는 사용 중이기 때문에 잠김 상태에 있어 변경할 수 없습니다. 따라서 CD부팅을 통해 가상머신의 용량을 변경해야 합니다.
 
1. gparted 다운로드
 
gparted 는 리눅스 계열에 설치하여 파티션 정보를 조정할 수 있는 도구입니다.
또한 기동중인 os의 파티션 정보가 잠기는 것을 알고 있기에 부팅용 cd를 제공합니다.
http://gparted.sourceforge.net/download.php 사이트에 접속 합니다.

cd, usb, bootable image 란에 릴리즈 정보를 확인하시고 프로세서에 맞는 버전을 다운로드 하시면 됩니다.
용량은 약 300메가로 다운로드 시간은 약 5분가량 걸립니다. 지원되지 않는 iso를 사용할 경우 부팅이 안되니 주의 하시기 바랍니다.
  
2. 가상머신 디스크 용량 증설
사용중인 vm을 종료하시고 해당 vm에서 우클릭 setting에 진입합니다

사진의 순서대로 하드디스크 선택 -> Expand -> 디스크 용량을 입력하시면 디스크 vm에 추가 디스크가 할당됩니다. (원래 20GB -> 40GB로 확장)

3.다운로드 받은 cd로 부팅 설정

cd/dvd -> Connect at power on -> Use ISO -> Browse를 눌러 다운로드 받은 디스크 이미지를 선택하시고 ok를 눌러 저장합니다

Connect at power on 옵션을 선택해야 부팅시 cd롬이 자동 연결됩니다. 
시작버튼 옆의 작은 화살표를 눌러서 시작 메뉴를  팝업시킨 후> Power On to Firmware를 순서대로 클릭하시면 바이오스로 진입합니다

바이오스에 들어가시면 부트로 이동하셔서 CD-ROM Drive를 선택하시고 +버튼을 눌러 cd를 최상위에 올립니다.
그리곤 Exit에 가셔서 Exit Saving Changes를 선택하고 Yes
 
4. 파티션조절 
cd부팅이 되면 이런 화면으로 넘어갑니다. 첫 번째 선택해서 엔터 
 Don’t touch keymap에서 엔터 후 언어선택 33 엔터 
0을 선택하면 x윈도우에서 gparted가 자동 실행됩니다
다른거 선택하면 콘솔에서 이거저거 세팅해야 하니 귀찮습니다. 그냥 0번 가세요 

윈도우가 실행되면 gparted가 자동 자동 실행됩니다. 그리고 초기 파티션 형태는 대략 이렇게 생겼습니다. 
20기가 기본 하드에 1기가 스왑 그리고 이번에 추가한 20기가 파티션입니다. (사실 스왑을 날려먹어서 다시찍었어요)
일단 두 영역이 붙어있지 않기 때문에 확장할 수 없는 상태입니다. (스왑 파티션이 설정되어 있을 수 있고, 없을 수도 있습니다. )
 
스왑이 있을 경우 빨간색인데 빨간색 파티션에서 오른쪽 클릭 swapoff를 선택하면 스왑이 종료됩니다. 그리고 다시 오른쪽 클릭 remove 하면 아래와 같은 형태가 됩니다
이 상태에서 하단의 파티션 목록에서 주 디스크 파티션을 선택 하신 후 Resize/Move를 선택해주세요


1.화살표를 눌러서 대략적인 용량을 선택하시고 -> 2. New-size에서 원하는 수치인지 확인 및 미세 조정을 거친 후 3번을 눌러주세요.
 
이렇게 주 파티션은 확장되었고 이제 스왑을 다시 살려야죠 ㅎㅎ;; 
(스왑 없이도 잘산다고 하지만, 이게 vm이다보니 메모리가 적어서 전 필요합니다. )
 디스크의 남은 부분에서 오른쪽 클릭 후 Extanded Partition을 선택하고 +ADD클릭
 
다시 같은 부분 오른쪽 클릭 -> linux-swap선택 -> add 이제 파티션 조정은 끝났습니다. 
 
작성된 파티션 적용을 위해 Apply -> Apply 를 수행합니다. 



자 이제 파티션 확장 작업이 완료 되었습니다
이제 셧다운 하시고
'3.다운로드 받은 cd로 부팅 설정' 으로 돌아가셔서 Connect at Power on 체크를 해제해주시고, Use ISO image 파일을 Use Physical Drive를 선택한 후 ok -> vm 시작 하면 끝! 수고하셨습니다.

2018년 1월 6일 토요일

무선 음향 시장 동향, 헤드폰 개봉기( SONY h.ear on 2 Wireless NC WH-H900N)

헤드폰 교체 이유 

기존에 사용하던 XBA-Z5의 불편함을 없애기 위해 무선 헤드폰을 구매하기로 결심하였습니다. XBA-Z5는 탁월한 음질에서 많은 감동을 주는 이어폰임에 틀림이 없습니다. 하지만 플러그를 꽂아야 하는 불편함에서 발생하는 몇 가지 문제점이 있었습니다.

제가 느꼈던 XBA-Z5의 문제점은 이렇습니다. 
1. 운동 시 커넥터 연결부에서 '딸깍' 거리며 전하가 튀는 듯한 소리가 발생하거나 흔들리면서 마찰음이 발생한다. 
2. 15km/h 이상의 속도로 이동할때 풍절음이 과도하게 발생한다. 
3. 커넥터를 꽂았다 뺐다 하기 귀찮다. 
4. 선을 정리하기 귀찮다. 
5. 귀에 꽂는 방식이기에 자주 넣고 뺄 경우 귀에서 삐 하고 울림이 발생한다. 

위 문제점에 대한 해결책은 이렇습니다. 인이어 방식은 헤드폰으로 대체하면 해결되고, 풍절 음 문제도 노이즈캔슬링이 해소해주리라 생각됩니다. 그리고 나머지 부분에 대한 해결책을 찾다 보니 무선 헤드폰으로 선택하면 해결이 가능 합니다. 블루투스 2.0~3.0 시대에 나온 Z5가 출시했던 시절에 부족했던 부분이 불과 3년 만에 블루투스 4. 대로 업그레이드 되면서 대부분 해결된 것으로 보입니다. 

예를 들자면 2015년만 해도 블루투스 2.0 기준으로 음향 장비가 나와서 음질이 심각하게 떨어졌고, 배터리 수명이 8시간을 넘기지 못했던 것이 개선되어 이제는 무선으로 HRA급의 음악을 들을 수 있고, 20시간 이상의 배터리 수명을 보장하는 시대가 온 거죠. 

시대가 바뀌었으니 장비도 바꿀 때가 된 겁니다. 이런 생각을 하고 보니 구매 충동이 멈추지 않고 3일 간 헤드폰을 알아보게 되었습니다. 결국 3일 간 헤드폰만 찾다 허송세월 한 셈이죠.... (반성반성)

일단 XBA-Z5보다 음질이 떨어지는 제품을 사고 싶지는 않았습니다. (탁월한 음감의 귀를 갖고 있지는 않지만 한번 고품질 음향에 익숙해진 상태에서 저품질 음향기기를 사용하는 것은 매우 짜증스럽고 힘듭니다. 40인치 TV를 쓰던 사람이 20인치 TV를 쓰는 것 만큼 불편합니다.)

음향 기기를 고를 때 개인적으로 중요하게 여기는 부분은 음역입니다. 

Z5의 경우 3hz-40kHz를 지원하는 기기입니다. 표현할 수 있는 음역의 폭이 넓지요. 주파수는 음역과 일치합니다. https://namu.wiki/w/%EC%98%A5%ED%83%80%EB%B8%8C
따라서 넓은 주파수를 지원하는 기기는 더 넓은 옥타브(음역)를 지원하는 기기라고 할 수 있습니다. 일부에선 20kHz 이상은 들을 수 없다고 하기도 합니다. 하지만 정확한 실험 결과는 없죠. 그냥 대충 못 듣는 것 같다는 말만 있습니다. 욕심과 미지의 영역인 셈이죠.

디지털 음악의 변천사

테이프 -> CD -> MP3로 변환해 가는 과정에서 디지털 저장 매체의 저장 용량 한계 때문에 상용 음악은 많은 부분을 포기했습니다. 음역대의 특정 부분만 저장해서 용량을 줄여 품질이 떨어진 음반을 대세가 되었습니다.  (주로 휴대성에 기반 한 소형화의 문제였다고 생각됩니다. )

음악계에서 아날로그 감성으로의 회귀를 위해 많은 분들이 '진공관'을 찾게 되는 이유도 이 부분에 있습니다. 아날로그 시절에는 테이프라는 매체를 통해 방대한 량의 아날로그 데이터가 거의 손실 없이 기록되어 상용화 되었습니다. 구세대 카세트 테이프가 썩었다는 이야기들도 많습니다만. 아날로그 시절의 카세트 테이프가 기록할 수 있었던 음역은 약 80kHz이상입니다. 구세대 테이프 하나에 약 29GB의 음악을 담을 수 있습니다. 나름의 고음질 8MB(19800Hz 곡의 3분 정도 용량이 대략 이정도 입니다. )의 mp3로 환산한다면 3625곡을 담을 수 있는 용량이지요. 최근 이런 구세대 저장장치를 개선해 185TB의 저장장치를 개발해낸 사례도 있습니다.)

디지털 mp3의 형태의 음반에 대한 온라인 유통이 시작 되던 시기 (2000년 초기)에 mp3의 음역은 3600hz, 6800hz, 9800hz 가 가장 보편적이었던 것 같습니다. 아날로그와 비교하면 1/10도 안되는 음역이죠. 디지털 음향기기 초창기 시장은 정말 형편없는 음질의 음반들이 온라인으로 날개달린 듯 유통되니 일부 가수들은 '이정도는 집에서도 할 수 있어' 하고 home made 음반을 내기도 했었죠. 200MB 남짓한 공간에 100곡의 노래를 넣을 수 있었던 것은 그만큼 음질이 떨어졌기 때문에 가능했습니다.

이시절이 제겐 가장 괴로웠던 시기입니다. 약 2010년까지 이어지는 홈메이드 음반은 돈주고 음반을 구매하는 저에게 암흑기였습니다. 돈주고 산 음반이 고막을 고문하는 수준의 저품질이어서 한때 음반 구매를 중단하기도 했습니다. (그래도 '거미'라는 가수는 홈메이드를 하지 않는다고 방송에서 말씀하셔서 거미님 앨범은 꾸준히 샀었습니다.)

음반시장의 변화와 함께 제 PC용 스피커도 변해갔습니다.

처음 사은품이 아닌 돈을 주고 산 스피커는 2004년 BonoBoss BOS-4000이라는 제품이었습니다. 당시 전자상가에 그래픽 카드를 사러 갔다, 청음점에서 앰프와 연결해 틀어놓은 음악의 깊은 베이스 울림이 마음을 사로잡아서 손에 잡은 그래픽카드를 내려놓고, 이 스피커를 집어서 왔습니다. 그리고 2010년 이 스피커가 망가져 더이상 사용 할 수 없게 되었을 때 정말 슬펐고, 스피커를 망가뜨린 어머님께 화를 많이 냈던 기억이 나네요. (3만5천원짜리 스피커가 뭐 그리 대단하다고.. 죄송합니다. 어머니)

스피커가 부서진 2010년 전후 부터 MP3는 19500hz를 지원하는 사이트들이 많아졌고, 음질은 여전히 낮았지만, 그나마 기존보단 2배 이상 좋아졌습니다. 그러면서 퍼진 언어가 'PC용 하이파이'였고 저는 대세에 맞춰 pc용 오디오셋을 구매했죠. 그때 구매했던 것이 Creative GIGAWORKS T40 II 라는 제품과 Creative 사운드 블라스터 X-Fi Surround 5.1 Pro 제품을 약 38만원을 주고 산 기억이 있습니다.

전 호구였습니다. 둘다 후회했습니다. 스피커는 베이스가 약하고 깊이가 없으며, 플라스틱 재질에서는 진동을 감싸주는 깊이있는 사운드는 전혀 없고 바로 튕겨내는 듯한 날카로운 소리만 났습니다. 에이징이요? 세월이 지나면 달라지겠지 하고 지금도 이 스피커 지금도 쓰는데 포기하고 살고 있습니다. 플라스틱 이나 금속 제품은 나무와 달리 에이징 효과가 없는 것 같다는 개인적인 생각입니다. 비싼값 못합니다. (당시 스피커 28만원 주고샀어요 사운드카드 포함 50만원인데 행사해서 38만원)

사운드 카드는 얼마전에 재활용으로 버렸는데, 나름 좋지만 종종 먹통이 되며, 음악을 듣다보면 2시간에 1,2회정도는 끊김이 발생합니다. 그리고 용량이 큰 음반을 들을때는 자주 끊겨요. 게다가 제 스피커는 2체널이지 5.1체널이 아니었습니다. 최근 메인보드 업그레이드 하면서 스팩을 보니 더 좋더군요. 바로 폐기 처분 했습니다.

차기에 사용할 스피커는 얼마전부터 BonoBoss BOS-H1 제품을 점지해두고 지금 쓰는 스피커가 고장나길 애타게 기다리고 있습니다. (이 제품을 여친몬에게 사줘보니 좋아요 역시 보노보스는 베이스가 탁월하고, 우드 프레임에서 나오는 깊은 음감이 있어서 저에게 잘 맞습니다. 이부분은 음역대가 아니라 MDF 소재가 내는 깊은 울림이 더 작용하는 것 같습니다. 다만 좀 커요 -_-;;; ) 들어본 녀석 중에 BonoBoss 보다 더 좋은건 지금 쓰는 SONY밖에 없습니다. 하지만 SONY로 가면 가격이... 흑.. 차라리 오디오를 사서 연결 해야까요? pc는 저에겐 종합 멀티미디어 기기니까요 ㅎㅎ;;; 누가 보노보스 말고 가성비 좋은거 알고 계시면 댓글좀 주시면 감사하겠습니다.

음향 시장의 변화 무선 코덱 전쟁

디지털 카메라나 TV영상 장치 등의 추세가 화면 크기를 키우는 것과 같이 음악에서도 크기를 키우는 것이 하나의 추세입니다. 이것을 선도하는 것이 현재의 SONY입니다. 소니는 이미 2015년 MDR 시리즈를 통해 고품질 음원을 지원하는 코덱과 기기들을 출시하기 시작하였습니다. 도토리들 끼리 '내가 고음질이야' 하던 음반 시장을 완전히 뒤집어 나홀로 4k급 음반과 장비를 공급하기 시작합니다. 그리고 소니의 태동은 무선 음향 기기 까지 이어집니다. 바로 LDAC이라는 초 대용량 무선 스트리밍 프로토콜을 통해서죠. 하지만 소니의 라이센스가 비쌌는지 소니 이외엔 아무도 쓰지 않습니다. 저도 당시 FLAC 이상의 HRA 음원을 듣기 위해 소니의 XBA-Z5와 NW-A15 제품을 구매했었죠. 하지만 블루투스는 성능이 떨어진다는 소문에 구매 하지 않았습니다. 

퀠컴의 습격 

2016년 1월에 출시된 aptX HD 라는 것이 있습니다. 퀠컴사에서 나온 코덱으로 LDAC보다는 처리 용량이 적지만, 나름 고품질 음원 코덱 중 하나 입니다. LDAC은 48Khz/24bit ~ 96Kh/24bit를 지원하고 aptX HD는 48Khz/24bit를 지원합니다. Khz는 처리할 수 있는 음역 그리고 bit는 처리할 수 있는 속도를 이야기 합니다. 둘 다 숫자가 높은 게 좋은 거라고 단순하게 생각하면 됩니다.

aptX HD는 LDAC에 비해 데이터 처리량은 절반이지만, 퀠컴이 스마트폰 CPU제조사 입니다. 그덕에 LG에서 사용하기 시작했습니다. 하지만 칩셋에 묶여 판매하다보니 사용률이 저조하기는 마찬가지 입니다.

소니의 반격 

2017년 3월 소니는 안드로이드 8.0 오레오 버젼 부터 LDAC 코덱을 지원하는 별도의 기기를 구매하지 않고도 사용할 수 있게 안드로이드에 라이센스를 통합한 모양입니다. 덕분에 안드로이드 사용자와 아이폰 사용자 모두 LDAC에 해당하는 음원을 접하는 일이 어렵지 않게 되었습니다.  아래 링크는 해당 기사입니다.
https://www.theverge.com/2017/3/21/15004562/sony-google-android-o-ldac-wireless-music

공교롭게도 제 폰이 오레오 8.0으로 업그레이드 된 LG nexus 5x II입니다. 기기의 변경 없이 최고 음질을 지원할 수 있는 환경이 되었습니다. 블루투스도 4.2를 지원하는 기기다 보니 고품질 음원을 지원하는 별도 장비가 없어도 됩니다. 곧 2년 만기가 차오는데 계속 써야 하나 참...;

존재감 없는 삼성 

삼성의 소프트웨어 개발 능력은 정말 심각한 수준으로 나빠 보입니다. 명함은 내밀었지만 완성되지 못했고, 오디오 업체인 하만을 인수한다고 합니다. 풍문으로는 아이콘X는 인코딩 성능이 전세계 최하위라 영화를 보면 화면에서 입모양 뻥긋하고 0.1초 후 귀에 소리가 들린다는 설이 있습니다소프트웨어 못 만드는 건 이제 모두가 아는 사실이 아닐까 합니다. (90년대 훈민정음 개발 후 아직까지 하청업체에 강매하고 있어요. 모두가 불편해서 공짜로 줘도 안쓰는 앱을 말이죠... 삼성폰만 사면 쓸데없이 거지같은 앱들이 추가 되는 것도 싫고.. 지우지도 못하게 하는 것도 지긋지긋 합니다.) 

위 코덱 전쟁의 내용은 이 링크를 타고 들어가 보시면 자세히 볼 수 있습니다.
http://www.kbench.com/?q=node/168469

블루투스 코덱에 대한 인코딩 성능 리뷰도 첨부합니다.
https://www.0db.co.kr/xe/REVIEW_USER/31781

안드로이드 8.0 이상 버전에서는 LDAC이 기본 탑재 되었다고 하지만, 일부 블루투스 칩은 LDAC을 지원하지 않을 수 있다고 합니다. LDAC 지원을 확인하는 방법을 기술합니다.

안드로이드 8.0 LDAC 확인법

LDAC 코덱 이야기가 나와서 사용하는 법을 짚고 넘어가도록 하겠습니다. 안드로이드 8.0의 설정-> 휴대전화 정보 -> 빌드 번호를 연타합니다. '개발자가 되었습니다' 라는 문구가 나올 때 까지요.
'개발자가 되었습니다' 혹은 '이미 개발자 입니다.' 라는 문구가 나오면 뒤로 가기 버튼을 한번 눌러 상위 메뉴로 나갑니다. 그럼 거기에 {} 개발자 옵션 이라는 것이 생깁니다.
개발자 옵션에 들어가서 아래로 쭈~욱 스크롤을 내리다 보면 블루투스 AVRCP 버전 등의 블루투스 관련 내용이 나옵니다.
코덱에 들어가서 LDAC을 확인할 수 있으면 사용 가능한 기기라고 합니다.


시장의 변화에 대한 대응할 수 있는 제품은 ? 

위 코덱 전쟁의 결과는 결국 시장의 분열로 나타날 것이고, 그에 따라 고품질 음원을 듣기 위해 다양한 코덱을 지원하는 블루투스 헤드폰이 필요하게 될 것입니다. 이것은 매우 단순한 논리입니다. 이놈 저놈이 서로 이게 고품질이야~ 하면서 음반을 내기 시작하면. 언젠가 시장에 승자 독식 체제가 나타나기 전 까지는 소비자만 괴롭습니다. 하.. 무선 헤드폰 하나 사는데 고민할게 너무 많죠? 왜 내가 남의 나라 전쟁까지 신경 써가며 음악을 들어야 하나.

그 고민을 쉽게 해결하자면 이렇습니다.

1. 다나와에 갑니다.

2. 상세검색에서 APTX-HD와 LDAC을 선택 합니다.

3. 나오는 목록이 2018.01월 현재 소니 밖에 없습니다.

SONY WH-1000XM2

SONY h.ear on 2 Wireless WH-H900N

SONY h.ear on 2 Mini Wireless WH-H800 

4. 소니가 맘에 들지 않는다면 LDAC을 뺍니다.

B&W PX

오디오테크니카 ATH-DSR7BT SOUNDREALITY

등의 추가 제품이 나옵니다.

5.낮은 가격 순으로 정렬합니다.

6.여전히 소니가 제일 쌉니다.

7.그냥 소니 삽니다.

소니 빠는 게 아닙니다. 현재로선 이거밖에 없습니다. 가성비 좋은 제품 사는 것이 쇼핑의 정석 아닙니까? 아... mp3만 들으실 거라면 저런 기기는 필요 없습니다. mp3 들으려고 HRA기기 사는 건 히말라야 장비 차고 뒷산 올라가는 거랑 같은 겁니다. 뒷산이 히말라야인데 제외하고요.. (그래도 일반 이어폰보다 mp3들을 때도 더 좋게 들립니다. DSEE HX 기능 덕에 그런 것 같습니다. 여친몬도 한번 사용해보더니 내심 사고싶어 합니다. 베이스와 공간감이 특히 맘에 든다더군요.)

개인적인 선호도는 귀에 걸치는 형태 보단 귀를 덮는 형태의 헤드폰을 선호합니다. 이유는 귓바퀴나 귓볼에 걸치면 귀에 압박이 가해지면서 귓볼에 염증이 생겼던 적이 있습니다. 그래서 그 이후 온이어를 쓰지 않게 되었지요.

가성비로 따지자면 WH-800모델이 제법 탐이 나지만 형태로 봐선 귓바퀴 위에 올라앉는 온이어 형태이기 때문에 저로선 사용할 수 없습니다.

따라서 제가 사용할 수 있는 900N과 1000XM2 두 개를 비교하여 표로 정리해 보았습니다.

전자 적 성능에서는 3%내외의 차이가 보입니다. 그리 큰 차이가 없는데 WH-1000XM2가 국내 구매 시 약 15~10만원 비싼데요. 이렇게 차이가 날만한 부분은 제일 아래 3개 부분인 것 같습니다.

기압계가 달려 있습니다. XM2는 사용자의 행동에 따라서 노이즈 컨트롤을 자동 제어해주는 부분이 있으며, 비행 시 기압에 따라서도 노이즈 컨트롤 / 음압을 자동 조정해준다고 합니다.

S-MASTER HX 는 디지털 앰프 필터라고 하는 기능인데 음향 왜곡을 최소화 하는 기능이라고 합니다. (SONY MUSIC PLAYER에는 대부분 달려있어서 부가적으로 필요하지 않습니다.)

제품 구성에 들어있는 부분에서 특히 가격 차이가 많이 발생할 것으로 보입니다. XM2만 있는 항목인 비행 중 사용을 위한 플러그 어댑터, 헤드폰 케이블이 금 도금 OFC 재질이라는 것 (무산소 동 케이블인데 이 플러그 케이블만 별도로 구매하면 10만원이 넘습니다. 그리고 플러그 연결 시 음질이 향상된다는 거죠)

이렇게 가격 향상의 요인을 보니, 가격 차이에 가장 큰 부분은 '1000XM2은 비행까지 고려했다. 그리고 플러그가 비싼 것이다.'로 요약 됩니다.

전 비행기를 그렇게 자주 탈 수 있는 종족이 아니기에 비행을 위한 투자는 필요 없으며, 플러그를 끼우기 귀찮아서 바꾸는 것이므로 플러그 재질도 중요하지 않습니다. 그렇다면 저에게 필요한 녀석은 딱 h900n 제품이 되겠습니다. 

가격은 국내 구매 시 h900n이 약37만원, 1000XM2가 약 47만원 입니다. 

직구 한다면 가격이 얼마나 달라질까요? 
900N 약 27만원 + 관세,부가세 18% + 배송비 약 2만 해서 약 34만원 , 
1000XM2의 약 35만원 + 관세,부가세 18% + 배송비 약2만 해서  약 43만원 입니다.. 
https://www.tokyorak.com/이나 ebay 모두 비슷합니다. 
(일본은 150$ 미국은 200$ 이상 관세/부가세를 냅니다. 두 나라 모두 초과 구간입니다.)

게다가 1년 무상as를 생각한다면 한국 구매 시 3,4만원 비싼 것은 문제가 되지 않아 보입니다.

또 한 가지 방법이 있는데요. 현찰이 두둑하다면 네이버 중고나라를 통해 구매할 경우 (가격이 좀 있는 만큼 안전 거래를 권장 드립니다.) h900n은 31만원 근처에서, 그리고 1000xm2는 41만원 선에서 미 개봉 제품을 어렵지 않게 구매할 수 있습니다.

WH-H900N 개봉 

T사에서 37에 주문하고 3일 만에 도착했습니다. (오후 3시 이전에 주문해야 한다고 했는데 11분 늦었다고 바로 발송을 다음날 하더라구요..)  일단 박스샷입니다.





박스는 그냥 깔끔하고, 군더더기 없는 모습. 그리고 매번 느끼는 거지만 시리얼 넘버가 박스 외부에 붙어있어 받은 사람 걱정되게 합니다. (그런 일은 없겠지만 누가 시리얼 넘버만 갖고 사은품 받아가면 어떻게 해요?) 

내부 박스는 겉 박스와 다르게 검은색의 단단해 보이는 모습이 든든합니다. (포장지 하나 없이 와서 내심 어디 아프진 않을지 걱정했답니다. 
검은 상자의 뚜껑을 열어보니 안쪽에 나름 솜으로 잘 덮여있어 충격은 많이 받지 않았겠지만 저기 보이는 회색 마찰 흔적을 보니 먼 길 오느라 고생 좀 했구나... 하고 맘이 아픕니다. 
헤드폰을 들어보면 잡다한 구성품이 몇 개 더 있습니다. 기대 이하의 파우치, 충전선, 이어폰선, 설명서. 전 모두 필요 없으니 그냥 상자에 넣어 봉인해야겠습니다. 
그래도 혹시나 파우치에 넣으면 좀 괜찮나 싶어 한번 넣어봤는데. 축구화인지 헤드폰인지 구분이 안가요... ㅠㅠ; 이부분 감점! (1000XM2 정도는 가야 좋은 파우치 주나봅니다.) 
헤드폰은 좌/우 구분이 쉽게 오른쪽 상단에 빨간색으로 R 이 선명하게 새겨져 있습니다. 그리고 헤드폰이 안쪽으로 15도 정도 틀 수 있게 되어있어서 착용할 때 얼굴 라인에 착~ 밀착합니다. 이 부분이 묘하게 기분 좋습니다. 귀에 덮는 순간 밀폐되는 느낌 ㅎㅎ;;; 가죽이 정말 부드럽고 느낌이 좋습니다. 
컨트롤은 오른쪽의 터치 컨트롤 이외에 왼쪽에는 컨트롤 버튼이 2개 달려 있습니다. 전원과 페어링을 담당하는 버튼 (OFF 상태에서 2초 누름 시 ON, 7초 누름 시 블루투스) 그리고 NC 컨트롤이 있는데 NC는 3가지 모드로 동작합니다. OFF, NC, AMBIENT 

AMBIENT 모드는 주변의 소리 중 일부를 들을 수 있는 기능, NC는 모든 소음 차단, OFF는 그냥 둘 다 꺼짐 상태입니다. AMBIENT 상태에선 외부 마이크를 통해 일부 소리가 내부로 전달 됩니다. (기본적으로 밀폐가 잘되어 다른 소리가 들리지 않아요..  친구들과 있을 때 작게 음악 들으면서 대화하는 용도 정도로는 매우 좋을 것 같습니다. 사무실 같은 곳에서 사용할 때도...)

아 그리고 휴대폰으로 사용할 때 SONY 헤드폰 어플을 받아야 합니다. (헤드폰 전송 유형을 LDAC으로 바꾸려면 필수입니다. 기본 SBC 모드로 헤드폰이 연동 됩니다. . ) 
요 어플 맨 밑에 가면 무선 코덱 설정하는 부분이 있습니다. 어려울 것 없으니 그냥 하시면 되요 ㅎㅎ;;. 그리고 또 sony 헤드폰 앱에서 노이즈 캔슬링 모드를 선택할 수 있습니다. 윈드 노이즈 감소로 사용해보니 바람이 거세게 부는 날도 풍절음은 들리지 않았습니다. 

개인적으로 Z5와 H900N을 비교하자면 음.. 역시 이어폰 보단 헤드폰 이란 생각이 드네요 둘 다 비슷하게 좋지만 출력과 저음이 H900N이 더 좋은 것 같다는 개인적 평가 입니다. 음질도 Z5와 비교했을 때 H900N이 더 풍부하게 느껴집니다. 
(무조건 LDAC 써야 할 것 같습니다. 그냥 MP3 듣는 것도 SBC랑 LDAC 차이가 심하네요. 뭐 SBC가 안 좋기도 하고 SONY라 호환이 안될 수 있기도 하고요 ㅎㅎ) 

LDAC을 사용할 때 끊긴다는 설이 많이 있는데, 실내와 운전 중 사용할 때는 발생하지 않습니다. 다만 스마트폰에서 여러가지 일을 (게임, 파일 복제 등의) 할 경우 소리가 끊기는 일이 발생합니다. LDAC의 문제가 아니라 스마트폰 CPU가 느려서 발생하는 것 같습니다. 

H900N은 음.. 현재로선 제스처 컨트롤이 플레이어가 열려있는 상태에서만 사용 되는 것이 약간의 문제점으로 자리잡네요 ㅎㅎ ; 플레이어가 화면에 떠있을때만 음악 재생/멈춤 넘기기가 됩니다. 볼륨은 아무때나 잘되구요. 이상입니다. 

긴 글 읽어주셔서 감사합니다.