지난 글에서 교차개발환경 준비하고

부트로더, 커널 소스를 옮겨놨으니 이걸로 빌드를 하자

 

 

mywork 디렉토리에서 bootloader.tar.gz를 풀고 들어가면 이런식으로 나온다.

 

 

부트로더로 U-boot를 쓰는데 

이전 글에 환경변수로 ARCH, CROSS_COMPILE 등록했고

 

U-Boot 빌드 과정은 이렇다고한다.

1. 부트로더 초기화

 - make clean

 - make distclean : 기존의 오브젝트와 설정들을 삭제하고, 초기상태로 만듬

2. 설정

 - make menuconfig : Kconfig들을 참조해 설정 정보들이 GUI 화면으로 나오고 설정한 결과가 .config로 나온다.

 - make Kconfig

 - make defconfig : 타겟 플랫폼에 맞게 빌드하려면 설정할게 많다보니 아키텍처에 맞게 미리 설정해둔거

3. 컴파일

 - make

 

다 이전에 임베디드 자료 정리하면서 한두번 본내용이지만 다잊었다.

 

 

  부트로더 설정 정리

각 모듈별 설정이 kconfig

전체 부트로더 설정은 menuconfig

-> 각 Kconfig들을 참조하여 make menuconfig 한 결과가 .config

기본값으로 설정된 설정 파일이 defconfig(default configuration)

make하면 .config를 참고해 autoconf.h가 생성

 

 

 

defconfig로 .config 만들기

bootloader/configs에 hybus_embedq6_defconfig가 있는데

이걸 make 해주면 .config가 나온다.

make로 컴파일 하면 쭉 진행된다.

 

 

빌드가 끝나면

현 디렉토리에 u-boot 관련 바이너리들이 만들어졌다.

여기서 필요한건 u-boot-dtb.imx로 부트로더와 커널 연결역활로 유부트가 커널에 전달할 플랫폼정보를 담았다고한다.

 

make 전 디렉토리 내 리스트

 

 

 

 

커널 빌드 

지금 사용할 임베디드 보드에 맞는 부트로더를 준비했으니

이제 커널을 빌드할 차례 압축을 풀고 설정하자

 

 

 

 

빌드하기전에 이번에도 커널 설정

 

1. 커널 초기화

 - make clean

 - make distclean

2. 커널 설정

 - make menuconfig

 - make Kconfig

 - make defconfig

3. 컴파일

 

설정 내용이야 부트로더 때랑 똑같으니

아까처럼

distclean 한후

defconfig를 메이크 해주자.

 

빠른 빌드를 위해 -j4 옵션을 주고 메이크

 

조금 시간이 걸리긴 하지만

다끝나면 arch/arm/boot에 zImage가 생겼다.

 

 

 

커널 디바이스 트리

이게 뭔진 잘 모르겠지만 외부 확장 장치가 다양하니 설정도 복잡해서, 

각 디바이스들의 모든 정보를  바이너리로 저장하고 부팅 시

이를 읽어와 하드웨어 초기화에 필요한 정보들을 파싱하는데 쓰는 거라 한다.

 

이 디바이스 트리 dtb(Device Tree Blob/Binary) 파일은

DTS(Device Tree Script/Source) 파일이 DTSI(Device Tree Source Include)를 참조, 디바이스 트리 컴파일러 DTC로 만든다고한다.

 

디바이스 트리 관련 파일로 바이너리는 .dtb, 소스는 .dts, 소스 인클루드는 .dtsi

 

이 임베디드 보드의 디바이스 트리는

현경로의 dts 폴더에 있다.

 

 

 

 

 

 

지금까지 부트로더와 커널을 빌드했는데

원래 BSP에서 친절하게 리눅스 시스템 이미지 설치에 필요한 부트로더, 커널, 파일시스템을 모아서 제공하고 있었다.

 

부트로더 u-boot-dtb.imx

커널 zImage, imx6q-sabresd-ldo.dtb

파일시스템 filesystem.tar.bz2

 

이것들을 OTG 포트로 플래쉬할수 있도록

AP 개발업체인 NXP에서 MFGTools를 만들었는데 이걸 쓰면된다고한다.

근데 bsp 에 포함된 mfgtool이 실행이 안된다.

 

ModuleID[2] LevelID[1]: Error: Can't find the specified list(SDCard-Android) in the xml file
ModuleID[2] LevelID[1]: Parse ucl script failed, error code: 12

 

 

읽어보면 xml파일에서 SDCard-Android 리스트가 없다고 하는데

구글링해보니 이 list 머씨기가 ucl2.xml(프로파일즈/리눅스/OS펌웨어)에 있다고한다.

 

https://community.nxp.com/t5/i-MX-Processors/i-MX6ULL-mfgTool-error-12/m-p/806124

 

i.MX6ULL mfgTool error 12

I would like to get an image on a SD card, that a i.MX6ULL target will boot from.  I have verified this working with a pre-built binary.  The issue I am running concerns building a new bootable image.  I tried putting the image resulting from "mkimage.

community.nxp.com

 

 

 

이 파일이 뭐하는건진 잘 모르겠지만 리눅스, 안드로이드로 쓰는지에 따라 설정하는 내용같은데

에러 로그에서 나온 SDCard-Android는 없고 H-EMbed-TKU 뭐시기가 안드로이드, 리눅스, 리눅스-WOFS 3개 뿐이더라.

 

 

뭐가 뭔지 모르겠지만 리눅스 커널을 쓸거니

H-EMbed-TKU-SD-Linux로 리스트 설정(cfg.ini)해서 실행해보면

 

 

 

이번엔 디바이스트리 imx를 여는데 에러가떳다

 

DLL version: 2.6.2
Friday, September 16, 2022 18:50:19   Start new logging
ModuleID[2] LevelID[1]: Push command--file C:\Users\jdo\Desktop\04.MFGTools\Profiles\Linux\OS Firmware\files\Linux\u-boot-dtb.imx failed to open.errcode is 2
ModuleID[2] LevelID[1]: Parse ucl script failed, error code: 4

해당경로를 보니 텅비어있어서그런거같고,

아까 준비된 파일을 옮겨서 다시실행하면

 

 

이번엔 z이미지가 없다고 안된다.

 

DLL version: 2.6.2
Friday, September 16, 2022 18:52:08   Start new logging
ModuleID[2] LevelID[1]: Push command--file C:\Users\jdo\Desktop\04.MFGTools\Profiles\Linux\OS Firmware\files\Linux\zImage failed to open.errcode is 2
ModuleID[2] LevelID[1]: Parse ucl script failed, error code: 4

 

옮기고 실행하면

 

 

또안되니 그냥 아까 파일 4개 다옮기고다시실행하면

 

DLL version: 2.6.2
Friday, September 16, 2022 18:52:45   Start new logging
ModuleID[2] LevelID[1]: Push command--file C:\Users\jdo\Desktop\04.MFGTools\Profiles\Linux\OS Firmware\files\Linux\imx6q-sabresd-ldo.dtb failed to open.errcode is 2
ModuleID[2] LevelID[1]: Parse ucl script failed, error code: 4

 

이제서야 실행된다.

 

 

 

헤매고 나서야 알았는데

이 위치에 옮기라고 책에 나와있었다.

 

 

 

USB-OTG와 전원 케이블 연결하고..

잘안보이지만 SD카드가 이미꽂혀있다.

 

 

 

 

 

 

 

개발 보드 커널 설치

- 부트 모드로 부트 ROM에 접근해 이미지 플래쉬.

- 부드모드 진입 : BOOT MODE 버튼 누른 채 파워 온

 하면 인식한다.

 

 

중간에 갑자기 no device connected 떠서 놀랐는데 기다리니 쭉진행한다.

 

 

 

 

 

부팅 설정하기

이 보드는 SD 장치와 eMMC 를 제공하는데 SD에 리눅스를, emmc서 안드로이드를 부팅하는거같고

중간에 있는 스위치로 boot config를 설정하면 sd로 부팅할지, emmc로 부팅할지 설정하는거라고한다.

 

리눅스, 안드로이드 부팅시 이렇게 설정한다.

 

 

 

좀 걸리긴 했는데 Done

 

 

 

 

 

+ Recent posts