분류

2018년 2월 7일 수요일

Yocto 학습 : 작업 #5 - 커널

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

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

당신은 이미 당신의 소스 코드가 1주일 전 소스라는 것을 알고 있습니다. 이제 업데이트 하세요. (아니면 제가 'sync'라고 말해야 할까요?) BSP 계층을 업데이트 하는 것에 익숙해져야 합니다.

레시피 
패키지가 작동하는 방식을 결정하는 파일입니다.
예를 들자면 : 버전, 주요 저장소의 위치, 빌드 방법, 설치, 링크, 기타.

커널
meta-fsl-arm의 경우 커널 레시피는 meta-fsl-arm / recipes-kernel / linux(meta-fsl-arm - Freescale ARM 하드웨어 지원 메타데이터가 포함된 레이어 에서 확인할 수 있습니다.)

meta-fsl-arm을 위한 3개의 커널 레시피
linux-fslc_3.8.bb --> 메인라인 커널 (kernel.org)
linux-imx_2.6.35.3.bb --> imx5x와 imx28을 위한 FSL 커널
linux-imx_3.0.55.bb --> imx6를 위한 FSL커널

※커널 레시피 위치 ~/fsl-community-bsp/sources/meta-fsl-arm/recipes-kernel/linux 


imx6를 위한 linux-imx 예제는 여기 있습니다. : meta-fsl-arm - Freescale ARM 하드웨어 지원 메타데이터가 포함된 레이어

레시피 결정 시 고려 사항 :
이 리눅스 버전과 호환되는 기계는 무엇입니까?(mx6)
이 코드의 해드에 대한 커밋 ID는 무엇입니까?(SRCREV)(MX6DL과 MX6SL은 서로 다른 소스 코드를 갖고 있습니다.)
mx6 보드에 대한 패치는 어떤 것이 잇습니까?(SRC_URI)

소스 코드가 어디에서 복제되었는지 확인하려면 .inc파일을 확인하면 됩니다. meta-fsl-arm - Freescale ARM 하드웨어 지원 메타데이터가 포함된 레이어
※vi 에디터나 cat linux-imx.inc 파일을 확인하세요
SRC_URI = "git://git.freescale.com/imx/linux-2.6-imx.git \ 
                file://defconfig \
 " 

이것은 git.freescale.com의 것입니다. 또한 SRC_URI에 defconfig 파일이 추가되어 있습니다.

모든 리눅스 버전마다 모든 보드에 대한 defconfig 파일이 있습니다. 일부 defconfig 파일들은 둘 이상의 보드 에서 공유되며(예 : 모든 mx6보드), 일부 리눅스 버전은 일부 보드에서 호환되지 않습니다. (예 : imx53은 2.6.35만 호환 가능합니다. )

bitbake linux-imx 명령을 수행하다 보면 git 코드와 패치, defconfig가 포함된 temp 폴더가 build/tmp/armv7-imx6 ..../linux-imx 아래 생성됩니다. 그 다음 bitbake는 해당 defconfig와 커널 환경을 구성하고, 빌드 한 다음 배포합니다.

그러므로 커널 환경 설정을 변경하려면(메뉴 환경 설정을 정의하여) meta-fsl-arm/recipes-kernel/linux/linux-imx-3.0.35/mx의 defconfig 파일을 변경해야 합니다.

커널 설정 변경 방법

새로운 defconfig 파일을 만듭니다.
meta-fsl-arm/recipes-kernel/linux/linux-imx-3.0.35/mx6 에 defconfig 파일을 복제합니다. (자신의 보드/커널에 맞는 폴더를 찾아 복제하세요 )
$ bitbake -c cleansstate linux-imx
$ bitbake linux-imx  

※ bitbake linux-imx는 커널을 빌드하는 명령입니다. 

Yocto로 menuconfig를 만드는 법

$ bitbake -c menuconfig linux-imx
tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.0.35-r33.10/git/.config에 설정 파일을 생성합니다.

커널 설정을 변경하기 위한 단계 별 작업

※menu config 를 통해 커널의 환경설정을 변경합니다. 
$ bitbake -c menuconfig linux-imx
※ 변경된 커널 환경설정을 defconfig로 변경합니다. 

$ cp tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.0.35-r33.10/git/.config ../sources/meta-fsl-arm/recipes-kernel/linux/linux-imx-3.0.35/mx6/defconfig 
※ 커널의 상태를 초기화 합니다.
$ bitbake -c cleansstate linux-imx 

※이미지를 빌드합니다.
$ bitbake fsl-image-gui

※ 커널에 변경사항을 반영하려면 커널만 빌드합니다. 
$ bitbake linux-imx  

uImage 는 tmp/deploy/image 아래에 있습니다.

준비된 하나의 sd카드에 uImage 바이너리 만 변경하려면 다음을 수행하세요 :

$sudo cp tmp/deploy/image/uImage-imx6-XXX.bin /media/user/Boot imx6/uImage

메인 라인 커널 - kernel.org

https://mirrors.edge.kernel.org/pub/linux/kernel/v3.0/
linux-imx 대신 커널 메인 라인을 사용하기 위해서. conf / local.conf에 다음 코드를 추가하십시오.
PREFERRED_PROVIDER_virtual/kernel = "linux-fslc"

kernel.org에서 보드를 지원하는지 확인하세요

메인 라인 커널을 수동으로 빌드하려면 https://community.freescale.com/docs/DOC-95017 파일을 참조하세요.

마지막 포인트 
이것은 간단한 작업이 아닙니다. Yocto는 개발 단계에서 커널을 개발하고 사용자 정의하는 데 사용할 수 있는 최상의 도구는 아닙니다. 외부 툴 체인(bitbake 메타 툴 체인)을 사용하는 것이 더 쉽습니다. 커널 개발 또는 사용자 정의가 완료되면 변경 사항을 Yocto에 통합하여 프로덕션 용도로 관리할 수 있습니다.

저는 커널 소스 코드를 git.freescale.com에서 제 로컬 머신에 직접 복사하고 작업을 합니다. 그런 다음 다시 설정하고 패치를 적용하고, 변경하고 수동으로 빌드 하는 등 원하는 데로 변경할 수 있습니다. 그래서 버그와 그 수정 방법을 알고, 제가 패치를 갖고 있을 때만 Yocto를 사용하여 커널을 변경합니다. (그리고 이것이 제가 작업하는 방식입니다. )

이것이 커널을 구성하는 방법입니다. (그리고 패치도)
(만약 커널을 패치하고 싶다면 레시피 예제를 따라 진행하세요)

오류가 발생하면 저에게 알려주세요, 나는 그 단계를 테스트 해 보았지만 가상 머신이 아닌 우분투 머신을 사용하고 있습니다. (가상 머신 에서는 -c menuconfig 가 어떻게 작동하는지 모릅니다.)

Yocto 교육 문서 - 홈
Yocto 학습 : 작업 #4 - 배포 및 테스트
Yocto 학습 : 작업 #6 - 툴 체인 만들기

댓글 없음:

댓글 쓰기