원본 파일 첨부합니다.
1.1. U-boot 수정
u-boot를 Mango-IMX6Q에 맞게 수정해야 한다.
순서는 RAM-> Serial(Debug) -> Display(HDMI,10.1인치) -> 이더넷
1.1.1. RAM 살리기
Mango-IMX6Q는 512MB*4EA DDR3 장착되어 있다.
RAM 설정 파일은 board/freescale/mx6sabresd/mx6q_4x_mt41j128.cfg에 정의가 되어 있다.
Sabresd 보드는 1GB RAM이므로 설정 값을 변경한다.
같은 Sabreauto 보드에 설정값이 2GB RAM이다. 복사를 해 온다. 만약 같은 것이 없으면, 메모리 데이터 시트와 i.MX6Q RAM 설정 부분을 보면서 모두 맞추어야 한다.
board\freescale\mx6sabreauto\imximage.cfg 파일에 RAM 설정 부분을 가지고 와서 똑같이 맞춘다.
컴파일 해서 RAM이 제대로 살아났는지 확인 해 보자.
테스트 결과 RAM은 2GB로 인식을 했다.
1.1.2. PMIC 제거 에러 잡기
아래와 같이 에러가 발생을 한다.
Mango-IMX6Q에서는 PFUZE100(PMIC) 사용하지 않는다.
board/freescale/mx6sabresd/mx6sabresd.c 파일을 수정
power_init_board함수를 호출 하는데
안드로이드 전체 이미지를 Write하기에는 시간이 많이 걸리므로, u-boot만 컴파일 후
Linux 이미지를 사용한다.
다운로드 받아서, sd에 Write한다. U-boot.imx 파일을 복사한 후 아래 명령으로 Write하면 된다.
u-boot 소스에 Device tree가 있다.
arch/arm/dts/imx6qdl-sabresd.dtsi 파일 수정해야 한다.
PMIC 막으니까 아래와 같이 에러가 발생을 한다.
찾아 보면 아래와 같다.
common/board_f.c 파일에
static const init_fnc_t init_sequence_f[] 에 순서가 정해져 있다. Pfuze 부분을 삭제 했으니 에러가 발생한 것 같다.
찾았다. common/board_r.c 파일에서
막으면 된다. 아래와 같이 console까지 간다.
Loading Environment from MMC... *** Warning - bad CRC, using default environment
Failed (-5)
에러가 나오는 것은 SD가 제대로 detec가 되지 않아서 이다.
1.1.3. SD4 detect 하기
CX-IMX6Q 회로도를 보면 SD4를 SD 부팅으로 사용한다.
board/freescale/mx6sabresd/mx6sabresd.c 소스에서 수정을 한다.
아래 cd 핀 수정, SD4는 cd pin을 사용하지 않음
arch/arm/dts/imx6qdl-sabresd.dtsi 수정
include/configs/mx6sabresd.h 파일 수정
이미지를 Write 후 environment를 설정을 한다.
전체 설정을 하려면 http://crztech.iptime.org:8080/Release/mango-imx6q/linux/kernel-4.1.15/20190321/HowTo.txt 파일을 열어서 설정을 한다.
확인 할 수 있다.
1.1.4. 이더넷 포팅 하기
Mango-IMX6Q는 PHY칩을 Athros8035를 사용한다. PHY Address는 0을 사용한다.
include/configs/mx6sabre_common.h 파일에서 수정
테스트 방법 MAC address를 지정을 해야 한다.
이더넷이 ip를 할당 받으면 된다.
1.1.5. HDMI 확인 하기
HDMI 포트에 LCD를 연결하면 아래와 같이 화면이 나온다.
1.1.6. Display 포팅하기
회로도를 보면 LCD Power Enable, Backlight GPIO가 있다.
IMX6DQRM-Reference Manual.pdf 데이터시트를 보면 아래와 같이 정의가 되어 있다.
LCD_BL_CTRL과 DISP0_PWR_EN을 모두 High해야 LCD가 밝아져서 화면이 표시가 된다.
정확히 말하면 LCD_BL_CTRL 핀은 PWM 신호로 제어하는 것이 맞으나, u-boot에서 화면
밝기를 조절하지 않고, 커널에서 조절하는 것으로 하겠다.
DISP0_PWR_EN핀은 LCD에 Power를 공급할 때 제어하는 핀이다.
board/freescale/mx6sabresd/mx6sabresd.c파일에서 아래와 같이 정의를 한다.
LCD에 따라서 타이밍 값을 아래와 같이 수정한다.
static struct display_info_t const displays[] 배열에 아래와 같이 추가한다.
u-boot에서 검증한다.
리부팅하고 u-boot에서 프롬프트에서 멈추면 로고가 나온다.
<10.1” LCD>
<7” 1024x600 LCD>
아래와 같이 에러 발생 시 수정 방법은 아래와 같다.
“IPU_PIX_FMT_BGR24” 정의가 되어 있는데, 제대로 동작을 하지 않는다.
drivers/video/ipu_disp.c 파일에서 “IPU_PIX_FMT_BGR24” 추가한다.
7인치 감압식 LCD를 사용하면
해상도가 800x480이므로 800x480에 8bit에 BMP 파일을 만든다.
내용