목적 : ZC706 Board의 LED를 PS와 PL간 AXI Interface GPIO를 통해 LED를 제어한다.
* VirtualBox의 Ubuntu 14.04를 설치하였으며, buildroot-2017.02.1을 이용하여 이미지를 만든다. buildroot-2017.02.1 설정파일에 보면 Xilinx의 커널과 Uboot는 모두 xilinx-v2016.2를 다운받아 설치하게 되어있다.
1. buildroot-2017.02.1 설정 맞추기
; buildroot-2017.02.1 폴더로 이동하여 아래 명령을 실행한다. ($표시는 프롬프트다)
$ make zynq_zc706_defconfig
; 이명령이 실행되면 ZC706 Evaluation Kit에 맞게 설정된다. 혹 다른 보드를 사용하는 경우 개발자가 직접 맞춰주던가 비슷한 플랫폼으로 기본설정을 맞추고 추가되는부분을 설정하면 된다.
config파일들은 buildroot-2017.02.1/configs 경로에 있다.
2. 컴파일
; 설정이 끝나면 아래 명령으로 컴파일 한다.
$ make
; 최초 컴파일시 시간이 약 2~3시간 정도 걸린다.
; 컴파일이 완료되면 buildroot-2017.02.1/output/images 폴더안에 uboot, 커널, rootfs, devicetree 등이 존재한다. (파일명은 다를수 있다)
;BOOT.BIN 파일이 만들기 위해서 uboot 파일이 필요하고,
uImage파일은 커널이며, rootfs.cpio.uboot 파일은 rootfs인데 파일이름을 uramdisk.image.gz변경하여 SD카드에 복사하면 된다.
3. devicetree 재 컴파일
; 컴파일을 완료된 순간에는 gpio를 추가하지 않았기 때문에 SDK에서 만들어진 pl.dtsi파일을 추가해서 재컴파일이 필요하다.
a. SDK에서 만들어진 pl.dtsi 파일을 buildroot-2017.02.1/output/build/linux-xilinx-v2016.2/arch/arm/boot/dts 폴더로 이동시킨다.(윈도우에서 리눅스로 파일을 옮기는 방법은 몇가지가 있지만 VirtualBox에서 제공하는 공유폴더를 이용하는게 편하다. 공유폴더 이용방법은 인터넷에서 찾아보자)
아래는 파일 이동 명령이다.
$ mv pl.dtsi /home/pcw1029/projects/buildroot-2017.02.1/output/build/linux-xilinx-v2016.2/arch/arm/boot/dts
b. buildroot-2017.02.1/output/build/linux-xilinx-v2016.2/arch/arm/boot/dts 이동한다.
$ cd buildroot-2017.02.1/output/build/linux-xilinx-v2016.2/arch/arm/boot/dts
c. zynq-zc706.dts파일을 열어서 아래와 같이 pl.dtsi을 추가한다.
d. 아래 명령어로 devicetree 컴파일을 한다.
$ dtc -I dts -O dtb -o devicetree.dtb zynq-zc706.dts
; 컴파일 완료후 devicetree.dtb 파일이 생성되고, devicetree.dtb 파일을 SD카드로 복사하면 된다.
4. BOOT.BIN 파일 만들기
; BOOT.BIN 파일을 만들기 위해 u-boot.elf 파일, fsbl.elf파일, ??.bit 파일이 필요하다.
; u-boot.elf 파일은 u-boot 파일의 이름을 u-boot.elf로 변경하면 된다.
; ??.bit 파일은 비바도에서 생성해주며, 위치는 프로젝트 생성 폴더/??.sdk/??wrapper_hw_platform/안에 보면 확장자가 bit인 파일이 있다.
a. SDK의 메뉴에서 Xilinx Tools -> Create Boot Image를 선택한다.
b. Output BIF file path: 의 Browse..을 클릭하여 BIF파일이 생성될 폴더를 지정한다.
; Boot image partitions 에서 Add를 클릭하여 fsbl을 추가하고 OK를 클릭한다.
; Boot image partitions 에서 Add를 클릭하여 ??.bit 파일을 추가하고 OK를 클릭한다.
; Boot image partitions 에서 Add를 클릭하여 u-boot.elf파일을 추가하고 OK를 클릭한다
; 모든 파일이 추가되면 Create Image을 클릭하여 BOOT.BIN 파일을 만든다.
; BOOT.BIN 파일은 처음 Output BIF file path로 설정한 폴더에 생성된다.
5. BOOT.BIN파일을 SD카드로 복사한다.
; SD카드에는 리눅스에서 복사한 uImage, uramdisk.image.gz, devicetree.dtb와 윈도우 SDK에서 만들 BOOT.BIN파일이 들어있다.
6. 보드의 DIP SW를 아래와 같이 설정한다.
7. SD카드를 삽입후 전원을 인가한다.
8. 부팅이 완료하면 /sys/class/gpio 로 이동하여 gpio를 제어한다.
a. 폴더 이동 : # cd /sys/class/gpio
b. gpio1020 생성 : echo 1029 > export
c. gpio1029 방향 설정 : echo out > gpio1020/direction
d. gpio1020 led on : echo 1 > gpio1029/value
; 4bit의 LED를 제어하도록 비바도에서 설정했으며(자동설정이), gpio1020이 첫번째 비트가 되며 1021, 1022, 2013으로 각 각 gpio를 생성하여 제어 할 수 있다.
댓글 없음:
댓글 쓰기