본문 바로가기
Development/Xilinx

[ZYNQ] Petalinux Kernel 드라이버 외부 빌드 방법

by qWooWp 2019. 11. 21.
반응형
이 글은 Petalinux 에 petalinux-create 명령을 쓰지않고 오픈소스를 외부에서 Xilinx, Petalinux 에서 실행되기 
위해 빌드 환경 구성을 하기 위해 정리한 글입니다. 
 
이 글은 이전 글을 먼저 이해하고 나서 설정을 따라 해야 합니다. 
 
[ZYNQ] PetaLinux QT 개발환경 설정
[ZYNQ] Petalinux Kernel 소스 유지 하기
[ZYNQ] Petalinux Kernel 소스 빌드 방법
 
외부에서 커널 모듈 또는 드라이버 빌드를 하기 위해서는 커널을 먼저 빌드하여야 합니다. 
 
$ petalinux-config -c kernel
 
아래 옵션을 꺼놔야 외부에서 빌드된 드라이버도 정상 로딩이 됩니다. modversion 관리가 되면 빌드 시점에 따라 CRC 값이 달라지기 때문에 동일 커널 소스를 사용하더라도 로딩이 되지 않습니다. 
"Enable lodable module support" >> "Module versioning support"
 
기타 커널 옵션을 설정한다음. 저장합니다. 
원래는 petalinux-build 만해도 되지만 저같은 경우 버릇처럼 커널 빌드를 한 후 전체 빌드를 수행합니다. 
전체 빌드를 수행해야 리눅스 소스 쪽에 빌드 이미지가 생성되어 외부에서 드라이버를 빌드할 때 참조하게 됩니다. 
 
$ petalinux-build -c kernel
$ petalinux-build
 
위 상태에서 새로운 디렉토리를 만들고 테스트 hello.ko 소스를 제작합니다. 
인터넷에 샘플 커널 모듈 소스는 많기 때문에 이곳에서는 Makefile 구성만 설명 합니다. 
 
Makefile 예시 
 
# SDK usr/bin 쪽 툴체인 경로를 찾아서 입력해 줍니다.
XILINX_TOOLCHAIN_PATH := (SDK에 있는 ToolChain Path, 절대경로)/sysroot/x86_x64-petalinux-linux/usr/bin/arm-xilinx-linux-gnueabi
CC := $(XILINX_TOOLCHAIN_PATH)/arm-xilinx-linux-gnueabi-gcc
LD := $(XILINX_TOOLCHAIN_PATH)/arm-xilinx-linux-gnueabi-ld
 
obj-m := hello.o
 
# 옵션 : 추가 헤더 파일 경로를 넣을 때 사용하는 변수 -I./test.h
# ccflags-y += (추가할 헤더 경로)
 
#미리 커널을 빌드 해야 되며 (petalinux-build) 외부로 할 경우 외부 소스 위치로 지정해 주면 된다. 
# 내부 커널 소스를 사용할 경우 저장되는 위치 (숫자 들은 시간, 날짜에 따라 변경될 수 있습니다)
KDIR := (PROJECT PATH 절대경로)/build/tmp/work/zedboard_zynq7-xilinx-linux-gnueabi/linux-xlx/4.19-xilinx-v2019.1+gitAUTOINC+9811303824-r0/linux-zeboard_zynq7-standard-build
# 외부 커널 소스를 사용할 경우 
KDIR := (외부 커널 소스 절대 경로)
 
PWD := $(shell pwd)
 
# arm7 계열 thumb 명령을 위해서 아래 플래그들을 추가 해야 한다. 
EXTRA_CFLAGS += -mthumb -mthumb-interwork -march=armv7
 
 
all:
# ARCH=arm 은 커널 소스에서 검색하여 처리 되는 ARCH 인자로 꼭 넣어야 함. 
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules ARCH=arm
 
 
all:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
 
반응형

댓글