분류

2018년 4월 26일 목요일

7.무능함의 연결고리가된 직장에 절망했다.

이리 저리 직장을 옮겨 다니면서 15년을 살다 보니. 각 직장들에서 보이는 것이 있습니다. 바로 직장의 조직 문화죠. 직접 고용돼서 다녀본 직장만 5곳, 그리고 파견으로 간접 경험을 포함하면 약 20 여 곳의 직장 문화를 접하게 되었습니다. 그 중 '망조' 혹은 '발전이 없는' 회사에 대한 이야기와 그 조직 문화에 대한 이야기를 하려 합니다.

물론 이전에 이야기한 학연 지연 혈연에 사로잡힌 회사도 발전이 없는 회사에 속하지만, 그것 이외에도 여러가지 더 있습니다. 제가 주로 소프트웨어 업종에서 일을 하다 보니 소프트웨어 업종에 대한 비평이 될 수 도 있습니다. 하지만 회사의 구조는 업종을 불문하고 유사하므로 어디에 가나 유사 할 것이라 생각 됩니다. 

망하는 회사? 부흥하는 회사? 당연히 사람이라면 자기가 다니는 회사가 성공적인 사업 모델로 많은 수익을 창출하고 부흥하는 회사였으면 좋겠지만, 아쉽게도 매년 생겨나는 회사 중 80%는 망합니다. 그리고 나머지의 80%도 10년을 넘기지 못하고 망합니다. 이런 징조는 대체로 회사 문화에서 찾아볼 수 있습니다. 

회사라는 것은 결국 회사의 구성원인 사람으로 채워지고, 사람으로 운영되며, 사람이 일을 합니다. 물론 자동화가 잘 되어 로봇이 일을 할 수 있겠지만, 그것을 운영하는 일은 역시 사람이 합니다. 

시스템 개발자의 관점으로 봤을 때 모든 문제는 항상 사람이 일으킵니다. 그리고 그 사람이 만드는 것이 조직과 그 조직 문화지요. 조직 문화 개인과 회사의 발전을 저해하는 요소들이 있는데 오늘은 그것에 대해 기술해보려 합니다. 그리고 그 작은 것이 무능함의 연결 고리가 되어 가는 이야기도요. 

"강한 자가 오래 살아남는 게 아니라 오래 살아남은 자가 강자다. "

한때 유행했던 말이죠. 하지만 이것이 문제의 하나라고 생각해 보신 적 있으신가요? 관점을 바꿔봅시다.

자. 강한 자와 오래 살아남은 자의 차이를 말씀드리겠습니다. 물론 자신이 다니는 직장이 전세계 최고고 대우도 좋아서 누구나 미칠 듯 오래 다니고 싶은 회사라면 이야기가 다를 수 있습니다. 하지만 일반적인 회사에서 오래 살아남은 자는 어떤 '사람' 일까요?

일단 지금 다니고 계신 회사, 그리고 급여 체계. 만족 하십니까?

전 만족하지 못합니다. 제 욕심이 있고 현실은 항상 그 욕심을 만족 시켜주지 못합니다. 그렇다면 그것을 만족 시켜 줄 방안은 무엇인가? 바로 이직 혹은 창업입니다. (전 창업에 두 번 실패했습니다. )

그런데 욕심도 없이 한 회사에 오래 남았다? 영혼을 바칠 만큼 좋은 회사입니까? 과연 오래 살아남은 분이 강해서 살아남은 걸 까요? 모험을 할 용기가 없는 걸까요? 혹은 갈 곳이 없는 걸까요? 뭐 알 수 없는 각자의 사정이 있겠지만, 대부분의 직장인은 자신의 회사에 만족하지 않는 상태 일 것입니다. 이 관점에서 본다면 한 회사에서 오래 살아남은 사람은 절대로 강자가 될 수 없습니다.

오래 살아남은 사람들에 대한 비평을 하자면 이렇습니다.
1. 이직하기엔 위험도가 높고 새로운 일을 할 자신이 없다.
2. 오라는 곳이 있어도 지금 다니는 곳 보다 대우가 좋지 않다.
3. 오라고 하는 곳 도 없고, 갈 곳도 없다.
4. 가족을 부양해야 해서 이직의 위험을 안을 수 없다.

위 몇 가지 중 하나 일 것입니다. 물론 전부가 그런 것은 아닙니다.

이런 형태로 직장에 남아있는 분들이 많으면 발생하는 문제가 있습니다. 바로 고인 물이 썩듯 사람이 썩어가는 문제입니다. 유유상종 하면서 자신들끼리 직장에서 쫓겨나지 않기 위한 관계를 만들기 시작 하니까요. 편 가르기의 시작이 이런 부분에서 시작됩니다.

직장 내 자기편을 만들어 서로 밀어주고 당겨주는 줄타기 문화의 시작점이 생겨나게 되는 거죠. 하지만 내 편을 너무 감싸서 그 잘못을 헤아리지 못한다면 회사에 망조가 들기 시작하는 겁니다. 회사엔 탄핵 제도가 없으니까요 ㅎㅎ;;

대게의 회사들은 필요에 의해 태어납니다. 그리고 수요가 폭발적으로 몰리는 분야는 실력 여하에 막론하고, 수요에 의해 살아남을 수 있는 구조가 형성되죠. 한국에서는 IT 분야가 그런 일이 많았습니다. 그리고 제가 속해있는 분야이기도 합니다.

수요가 폭발적이다 보니, 실력 없는 개발자 심지어 개발을 전혀 할 줄 모르는 사람도 많습니다. 인력이 많이 필요하다 보니 화장품 팔던 분이 팀장을 맡는 경우도 있습니다. 전문성이 없죠. 그런데 이런 전문성 없는 분들이 어떻게 이 분야에 입문 하느냐? 대체로 회사 중진들의 친척 혹은 유사 관계에 있는 분들입니다. 요즘 이슈가 되고 있는 인사 청탁으로 많이 들어오시는 거죠.

그렇다면 이 분들은 어떻게 회사에서 실적을 내느냐? 간단하죠. 할 줄 아는 것이 없으니 세 가지 입니다.

1. 팀원들을 갈궈서 모든 안건을 모아 그 중 괜찮은 안을 뽑아 잘 진행한다.
2. 팀원들의 실적을 가로채서 내 실적을 삼는다.
3. 그냥 인맥으로 근근히 먹고 산다.

1번 매우 훌륭합니다. 하지만 적절한 보상을 줄 수 없는 사람이라면 팀원들 입장에선 훌륭하지 않습니다. 리더는 리딩을 할 수 있어야 합니다. 하지만 1번의 경우 지나치게 팀원에게 의존적입니다. 이것이 문제가 되느냐? 되죠. 1번 팀에 신입 사원 만 존재 할 경우 90% 확률로 팀이 무너집니다. 그리고 결론 적으로 봤을 때 팀에 기여하는 것이 거의 없음에도 팀의 공을 같이 가져가는 형태가 되어버리죠. 그래도 뭐 십시일반이라 생각하면 견딜만합니다. 뭐라도 하긴 하는 거니까요.

2번 악질입니다. 많이 경험했습니다.
연구를 하고 싶어 국가에서 연구비 지원을 받아왔습니다. (해보신 분 들은 알겠지만, 연구비 지원 받는 것이 쉬운 일이 아닙니다.) 그리고 전 1년 내내 연구만 하고 싶었죠. 하지만 팀장이 '이거 비슷한 남에 프로그램 복제하면 되겠네.' 하고 연구의 성격을 바꾸고 저는 외국 프로그램 번역만 하고 실적은 팀장이 가져갔습니다.

하고 싶던 연구를 못하게 된 저는 10년 만에 처음 개발자가 된 것을 후회했습니다.

해당 연구의 의의는 생산성 향상에 도움이 되는 일이었습니다. 저는 연구할 기회를 잃었고, 회사는 발전할 기회를 잃었죠. 당장의 실적에 눈이 먼 팀장 때문에.

3번은 뭐 회사 전체에 민폐만 끼치지만 개개인으로 봤을 때 큰 문제가 되지 않습니다. 하지만 종종 3번에 해당하는 분이 전체 구성원의 60%가 넘어가는 경우가 있습니다. 이럴 경우 심각한 문제가 초래되는데, 인맥으로 근근히 먹고 살려면 사장 친인척 쯤 되어야 합니다. 갑질이 장난이 아니죠. 대한항공만 갑질 있는 것 아닙니다.

그리고 실적도 없고, 능력도 없는 이런 분 월급은 열심히 일하는 다른 회사원들이 벌어오는 돈에서 지급 되는 겁니다. 이렇게 될 경우 급여 수준이 다른 회사보다 현저히 낮아져 구성원들의 사기가 심하게 저하됩니다. 우리가 공산주의 국가에 사는 건 아니잖아요?

이런 상사들의 갑질 체계를 버티며 고된 회사 생활을 이어가는 사람들이 세상에 많습니다. 그리고 어느 순간 그 체계가 질려 이직을 하게 되죠. 자신의 능력을 좀 더 아껴주고 챙겨주는 회사를 찾아가게 마련입니다.

이 관점으로 보았을 때. 과연 살아남은 자가 강한 자인가요? 아니면 능력 없는 자인가요?

그리고 여전히 살아남아 있는 사람들은 어떤 의욕을 갖고 살아갈까요?

자신의 능력에 대한 가치가 평가 절하되어 돌아온다면, 그 누구도 기뻐할 사람은 없습니다. 대다수의 사람은 의욕을 잃게 되겠죠. 이 기간이 길어질수록, 노력이 보상받지 못하는 기간이 길어질수록 사람은 나태해지고 도태되게 마련입니다. 그리고 기나긴 시간의 터널을 지나 결국 상사의 무능함을 이어받아 똑같은 상사가 되어 있을 것입니다.

이런 구조를 갖고 있는 회사의 높으신 분들은 반성을 좀 해야지요. 자신과 지인들의 안위를 위해 스스로 회사를 망치고 계신 겁니다.

이러한 무능함의 연결고리를 끊으려면 정당한 인사 평가 체계, 노동에 대한 정당한 대가 지급, 사원 개개인에 대한 적절한 평가가 이루어 지지 않으면 안됩니다. 그리고 댓가가 정당하지 않을 경우 맞설 수 있는 노조도 필요합니다. 하지만 애석하게도 IT는 제대로된 노조도 거의 없고, 인사팀을 운영하는 회사도 적죠.

그렇기에 능력있는 사람들이 능력 없는 사람들을 위한 무보수 야근을 여태껏 하면서 한 번도 제대로 된 목소리를 내지 못했고, 이명박근혜 10년간 매년 일당 0원~500원이 오르는 체제를 말 한마디 못한 채 견뎌내야 했죠. 최저 시급도 500원씩은 올랐는데, IT 개발자 노임단가는 일당이 그 정도도 오르지 않았습니다.

미래 산업의 선두에 IT가 있다는 말은 하지만, 근로 구조에서는 제법 바닥에 가까이 있습니다.

이야기 하다보니 어째서인지 IT의 취약점으로 들어갔네요. 물론 이런 구조는 IT가 유독 심할 뿐이지 다른데도 비슷 합니다. 더 새기전에 이만 마무리 해야겠네요.

무능함의 연결고리가 된 직장. 스스로 그 연결 고리가 되고 있지 않은지, 혹은 그 연결 고리를 당연하게 받아들이고 있지 않은지 한번 모두가 뒤를 돌아볼 때 입니다.

이상입니다.
읽어주셔서 감사합니다.

한국 사회에 절망했다!
1.고교 교육에 절망했다.
2.대학 교육에 절망했다.
3.고용 시장에 절망했다.(상)
4.고용 시장에 절망했다.(하)
5.술독에 빠진 사회에 절망했다.
6.학연, 지연, 혈연으로 뭉친 사회에 절망했다.
7.무능함의 연결고리가된 직장에 절망했다.

한국 사회에 절망했다!

한국 사회에 살아가는 구성원으로써 교육, 취업, 경제, 정치 등에 이르는 여러 문제들에 직면하면서 느껴왔던 절망감과 부조리한 사회 현상에 대해 한번 되짚어보는 계기가 개인적으로 필요했기에 학창 시절부터 여러 기억들을 순서대로 나열해보려 합니다.

또한 그때 당시에 느꼈던 순간 순간의 절망으로 자리 잡았던 여러 불합리했던 요소들에 대해 기술하고, 원인을 분석해보려는 자그마한 노력을 하는 중입니다. 또한 개인적으로 불합리에 맞서 왔던 이야기들을 기술함으로써, 제가 경험했던 사회에서 개선돼야 할 점들에 대해 이야기 해보고 싶습니다.

헬조선 최근 2,3년간 유행어처럼 들리는 이 단어의 원인은 분명 현재 시대에 발생한 것이 아니라 10여년 전부터 사회의 곪은 부분들이 터지고 그에 따른 피해가 여러 곳에서 발생하고 있기에 이런 단어가 유행하고 있는 것 같습니다. 어쩌면 세상 사람 대부분이 헬조선을 칭하기 전에 저와 비슷한 절망에 찬 경험 들을 하지 않았을까 합니다. 개인적인 생각으로는 밑바닥을 제대로 알아야만 앞으로 어느 곳을 개선해야 되는 지를 알 수 있다는 주의 이기 때문에 제가 본 사회의 가장 낮은 단면을 들여다 보는 작업이 되지 않을 까 합니다.

뭐 그에 따라 페이지 제목을 '헬조선의 시작 점을 찾아서' 혹은 '위기의 헬조선을 누가 만들었는가?' 같은 문구로 변경하는 일이 발생할 수도 있겠지요, 하지만 헬조선은 어느 개인이 아닌 썩어버린 전체의 집합 소 같은 곳이기에 마녀사냥으로 해결될 문제도 아니고, 개인들이 각성하여 스스로 부정에 맞서가며 살아가는 것 이외엔 방법이 없을 것 같습니다.

-앞으로 이어나갈 이야기는 각 장을 클릭하면 해당 페이지로 전환되도록 되어있습니다.-
한국 사회에 절망했다!
1.고교 교육에 절망했다.
2.대학 교육에 절망했다.
3.고용 시장에 절망했다.(상)
4.고용 시장에 절망했다.(하)
5.술독에 빠진 사회에 절망했다.
6.학연, 지연, 혈연으로 뭉친 사회에 절망했다.
7.무능함의 연결고리가된 직장에 절망했다.

2018년 4월 13일 금요일

MYC-JA5D44 보드 linux 빌드하기

MYC-JA5D44라는 보드에 kernel을 변경해야 하는데 만만치 가 않습니다. 제조사에서 이미지나 SDK는 물론 설치 프로그램조차 제공하지 않으면서 설명서라고 PDF파일만 제공하고 있으니, 일이 쉽게 풀리지 않을 것 같습니다.

보드를 부팅하고 보니 제일 먼저 눈에 들어오는 게
Poky (Yocto Project Reference Distro) 1.7.1 sama5d4ek /dev/ttyS0

Yocto를 이용해 build 하면 된다는 것 정도는 알려줍니다. 아래는 사이트 링크 입니다.
https://www.at91.com/linux4sam/bin/view/Linux4SAM/SoftwareTools#Yocto_Project_SDK
간략하게 JA5D44 보드에 적용할 수 있는 녀석들만 보자면 branch 별로 하나씩 있습니다. branch의 이름이 yocto project version별로 나뉘어 있다고 생각됩니다.
Yocto 2.2.2 - MORTH,           Yocto 2.1.1 - KROGOTH
Yocto 2.0.1 - JETHRO            Yocto 1.7.1 - DIZZY
일단 현재 버전이 Yocto 1.7.2 버전이고, kernel 이3.0.2가 아닌 3.18.0 버전인데 kernel 버전별로 지원해주는 부분은 없는 것 같습니다. github의 배포 정보를 봐도 kernel과 관련된 공지는 없습니다. 사용자가 다 알아서 하라는 것 같습니다.

그리고 여태 지나왔던 보드와 다르게 Yocto를 통한 통합된 형태의 지원 체계가 아닌 개별 작업을 해야 하는 형태를 갖고 있습니다. Yocto는 사용하지만 다른 보드들과 달리 소스코드가 통합이 아닌 분리 제공 되고 있습니다.

본 문서는 OpenEmbedded /Yocto Project / Poky:build from source 문서를 한글화 한 것입니다.

빌드 절차 

지원 기기

- SAMA5D2 product family / sama5d2-xplained, sama5d27-som1-ek-sd
- SAMA5D4 product family / sama5d4ek, sama5d4-xplained
- SAMA5D3 product family / sama5d3xek, sama5d3-xplained
- AT91SAM9x5 product family (AT91SAM9G15, AT91SAM9G25, AT91SAM9X25, AT91SAM9G35 and AT91SAM9X35) / at91sam9x5ek
- AT91SAM9RL / at91sam9rlek
- AT91SAM9G45 / at91sam9m10g45ek

소스

URI: git://github.com/linux4sam/meta-atmel.git
URI: https://github.com/linux4sam/meta-atmel.git
Branch: morty

종속성

This Layer depends on :
- meta-openembedded
URI: git://git.openembedded.org/meta-openembedded
URI: http://cgit.openembedded.org/meta-openembedded/
Branch: morty

선택사양

- meta-qt5
URI: git://code.qt.io/yocto/meta-qt5.git
URI: http://code.qt.io/cgit/yocto/meta-qt5.git/
Tag: v5.9.1

빌드 절차 

1. morth 분기의Yocto / poky 레포지토리를 복제합니다. (kernel 버전이 가장 낮아서 선택)
$ git clone git://git.yoctoproject.org/poky -b morty

2. morth 분기의 meta-openembedded git을 복제합니다.
$ git clone git://git.openembedded.org/meta-openembedded -b morty

3. meta-qt5 git을 복제합니다.
$ git clone git://code.qt.io/yocto/meta-qt5.git
$ cd meta-qt5
$ git checkout v5.9.1
$ cd ..

4. morth 분기의 메타 레이어를 복제합니다.
$ git clone git://github.com/linux4sam/meta-atmel.git -b morty 


※ 일부 환경에서는 Python 3.4 버전이 설치되어 있지 않을 수 있습니다. 
$ sudo add-apt-repository ppa:deadsnakes/ppa

$ sudo apt-get update; sudo apt-get install python3.4 
python3.4 --version
$ alias python3=python3.4
$ alias python=python3.4
설치를 해도 동일 오류가 발생할 경우 
<poky설치위치>/scripts/oe-buildenv-internal 파일을 확인하세요 

5. poky 디렉토리에 들어가 빌드 시스템을 구성하고 빌드 프로세스를 시작하세요

5-1. 빌드 디렉토리 초기화
$ source oe-init-build-env build-atmel 

5-2 빌드 환경 설정 (BB-PLAYER설정)
vim conf/bblayers.conf

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../../..')}"

BBLAYERS ?= " \
${BSPDIR}/poky/meta \
${BSPDIR}/poky/meta-poky \
${BSPDIR}/poky/meta-yocto-bsp \
${BSPDIR}/meta-atmel \
${BSPDIR}/meta-openembedded/meta-oe \
${BSPDIR}/meta-openembedded/meta-networking \
${BSPDIR}/meta-openembedded/meta-python \
${BSPDIR}/meta-openembedded/meta-ruby \
${BSPDIR}/meta-openembedded/meta-multimedia \
${BSPDIR}/meta-qt5 \
"

BBLAYERS_NON_REMOVABLE ?= " \
${BSPDIR}/poky/meta \
${BSPDIR}/poky/meta-poky \ ,
"

5-3 local.conf 편집
local.conf 파일을 열어보면 각 보드의 이름이나 환경설정이 주석처리 되어 있습니다. 그중 자신의 환경에 맞는 환경설정의 주석을 해제 해주어야 합니다. 대체적인 설명은 local.conf 파일 내에 있습니다.


맞는 보드가 없을경우 qemux86
<build 위치>$ find ../../* -name *보드명*.conf
예 : $ find ../../* -name *sama5d4*.conf
../../meta-atmel/conf/machine/sama5d4-xplained-sd.conf
../../meta-atmel/conf/machine/sama5d4-xplained.conf

../../meta-atmel/conf/machine/sama5d4ek.conf

설정 예제 
vim conf/local.conf
[...]
MACHINE ??= "sama5d4-xplained"  ※ 현재 왜인지 sama5d4-xplainted는 빌드 오류 발생
[...]
DL_DIR ?= "your_download_directory_path" 
[...]
PACKAGE_CLASSES ?= "package_ipk"
[...]
USER_CLASSES ?= "buildstats image-mklibs"


성능 향상이 필요할경우 "poky-atmel" 배포본을 사용하세요 
DISTRO ?= "poky-atmel"
하위 설정에 대해 잘 알지 못 하는 경우 머신 네임만 넣으면 기본값 실행 됩니다. 

local.conf 내용을 한글화 해 보았습니다.
#이 파일은 로컬 설정 파일이며 모든 로컬 사용자 설정이 잇는 곳입니다. 이 파일의 주석은 사용자가 변경할 수 있는 옵션에 대한 기본 지침을 제공하지만 거의 모든 구성 옵션을 이 파일에서 변경할 수 있습니다. 좀 더 확장적인 사용자 환경을 위해선 local.conf.extended를 확인하세요.

#이 파일에 배치할 수 있는 구성의 다른 예가 들어있지만 처음에는 필요하지 않을 가능성이 높습니다.



#'#' 으로 시작되는 행은 주석으로 처리되며 경우에 따라 기본값이 사람들 예제 구문을 표시하는 주석으로 제공됩니다. 이 옵션을 활성화 하려면 # 문자를 제거 하고 필요에 따라 변수를 변경해야 합니다. 

###대상 보드 선택 ###
# 빌드 대상으로 지정할 특정 시스템을 선택해야 합니다. QEMU  에뮬레이터에서 부팅 및 실행할 수 있는 에뮬레이트 된 머신을 선택할 수 있습니다. 
#MACHINE ?= "qemuarm"
[...]
# 데모 용으로 포함 된 하드웨어 보드 대상 시스템은 다음과 같습니다. 
#MACHINE ?= "beaglebone"
[...]
# 다른 보드가 선택되지 않은 경우 기본 보드를 qemux86으로 설정합니다. 
MACHINE ??= "qemux86"

###다운로드 위치###
처음 빌드하는 동안 시스템은 다양한 업스트림 프로젝트에서 많은 다른 소스 코드 타르볼(압축파일)을 다운로드 합니다. 네트워크 연결이 느린 경우 특히 시간이 걸릴 수 있습니다. 이들은 모두 DL_DIR에 저장됩니다. 다시 빌드 할 때 이 디렉토리를 보존하여 이 후속 빌드의 속도를 높일 수 있습니다. 이 디렉토리는 동일한 시스템의 여러 빌드 간 안전하게 공유할 수 있습니다. 
#기본 설정은 빌드 디렉토리 인 TOPDIR 아래의 다운로드 디렉토리 입니다. 
#

#DL_DIR ?= "${TOPDIR}/downloads"

###공유 상태 파일을 저장할 위치###
# BitBake에는 이 전에 빌드 된 출력을 기반으로 빌드를 가속화 하는 기능이 있습니다. 이는 캐시 오브잭트로 간주될 수 있는 "공유 상태"파일을 사용하여 수행되며 옵션은 파일이 저장되는 위치를 결정합니다. 
#이 디렉토리를 손상되지 않도록 TMPDIR을 삭제할 수 있으며, 설정을 변경하지 않으면 빌드가 이 파일에서 재생성됩니다. 구성이 변경되면 상태가 여전히 유효한 공유 상태 파일 만 사용됩니다. (체크섬을 사용하여 완료됨)
기본 값은 TOPDIR 아래에 있는 sstate-cache 디렉토리 입니다. 
#SSTATE_DIR ?= "${TOPDIR}/sstate-cache"

###빌드 출력을 배치 할 위치###
#이 옵션은 빌드 작업의 대부분을 수행해야 하는 위치와 BitBake가 임시 파일을 저장하고 출력해야 하는 위치를 지정합니다. 여기에는 수 기가바이트의 하드 디스크 공간을 사용 할 수 있는 많은 응용 프로그램과 툴체인의 추출과 컴파일이 포함 됩니다. 
#기본 값은 TOPDIR 아래 TMP디렉토리 입니다. 
#TMPDIR = "${TOPDIR}/tmp"

###기본 정책 구성###
# 배포 설정은 어떤 정책 설정이 기본값으로 사용되는지 제어합니다. 기본 값은 일반 Yocto 프로젝트 사용에 적합합니다. 적어도 초기에는 기본 값 입니다. 궁극적으로 사용자 정의 정책을 작성할 때 사람들은 이러한 기본값을 '서브 클래스'화 하려는 경향이 있습니다. 
DISTRO ?= "poky"
#하위 클래스의 예로서 "bleeding" 경계 정책 구성이 있습니다. 많은 버전이 업스트림 소스 제어 시스템의 순수한 최종 코드로 설정 됩니다. 여기서는 예제로 언급했지만 대부분의 사용자에게는 유용하지 않습니다. 
# DISTRO ?= "poky-bleeding"

###패키지 관리 구성###
이 변수는 사용할 패키징 형식을 나열합니다. 여러 패키지 백앤드를 동시에 활성화 할 수 있으며 변수에 나열된 첫 번 째 항목은 루트 파일 시스템을 생성하는 데 사용됩니다. 옵션은 다음과 같습니다. 
- 'package_deb'    데비안 스타일 deb파일 패키지
- 'package_ipk'     ipk사용자 패키지 (데비안 스타일 임베디드 패키지 관리자)
- 'package_rpm'    rpm 스타일 패키지 
#예: PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk"
#우리는 RPM패키지를 기본으로 합니다. 
PACKAGE_CLASSES ?= "package_rpm"

###SDK 타겟 아키텍처###
#이 변수는 SDK 항목을 빌드하기위한 아키텍처를 지정합니다. 즉, 빌드를 실행중인 시스템 이외의 아키텍처(x86_64 호스트에 i686패키지 빌드) 용 SDK패키지를 빌드 할 수 있음을 의미합니다. 지원되는 값은 i686및 x86_64 입니다. 
#SDKMACHINE ?= "i686"

###추가 패키지 구성 기본 값###
#EXTRA_IMAGE_FEATURES 변수는 생성 된 이미지에 추가 패키지를 설치할 수 있게 합니다. 일부 옵션은 특정 이미지 유형에 자동으로 추가 됩니다. 변수에는 다음 옵션이 포함될 수 있습니다.
#  "dbg-pkgs"  : 설치된 모든 패키지에 대해 -dbg 패키지를 추가 
                      (디버깅/프로파일링을 위한 심볼 정보 추가) 
#  "dev-pkgs"  : 설치된 모든 패키지에 -dev패키지 추가 
                      (이미지의 libs에 대해 개발하고 싶을 때 유용합니다. )
#  "ptest-pkgs" : 모든 ptest 기능 패키지에 대해 -ptest 패키지 추가 
                      (패키지 테스트 스위트를 실행하려는 경우 유용함) 
#  "tools-sdk"   : 개발 도구 (gcc, make, pkgconfig 등) 추가 
# "tools-debug": 디버깅 도구 (gdb, strace) 추가 
# "eclipse-debug": Eclipse 원격 디버깅 지원 추가 
# "tools-profile": 프로파일 링 도구 (oprofile, lttng, valgrind) 추가 
# "tools-testapps": 유용한 테스트 도구 (ts_print, aplay, arecord 등) 추가 
# "debug-tweaks": 개발에 적합한 이미지 만들기 
# ssh 루트 액세스에는 빈 암호가 있습니다. 
# 여기에서도 사용할 수있는 다른 응용 프로그램 타겟이 있습니다. 자세한 내용은 
# meta / classes / image.bbclass 및 meta / classes / core-image.bbclass를 참조하십시오. # 기본적으로 디버깅을 조정할 수 있습니다.
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"


###추가 이미지 기능###
# 다음은 이미지를 빌드 할 때 사용할 추가 클래스 목록입니다.
# 추가 기능을 사용합니다. 이 변수에 포함될 수있는 몇 가지 옵션이 있습니다.
# are :
# - 'buildstats'빌드 통계 수집
# - 이미지의 공유 라이브러리 파일 크기를 줄이기위한 'image-mklibs'
# - 파일 시스템 이미지를 미리 링크하기 위해 'image-prelink'
# - 호스트 시스템 침입 탐지를 수행하기위한 'image-swab'
# 참고 : mklibs와 prelink 둘 다 나열한다면, mklibs가 prelink 전에 있는지 확인하십시오.
# 참고 : 주어진 이미지에 mklibs를 명시 적으로 활성화해야합니다 (local.conf.extended 참조).
USER_CLASSES? = "buildstats image-mklibs image-prelink"


###이미지 런타임 테스트###
#빌드 시스템은 루트 파일 시스템이 생성 된 후 qemu (에뮬레이터)에서 부팅 가상 머신 이미지를 테스트하고 해당 이미지에 대해 테스트를 실행할 수 있습니다. 이 행의 주석 처리를 해제하려면이 행을 주석 처리하십시오. for class / testimage (-auto) .bbclass를 참조하십시오. 

# 세부 사항. 
#TEST_IMAGE = "1"

###대화 형 쉘 구성###  
# 특정 상황에서 시스템이 사용자로부터 입력을 요구할 수 있으며이를 위해 대화 형 쉘을 시작할 수 있습니다. 빌드가 완료되었으므로이 작업을 수행해야합니다. 
# multithreaded이고 하나 이상의 병렬 프로세스가 사용자의주의를 요할 수도있는 경우를 처리 할 수 ​​있어야합니다. 기본값은 작동하는 터미널 유형을 찾기 위해 사용 가능한 터미널 유형을 반복하는 것입니다. 
#이 경우가 발생할 수있는 경우는 devshell이나 kernel menuconfig를 사용하여 적용 할 수없는 패치를 해결할 때입니다 
# 지원되는 값은 auto, gnome, xfce, rxvt, screen, konsole (KDE 3.x 만 해당), none 
# 참고 : 현재 Konsole 지원은 새로운 Konsole 버전의 작동 방식으로 KDE 3.x에서만 작동합니다. 
# OE_TERMINAL = "auto" 
# 기본적으로 대화 형 패치 확인을 비활성화합니다 (대신 작업이 실패합니다). PATCHRESOLVE = "noop"


###빌드 중 디스크 공간 모니터링###

# 빌드하는 동안 디스크 공간을 모니터하십시오. 키 빌드 위치 (TMPDIR, DL_DIR, SSTATE_DIR)에 1GB 미만의 공간 또는 100,000 개 미만의 inode가 있으면 빌드를 정상적으로 종료하십시오. 100MB 또는 1K inode가 적 으면 빌드를 강제 중단하십시오. 그 이유는 완전히 공간 밖으로 실행하면 파일을 손상시킬 수 있고 쉽게 복구 할 수없는 방법으로 빌드를 손상시킬 수 있기 때문입니다. / tmp를 모니터링 할 필요가 있습니다. 공간이 남아 있지 않으면 빌드가 실패하여 매우 복잡한 오류가 발생합니다.

BB_DISKMON_DIRS ?? = "\
     STOPTASKS, $ {TMPDIR}, 1G, 100K \
     STOPTASKS, $ {DL_DIR}, 1G, 100K \
     STOPTASKS, $ {SSTATE_DIR}, 1G, 100K \
     STOPTASKS, / tmp, 100M, 100K \
     ABORT, $ {TMPDIR}, 100M, 1K \
     ABORT, $ {DL_DIR}, 100M, 1K \
     ABORT, $ {SSTATE_DIR}, 100M, 1K \
     ABORT, / tmp, 10M, 1K "


###다른 위치의 공유 상태 파일###

# 위에서 언급했듯이 공유 상태 파일은 빌드 시간을 단축하는 데 사용할 수있는 미리 작성된 캐시 데이터 객체입니다. 이 변수는 데이터 자체를 작성하기 전에 이러한 오브젝트에 대한 다른 미러 위치를 검색하도록 시스템을 구성하는 데 사용될 수 있습니다.
#
# 이것은 파일 시스템 디렉토리 나 http 나 ftp와 같은 원격 URL이 될 수 있습니다. 이들은 이전 빌드의 결과를 sstate-cache로 (아마도 다른 머신에서) 포함 할 것이다. 이 변수는 fetcher MIRRORS / PREMIRRORS처럼 작동하며 캐시 위치를 가리켜 공유 객체를 확인합니다.
# 참고 : 미러가 SSTATE_DIR과 동일한 구조를 사용하는 경우 아래 예와 같이 PATH를 끝에 추가해야합니다. 이것은 디렉토리 구조 내에서 올바른 경로로 대체됩니다.
#SSTATE_MIRRORS ?= "\
#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \
#file://.* file:///some/local/dir/sstate/PATH" 


###Qmenu 구성###
# 기본적으로 qemu는 그래픽 출력을 볼 수있는 내장 된 VNC 서버로 빌드합니다. 아래 두 줄은 SDL 백엔드도 활성화합니다. libsdl-native가 만든 최소 libsdl 대신 호스트의 libSDL을 사용하려면 아래의 ASSUME_PROVIDED 행의 주석 처리를 제거하십시오. PACKAGECONFIG_append_pn-qemu-native = "sdl" PACKAGECONFIG_append_pn-nativesdk-qemu = "sdl" #ASSUME_PROVIDED + = "libsdl-native" 

 # CONF_VERSION은 build / conf / changes가 호환되지 않을 때마다 증가하고 생성 될 때이 파일의 버전을 추적하는 데 사용됩니다. 이것이 당신에게 아무 의미도 없다면 이것은 무시해도 좋습니다. CONF_VERSION = "1"


이미지 빌드 및 결과

bitbake core-image-minimal
빌드 시간은 약 2시간 가량 소요됩니다. 

빌드 결과 
$ ls tmp/deploy/images/sama5d4-xplained/
at91bootstrap.bin
at91bootstrap-sama5d4_xplained.bin
BOOT.BIN
core-image-minimal-sama5d4-xplained-20180410090749.rootfs.manifest
core-image-minimal-sama5d4-xplained-20180410090749.rootfs.tar.gz
core-image-minimal-sama5d4-xplained-20180410090749.rootfs.ubi
core-image-minimal-sama5d4-xplained-20180410090749.rootfs.ubifs
core-image-minimal-sama5d4-xplained.manifest
core-image-minimal-sama5d4-xplained.tar.gz
core-image-minimal-sama5d4-xplained.ubi
modules--4.9+git0+973820d8c6-r0-sama5d4-xplained-20180410090749.tgz
modules-sama5d4-xplained.tgz
sama5d4_xplained-nandflashboot-uboot-3.8.9.bin
ubinize-core-image-minimal-sama5d4-xplained-20180410090749.cfg
u-boot.bin
u-boot-sama5d4-xplained.bin
u-boot-sama5d4-xplained-v2017.03-at91+gitAUTOINC+5642d172b9-r0.bin
zImage
zImage--4.9+git0+973820d8c6-r0-at91-sama5d4_xplained-20180410090749.dtb
zImage--4.9+git0+973820d8c6-r0-at91-sama5d4_xplained_hdmi-20180410090749.dtb
zImage--4.9+git0+973820d8c6-r0-at91-sama5d4_xplained_pda4-20180410090749.dtb
zImage--4.9+git0+973820d8c6-r0-at91-sama5d4_xplained_pda7-20180410090749.dtb
zImage--4.9+git0+973820d8c6-r0-at91-sama5d4_xplained_pda7b-20180410090749.dtb
zImage--4.9+git0+973820d8c6-r0-sama5d4-xplained-20180410090749.bin
zImage-at91-sama5d4_xplained.dtb
zImage-at91-sama5d4_xplained_hdmi.dtb
zImage-at91-sama5d4_xplained_pda4.dtb
zImage-at91-sama5d4_xplained_pda7b.dtb
zImage-at91-sama5d4_xplained_pda7.dtb
zImage-sama5d4-xplained.bin

KERNEL 빌드하기 (커널 소스 관련 원문은 여기를 클릭하세요)

커널 빌드를 위한 소스코드 다운로드 
$ git clone  git://github.com/linux4sam/linux-at91.git
브랜치 체크아웃 
$ git checkout origin/linux-3.10-at91

리눅스 커널 환경설정 
make ARCH=arm sama5_defconfig

HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#


커널 환경설정 
$ make ARCH=arm menuconfig 

크로스 컴파일
$ make -j3 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-


[..] 
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is ready 


uImage 가 필요한 경우 추가 단계 

$ make -j3 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage LOADADDR=0x20008000

dtb 파일 만들기 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

U-Boot 사용

U-Boot 기본 명령
setenv 이 명령은 변수를 설정하는 데 사용됩니다.
saveenv 이 명령은 설정한 변수를 영구 저장 공간에 저장합니다.
printenv 이 명령은 현재 변수를 출력합니다.
현제 제 보드의 설정 값을 출력해 보았습니다. 
U-Boot> printenv
baudrate=115200
bootcmd=run nandargs; nand read 0x21000000 0x00180000 0x00008EEB; nand read 0x22000000 0x00200000 0x00364780; bootz 0x22000000 - 0x21000000
bootdelay=1
default_bootargs=setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs rw
ethact=gmac0
nandargs=$default_bootargs $optargs
optargs=video=LVDS-1:800x480-32 touch.mode=res
stderr=serial

stdin=serial

help 명령을 사용하면 설치된 U-boot 커맨드를 볼 수 있습니다.

? - '도움말'의 별칭
base - 주소 오프셋을 인쇄하거나 설정합니다.
bdinfo - 보드 정보 구조를 인쇄합니다.
boot - 부팅 기본값, 즉 'bootcmd'실행
bootd - boot default, 즉 'bootcmd'를 실행합니다.
bootm - 메모리에서 응용 프로그램 이미지 부팅
bootp - BOOTP / TFTP 프로토콜을 사용하여 네트워크를 통해 이미지 부팅
bootz - 메모리에서 Linux zImage 이미지 부팅
cls - 화면 지우기
cmp - 메모리 비교
coninfo - 콘솔 장치와 정보를 출력한다.
cp - 메모리 복사
crc32 - 체크섬 계산
dhcp - DHCP / TFTP 프로토콜을 사용하여 네트워크를 통해 이미지 부팅
echo - 콘솔에 arg를 표시합니다.
editenv - 환경 변수 편집
env - 환경 처리 명령
exit - 이탈 스크립트
false - 아무 일도하지 않고, 실패했습니다.
fatinfo - 파일 시스템에 관한 정보를 출력한다.
fatload - dos 파일 시스템에서 이진 파일로드
fatls - 디렉토리의 파일 나열 (기본값 /)
fatsize - 파일 크기 결정
fdt - 병합 된 장치 트리 유틸리티 명령
go - 응용 프로그램을 시작할 주소 'addr' 
help - 인쇄 명령 설명 / 사용
i2c - I2C 서브 시스템
imxtract - 다중 이미지의 일부를 추출합니다.
itest - 정수 비교시 true / false를 반환합니다.
loadb - 직렬 라인을 통해 바이너리 파일로드 (kermit 모드)
loadx - 직렬 라인을 통해 바이너리 파일로드 (xmodem 모드)
loady - 시리얼 라인을 통해 바이너리 파일로드 (ymodem 모드)
loop - 주소 범위의 무한 루프
md - 메모리 표시
mm - 메모리 수정 (자동 증가 주소)
mmc - MMC 서브 시스템
mmcinfo - MMC 정보 표시
mw - 메모리 쓰기 (채우기)
nand - NAND 서브 시스템
nboot - NAND 장치에서 부팅
nfs - NFS 프로토콜을 사용하여 네트워크를 통해 이미지 부팅
nm - 메모리 수정 (상수 주소)
ping - 네트워크 호스트에 ICMP ECHO_REQUEST를 보냅니다.
printenv- 인쇄 환경 변수
reset - CPU의 RESET을 수행합니다.
run - 환경 변수에서 명령을 실행합니다.
saveenv - 환경 변수를 영구 저장소에 저장합니다.
setenv - 환경 변수 설정
setexpr - eval 표현식의 결과로 환경 변수 설정
sf - SPI 플래시 하위 시스템
showvar - 로컬 hushshell 변수를 출력합니다.
sleep - 잠시 동안 실행 지연
source - 메모리에서 스크립트 실행
test - / bin / sh와 같은 최소 테스트
tftpboot- TFTP 프로토콜을 사용하는 네트워크를 통한 이미지 부팅 
true - 아무것도하지 않고, 성공적으로 수행한다.
usb - USB 서브 시스템
usbboot - USB 장치에서 부팅
version - 인쇄 모니터, 컴파일러 및 링커 버전

U-Boot 스크립트 기능

복잡한 스크립트 나 변수를 만들면 명령을 입력 할 수 없게됩니다.
다음은 리눅스의 네트워크 로딩을보다 쉽게하기위한 몇 가지 변수들에 대한 요약입니다
U-Boot> setenv boot_addr 0x21400000
U-Boot> setenv linux 'tftp ${boot_addr} linux-2.6.x.img'
U-Boot> setenv ramdisk_addr 0x21100000
U-Boot> setenv ramdisk 'tftp ${ramdisk_addr} sam9-ramdisk.gz'
U-Boot> setenv go 'run linux; run ramdisk; bootm ${boot_addr}'

U-Boot> saveenv
setenv linux 'tftp $ {boot_addr} linux-2.6.x.img' 라인은
tftp 0x21400000 linux-2.6.x.img를 타이핑하는 것과 동일하지만 다른 것들과 결합되어 플래시에 저장되기 때문에 시간을 절약하고 자동화 할 수 있습니다. 리눅스 커널 부팅을 사용하려면 간단하게 run go 를 입력하면 됩니다.

사전에 정의된 변수 및 명령 부팅 

bootcmd가 설정되면 변수 내용은 부팅 지연 후 자동으로 실행됩니다. bootcmd는 U_Boot 자동 부팅모드를 활성화 합니다.

다음은 at91 보드의 bootcmd 예제입니다.
bootcmd=nand read 0x21000000 0x00180000 0x00080000; nand read 0x22000000 0x00200000 0x00600000;bootz 0x22000000 - 0x21000000

bootargs 변수는 U-Boot에 의해 시작된 메인 어플리케이션에 정보를 전달하기위한 교환 영역으로 사용됩니다. (예를 들어 리눅스 커널)
bootargs의 예는 다음과 같습니다.


bootargs_nand=console=ttyS0,115200 mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256K(env),256k(env_redundent),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs bootargs_nfs=console=ttyS0,115200 mtdparts=atmel_nand:8M(kernel)ro,220M(rootfs),20M(test),-(protect) rw root=/dev/nfs rw nfsroot=10.217.12.45:/nfsroot/rootfs/yocto ip=dhcp

AT91 보드에서 U-Boot를 사용하여 Linux로드 

이 절에서는 Linux 커널 및 해당 루트 파일 시스템의 로드에 대해 설명합니다.  U-Boot 동작을 설정하려면 유용한 U-Boot명령을 기억하십시오.

Linux 이미지 준비 (선택 사항) 

U-Boot에서 uImage 파일을 사용하려면 헤더 정보, CRC32 체크섬 등으로 커널 이미지를 캡슐화하는 mkimage 도구를 사용할 수 있습니다.

mkimage는 U-Boot 배포가 포함 된 소스 코드로 제공되며 U-Boot 컴파일 중에 빌드됩니다 (u-boot-source-dir / tools / mkimage). 자세한 정보는 U-Boot README 파일을 참조하십시오.

압축되지 않은 uImage 파일을 생성하는 명령 (1) :
mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000 -n linux-2.6 -d arch/arm/boot/Image uImage 
압축되지 않은 uImage 파일을 생성하는 명령 (2) :
mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000 -n linux-2.6 -d arch/arm/boot/zImage uImage 

커널 DTB 이미지 준비하기 

최신 Linux 커널의 경우 바이너리 파일의 하드웨어를 설명하는 Device Tree Binary를 지원합니다. U-Boot는 DTB와 커널을 모두 로드 할 수 있습니다. 유일한 변화는 bootm 또는 bootz를 두 개의 인수로 실행하는 것입니다.

bootm 0x22000000 - 0x21000000 or bootz 0x22000000 - 0x21000000

첫 번째 인수는 Linux 커널의 메모리에있는 주소이고, 두 번째 인수는 DTB 바이너리의 주소입니다.

네트워크를 통해 로드 

개발 시스템에서는 네트워크를 통해 커널 및 루트 파일 시스템을 얻는 것이 유용합니다. U-Boot는 TFTP 프로토콜을 사용하여 네트워크의 원격 호스트에서 바이너리를 로드 할 수 있도록 지원합니다.

U-Boot로 TFTP를 사용하려면 호스트 시스템에 TFTP 서버를 구성 해야 합니다. 배포 매뉴얼이나 인터넷 리소스를 확인하여 호스트에 Linux 또는 Windows TFTP 서버를 구성하십시오.

Linux 호스트의 U-Boot 설명서
다른 TFTP 구성 참조

U-Boot 쪽에서 네트워킹 매개 변수를 설정해야합니다.

1. 이더넷 주소 (MAC 주소) 설정
적절한 MAC 주소를 선택 하려면 이 U-Boot 네트워크 BuildRootFAQ항목을 확인하십시오.
setenv ethaddr 3e : 36 : 65 : ba : 6f : be

2. IP 매개 변수 설정
ㆍTFTP 서버가 실행 중인 서버 IP 주소 설정
   setenv serverip 10.159.245.186
ㆍ고정 IP 주소가있는 설치 보드
   보드의 IP 주소
   setenv ipaddr 10.159.245.180
ㆍDHCP가 있는 설치 보드
  네트워크에 DHCP 서버가 이미있는 경우 dhcp 명령을 사용하십시오.
   setenv get_ip 'setenv old_serverip $ {serverip}; setenv autoload no; dhcp; setenv serverip $ {old_serverip}'
   run get_ip

3. 플래시 환경 보존
   saveenv

4. 만약 부팅 시 이더넷 물리 주소가 감지되지 않으면, 보드를 리셋 하여 U-Boot를 다시 로드 하십시오 : 이더넷 주소와 물리 주소 설정이 정상적으로 될 것 입니다.

5. U-Boot tftp 명령을 사용하여 Linux uImage와 루트 파일 시스템을 램 위치에 다운로드하십시오.(U-Boot 스크립트 기능 장)

6. bootm 또는 boot 명령을 실행하는 Linux를 시작합니다.

보드에 emac과 gmac가 모두있는 경우 다음 중 하나를 사용하여 사용할 수 있습니다.
setenv ethact macb0,gmac0
setenv ethprime gmac0

AT91용 U-Boot 소스 코드 

이름 지원보드 설명 배포 태그
github sources:
u-boot-2015.01-at91
모든 Atmel 보드 지원
데모가 가능한 보드 : SAMA5D4 Xplained, SAMA5D4-EK, 5AMA5D3 Xplained, SAMA5D3-EK SAMA5D2 Xplained,
관리됨,
안정적
linux4sam_4.7,
linux4sam_5.0-alpha7
github sources:
u-boot-2014.07-at91
모든 Atmel 보드 지원
데모가 가능한 보드: SAMA5D4 Xplained, SAMA5D4-EK, SAMA5D3 Xplained, SAMA5D3-EK, AT91SAM9X5-EK, AT91SAM9N12, Legacy
관리됨 linux4sam_4.6,
linux4sam_4.5
u-boot-2013.07-at91 오래된 분기
새로운 개발에 사용금지
u-boot-2012.10-at91 레거시 분기
새로운 개발에 사용금지

u-boot-2015.01-at91 변경사항
-U-Boot v2015.01 기반
-SAMA5D4EK, SAMA5D4Xplained 및 SAMA5D2Xplained 보드 지원
-SAMA5D3X-EK 보드 용 FIT 이미지 지원
-SAMA5D4 및 SAMA5D3 시리즈 보드에 대해 SPL 지원을 활성화하십시오.
-지원 소프트웨어 I2C.
-지원 AT24MAC 맥 주소
-기타 수정.

u-boot-2014.07-at91의 변경 사항
-SAMA5D4EK 및 SAMA5D4 Xplained 보드 지원
-SAMA5D3X-EK 보드 용 FIT 이미지 지원

태그 
linux4sam_5.0-alpha7 태그
-SAMA5D2 Xplained 보드 지원
-지원 AT24MAC 맥 주소
-linux4sam_4.7의 모든 기능을 포함하십시오.

linux4sam_4.7 태그
-U-Boot v2015.01 기반
-SAMA5D4EK 및 SAMA5D4 Xplained 보드 지원
-SAMA5D3X-EK 보드 용 FIT 이미지 지원
-SAMA5D4 및 SAMA5D3 시리즈 보드에 대해 SPL 지원을 활성화하십시오.
-지원 소프트웨어 I2C.
-기타 수정.

linux4sam_4.6 태그
-SAMA5D4 Xplained 보드에 대한 지원 추가
-linux4sam_4.5의 모든 기능을 포함

linux4sam_4.5 태그
-U-Boot v2014.07 기반
-SAMA5D4EK 보드 지원 추가
-SAMA5D3X-EK 보드 용 FIT 이미지 지원

소스에서 U-Boot 빌드 

위에서 찾은 바이너리를 빌드하려면 다음 단계를 수행해야 합니다.

U-Boot 소스 얻기

U-Boot 위키 전용 페이지 : http://www.denx.de/wiki/U-Boot/SourceCode
Linux4SAM GitHub U-Boot 저장소에서 U-Boot 소스 코드를 쉽게 다운로드 할 수 있습니다.

ㆍLinux4sam GitHub U-Boot 저장소 복제
$ git clone git://github.com/linux4sam/u-boot-at91.git 
 Cloning into 'u-boot-at91'... 
 remote: Counting objects: 219350, done. 
 remote: Compressing objects: 100% (40142/40142), done. 
 remote: Total 219350 (delta 175755), reused 219350 (delta 175755) 
 Receiving objects: 100% (219350/219350), 56.01 MiB | 1.24 MiB/s, done. 
 Resolving deltas: 100% (175755/175755), done. $ cd u-boot-at91

ㆍ소스 코드는 우리가 사용하는 최신 분기를 가리키는 마스터 분기에서 가져 왔습니다. 다른 분기를 사용하려면 분기를 나열하고 다음 중 하나를 사용하십시오.
$ git branch -r
origin/HEAD -> origin/master
origin/master
origin/u-boot-2012.10-at91
origin/u-boot-2013.07-at91
origin/u-boot-2014.07-at91
origin/u-boot-2015.01-at91
origin/u-boot-2016.03-at91
origin/u-boot-2017.03-at91
origin/uboot_5series_1.x
$ git checkout origin/u-boot-2017.03-at91 -b u-boot-2017.03-at91
Branch u-boot-2017.03-at91 set up to track remote branch u-boot-2017.03-at91 from origin.
Switched to a new branch 'u-boot-2017.03-at91'

ARM 크로스 컴파일러 설치
ㆍUbuntu : ubuntu 에서는 아래 명령을 사용하세요
sudo apt-get install gcc-arm-linux-gnueabi
export CROSS_COMPILE=arm-linux-gnueabi-

ㆍ기타 os : Linaro 크로스 컴파일러를 다운로드하고 다음을 수행하여 환경을 설정할 수 있습니다.
$ wget -c https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabi/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
$ tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
$ export CROSS_COMPILE=`pwd`/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-

U-Boot 크로스 컴파일링

U-Boot 환경

U-Boot 환경은 부트 로더가 자신을 올바르게 구성하고 환경 (네트워크 구성, 부트 인수, 저장 위치 등)에 적응하는 데 필요한 변수를 저장하는 읽기 / 쓰기 영구 공간입니다. 부팅 한 동일한 미디어에 있습니다.

U-Boot 바이너리 빌드

이 절에서는 SAMA5D3X-EK 보드를 예로 들어 설명합니다. U-Boot를 컴파일하기 전에, 섹션에서 교차 컴파일 툴체인을 설정해야합니다.

AT91 U-Boot 소스를 사용할 수있게되면 U-Boot는 구성 및 컴파일의 두 단계로 이루어집니다. U-Boot 참조 설명서의 구성 장을 확인하십시오.

포인팅 핸드 make를 호출 할 때 정확한 타겟을 찾으려면 configs /로 이동하십시오.

U-Boot 환경 변수는 다른 미디어에 저장할 수 있으며, 위의 설정 파일은 U-Boot 환경을 저장할 위치를 지정할 수 있습니다.
# 환경 변수를 직렬 플래시에 넣으려면 :
sama5d3xek_spiflash_defconfig
# 환경 변수를 nandflash에 넣으려면 (기본값) :
sama5d3xek_nandflash_defconfig
# SD / MMC 카드에 환경 변수를 저장하려면 :
sama5d3xek_mmc_defconfig

SAMA5D3x-EK 보드의 구축 단계는 다음과 같습니다.
필요에 따라 설정을 변경할 수 있습니다.
make sama5d3xek_nandflash_defconfig
make

이 작업의 결과는 바이너리 ELF 파일 u-boot에 해당하는 u-boot.bin이라는 새로운 U-Boot 바이너리입니다.
ㆍu-boot.bin은 보드에 저장해야하는 파일입니다.
ㆍu-boot는 JTag 링크를 통해 U-Boot를 디버깅하는 데 사용할 수있는 ELF 형식의 이진 파일입니다.

nandflash에 U-Boot 바이너리 프로그램 넣기

SAM-BA를 사용하여 보드의 U-Boot 적재

SAM-BA 도구 다운로드 3.2.x버전을 사용해야 합니다. 

SAM-BA 도구 실행

ㆍ이 섹션에 따르면 칩에서 SAM-BA 모니터를 실행할 수 있는지 확인합니다.

데모를 flasing하는 데 사용되는 스크립팅 용 Qt5 QML 언어 외에도 가장 일반적인 SAM-BA 작업은 SAM-BA 명령 줄을 사용하여 수행 할 수 있습니다.

SAM-BA 명령 줄 사용법에 대한 정보를 보려면 SAM-BA 설치 디렉토리 (doc / index.html 또는 doc / cmdline.html)에서 사용할 수있는 명령 줄 설명서를 참조하십시오.
SAM-BA에는 가장 일반적인 작업을 지원하는 명령 줄 인터페이스가 포함되어 있습니다.

임의의 메모리 주소 및 / 또는 주변 장치에 대한 읽기 / 쓰기
애플릿을 업로드하고이를 사용하여 외부 메모리를 지우거나 읽기 / 쓰기
명령 행 인터페이스는 자체적으로 문서화되도록 설계되었습니다.

기본 명령은 "sam-ba --help"명령을 사용하여 확인 할 수 있습니다.
Usage: ./sam-ba [options]
SAM-BA Command Line Tool

Options:
  -v, --version                          Displays version information.
  -h, --help                             Displays this help.
  -x, --execute <script .qml="">             Execute script <script-file>.
  -p, --port <port[:options:...]>        Communicate with device using <port>.
  -d, --device <device>                  Connected device is <device>.
  -b, --board <board>                    Connected board is <board>.
  -m, --monitor <command[:options:...]>  Run monitor command <command>.
  -a, --applet <applet[:options:...]>    Load and initialize applet <applet>.


사용법을 표시하는 "도움말"매개 변수를 제공하여 대부분의 명령에 대한 추가 도움말을 얻을 수 있습니다.

예를 들어 "sam-ba --port help"가 표시됩니다.
Known ports: j-link, serial

옵션 (포트, 모니터, 애플릿)을 사용하여 인수를 취하는 명령은 옵션 값으로 "도움말"과 함께 호출 될 때 더 많은 문서를 표시합니다.
예를 들어 "sam-ba --port serial : help"가 표시됩니다.
Syntax:
    serial:[<port>]:[<baudrate>]
Examples:
    serial                serial port (will use first AT91 USB if found otherwise first serial port)
    serial:COM80          serial port on COM80
    serial:ttyUSB0:57600  serial port on /dev/ttyUSB0, baudrate 57600

시리얼 포트 연결 확인 

시리얼 연결을 위한 드라이버 파일은 /proc/tty/driver 아래에 있습니다.
등록된 드라이버 파일 확인 
$ sudo ls /proc/tty/driver 
  serial usbserial

usbserial 드라이버 파일 내용 확인 

$ sudo cat /proc/tty/driver/usbserial
usbserinfo:1.0 driver:2.0

0: module:ftdi_sio name:"FTDI USB Serial Device" vendor:0403 product:6001 num_ports:1 port:0 path:usb-0000:02:00.0-2.1

serial 드라이버 파일 내용 확인 
$ sudo cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 CTS|DSR|CD
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
4: uart:unknown port:00000000 irq:0

사용할 수 있는 시리얼 포트 확인 
$ dmesg | grep tty
[    0.000000] console [tty0] enabled
[    1.014500] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A

[79344.440805] usb 2-2.1: FTDI USB Serial Device converter now attached to ttyUSB0

NAND ECC 구성 

기본 PMECC 매개 변수 사용하기 

SAM-BA의 -b 매개 변수로 보드 변형을 선택할 때 보드에 채워진 NAND에 대한 기본 PMECC 구성이 유효합니다. 더미 파일 (다음 명령에서 test.bin)에서 1 바이트를 읽는 명령을 실행하여 그 값을 확인할 수 있습니다.
$ sam-ba -p serial -b sama5d4-xplained -a nandflash -c read:test.bin:0:1
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 536870912 bytes.
Page size is 4096 bytes.
Buffer is 20480 bytes (5 pages) at address 0x0020a240.
NAND header value is 0xc1e04e07.
Supported erase block sizes: 256KB
Executing command 'read:test.bin:0:1'
Read 1 bytes at address 0x00000000 (100.00%)
Connection closed. 

2018년 4월 10일 화요일

전주 여행 겸 제 5회 국제 3D프린팅 드론 코리아 엑스포에 다녀왔습니다.

어쩌다 보니 전주를 2주 연속으로 가게 되었습니다. 첫 번째 방문은 꽃의 계절을 맞은 나들이 겸 기존에 타던 자전거의 판매를 위해 다녀왔고, 두 번째는 여자 친구의 미래 직업인 3D프린팅 엑스포가 있어 방문하게 되었습니다.

전주를 잘 알지 못하기에 인터넷으로 조사를 해 본 결과, 덕진공원, 완산공원, 한옥마을 등이 가 볼만 한 곳으로 추천되었습니다.

왱이 콩나물 국밥(배가 고파서 수란은 벌써 먹었..)
일단 도착하자마자 전주 맛집 10선에 꾸준히 들고 있는 왱이 콩나물 국밥에 들러 국밥 한 그릇 뚝딱 했습니다. 이곳에 들른 이유는 맛집인 것도 있지만, 넓은 주차장이 있고, 그 주차장에 식사 후 1시간 가량의 주차 시간을 제공 해줍니다. 걸어서 바로 5분 거리에 한옥 마을이 있어 식후 산책으로 한 바퀴 돌기에 딱 좋습니다. 아.. 콩나물 국밥은 정말 해장되는 시원한 맛 입니다. 전날 저녁에 한잔 했는데 딱 좋더군요 ㅎㅎ

길가에 핀 꽃이 너무 예뻐 찍어 보았습니다. (이름은 모르겠네요)





이미 여러 번 왔던 곳이지만, 올 때마다 못 봤던 것들이 새로 하나 둘 보입니다. 이전에 보지 못했던 곳들을 한 바퀴 슥~ 스치듯 돌면서 전에 못 먹었던 음식들을 하나씩 입에 물고 두리번거리다 보니 미술관이 하나 생겼습니다. 안에는 반딧불을 주제로 한 여러 풍경을 담은 그림들이 전시 되어있습니다. 비슷하면서도 서로 다른 느낌의 왠지 모를 아늑한 그림들을 보고 있자니 차분해지는 기분이 듭니다.

거리는 크게 달라진 것이 없지만 이전에 없던 것들이 조금 생겼고, 신정 때 와서 명동처럼 붐비던 거리가 제법 한산해 진 것도 마음에 여유를 줍니다. 저에게 전주 한옥 마을의 특징이 무어냐 묻는다면 진짜 한옥을 보고 싶으면 전주 한옥 마을이 아니라 다른 곳에 가야 할 것 같구요. 전주 한옥 마을은 뭐랄까 자유로운 코스튬이 있는 곳이라고 생각이 됩니다. ㅎㅎ;;; 엉뚱한 것 같지만 한옥의 고풍스러운 멋은 역시 서울 북촌 한옥 마을이 더 나은 것 같다는 생각입니다.  전주는 현대스럽다고 해야 할까요? ㅎㅎ;;; 복고스럽지 않아요.

저에게 전주에 가는 이유 중 절반은 밥과 간식 먹으러 간다 해도 과언이 아닙니다. 요즘은 여기에서 유행했던 여러 음식들이 마트의 맛집 코너 같은 곳에서도 먹을 수 있어 그 매력마저 조금씩 상실되어 가는 것 같습니다.

다음으로 방문한 곳은 덕진공원 입니다.




덕진공원은 한 여름에 연 잎이 흐드러졌을 때 가야 예쁠 것 같지만 날도 따듯하고 밥도 먹었으니 체력도 좀 소비할 겸 오리 보트 타러 갔습니다. 올 해는 유독 겨울이 길고 혹독했던 만큼 봄을 제대로 즐기고 싶은 마음도 있었고, 오랜만의 따듯한 날씨를 놓치고 싶지 않았습니다. 호수 한가운데서 따듯한 햇살을 받으면서 한가로이 떠내려 다니다 보니 50분이 훌쩍 지났습니다.




2017년 11월에 시작된 겨울이 2018년 3월 중순 까지 이어지는 너무나 길고 추웠던 겨울이 끝나서 인지 올 해는 독특한 현상도 있는데요. 보통 목련이 피고 나서 15일 가량 지나야 피던 벗 꽃이 올 해는 함께 피었습니다. 5개월 가까이 지속된 기이한 한파 덕에 몸도 마음도 축나버린 한 해지만 그래도 어김 없이 봄은 찾아 오네요 ㅎㅎ

3D프린팅 드론 코리아 엑스포

엑스포는 93년 대전 엑스포를 본 이후로 두번다시 가지 않겠다 마음 먹었지만, 앞으로의 삶에서 접해야 하는 기술들을 볼 수 있다는 생각에 일주일 만에 다시 전주를 찾았습니다.

※ 93년 과학과 신기술을 좋아하던 초등학교 5학년 생이던 저는 꿈돌이를 때리고 싶을 만큼 미워했습니다. 1년동안 TV만 켜면 엄청난 일을 해낸 것처럼 홍보하던 대전 엑스포는 초등학생 하나 만족 시킬 수 없는 유치한 엑스포로 기억되고 있습니다. 제대로 된 신기술 하나 없고, 실용적인 부분은 0에 가까워서 전시행정의 끝판을 보여주는 엑스포로 기억하고 있습니다.


전주 월드컵 경기장에서 열린 3D프린팅.드론 엑스포는 입구부터 제법 규모가 작아 보였습니다.  홍보가 너무 부족한 나머지 마지막 날인 일요일 낮에도 방문객 수는 크게 많지 않았습니다. 

입구에는 일렬로 음악에 따라 춤을 추는 로봇이 전시되어 있었는데, 이것을 보는 순간 '드론은 저게 다일 것 같다.' 라는 공포감이 엄습해왔습니다. 하지만 저희 목적은 앞으로 사용해야 하는 기술인 3D프린팅의 다양한 활용도와, 다양한 종류의 3D프린터, 소재, 성능 등을 관람하는 부분이었기에 드론은 애초에 관심 밖이었습니다. 

뭐 이벤트는 드론과 3D프린팅에 골고루 초점을 맞춰 일 별로 행사를 하고 있었지만, 방문할 수 있었던 일요일엔 드론 축구 대회의 다른 일정을 확인하지 못한 관계로 행사는 패스하고 바로 3D프린터 존으로 갔습니다. 약 27개의 3D프린터 관련 업체가 참여했음에도 불구하고 행사장의 1/5밖에 되지 않는 좁은 공간에 프린터 업체를 구겨 넣었더군요. 








이번 3D프린터 대부분은 FDM(노즐을 통해 플라스틱 필라멘트를 녹여 출력하는 방식) 방식이 대부분 전시 되었습니다. 각각의 출력물은 다양했지만, 다양한 출력 방식을 접하고 싶었던 저에게는 큰 아쉬움이 남을 만큼 너무 한쪽으로 치우쳐있고 일률적인 모습이 좀 아쉬웠습니다.


 독특한 구성도 몇 개 보였는데요 이것은 3D프린터와 아트를 접목 시킨 작품으로 3D프린팅 팬을 이용해서 직접 형태를 만드신 거라고 합니다.

그리고 이것은 레이저를 이용한 투명 플라스틱 내부에 직접 입체 문양을 새기는 신비한 녀석입니다. 표면에 처리된 것이 아니라 내부에 각인되었습니다. 앞으로 상패나 기념품 쪽에 많이 활용될 것 같다는 생각이 듭니다. 그리고 무척 예쁩니다. 제 얼굴도 새겨 넣고 싶어요 ㅎㅎ
3D 프린터로 출력한 출력물은 0.1~0.2mm의 매우 얇은 층을 지속적으로 쌓아서 출력 완료 후 표면에 적층 구조가 적나라하게 보이는데요 이 장치는 그런 표면을 매끄럽게 해주는 장치입니다. 또한 표면 처리에 사용하는 용액은 이소프로필렌알콜 이라는 녀석으로 기존 표면 처리에 사용하던 용액에 비해 독성이 줄었다고 합니다.

그 외에도 금속 분말을 이용한 3D프린터 (출력물을 보아선 레진을 섞어 출력한 것 같은데 금속 분말에 레이저 가열을 통해 출력 된 것이라고 하셨습니다. 시연이 없어 확인은 불가능 했습니다. )
그리고 고 탄성 수지를 사용한 HP의 3D프린팅 출력물 등을 볼 수 있었습니다. HP의 경우 독특했던 게 중앙의 체인 모양이 여러 고리가 연결된 구조인데 저런 구조를 개별로 출력한 게 아니라 하나의 완제품으로 한번에 출력해낼 수 있다고 했습니다. (시연을 해주시지 않아서 이 부분은 카더라 통신입니다.) 또한 드론 프로펠러 같은 제품도 실 사용 가능한 수준으로 출력 된다고 합니다.

가장 저렴한 것으로 눈에 띈 제품이 있는데요 80x80mm를 출력할 수 있는 소형 3d프린터와 3d프린팅 팬을 판매하는 곳이 있었습니다. 대부분 고가 제품이다 보니 3d프린터의 물적 특성을 확실하게 확인하지 못하고 도입하여 사용하기엔 무리가 있는데 도입 타당성 평가를 위해 사용해보기 딱 좋은 제품인 것 같습니다. ㅎㅎ; 크기도 매우 작아서 책상 위에 얹어 놓기 좋아 보였습니다. 특징적인 설명도 따라붙었는데요 '계단에 굴려도 안부셔져요, 수평 맞출 필요 없이 그냥 놓고 쓰시면 알아서 수평 맞춥니다.' 라고 말씀해주셔서 '오~ 초보자가 쓰기 딱이네~' 란 생각이 들었습니다.

이 3D프린터도 신기했는데 X, Y 축의 거대한 축에서 모터와 벨트가 돌아가는 다른 3D프린터와 달리 매달려서 빙글빙글 돌며 출력하는 모습이 정말 신기하고 독특한 프린터였습니다. 하지만 출력 방식은 동일하게 FDM

DLP 방식의 3D프린터도 보고 싶었고, 진보 한 신기술이 보고 싶었는데 조금 아쉬움이 남습니다.

드론 전시관




드론 전시관에는 다양한 드론 체험존이 마련되어 있었는데요 드론 축구와 산업용 드론 자율주행차 등의 전시 품들이 가득 있었고, 드론 부스에 가면 상품화된 드론을 판매하려는 목적으로 드론을 날리는 분들과 드론을 사려는 사람들이 가득한.. 엑스포라기 보단 여긴 시장같아서 개인적으론 불편한 곳이었습니다.  추가 설명은 안하는게 나을 듯 합니다.


돌아오는 길에 배가 고파서 조점례 남문피순대 집에 들렀는데 허겁지겁 먹고 보니 사진 찍는 건 잊었습니다. ;; 반찬 한 점 남김없이 다 먹어버린 ;;; 후에 정신이 들었네요 ㅎㅎ; 무척 맛있습니다. 음.. 독특한 점은 순대 속이 매우 부드럽고 말랑하고 고소합니다. 피순대 라고 하는데, 아마도 선지를 갈아 넣은 것이 아닌가 합니다. 그리고 국물은 신기하게도 콩나물 국밥과 같은 맛이 났습니다. 여기는 현지인 추천으로 갔는데 정말 맛있어서 다음에 또 가고 싶네요 ㅎㅎ . 시장 입구에 전병을 파는 가게도 있었는데.. 거기도 너무 맛있었습니다.... 이번 주에 전주 또 한번 갑니다. 그땐 사진 찍어서 올릴게요~

이상 허접한 2일간의 전주 여행기였습니다.

2018년 4월 8일 일요일

니로 러기지 언더 트레이 설치하기

니로를 구매 한 이후 줄 곳 신경 쓰였던 차량의 트렁크를 접었을 때 발생하는 단차에 대한 해결책으로 '러기지 언더 트레이'라는 것을 설치하기로 했습니다. 트렁크의 바닥 면을 높여주며, 수납 공간을 만들어 주는 제품입니다. 노블레스 트림에는 기본적으로 있지만, 프레스티지를 이하에선 돈을 주고 설치해야 하는 항목입니다. 러기지 언더 트레이에 대한 설치 포스팅이 없는 이유는 너무 쉽기 때문입니다. 그래도 혹시 몰라 정리 해 봅니다.

니로의 트렁크 단차(프레스티지,럭셔리만 해당)
위 사진처럼 의자의 두께만큼 약 11cm의 차가 납니다. 놀러가서 차박을 하거나 모기장 하나만 갖고 야외에서 놀기엔 부족해 보입니다.

러기지 언더 트레이 품번 및 구매

부품 구매 좌표는 여기입니다. --> 오토부품 특정 사이트 홍보를 하는 것이 아닌 현재 가장 저렴하게 구매할 수 있고, 유일하게 온라인 구매할 수 있는 곳이기에 링크를 공개합니다. 다만 재고가 늘 딸려서 대기를 해야 합니다. 오프라인 구매를 할 경우 사업소에 문의해본 결과 통행 세를 받으려고 합니다. 실 부품가의 약 40%를 추가 시키더군요. 좌우측 트레이를 제외하고 20만원을 달라합니다.   

2018년형 (17년식 러기지 언더트레이 품번과 동일한데 연식만 다릅니다.)
- 중앙 러기지 트레이 : 85751 G5000WK @26,180원
- 좌측 트레이 : 85755 G5000WK @14,960원
- 우측 트레이 : 85765 G5100WK @14,960원 (이 부품만 17년식과 다름 근데 품번은 동일 )
- 러기지 커버링보드 :85715 G5100WK @61,600원
- 스티보폼중앙트레이 :85750 G5000WK @25,740원
- 트림어세이-리어트랜스버어스 85770-G5100WK @12,430원
- 스크루 태핑 :12492 05163 @66 X 10=660원   <-- 이 부분은 8개만 해도 될 것 같습니다. 조립 후 2개가 남습니다. 싸니까 뭐.. 그냥사도..;
합156,530원 할인가 142,000원에 구매하였습니다. 아 배송비 1만원 붙습니다.

처음 걱정한 것은 정품이 아니면 어쩌나 하는 걱정이었는데 모두 순정입니다.

장착 

필요 공구


트렁크에 보면 이렇게 드라이버가 있는데 이거 하나로 러기지 언더 트레이는 장착과 해제를 모두 할 수 있습니다. 이 드라이버는 십자 일자 양면 비 자성 드라이버 입니다.

해제 

일단 장착을 위해 기존 부품 중 하나를 해제 해야 합니다.
트림어세이-리어트랜스버어스라는 부품인데, 위치는 트렁크가 닫히는 걸쇠가 있는 부위입니다.
오른쪽과 왼쪽에 각 각 하나씩 나사가 박혀 있습니다. 일단 드라이버로 나사를 제거해 줍니다. 그리고 아래쪽 떠있는 부분에 손을 넣어 들어줍니다.

저기 빨간 동그라미 친 것처럼 총 4개의 고정 용 플라스틱 부품이 있습니다. 손을 넣고 위로 들어 올리면 쉽게 빠집니다. 저는 오른쪽부터 들어 올렸더니 하나가 부러져 일자 드라이버로 제거 하였습니다. 이게 설치 절차 중 가장 어려운 일이었습니다.
설치를 해제한 구 부품과 신 부품을 비교해보았습니다. 신품의 경우 러기지 언더 트레이를 고정 시키기 위한 양쪽 'ㄱ'자 구조가 마련되어 있는 반면 구 부품은 같은 위치에 물건 고정 시 사용할 수 있는 고리가 있는 차이가 있습니다. 부품 모양에 큰 차이가 없어 설치하지 않는 분들도 종종 계십니다.

설치  

설치는 위 아래 양옆 순으로 진행하면 됩니다. 

각각의 동그라미 친 부분에 나사를 고정시킬 위치가 있습니다.


매우 심플하게 위 아래 양옆 순으로 올려놓고 스크루 탭핑을 돌리기만 하면 설치는 완료됩니다. 좌측 트레이와 우측 트레이가 위와 아래 트레이에에 올라타는 구조로 되어있어 그냥 순서만 위, 아래 양옆 혹은 아래 위 양 옆 순으로 조립하면 됩니다. 사진 찍으면서 해도 20분이 채 걸리지 않는 작업 입니다.

좌측 트레이에는 두꺼운 고무 밴드가 하나 있는데 이 곳이 삼각 표지판을 고정시키는 부위 입니다.

 그리고 스티로폼 중앙 트레이를 덮고 커버를 덮으면 조립은 종료 됩니다.


 설치가 완료되면 이런식으로 의자 폴딩시 단차가 없어지게 됩니다. 앞열에 담요가 있어서 의자가 좀 많이 밀려 올라왔지만 조금 더 평평합니다. 완전히 펴지진 않구요...
좌 우에 생기는 깊이 11cm 직경 17cm?가량의 포켓. 
의도치 않게 생겼지만 세워서 놔야 하는 물건을 놓는 장소로 딱 적합합니다. 
트렁크 깊이 약 76cm

단점 :
좌 우측에 높이 11cm짜리 포켓이 생깁니다. (노블레스 등급은 저 부분에 스피커가 있다고 합니다. ) 그리고 트렁크의 깊이, 높이가 줄어듭니다.

트렁크의 바닥면이 11cm 높아 지면서 24인치 접이 자전거 2대가 트렁크에 들어가지 않게 되었습니다. 1대는 트렁크, 1대는 의자 하나를 접어서 넣어야 하는 문제가 발생했습니다. 만약 제가 20인치 자전거를 샀더라면 여전히 2대가 모두 들어가겠죠...; 단차를 없애기 위해 너무 많은 것을 희생한 것 같습니다.;

장점 : 의자 폴딩 시 단차가 사라지고 깔끔해진다. 차를 임시 텐트로 활용할 수 있다.

주의할점 : 2018년 식과 2017년 식의 언더트레이가 다릅니다.
2018년식 
2017년식 
18년식 차량은 17년식을 설치할 수 있지만, 17년식 차량엔 18년식 언더 트레이를 설치할 수 없습니다. (우측 트레이 인데 품번은 같지만 연식이 다릅니다. 구매시 주의해야 합니다.)

이상입니다. 별거 아니지만 그래도 누군가에게 도움이 되면 좋겠다는 생각을 해봅니다.

2018.08.06 추가
니로에서 2열 접이시 총 길이는 약 165cm 정도가 세로로 딱 맞습니다. 165이상부터는 세로로 똑바로 누워서 자려면 점점 앞열을 당겨야 합니다. 180cm의 장판을 넣어본결과 콘솔의 중앙까지 도달합니다. 앞열을 완전히 당기면 180도 누워서 잘 수 있을 것 같습니다만.. 제가 180이 안되서 -_-;; 
앞열을 완전히 당겨도 콘솔 중앙까지 오지 않습니다. 180은 세로로 곧게 누워 잘 수 없습니다.

아. 그리고 성인남성이 앉기에도 5cm정도 부족합니다. 니로가 전고가 낮은게 이 부분에선 흠이네요 ㅎㅎ 모기장 하나 들고가서 놀라고 했더니 제법 불편합니다.

니로에 대한 다른 글도 있습니다.