Home 리눅스 커널 빌드 - ARM Sabre Lite(NXP)
Post
Cancel

리눅스 커널 빌드 - ARM Sabre Lite(NXP)

  • NXP에서 다운받은 리눅스 커널 빌드 후 ARM Sabre Lite의 리눅스 커널 버전을 변경한다.
  • 본 글은 NXP 공식 홈페이지를 참고하여 작성하였다.
  • 만약 리눅스 커널을 수정하거나 NXP에서 공식 지원하는 커널 이외의 버전을 사용하고 싶다면, ‘리눅스 커널 빌드 ARM Sabre Lite(Kernel.org)’ 글을 참고 해야한다.

출처: https://boundarydevices.com/customizing-ubuntudebian-kernels/

설치 환경

  • ‘리눅스 커널 빌드 환경 구축’ 글을 참고하여 리눅스 커널 빌드 환경을 사전에 구축해야 한다.
  • 호스트: Ubuntu 18.04
  • 타겟: Sabre Lite에 Linux Kernel 4.9.88

리눅스 커널 다운로드

1
2
$ git clone https://github.com/boundarydevices/linux-imx6.git
$ cd linux-imx6

리눅스 커널 빌드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 컴파일 의존성 삭제
# mrproper + remove editor backup and patch files
$ sudo make distclean

# 환경 변수 선언
$ export KERNEL_SRC=$PWD
$ export INSTALL_MOD_PATH=$KERNEL_SRC/ubuntunize/linux-staging
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabihf-

# 처음 커널 빌드시 해당 명령어 실행
$ git checkout boundary-imx_4.9.x_2.0.0_ga

# 해당 명령어 실행 시 다음과 같은 에러 발생하는 경우가 있지만, 무시하고 진행 가능
# make: Entering directory ‘/home/sdy/linux-imx6/ubuntunize’
# Makefile:14: *** unknown DISTRO=bionic. Stop.
# make: Leaving directory ‘/home/sdy/linux-imx6/ubuntunize’
$ make -C ubuntunize prerequisites

# 커스텀 설정 파일 존재시 해당 설정으로 이름 변경
$ make boundary_defconfig

# 커널 빌드
$ make zImage modules dtbs -j4
$ make -C ubuntunize tarball
  • 만약 커널 코드를 수정한 다면, 다음 이미지와 같이 파일명 뒤에 dirty라는 네이밍이 추가된다.

image

1
$ cd ..

galcore 다운로드 & 빌드

  • GPU를 가속하는 커널 모듈로서, 커널 버전이 4.1.15 이상인 경우 galcore 패키지를 무조건 빌드해야한다.
  • 따라서 해당 리눅스 커널 버전은 galcore 패키지를 빌드 후 설치해야한다.
1
2
3
4
5
6
7
8
9
10
11
12
$ cd ~
$ git clone https://github.com/Freescale/kernel-module-imx-gpu-viv.git
$ cd kernel-module-imx-gpu-viv
$ git checkout upstream/5.0.11.p7.4
$ sed 's,-Werror,-Werror -Wno-error=misleading-indentation,g' -i ./ kernel-module-imx-gpu-viv-src/Kbuild

# 빌드, 쿼드코어 사용
$ make -j4

# 커널 모듈 설치
$ make modules_install
$ cd ..

타겟보드로 리눅스 커널 모듈 전송 후 설치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# scp를 사용하여 타겟으로 파일 전송
# ex) sudo scp -r /home/sdy/linux-imx6/ubuntunize/linux-4.9.88-g141b36cf3e0b-dirty.tar.gz  ubuntu@168.188.127.40:/home
$ sudo scp -r /home/<username>/linux-imx6/ubuntunize/linux-<version> ubuntu@<ip>:/home

# Target에서 merging 진행
$ sudo apt-get purge linux-boundary-* linux-header-* linux-image-* qcacld-module

# ex) sudo tar --numeric-owner -xf /home/linux-4.9.88-g141b36cf3e0b-dirty.tar.gz -C /
$ sudo tar --numeric-owner -xf /home/linux-<version>.tar.gz -C /

# ex) sudo update-initramfs -c -k4.9.88-g141b36cf3e0b-dirty
$ sudo update-initramfs -c -k<version>

# 동기화 후 재시작
$ sync && sudo reboot

# 변경된 커널 버전 확인
$ uname -a
This post is licensed under CC BY 4.0 by the author.

리눅스 커널 포팅 - ARM Sabre Lite

리눅스 커널 빌드 - ARM Sabre Lite(Kernel.org)

Comments powered by Disqus.

Trending Tags