Yocto Project 개발하기(2) - Custom Layer 만들기
이전 글 에서 meta-sunxi 를 추가하여 orage pi 용으로 빌드를 만들었고, 이번 과정은 project 용으로 meta layer를 만들어서 관리하는 방법을 설명한다.
실제 개발 과정을 이해하기 좋도록 meta layer 를 만들어 가는 과정을 설명한다.
- Yocto Project 개발하기(1) - Orange Pi 보드 빌드
- Yocto Project 개발하기(2) - Custom Layer 만들기
- Yocto Project 개발하기(3) - 개발 시 로컬 패키지 관리하기
- Yocto Project 개발하기(4) - Yocto SDK 빌드
- Yocto Project 개발하기(5) - Yocto eSDK 이용한 개발 모델
Layer 및 machine 생성
프로젝트를 sc-gateway 라고 명하고(이름에 특별한 의미는 없음), 이를 layer로 만든다. 다음과 같이 yocto 폴더 안에 meta-sc-gateway를 생성한다.
|
|
Layer config 파일인 meta-sc-gateway/conf/layer.conf 를 다른 layer의 conf 를 참고하여 다음과 같이 만든다.
|
|
- 10라인: layer의 priority를 10으로 높게 잡아 bb 파일 검색 시 우선 순위를 가지도록 함
- 12라인: meta-sunxi layer를 의존성에 추가
- 14라인: Yocto 호환 버전을 기록
meta-sunxi/conf/machine/orange-pi-zero.conf 와 같이 기존 machine을 그대로 이용해도 되지만, 프로젝트에 맞게 machine 이름도 sc-gateway 로 바꾸어 준다.
orange-pi-zero.conf를 meta-sc-gatway/conf/machine/sc-gateway.conf 로 복사한다. 아직은 kernel 설정이나 다른 것을 바꾸지 않았으므로 그대로 이용한다.
최종 이미지 제작용 recipe를 core-image-minimal.bb 를 참고하여 meta-sc-gateway/recipes-core/images/sc-gateway-image.bb 로 다음과 같이 만든다. SUMMARY만 변경하였고 내용은 동일하다.
|
|
layer 가 적용되도록 다음과 같이 수정 한다.
build/conf/bblayer.conf 에 다음과 같이 meta-sc-gateway 를 추가한다.
|
|
build/conf/local.conf 의 MACHINE
도 sc-gateway 로 바꾼다.
|
|
이제 shell에서 sc-gateway-image를 빌드한다.
|
|
최종 이미지는 build/tmp/deploy/images/sc-gateway/sc-gateway-image-sc-gateway.sunxi-sdimg 로 생성되고 이를 write 해서 실행해보면 기존과 동일하게 실행되는 것을 확인할 수 있다.
Wi-Fi 추가 하기
Orange-Pi Zero는 무선랜이 내장되어 있고 해당 드라이버는 meta-sunxi/recipes-kernel/xradio/xradio.bb 로 있다.
이를 sc-gateway-image.bb 파일에 다음과 같이 추가한다. 그리고 무선랜 디바이스의 CLI인 iw와 Wi-Fi Protected Access (WPA) client 인 wpa_supplicant 를 같이 추가한다.
|
|
다시 빌드를 해보면 xradio 관련하여 에러가 난다. 발생하는 이유는 xradio.bb 파일 내에 COMPATIBLE_MACHINE
으로 orange-pi-zero로 한정하였기 때문에 변경한 sc-gateway로는 xradio가 추가되지 않는다.
이 파일을 직접 수정해도 되지만 이 방식 보다는 bbappend 기능을 사용하여 모든 수정은 meta-sc-gateway 에 적용하도록 수정한다.
우선은 orange-pi-zero 로 한정된 recipe를 찾아본다.
|
|
위 처럼 xradio에 관련된 recipe만 해당된다.
동일한 디렉토리 구조로 다음과 걑이 bbappend를 만든다.
|
|
위와 같이 bbappend로 두 파일의 내용 중 COMPATIBLE_MACHINE 에 sc-gateway를 추가한다. 이렇게 하면 실제 적용되어 다음과 같이 COMPATIBLE_MACHINE
이 설정되는 셈이다.
|
|
이와 관련된 사항은 Yocto 매뉴얼의 다음을 참고할 수 있다.
이제 다시 빌드해 보면 정상적으로 xradio가 빌드된다. Target에 복사해서 실행 시켜보면 다음과 같이 wlan0 이 추가된 것을 확인할 수 있다.
|
|
패스워드 설정이 안된 AP 가 있는 경우 다음과 같이 연결을 시킬 수 있다.
|
|
wpa_supplicant 로 무선랜 연결하기
일반적인 AP의 경우 WPA password 가 설정되어 있어 이는 wpa_supplicant를 사용하여 연결을 하여야 한다.
SSID가 testap, passphrase가 1234567890 이라고 하면 다음과 같이 /etc/wpa_supplicant.conf 파일에 추가한다.
|
|
설정한 AP로 연결 시도를 해본다.
|
|
PTK (Pairwise Transient Key)는 데이타 전송에 사용하는 암호키를 말한다. SSID, passphrase 를 이용하여 생성된 PSK(Pre-Shared Key)로 EAPOL handshake로 교환한 키이다.
다음과 같이 kernel의 설정을 확인해 본다.
|
|
Menuconfig에서 ‘/’ 로 검색에서 LIB80211 을 쳐보면 LIB80211_CRYPT_CCMP
등이 모두 모듈로 빌드된다. 관련된 모듈이 패키지에 포함되어 있지 않다.
모듈을 추가하는 방법은 아래 문서를 보고서 적절한 packagegroup 를 추가해 주면 된다.
하지만 사용하는 meta-sunxi의 경우 kernel 버전이 낮아서 모듈 이름이 다르다. 그리고 몇번의 확인 끝에 wpa_supplicant 에서 CRYPTO_CCM 모듈만 사용하는 것을 확인하였다.
|
|
이와 같이 CCM 모듈만 추가를 하고 다시 이미지 만든 후에, 위의 /etc/wpa_supplicant.conf를 설정하고 실행해 보면 정상적으로 작동되는 것을 확인할 수 있다. 이번에는 -B
옵션을 주어서 background 로 실행하였다.
|
|
마무리
보드를 살리는 과정은 이렇게 하나 하나 yocto package 내의 설정 들을 찾아서 잡아 주는 과정이다.
wpa_supplicant.conf 의 초기 설정 등을 이미지 생성 전에 하려면 sc-gateway-image.bb 파일에 ROOTFS_POSTPROCESS_COMMAND 에 스크립트를 추가할 수 있다.
이렇게 yocto layer를 만들어 가는 과정은 마무리하고, 다음으로는 커널이나 개발하는 프로그램을 yocto 에서 관리하고 빌드하는 방법을 알아보도록 한다.