본문 바로가기

allwinner

(23)
Allwinner D1s/F133 BSP(SDK) build guide BSP 압축을 풀고 빌드를 시작한다. tar -xvJf allw.tar.xz cd allw/ source build/envsetup.sh lunch d1_nezha-tina make -j50 gettext, gdbm, ncurses 라이브러리는 빌드하면서 에러가 발생하면 아래와 같이 "mm -B" 명령으로 개별적으로 컴파일 해두고 전체 빌드를 다시 시도해 본다. cd package/libs/gettext mm -B cd - cd package/libs/gdbm/ mm -B cd - cd package/libs/ncurses/ mm -B cd - make -j50 그 이후에 다른 컴파일 에러가 발생했는데, ./out/d1-nezha/compile_dir/target/host/glib-2.50.1/gio/ ..
NEOGEO 메탈슬러그 gngeo 포팅 SNK에서 만든 오락실 고전 게임의 명작 Metal Slug를 해보자. NEOGEO라는 게임 플랫폼 기판을 emulation하는 gngeo라는 프로그램을 포팅해야 한다. 아래는 gngeo 소스코드를 다운로드 받고 buildroot에서 만들어진 SDL 라이브러리를 이용하도록 설정해서 빌드하는 과정이다. 그리고 빌드 후에 만들어진 실행파일을 buildroot에서 사용하는 overlay-rootfs로 복사를 한다. # mkdir gngeo # cd gngeo/ # wget -O gngeo-pi-0.85.tar.gz https://github.com/ymartel06/GnGeo-Pi/blob/master/releases/sources/gngeo-pi-0.85.tar.gz?raw=true # tar xvfz gn..
SDL 게임을 돌려보자! 머리도 식힐겸 레트로 게임을 한번 해보자. Tyrian이라는 세로 스크롤 슈팅 게임은 1995년 DOS용으로 발매되었다. 그 당시 게이머들의 평가 점수가 상당히 높았으며, 한국에도 많은 사용자가 있었음을 오래된 블러그 글들을 통해 알 수 있다. 2007년에 Open content license 형태로 게임 그래픽 Asset이 풀리면서 누구나 게임을 즐길 수 있게 되었다. 코드는 SDL 기반으로 포팅되어 어지간한 플랫폼에서 모두 잘 돌아가는 편이다. 심지어 ESP32 MCU 기반의 ODROID-GO에서도 동작한다. Buildroot 패키지 관리자에서 Games항목 아래에 있는 OpenTyrian을 선택하고 빌드하면 SD 이미지에 게임 프로그램과 데이터가 함께 설치된다. Graphics library 항목의..
PWM 기능과 LCD Backlight 드라이버 Allwinner i3/S3에는 16bit 분해능의 PWM 출력핀 2개가 있으며 일반적인 Cycle 모드와 좀 생소한 Pulse 모드를 지원한다. 그런데 커널 드라이버에는 일반적인 Cycle 모드만 구현되어 있는것으로 보인다. PWM 포트 2개중 1개는 LCD 백라이트의 밝기 조정하는데 사용하였다. 먼저 PWM sysfs 노드를 이용하여 LCD 백라이트 밝기를 조정해보자. 참고로 현재 device tree에는 PWM 0번 채널만 활성화되어 있으니, PWM 1번 채널도 사용하려면 DTS를 수정하여야 한다. 아래 명령어로 활성화된 PWM 포트를 확인하고 node를 통해 접근할 수 있도록 export 시켜 보았다. ls -l /sys/class/pwm/ echo 0 > /sys/class/pwm/pwmchip..
오디오 DAC 와 Headphone 앰프 출력 이용 (ALSA) Allwinner S3 Audio 출력장치를 이용해 보자. 사용 가능한 오디오 출력 장치를 확인해 본다. # aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Codec [V3s Audio Codec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0] Subdevices: 1/1 Subdevice #0: subdevice #0 alsamixer를 실행하면 아래와 같은 설정 화면이 나온다. 참고로 이 화면은 fbdump package를 추가하고 "fbdump -fb /dev/fb0 >out1.ppm 명령으로 캡쳐한 화면이다. PPM파일을 PC로 전송하여 PNG 포맷으로 변경하였다. 컨트롤 바의 하단에 "MM"이라는 표..
SD-card 메모리 맵 SD 카드의 sector map을 정리해 보자. Buildroot 기준으로 표를 만들었으나 Ubuntu 및 Debian의 경우에도 거의 동일하다. u-boot에 LCD 디스플레이 이미지를 1024x600 LCD 해상도에 꽉 차게 비트맵을 추가하니 u-boot의 binary 크기가 1MB에 육박한다. 1024 x 600 x 1 Byte로 계산하면 딱 600KB이고 기존 u-boot의 크기가 400KB가 조금 안되는 크기였다. Items Size Sector # (From) Sector# (To) File name Partition name (size) MBR 512Byte 0 0 u-boot (2MB) Reserved 7.5KB 1 15 SPL 32KB 16 79 u-boot-spl.bin U-boot 1..
쾌속 임베디드 리눅스 부팅 4차 도전 부팅 속도 최적화라는 공부를 시작한지 어느덧 3일이 지났다. 리눅스 커널과 init에 대한 아주 얄팍한 지식으로 무식하게 진행하고 있으나, 좌충우돌하면서 하나하나 배우는 재미가 쏠쏠하다. 초단위로 적당히 단축을 하다가 어느던 ~100msec 단위에서 최적화를 보고 있다. 다시 힘차게 4일차 아침을 시작해 보자. 오늘도 시간과의 싸움이다. 비교적 간단한 커널관련 작업으로 부팅시간이 많이 줄었으나, 아직 해볼만한 것들이 남아있는지 프로파일링을 해보자. 커널 설정은 변경없이 bootcmd만 수정하여 bootargs에 "initcall_debug printk.time=1"만 추가하였다. 보드를 부팅하고 command line에서 dmesg > kernel.log로 커널 메시지를 저장하였다. 커널 로그 파일은 아..
쾌속 부팅 3차 도전 오늘의 부팅속도 목표는 5.5초에서 4.9초 미만으로 줄이는 것이다. 시리얼 콘솔로만 분석할때에는 init에서 ffmpeg 어플리케이션이 시작할때까지 약 1.3초가 걸리는 것으로 보인다. 5.49 - 4.14 = 1.3초 [4.141249 0.009120] [ 2.243069] Run /sbin/bootchartd as init process [4.282580 0.141331] [ 2.384207] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) [4.341134 0.058554] App Starting.. [4.365064 0.023930] App Started.. [4.407797 0.042733] [ 2.509193] usb 1-1: new high-speed US..